《MSP430F149IPM单片机液晶显示时间的程序.docx》由会员分享,可在线阅读,更多相关《MSP430F149IPM单片机液晶显示时间的程序.docx(67页珍藏版)》请在优知文库上搜索。
1、通过232串口设置MSP430F149IPM单片机液晶显下时间的程序下面介绍一段通过232串口设置MSP430F149IPM单片机液晶显示时间的程序。用户通过串口发送OXOLOXO2,0X03,0X04可以改变单片机液晶显示时间,当到达一定设置时间时,单片机P2端口输出7路高电平,1路低电平,第二段程序,可以从单片机按键像计算机232串口发送OXOO,同时单片机液晶屏显示时间。MSP430单片机电路如下,程序通过IAR430V5.3软件编译通过,生成文件,使用BSL下载软件-MSP430BSL通过USB端口把.TXT文件烧写到单片机中。程序和电路可以在下面的网址下载:链接:https:/pan
2、.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#incl
3、udecryl602.h#includeclock.h#includecryl602.c#includeclock.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;P1
4、0UT=OXFF;P2DIR=0XFF;P2OUT=OXFF;P3DIR=0XFF;P3OUT=OXFF;P4DIR=0XFF;P4OUT=OXFF;P5DIR=0XFF;P5OUT=OXFF;P6DIR=0XFF;P6OUT=OXFF;WDTCTL=WDTPWWDTHOLD;关闭看门狗/P6DIR=BIT2;P6OUTI=BlT2;关闭电平转换/P6DIR=BIT6;P6OUT&=BIT6;关闭电平转换P3SEL=0x30;MEl=UTXEO+URXEO;UCTLO=CHAR;UTCTLO=SSELO;UBROO=003;UBRlO=0x00;UMCTLO=04A;UCTLO&二-SWRST
5、;正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,
6、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);等待以前的字符发送完
7、毕/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(RBUF0=0x03)如果是第T按键被按下(second=34;minute=ll;hour=
8、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=080;SetTime(33,33,11);if(keyin=Oxbf)如果是第一个按键被按下(delay();if(keyin
9、=Obf)(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;tmp0;tmp);)/*函数名称:UARTO_RXISR功能:UARTO的接收中断服务函数,在这里唤醒CPU,使它退出低功耗模式参数:无返回值:
10、无*/#pragmavector=UARTORX.VECTOR_interruptvoidUARTO_RXISR(void)(1.PM1_EXIT;退出低功耗模式)/#include#includecryl602.h/全局变量*/ucharsecond,minute,hour,hourO;/!s分、时变量ucharpmin,phour,psl;辅助计算变量函数名称:Clock功能:计算当前时间参数:无返回值:无说明:本函数对本文件开头定义的second,minute,hour,hourO四个全局变量进行操作I*:*/voidCIock(Void)second-=1;/second=O;/min
11、ute=0;/hour=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=0;/minute=0;/hour=0;/if(second=60)/second=0;/minute-=1;/if(minute=60)/minute=0;/hour-=1;hourO-=1;/if(hour=24)hour=0;/)/)/)/*函数名称:Display功能:在1602液晶上显示时间参数:无返回值:
12、无说明:本函数对本文件开头定义的全局变量进行操作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#includecryl602.