MSP430F149IPM单片机液晶显示时间的程序.docx
通过232串口设置MSP430F149IPM单片机液晶显下时间的程序下面介绍一段通过232串口设置MSP430F149IPM单片机液晶显示时间的程序。用户通过串口发送OXOLOXO2,0X03,0X04可以改变单片机液晶显示时间,当到达一定设置时间时,单片机P2端口输出7路高电平,1路低电平,第二段程序,可以从单片机按键像计算机232串口发送OXOO,同时单片机液晶屏显示时间。MSP430单片机电路如下,程序通过IAR430V5.3软件编译通过,生成文件,使用BSL下载软件-MSP430BSL通过USB端口把.TXT文件烧写到单片机中。程序和电路可以在下面的网址下载:链接:https:/pan.baidu.eom/s/lPxUz7CXQP7hGBTIDc7kUog;提取码:2kcy程序1:/*程序功能:在1602液晶上显示用MCU的TimerA模拟的数字式实时时钟。测试说明:观察液晶显示程序功能:接收来自PC机的字符,然后重新发送给PC机程序功能:串口发送十六进制数Ol,液晶显示时间25:25:25,串口发送十六进制数02,液晶显示时间35:3535,串口发送十六进制数03,液晶显示时间11:11:34,液晶计时11:10:60时,P2口输出01111111,液晶显示3333:11通信格式:N.8.1,9600无校验,8个数据位,1个停止位,波特率9600#include<msp430×14×.h>#include"cryl602.h"#include"clock.h"#include"cryl602.c"#include"clock.c"#definekeyinP3INuchartishi="CurrentTimeis"提示信息voiddelay(void);externucharsecond,minute,hour,hourO;externucharpmin,phour,psl;#defineSetTime(H,M,S)second=S;minute=M;hour=H;hourO=H;ucharscandata16;/*Ivoidmain(void)(*下面六行程序关闭所有的IO口*/PlDIR=OXFF;P10UT=OXFF;P2DIR=0XFF;P2OUT=OXFF;P3DIR=0XFF;P3OUT=OXFF;P4DIR=0XFF;P4OUT=OXFF;P5DIR=0XFF;P5OUT=OXFF;P6DIR=0XFF;P6OUT=OXFF;WDTCTL=WDTPW÷WDTHOLD;关闭看门狗/P6DIR=BIT2;P6OUTI=BlT2;关闭电平转换/P6DIR=BIT6;P6OUT&=BIT6;关闭电平转换P3SEL=0x30;MEl=UTXEO+URXEO;UCTLO=CHAR;UTCTLO=SSELO;UBROO=0×03;UBRlO=0x00;UMCTLO=0×4A;UCTLO&二-SWRST;正1=URXIEO;CCRO=32768-1;TACTL=TASSEL_1+CCTLO=CCIE;/选择P3.4和P3.5做UART通信端口使能USARTO的发送和接受选择8位字符/ UCLK = ACLK波特率9600/ Modulation初始化UART状态机使能USARTO的接收中断设置定时器A的中断时间为ISMC.1; 计数时钟ACLK,增计数模式使能CCRO比较中断打开全局中断/ IEl I= URX正0;使能USARTO的接收中断请在此处设置正确时间SetTime(ll,11,34);顺序:时,分,秒,格式:BCD码-EINT();1.cdReset();DiSPNChar(0,0,15,tishi);显示提示文字DiSPlChar(6,1,':');显示字符:DiSPlChar(9,L':');P2DIR=Oxff;设置P2口方向为输出/SetTime(RXBUFO,RXBUFO,RXBUFO);/P2OUT=0x40;/if(IFGl&URXIFG0)如果收到字符/SetTime(RXBUFO,RXBUFO,RXBUFO);顺序:时,分,秒,格式:BCD/)/else/SetTime(ll,11,34);顺序:时,分,秒,格式:BCD码while(l)/-EINT();打开全局中断/LPMl;进入LPMI模式/while(!(IFGl&TXIFGO);等待以前的字符发送完毕/TXBUFO=RXBUFO;将收到的字符发送出去/if(IFGl&URXIFG0)如果收到字符/Switch(RXBUFO)/case0x01:if(RXBF0=0x01)如果是第一个按键被按下(second=25;minute=25;hour=25;SetTime(19,19,19);TXBUFO=RXBUFO;)if(RXBFO=0x02)如果是第一个按键被按下(second=35;minute=35;hour=35;SetTimeQ9,19,19);TXBUFO=RXBUFO;/)/)if(R×BUF0=0x03)如果是第T按键被按下(second=34;minute=ll;hour=ll;SetTimeQ9,19,19);TXBUFO=RXBUFO;/)/else/SetTime(ll,ll,34);顺序:时,分,秒,格式:BCD码/)/scandata16=RXBUFO;/if(RXBUF0!=0X00)/SetTime(RXBUFO,RXBUFO,RXBUFO);顺序:时,分,秒,格式:BCD/)/LPM3;进入LPM3低功耗模式DispIayO;if(second=60&minute=10&hour=ll)如果是第一个按键被按下P20UT=0×80;SetTime(33,33,11);if(keyin=Oxbf)如果是第一个按键被按下(delay();if(keyin=O×bf)(while(keyin!=Oxbf);等待按键放开SetTime(22,22,ll);顺序:时,分,秒,格式:BCD码return;)/*函数名称:TimerAJSR功能:定时器A的中断服务函数参数:无返回值:无#pragmavector=TIMERAO_VECTOR_interruptvoidTimerAJSR(Void)(Clock();1.PM3_EXIT;)voiddelay(void)uinttmp;for(tmp=12000;tmp>0;tmp);)/*函数名称:UARTO_RXISR功能:UARTO的接收中断服务函数,在这里唤醒CPU,使它退出低功耗模式参数:无返回值:无*/#pragmavector=UARTORX.VECTOR_interruptvoidUARTO_RXISR(void)(1.PM1_EXIT;退出低功耗模式)/#include<msp430×44x.h>#include"cryl602.h"/全局变量*/ucharsecond,minute,hour,hourO;/¾!>s分、时变量ucharpmin,phour,psl;辅助计算变量函数名称:Clock功能:计算当前时间参数:无返回值:无说明:本函数对本文件开头定义的second,minute,hour,hourO四个全局变量进行操作I*:*/voidCIock(Void)second-=1;/second<=60&second>=O;/minute<=60&minute>=0;/hour<=1008ihour>=0;if(second=0)(second=60;minute-=1;if(minute=0)(minute=60;hour-=1;hourO-=1;if(hour=0)hour=24;)/voidClock(void)/second-=1;/second<=60&second>=0;/minute<=60&minute>=0;/hour<=1008ihour>=0;/if(second=60)/second=0;/minute-=1;/if(minute=60)/minute=0;/hour-=1;hourO-=1;/if(hour=24)hour=0;/)/)/)/*函数名称:Display功能:在1602液晶上显示时间参数:无返回值:无说明:本函数对本文件开头定义的全局变量进行操作voidDispIay(Void)(uchars,sl;ucharm,ml;ucharh,hl;si=second/10;十位s=second-(si*10);个位si+=48;加上48等于其对应的ASCII码s+=48;DisplChar(ll,lfsO);if(psl!=si)(psi=si;DisplChar(10,l,sl);if(pmin!=minute)pmin=minute;ml=minute/10;m=minute-(ml*10);ml+=48;m+=48;DisplChar(7,l,ml);DiSPlChar(8,LmO);)if(phour!=hour)(phour=hour;hl=hour/10;h=hour-(hl*10);hl+=48;h+=48;DiSPlChar(4,Lh1);DisplChar(5,l,hO);voidClock(void);voidDispIay(Void);#include<msp430×14x.h>#include"cryl602.