欢迎来到天天文库
浏览记录
ID:47440449
大小:16.74 KB
页数:6页
时间:2020-01-11
《单片机LCD定时闹钟程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include//包含单片机寄存器的头文件#include//包含_nop_()函数定义的头文件//1602端口定义sbitRS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚sbitE=P2^2;//使能信号位,将E位定义为P2.2引脚sbitBF=P1^7;//忙碌标志位,,将BF位定义为P0.7引脚//AD端口定义sbitCLK=P2^3;sbitstart=P2^4;sbitoe=P2^5;sbiteoc=P2^7;
2、sbitout_pulse=P2^6;//5us脉冲sbitp30=P3^0;#defineucharunsignedchar#defineuintunsignedintucharn=0;ucharflag=0;//1s标志位/*****************************************************函数功能:延时1ms***************************************************/voiddelay1ms(){unsignedchari,j;for(i=0;i<10
3、;i++)for(j=0;j<33;j++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/voiddelay(unsignedintn){unsignedinti;for(i=0;i4、断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙***************************************************/bitBusyTest(void){bitresult;RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间result=BF;//将忙碌标志电平赋给resultE=0;returnres5、ult;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/voidWrite_com(unsignedchardictate){while(BusyTest()==1);//如果忙就等待RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;//E置低电平(写指令时,//就是让E从06、到1发生正跳变,所以应先置"0"_nop_();_nop_();//空操作两个机器周期,给硬件反应时间P1=dictate;//将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/**********************************************7、*******函数功能:指定字符显示的实际地址入口参数:x***************************************************/voidWriteAddress(unsignedcharx){Write_com(x8、0x80);//显示位置的确定方法规定为"80H+地址码x"}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)**********************9、*****************************/voidWriteData(unsignedchary){while(BusyTest()==1);RS=1;//RS为高电平,RW
4、断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙***************************************************/bitBusyTest(void){bitresult;RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间result=BF;//将忙碌标志电平赋给resultE=0;returnres
5、ult;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/voidWrite_com(unsignedchardictate){while(BusyTest()==1);//如果忙就等待RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;//E置低电平(写指令时,//就是让E从0
6、到1发生正跳变,所以应先置"0"_nop_();_nop_();//空操作两个机器周期,给硬件反应时间P1=dictate;//将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/**********************************************
7、*******函数功能:指定字符显示的实际地址入口参数:x***************************************************/voidWriteAddress(unsignedcharx){Write_com(x
8、0x80);//显示位置的确定方法规定为"80H+地址码x"}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)**********************
9、*****************************/voidWriteData(unsignedchary){while(BusyTest()==1);RS=1;//RS为高电平,RW
此文档下载收益归作者所有