#include <REG52.h>
#include <intrins.h>
# define LCD_DB P3
sbit LCD_RS=P1^7;
sbit LCD_RW=P1^6;
sbit LCD_E=P1^5;
# define uchar unsigned char
# define uint unsigned int
uchar ms,h1,h2,m1,m2,s1,s2;
void LCD_disp_char(uchar x,uchar y,uchar dat)
{
uchar address;
address=(y<2)?(0x80+x):(0xC0+x);
LCD_write_command(address);
delay_n40us(40);
LCD_write_data(dat);
delay_n40us(40);
}
void display(void)
{uchar i,j;
for(i=0;i<8;i++)
LCD_disp_char(i+4,1,DISP[i]);
for(j=0;j<16;j++)
LCD_disp_char(j,2,bb[j]);
}
void timer0(void) interrupt 1
{TH0=0X3C;
TL0=0XB0;
ms++;
if(ms==20)
ms=0,s2+=1;
if(s2==10)
s2=0,s1+=1;
if(s1==6)
s1=0,m2+=1;
if(m2==10)
m2=0,m1++;
if(m1==6)
m1=0,h2++;
if(h2==10)
h2=0,h1++;
if(h1==6)
h1=0;
}
void LCD_init(void)
{
delay_n40us(375);
LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
delay_n40us(125);
LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
delay_n40us(125);
LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
LCD_write_command(0x0f);//整體顯示,關(guān)光標(biāo),不閃爍
LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
LCD_write_command(0x01);//清除屏幕顯示
delay_n40us(100);//,用for循環(huán)200次就能可靠完成清屏指令。
}
void main(void)
{ TMOD=0x01;
EA=1;
ET0=1;
TH0=0X3c;
TL0=0Xb0;
TR0=1;
LCD_init();
while(1)
{ DISP[0]=h1+48;
DISP[1]=h2+48;
DISP[2]=':';
DISP[3]=m1+48;
DISP[4]=m2+48;
DISP[5]=':';
DISP[6]=s1+48;
DISP[7]=s2+48;
delay_n40us(40);
display();
}
}