#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint miao,fen,shi,ge,shi;
uint num;
sbit we=P2^6;
sbit du=P2^7;
sbit lcden=P2^5;
sbit rs=P1^0; //注意LCD初始化rw制零
sbit rw=P1^1;
uchar table[]=" 22:59:53";
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//讀操作
void writecmd(uchar com)
{
rs=0;
lcden=0;
P0=com;
lcden=1;
delayms(5);
lcden=0;
}
//寫命令
void writedate(uchar date)
{
rs=1;
lcden=0;
P0=date;
lcden=1;
delayms(5);
lcden=0;
}
//LCD初始化
void init()
{ uint i;
we=0;
du=0;
rw=0;
lcden=0;
writecmd(0x38);
writecmd(0x06);
writecmd(0x0c); //開顯示,不顯示光標
writecmd(0x01); //清除LCD的顯示內容
writecmd(0x80+0x40);
for(i=0;i<11;i++)
{
writedate(table[i]);
delayms(5);
}
}
void sfm(uchar add,uchar date)
{
ge=date%10;
shi=date/10;
writecmd(0x80+0x40+add);
writedate(0x30+shi);
writedate(0x30+ge);
}
void time0()
{
TMOD =0x01;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
init();
time0();
writecmd(0x80+0x40);
while(1)
{
if(num==20)
{
num=0;
miao++;
sfm(9,miao);
if(miao==60)
{
miao=0;
sfm(9,miao);//immediately update the display;
fen++;
sfm(6,fen);
if(fen==60)
{fen=0;
sfm(6,fen);//immediately update the display;
shi++;
sfm(3,shi);
if(shi==24)
{shi=0;
sfm(3,shi);//immediately update the display
}
}
}
}
}
}
void timer() interrupt 1
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
num++;
}
|