#include <REGX51.H>
sbit RS=P3^0; //**
sbit RW=P3^1; //**
sbit E=P3^2; //**
unsigned char count=0;
unsigned int hour=15,min=18,sec=55;
unsigned char str[]={"0123456789"};
unsigned char str1[]={"CLOCK"};
void delay(unsigned int t)
{
unsigned int i=0,j=0;
for(i=0;i<t;i++)
{
for(j=0;j<120;j++);
}
}
void writedat(unsigned char dat)
{
RS=1;
RW=0;
E=0;
P2=dat;
delay(5); //看情况要不要延时
E=1;
E=0;
}
void writecom(unsigned char com)
{
RS=0;
RW=0;
E=0;
P2=com;
delay(5);
E=1;
E=0;
}
void initlcd()
{
writecom(0x38);
writecom(0x0c);
writecom(0x06);
writecom(0x01);
}
void inittimer()
{
TMOD=0x01; //16位
TH0=0x3C; //定时50ms,计数20次,相当于1s(65536-50000=15536=3CB0)
TL0=0xB0;
ET0=1;
EA=1;
TR0=1;
}
void display()
{
unsigned char temp0=0,temp1=0,temp2=0, temp3=0,temp4=0,temp5=0;
unsigned i=0;
temp0=hour/10;
temp1=hour%10;
temp2=min/10;
temp3=min%10;
temp4=sec/10;
temp5=sec%10;
writecom(0x80);
delay(5);
while(str1[i]!='\0')
{
writedat(str1[i]);
delay(5);
i++;
}
writecom(0x80+0x40+4);
delay(5);
writedat(str[temp0]);
delay(5);
writedat(str[temp1]);
delay(5);
writedat(':');
writedat(str[temp2]);
delay(5);
writedat(str[temp3]);
delay(5);
writedat(':');
writedat(str[temp4]);
delay(5);
writedat(str[temp5]);
delay(5);
}
void main()
{
initlcd();
inittimer();
while(1)
{
display();
}
}
void timer0_isr() interrupt 1 //**
{
TH0=(65535-500000)/256; //定时50ms,计数20次,相当于1s(65536-50000=15536=3CB0)
TL0=(65535-500000)%256;
count++;
if(count==20) //1s
{
sec=sec+1;
count=0;
}
if(sec==60)
{
min=min+1;
sec=0;
}
if(min==60)
{
hour=hour+1;
min=0;
}
if(hour==24)
{
hour=0;
}
}
还可以通过增加按键调节时分秒,设置闹钟等。