📄 sjxs.c
字号:
#include <AT89X51.h>
#define Data P0
sbit RS=P1^7;
sbit RW=P1^6;
sbit E=P2^6;
void delay(unsigned int k)
{
unsigned int i,j;
for(i=k;i>0;i--)
for(j=50;j>0;j--) ;
}
unsigned char ReadStatus(void)
{
Data=0xFF;
RS=0;
RW=1;
E=1;
while(Data&0x80);
return(Data);
delay(2);
E = 0;
}
void wr_com(unsigned char com)
{
ReadStatus();
Data=com;
RS=0;
RW=0;
E=1;
delay(2);
E = 0;
}
void wr_dat(unsigned char dat)
{
ReadStatus();
Data=dat;
RS=1;
RW=0;
E=1;
delay(2);
E=0;
}
void LCD_Init(void)
{
Data=0x0;
wr_com(0x38);
delay(5);
wr_com(0x38);
delay(5);
wr_com(0x38);
delay(5);
wr_com(0x38);
wr_com(0x08);
wr_com(0x01);
wr_com(0x06);
wr_com(0x0C);
}
void GotoXY(unsigned char x,unsigned char y)
{
x&=0x01;
y&=0x0F;
y|=(x==0)?0x80:0xC0;
wr_com(y);
do{
y=ReadStatus();
}while((y&0x80)==0x80);
}
void disp(unsigned char x,unsigned char y,unsigned char _char)
{
GotoXY(x,y);
wr_dat(_char);
}
/***********************************************************************************/
unsigned char second=55,minute=58,hour=23,day=29,month=11,year=07;
unsigned char n_50m_second;
unsigned char days_of_month;
unsigned char calculate_days(void)
{
unsigned int temp;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
break;
case 4:
case 6:
case 9:
case 11:
return 30;
break;
case 2:
temp=2000+year;
if((((temp%4)==0)&&((temp%100)!=0))||((temp%400)==0))
{
return 29;
}
else
{
return 28;
}
}
}
void timer0_isr(void) interrupt 1 using 1
{
TL0=0xB0;
TH0=0x3C;
n_50m_second++;
if(n_50m_second>=20)
{
n_50m_second=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
day++;
days_of_month=calculate_days();
if(day>days_of_month)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
if(year>=100)
{
year=0;
}
}
}
}
}
}
}
}
void disp_timer(void)
{ disp(0,4,hour/10+48);
disp(0,5,hour%10+48);
disp(0,6,':');
disp(0,7,minute/10+48);
disp(0,8,minute%10+48);
disp(0,9,':');
disp(0,0xA,second/10+48);
disp(0,0xB,second%10+48);
disp(1,3,'2');
disp(1,4,'0');
disp(1,5,year/10+48);
disp(1,6,year%10+48);
disp(1,7,'-');
disp(1,8,month/10+48);
disp(1,9,month%10+48);
disp(1,0xA,'-');
disp(1,0xB,day/10+48);
disp(1,0xC,day%10+48);
}
void main(void)
{
TMOD=0x11;
ET0=1;
TR0=1;
EA=1;
LCD_Init();
while(1)
{
delay(100);
disp_timer();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -