新闻中心

EEPW首页>嵌入式系统>设计应用> 12864液晶电子时钟+温度显示

12864液晶电子时钟+温度显示

作者: 时间:2012-08-06 来源:网络 收藏

void delay(uint t)
{
uint i,j;
for(i=120;i>0;i--);
for(j=t;j>0;j--);
}
/**********************************************************
void delay_us(uchar t) //延时计算公式:5+2*t
{
while(--t);
}
***********************************************************/
void read_busy()
{
EN=0;
RW=1;
RS=0;
EN=1;
while(P00x80);
EN=0;
}
void write_com(uchar com) //写命令
{
read_busy();
EN=1;
RS=0;
RW=0;
P0=com;
delay(1);
EN=0;

}
void write_dat(uchar dat) //写数据
{
read_busy();
EN=1;
RS=1;
RW=0;
P0=dat;
delay(1);
EN=0;
}

控制闪烁的函数如下:

void shan(void)
{
uchar i;
write_com(0x94); //将数据写在0x94地址上
if(f==1) //按键按一下年开份始闪烁
{
{
tab2[8]=' '; //向要闪烁的位置写空格
tab2[9]=' ';
}
for (i=8;i=15;i++)
{
write_dat(tab2[i]); //写数据
}
goto return1;
}
if(f==2) //按键按两下月份开始闪烁
{
{
tab2[11]=' ';
tab3[12]=' ';

}

for (i=8;i=15;i++)
{
write_dat(tab2[i]);
}
goto return1;
}
if(f==3) //按键按三下,日期开始闪烁
{
{
tab2[14]=' ';
tab2[15]=' ';
}
for (i=8;i=15;i++)
{
write_dat(tab2[i]);
}

goto return1;
}
write_com(0x8b);
if(f==4) //按键按四下,小时开始闪烁
{
{
tab3[6]=' ';
tab3[7]=' ';
}
for (i=6;i=13;i++)
{
write_dat(tab3[i]);
}

goto return1;
}
if(f==5) //按键按五下,分钟开始闪烁
{
{
tab3[9]=' ';
tab3[10]=' ';
}
for (i=6;i=13;i++)
{
write_dat(tab3[i]);
}

goto return1;
}
if(f==6) //按键按六下,秒开始闪烁
{
{
tab3[12]=' ';
tab3[13]=' ';
}
for (i=6;i=13;i++)
{
write_dat(tab3[i]);
}

goto return1;
}
if(f==7) //按键按七下,调时完毕,停止闪烁,开始走时
{
{
for (i=6;i=13;i++)
{
write_dat(tab3[i]);
TR0=1; //时间设定完毕,打开定时器
}
}
}

return1:_nop_();

}

显示数组:

uchar code tab1[]="时钟 +";
uchar tab2[16]="日期:20";
uchar tab3[14]="时间:";
uchar tab4[12]="当前温度:" ;

定时器初始化,ASCii码转换

/**********************************************************
程序功能:液晶显示电子时钟(包括年月日时分秒),具有闪烁,移位,调时功能
并显示当前温度
程序编译环境:keil4
程序运行环境:HJM-1
整理人:张家越 QQ:435835181
整理时间:2011-04-17

*********************************************************/
#include reg52.h>
#include"lcd.h"
#include intrins.h>
#include "flash.h"
#include"scan.h"
#include "18B20.h"
uchar tempreture[2];
#define uchar unsigned char
#define uint unsigned int
uchar utime; //定时20ms,每20ms,utime++
void shan(); //控制闪烁函数
void tkey(void); //按键处理函数

void init_clock() //定时器初始化函数
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1 ;
EA=1;
TR0=1;
}
void iscii_change() //将需要显示的时间转换成ISCii码
{
tab3[6]=clock[3]/10+0x30;
tab3[7]=clock[3]%10+0x30;

tab3[8]=0x3a;
tab3[9]=clock[4]/10+0x30;
tab3[10]=clock[4]%10+0x30;

tab3[11]=0x3a;
tab3[12]=clock[5]/10+0x30;
tab3[13]=clock[5]%10+0x30;

tab2[8]=clock[0]/10+0x30;
tab2[9]=clock[0]%10+0x30;
tab2[10]=0x2d;
tab2[11]=clock[1]/10+0x30;
tab2[12]=clock[1]%10+0x30;
tab2[13]=0x2d;
tab2[14]=clock[2]/10+0x30;
tab2[15]=clock[2]%10+0x30;

tab4[10]=temp/10+0x30;
tab4[11]=temp%10+0x30;
}
void display() //显示函数
{
uchar i;
write_com(0x80);
for(i=0;i16;i++)
{
write_dat(tab1[i]);
}
write_com(0x90);
for(i=0;i16;i++)
{
write_dat(tab2[i]);
}
write_com(0x88);
for(i=0;i14;i++)
{
write_dat(tab3[i]);
delay(1);
}
write_com(0x98);
for(i=0;i12;i++)
{
write_dat(tab4[i]);
}
}
void main()
{
init_clock();
init_12864();

while(1)
{
Read_temp();
iscii_change();
display();
tkey();
shan();


}

}



评论


相关推荐

技术专区

关闭