基于LCD1602和DS1302的时间显示程序(3)

2019-01-03 16:01

DisplayOneChar(6,1,0x2f); DisplayListChar(10,1,week);

if(year==1) //年闪烁标志位 {

if(flag==1) {

DisplayOneChar(1,1,R1302(0x8d)/16+0x30);//显示年十位 DisplayOneChar(2,1,R1302(0x8d)+0x30);//显示年个位 } else {

DisplayOneChar(1,1,0x20); //显示年十位 DisplayOneChar(2,1,0x20); //显示年个位 } } else {

DisplayOneChar(1,1,R1302(0x8d)/16+0x30);//显示年十位 DisplayOneChar(2,1,R1302(0x8d)+0x30);//显示年个位 }

if(mon==1) //月闪烁标志位 {

if(flag==1) {

DisplayOneChar(4,1,R1302(0x89)/16+0x30);//显示月十位 DisplayOneChar(5,1,R1302(0x89)+0x30);//显示月个位 } else {

DisplayOneChar(4,1,0x20); //显示月十位 DisplayOneChar(5,1,0x20); //显示月个位 } }

else {

DisplayOneChar(4,1,R1302(0x89)/16+0x30);//显示月十位 DisplayOneChar(5,1,R1302(0x89)+0x30);//显示月个位 }

if(day==1) //日闪烁标志位 {

if(flag==1) {

DisplayOneChar(7,1,R1302(0x87)/16+0x30);//显示日十位 DisplayOneChar(8,1,R1302(0x87)+0x30);//显示日个位 } else {

DisplayOneChar(7,1,0x20); //显示日十位 DisplayOneChar(8,1,0x20); //显示日个位 } } else {

DisplayOneChar(7,1,R1302(0x87)/16+0x30);//显示日十位 DisplayOneChar(8,1,R1302(0x87)+0x30);//显示日个位 }

if(weekk==1) //星期闪烁标志位 {

if(flag==1) {

DisplayOneChar(15,1,R1302(0x8b)+0x30);//显示星期 } else {

DisplayOneChar(15,1,0x20); //显示星期 } }

else {

DisplayOneChar(15,1,R1302(0x8b)+0x30);//显示星期 } }

//================================ LCM1602控制部分 ======================================= /***************************************************** 函数名:void WriteDataLCM() 功能:向LCM1602中写入数据

说明:将形参WDLCM中的数据写入LCM中 入口参数:WDLCM 返回值:无

*****************************************************/ //写数据

void WriteDataLCM(uchar WDLCM) {

ReadStatusLCM(); //检测忙

LCM_Data = WDLCM;//写入数据到LCM LCM_RS = 1; LCM_RW = 0;

LCM_E = 0; //若晶振速度太高可以在这后加小的延时 LCM_E = 0; //延时 LCM_E = 1; }

/***************************************************** 函数名:void WriteCommandLCM() 功能:向LCM1602中写入指令

说明:向LCM中写入指令;如果BuysC=0时,忽略忙检测,如果BuysC=1时,不忽略忙检测

入口参数:WCLCM,BuysC 返回值:无

*****************************************************/ //写指令

void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC为0时忽略忙检测

{

if (BuysC) ReadStatusLCM(); //根据需要检测忙 LCM_Data = WCLCM; //写入指令 LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; }

/***************************************************** 函数名:uchar ReadStatusLCM() 功能:读状态

说明:判断LCM的工作状态;也可以不用此函数,用一段延时程序代替 入口参数:无 返回值:LCM_Data

*****************************************************/ //读状态

uchar ReadStatusLCM(void) {

LCM_Data = 0xFF; //LCM数据口先置1 LCM_RS = 0; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1;

while (LCM_Data & Busy); //检测忙信号.如果忙,则不执行 return(LCM_Data);//不忙返回读取数据 }

/***************************************************** 函数名:void LCMInit() 功能:初始化LCM1602

说明:LCM在工作前先要对显示屏初始化,否则模块无法正常工作 入口参数:无 返回值:五

*****************************************************/

//LCM初始化 void LCMInit(void) {

LCM_Data = 0;

WriteCommandLCM(0x38,0); // 三次显示模式设置,不检测忙信号 Delay5Ms();

WriteCommandLCM(0x38,0); // 0x38指令表示:8位数据显示模式,俩行多显示 Delay5Ms();

WriteCommandLCM(0x38,0); Delay5Ms();

WriteCommandLCM(0x38,1); // 显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); // 关闭显示 WriteCommandLCM(0x01,1); // 显示清屏

WriteCommandLCM(0x06,1); // 显示光标移动设置 WriteCommandLCM(0x0C,1); // 显示开及光标设置 }

/***************************************************** 函数名:void DisplayOneChar() 功能:按指定坐标中写入数据 说明:X-横坐标,Y-纵坐标 入口参数:X,Y,DData 返回值:

*****************************************************/ //按指定位置显示一个字符

void DisplayOneChar(uchar X, uchar Y, uchar DData) {

Y &= 0x01;

X &= 0x0F; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; X |= 0x80; //算出指令码

WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码 WriteDataLCM(DData); }

/***************************************************** 函数名:void DisplayListChar()


基于LCD1602和DS1302的时间显示程序(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:经济地理学教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: