欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    MSP430F149IPM单片机液晶显示时间的程序.docx

    • 资源ID:929280       资源大小:125.31KB        全文页数:67页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    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.h"typedefunsignedcharuchar;typedefunsignedintuint;/宏定义*I#defineDataDirP2DIR#defineDataPortP20UT#defineBusy0×80#defineCtrIDirP6DIR#defineCLR_RSP6OUT&=BIT3;/RS=P3.0# defineSET.RSP6OT=BIT3;# defineCLR_RWP6OUT&=BIT4;/RW=P3.1# defineSET.RWP6OT=B4;# defineCLR_ENP6OUT&=BIT5;/EN=P3.2# defineSET_ENP6OUT=BIT5;/*函数名称:DispNchar功能:让液晶从某个位置起连续显示N个字符参数:X-位置的列坐标y-位置的行坐标n-字符个数Ptr-指向字符存放位置的指针返回值:无*/voidDispNChar(ucharx,uchary,ucharn,uchar*ptr)(uchari;for(i=0;i<n;i+)DisplChar(x+,y,ptri);if(x=OxOf)x=0;y=1;)/*函数名称:LOCateXY功能:向液晶输入显示字符位置的坐标信息参数:X-位置的列坐标y-位置的行坐标返回值:无*voidLocateXY(ucharx,uchary)uchartemp;temp=x&OxOf;y&=0x01;if(y)temp=0×40;如果在第2行temp=0x80;1.cdWriteCommand(temp,l);)/*函数名称:DisplChar功能:在某个位置显示一个字符参数:X-位置的列坐标y-位置的行坐标data-显示的字符球返回值:无*/voidDisplChar(ucharx,uchary,uchardata)1.ocateXY(×,y);1.cdWriteData(data);)/*函数名称:LCdReSet功能:对1602液晶模块进行复位操作参数:无返回值:无*/voidLcdReset(Void)(CtrIDir=0x38;控制线端口设为输出状态DataDir=OxFF;数据端口设为输出状态1.cdWriteCommand(0x38,0);规定的复位操作Delay5ms();1.cdWriteCommand(0x38,0);Delay5ms();1.cdWriteCommand(0x38,0);Delay5ms();1.CdWriteCommand(OX38,1);显示模式设置1.CdWriteCOmmand(OXO8,1);显示关闭1.cdWriteCommand(0×01,1);显示清屏1.cdWriteCommand(0x06,1);写字符时整体不移动1.cdWriteCommand(0×0c,1);显示开,不开游标,不闪烁)/*函数名称:LCdWriteCommand功能:向液晶模块写入命令参数:Cmd-命令,Chk是否判忙的标志,1:判忙,0:不判返回值:无*/voidLcdWriteCommand(ucharcmd,ucharchk)if(chk)WaitForEnabIeQ;检测忙信号?CLR_RS;CLR_RW;-NOP();DataPort=cmd;将命令字写入数据端口-NOP();SET-EN;产生使能脉冲信号-NOP();-NOP();CLR_EN;)/*函数名称:LCdWriteData功能:向液晶显示的当前地址写入显示数据参数:data-显示字符健返回值:无voidLcdWriteData(uchardata)WaitForEnabIeO;等待液晶不忙SET_RS;CLR_RW;-NOP();DataPort=data;将显示期居写入数据端口-NOP();SET_EN;产生使能脉冲信号-NOP();-NOP();CLR_EN;)/*函数名称:WaitForEnabIe功能:等待1602液晶完成内部操作I*:*/voidWaitForEnabIe(Void)(P2DIR&=0x00;将P4口切换为输入状态CLR_RS;SET.RW;-NOP();SET.EN;-NOP();-NOP();while(P2IN&Busy)!=O);检测忙标志CLR_EN;P2DIR=OxFF;»P4口切换为输出状态函数名称:DeIaySms功能:延时约5ms参数:无返回值:无*voidDeIaySms(Void)(uinti=40000;while(i!=O)(i-;)/*函数名称:Delay400ms功能:延时约400ms*/voidDelay400ms(void)(uchari=50;uintj;while(i-)(j=7269;while(j-);)voidDispNChar(unsignedcharx,unsignedchary,unsignedcharn,unsignedchar*ptr);voidLocateXY(unsignedcharx,unsignedchary);voidDisplChar(unsignedchar×,unsignedchary,unsignedchardata);voidLcdReset(void);voidLcdWriteCommand(unsignedcharcmd,unsignedcharchk);voidLcdWriteData(unsignedchardata);voidWaitForEnabIe(Void);voidDelay5ms(void);voidDelay400ms(void);第二段程序#include<msp430×14×.h>typedefunsignedcharuchar;typedefunsignedintuint;/unsignedcharuchar;/unsignedintuint;/*全局变量*/ucharkey_Pressed;按键是否被按下:1-是,O-否ucharkey,val;/得放键值ucharkey.Flag;按键是否已放开:1-是,O-否设置键盘逻辑键值与程序计算键值的映射ucharkey_Map=l,2f3A5,6,7,8,9,10,11,12,13,14,15,16);,*函数名称:InikKeyPad功能:初始化扫描键盘的IO端口参数:无返回值:无*/voidInit_Keypad(void)(PlDIR=OxfO;/P1.0-P1.3设置为输入状态,P1.4P1.7设置为输出状态P10T=OxfO;/P1.4-P1.7输出高电平key_Flag=0;key_Pressed=0;key_val=0;)/*CheCk.Key(),检查按键,确认键值*/*函数名称:Check.Key功能:扫描键盘的IO端口,获得键值参数:无返回值:无voidCheck_Key(void)(ucharrow,col,tmpl,tmp2;tmpl=0x80;for(row=0;row<4;row+)(PlOUT=OxfO;PlOUT-=tmpl;tmpl>>=1;if(PlIN&OxOf)<OxOf)tmp2=0x01;行扫描P1.4P1.7 输出全 1/P1.4-pl.7输出四位中有一个为0是否PUN的P1.0P1.3中有T立为0/tmp2用于检测出那一位为0列检测for(col=0;col<4;col+)if(PUN&tmp2)=OxOO)是否是该列,等于。为是key_val=key_Maprow*4+col;/获取键值return;退出循环)tmp2<<=1;/tmp2右移1位)/*函数名称:delay功能:延时约15ms,完成消抖功能参数:无返回值:无voiddelay()uinttmp;for(tmp=12000;tmp>0;tmp);)/*函数名称:Key-Event功能:检测按键,并获取键值参数:无返回值:无*/voidKey_Event(void)(uchartmp;PlOUT&二0x00;/设置PlOUT全为0,等待按键输入tmp=PlIN;/获取plINif(key,Pressed=0x00)&&(tmp&OxOf)<OXOf)如果有键按下(key,Pressed=1;/如果有按键按下,设置key_Pressed标识delayO;消除抖动Check,KeyO;/调用CheCk_Key(),获取键值elseif(key,Pressed=l)&&(tmp&OxOf)=OXOf)如果按键已经释放key_Pressed=0;/清除key_Pressed标识key_Flag=1;/设置key_Flag标识else,NOP();/#include<msp430×44x.h>#include"cryl602.h"/全局变量*/ucharsecond,minute,hour,hourO;/¾!分、时变量ucharpmin,phour,psl;辅助计算变量/*函数名称:Clock功能:计算当前时间参数:无返回值:无说明:本函数对本文件开头定义的second,minute,hour,hourO四个全局变量进行操作*/voidClock(void)(second-=1;/second<=60&second>=0;/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,l,sO);if(psl!=Sl)(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,l,mO);)if(phour!=hour)(phour=hour;hl=hour/10;h=hour-(hl*10);hl+=48;h+=48;DisplChar(4,l,hl);DisplChar(5,l,hO);)voidClock(void);voidDispIay(Void);#include<msp430×14x.h>#include"cryl602.h"typedefunsignedcharuchar;typedefunsignedintuint;*宏定义*#defineDataDirP2DIR#defineDataPortP20UT#defineBusy0×80# defineCtrIDirP6DIRP3.0P3.1# defineCLR_RSP60UT&=BIT3;/RS# defineSET_RSP6OT=BIT3;# defineCLR_RWP6OUT&=-BIT4;/RW#defineSET_RWP6OT=B4;#defineCLR_ENP60UT&二BIT5;EN=P3.2#defineSET_ENP6OT=BIT5;/*函数名称:DispNchar功能:让液晶从某个位置起连续显示N个字符参数:X-位置的列坐标y-位置的行坐标n-字符个数ptr-指向字符存放位置的指针返回值:无*/voidDispNChar(ucharx,uchary,ucharn,uchar*ptr)(uchari;for(i=0;i<n;i+)(DisplChar(x+,y,ptri);if(×=OxOf)x=0;y=1;)/*函数名称:LOCateXY功能:向液晶输入显示字符位置的坐标信息参数:X-位置的列坐标y-位置的行坐标返回值:无voidLocateXY(ucharx,uchary)(uchartemp;temp=x&OxOf;y&=0x01;if(y)temp=0x40;如果在第2行temp=0x80;1.cdWriteCommand(temp,l);)/*函数名称:DisplChar功能:在某个位置显示一个字符参数:X-位置的列坐标y-位置的行坐标data-显示的字符球返回值:无*/voidDisplChar(ucharx,uchary,uchardata)(1.ocateXY(×,y);1.cdWriteData(data);)/*函数名称:LCdReSet功能:对1602液晶模块进行复位操作参数:无返回值:无*/voidLcdReset(Void)(CtrIDir=0x38;控制线端口设为输出状态DataDir=OxFF;数据端口设为输出状态1.cdWriteCommand(0x38,0);规定的复位操作Delay5ms();1.cdWriteCommand(0x38,0);Delay5ms();1.cdWriteCommand(0x38,0);Delay5ms();1.CdWriteCOmmand(OX38,1);显示模式设置1.CdWriteCommand(OXO8,1);显示关闭1.cdWriteCommand(0×01,1);显示清屏1.cdWriteCommand(0×06,1);写字符时整体不移动1.cdWriteCommand(0×0c,1);显示开,不开游标,不闪烁)/*函数名称:LCdWriteCommand功能:向液晶模块写入命令参数:Cmd-命令,Chk是否判忙的标志,1:判忙,O:不判返回值:无*/voidLcdWriteCommand(ucharcmd,ucharchk)(if(chk)WaitForEnabIeO;检测忙信号?CLR_RS;CLR_RW;-NOP();DataPort=cmd;将命令字写入数据端口-N0P();SET-EN;产生使能脉冲信号-NOP();-NOP();CLR_EN;)/*函数名称:LCdWriteData功能:向液晶显示的当前地址写入显示数据参数:data-显示字符健返回值:无*/voidLcdWriteData(uchardata)(WaitForEnabIeO;等待液晶不忙SET_RS;CLR_RW;-NOP();DataPort=data;将显示期居写入数据端口-NOP();SET_EN;产生使能脉冲信号-NOP();-NOP();CLR_EN;)/*函数名称:WaitForEnabIe功能:等待1602液晶完成内部操作参数:无返回值:无/voidWaitForEnabIe(Void)P2DIR&=0x00;将P4口切换为输入状态CLR_RS;SET.RW;-NOP();SET_EN;-NOP();-NOP();while(P2IN&Busy)!=0);检测忙标志CLR_EN;P2DIR=OxFF;»P4口切换为输出状态)/*函数名称:Delay5ms功能:延时约5ms参数:无返回值:无voidDeIaySms(Void)(uinti=40000;while(i!=0)(i-;)/*函数名称:Delay400ms功能:延时约400ms参数:无返回值:无voidDelay400ms(void)uchari=50;uintj;while(i-)(j=7269;while(j-);)voidDispNChar(unsignedcharx,unsignedchary,unsignedcharn,unsignedchar*ptr);voidLocateXY(unsignedcharx,unsignedchary);voidDis

    注意事项

    本文(MSP430F149IPM单片机液晶显示时间的程序.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开