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()