#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit EN=P3^4;
sbit RS=P3^5;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit beep=P1^4;
uchar count;
unsigned char A[]="2021-10-17";
unsigned char time[]={11,15,10};
void delay(uchar n) //延时----毫秒
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void di()
{
beep=0;
delay(10);
beep=1;
}
void write_com(uchar com) //写指令
{
RS=0;
EN=0;
P0=com;
delay(5);
EN=1;
delay(5);
EN=0;
}
void write_date(uchar date) //写数据
{
RS=1;
EN=0;
P0=date;
delay(5);
EN=1;
delay(5);
EN=0;
}
void inite()
{
uchar a;
TMOD|=0X01; //选择为定时器0模式,工作方式1
ET0=1; //打开定时器0中断允许
EA=1; //打开总中断
TR0=1; //打开定时器
EX0=1; //打开外部中断0
IT0=1; //边沿触发方式
EX1=1; //打开外部中断1
IT1=1;
write_com(0x38); //初始化1602
write_com(0x0c);
write_com(0x01);
write_com(0x80);
for(a=0;a<15;a++)
{
write_date(A[a]);
delay(5);
}
write_com(0x80+0x40+6);
write_date(':');
delay(5);
write_com(0x80+0x40+9);
write_date(':');
delay(5);
}
void input(uchar add,uchar date)
{
uchar a,b;
a=date/10;
b=date%10;
write_com(0x80+0x40+add);
write_date(0x30+a);
write_date(0x30+b);
}
void main()
{
inite();
while(1)
{
uchar num=0;
if(K1==0)
{
delay(5);
if(K1==0);
{
num++;
while(!K1);
di();
if(num==1)
{
TR0=0;
write_com(0x80+0x40+10); //指向秒
write_com(0x0f); //光标显示
}
if(num==2)
{
write_com(0x80+0x40+7); //指向分
}
if(num==3)
{
write_com(0x80+0x40+4); //指向时
}
if(num==4)
{
num=0;
write_com(0x0c);
TR0=1;
}
}
}
if(num!=0)
{
if(K2==0)
{
delay(5);
if(K2==0)
{
while(!K2);
di();
if(num==1)
{
time[3]++;
if(time[3]==60)
time[3]=0;
input(10,time[3]);
write_com(0x80+0x40+10);
//缺少存入
}
if(num==2)
{
time[2]++;
if(time[2]==60)
time[2]=0;
input(7,time[2]);
write_com(0x80+0x40+7);
//缺少存入
}
if(num==3)
{
time[1]++;
if(time[1]==24)
time[1]=0;
input(4,time[1]);
write_com(0x80+0x40+4);
//缺少存入
}
}
}
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!K2);
di();
if(num==1)
{
time[3]--;
if(time[3]==60)
time[3]=0;
input(10,time[3]);
write_com(0x80+0x40+10);
//缺少存入
}
if(num==2)
{
time[2]--;
if(time[2]==60)
time[2]=0;
input(7,time[2]);
write_com(0x80+0x40+7);
//缺少存入
}
if(num==3)
{
time[1]--;
if(time[1]==24)
time[1]=0;
input(4,time[1]);
write_com(0x80+0x40+4);
//缺少存入
}
}
}
}
}
}
void time_c() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20);
{
count=0;
time[3]++;
if(time[3]==60)
{
time[3]=0;
time[2]++;
if(time[2]==60)
{
time[2]=0;
time[1]++;
if(time[1]==24)
{
time[1]=0;
}
input(4,time[1]);
}
input(7,time[2]);
}
input(10,time[3]);
}
在加入最后的time——c函数后前面正常的日期显示也无法正常运行,而时间出出现奇怪的字符