📄 液晶显示1.c
字号:
#include<reg51.h>
#include <LCD1602.h>
#include<stdio.h>
#define unchar unsigned char
#define unint unsigned int
sbit adjust_button=P0^7;sbit increase_button=P0^6;
sbit decrease_button=P0^5;
unchar i,count,con1=0;
unchar dis0[2],dis1[2],dis2[2],dis3[2],dis4[2],dis5[2];dis6[2];dis7[2];dis8[2];
dis9[2];
char con=-1;
char dis[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char timedata[8]={0x00,0x00,0x00,0x00,0x00,0x00};
//秒个位,秒十位,分 ,分 ,时 ,时
unsigned int year1=1700,mon1=12,day1=10,tmp_days;
unchar year[5],mon[3],day[3],week1[2],tmp,weekday;
void time_initial()
{
TMOD=0x11;
TH0=(65536-49980)/256;
TL0=(65536-49980)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
}
void Delay(unint i)
{
unint j;
for(;i>0;i--)
for(j=0;j<125;j++){;}
}
void keyscan()
{
if(adjust_button==0)
{
Delay(10);
while(adjust_button==0);
TR0=0;
con++;
//实现数字一闪,使使用者知道调的是哪位数字.
switch(con)
{
case 0:LCD_Print(11,0," ");Delay(300);break;
case 1:LCD_Print(10,0," ");Delay(300);break;
case 2:LCD_Print(8,0," ");Delay(300);break;
case 3:LCD_Print(7,0," ");Delay(300);break;
case 4:LCD_Print(5,0," ");Delay(300);break;
case 5:LCD_Print(4,0," ");Delay(300);break;
case 6:LCD_Print(8,1," ");Delay(300);break;
case 7:LCD_Print(5,1," ");Delay(300);break;
case 8:LCD_Print(0,1," ");Delay(300);break;
}
if(con>=9){con=-1;TR0=1;}
}
//数字增加
if(increase_button==0)
{
Delay(10);
while(increase_button==0);
timedata[con]++;
if((con==0|con==2)&timedata[con]>=10){timedata[con]=0;}
if((con==1|con==3)&timedata[con]>=6){timedata[con]=0;}
if(con==4&timedata[con]>=4){timedata[con]=0;}
if(con==5&timedata[con]>=3){timedata[con]=0;}
//日增加调整
if(con==6)
{day1++;
if(mon1==4||mon1==6||mon1==9||mon1==11){if(day1==31){day1=1;};}
if(mon1==1||mon1==3||mon1==5||mon1==7||mon1==8||mon1==10||mon1==12)
{if(day1==32){day1=1;};}
if(mon1==2&year1%4==0){if(day1==30){day1=1;};}
if(mon1==2&year1%4){if(day1==29){day1=1;};}
}
//月增加调整
if(con==7){mon1++;if(mon1==13){mon1=1;};}
//年增加调整
if(con==8){year1=year1+1;}//??有问题:不知为什么要减256
dis[con]=timedata[con];dis[6]=0x0a;
}
//数字减少
if(decrease_button==0)
{
Delay(10);
while(decrease_button==0);
timedata[con]--;
if((con==0|con==2)&timedata[con]<0){timedata[con]=9;}
if((con==1|con==3)&timedata[con]<0){timedata[con]=5;}
if(con==4&timedata[con]<0){timedata[con]=3;}
if(con==5&timedata[con]<0){timedata[con]=2;}
dis[con]=timedata[con];dis[6]=0x0a;
//日减少调整
if(con==6)
{day1--;
if(mon1==4||mon1==6||mon1==9||mon1==11){if(day1==0){day1=30;};}
if(mon1==1||mon1==3||mon1==5||mon1==7||mon1==8||mon1==10||mon1==12)
{if(day1==0){day1=31;};}
if(mon1==2&year1%4==0){if(day1==0){day1=29;};}
if(mon1==2&year1%4){if(day1==0){day1=28;};}
}
//月减少调整
if(con==7){mon1--;if(mon1==0){mon1=12;};}
//年减少调整
if(con==8){year1=year1-1;}
}
}
//计算出星期几
void week()
{
if(year1==2000) weekday=5;//2000年1月1日为星期六
//计算出当年的1月1日为星期几
else{tmp=(year1-1)/4+1;tmp=(year-tmp)+tmp*2;weekday=(tmp+5)%7;}
tmp_days=0;
for(tmp=1;tmp<mon1;tmp++)
if(tmp==1||tmp==3||tmp==5||tmp==7||tmp==8||tmp==10)
tmp_days=tmp_days+31;
else if(tmp==4||tmp==6||tmp==9||tmp==11)
tmp_days=tmp_days+30;
else if(tmp==2)
{if(year1%4==0)tmp_days=tmp_days+29;
else tmp_days=tmp_days+28;}
tmp_days=tmp_days+day1-1;
weekday=(weekday+tmp_days%7)%7+1;
}
void display()
{
//多加'0'使之转化为字符的形式,液晶显示,数字的形式显示不出
dis0[0]=dis[0]+'0';dis1[0]=dis[1]+'0';dis2[0]=dis[2]+'0';
dis3[0]=dis[3]+'0';dis4[0]=dis[4]+'0';dis5[0]=dis[5]+'0';
week1[0]=weekday+'0';week1[1]='\0';
LCD_Print(4,1,"/");LCD_Print(7,1,"/");
LCD_Print(13,0,week1);
LCD_Print(6,0,":");LCD_Print(9,0,":");
LCD_Print(4,0,&dis5[0]);LCD_Print(5,0,&dis4[0]);
LCD_Print(7,0,&dis3[0]);LCD_Print(8,0,&dis2[0]);
LCD_Print(10,0,&dis1[0]);LCD_Print(11,0,&dis0[0]);
//年显示
year[0]=year1/1000+'0';
year[1]=(year1/100)%10+'0';
year[2]=(year1/10)%10+'0';
year[3]=year1%10+'0';
year[4]='\0'; //一定要加结束符,这一句非常重要.
LCD_Print(0,1,year);
//月显示
mon[0]=mon1/10+'0';mon[1]=mon1%10+'0';mon[2]='\0';
//一定要加结束符,这一句非常重要.
LCD_Print(5,1,mon);
//日显示
day[0]=day1/10+'0';day[1]=day1%10+'0';day[2]='\0';
//一定要加结束符,这一句非常重要.
LCD_Print(8,1,day);
}
void main()
{LCD_Initial();
time_initial();
while(1)
{week();
display();
keyscan();
}
}
void t0() interrupt 1
{
TR0=0; TH0=(65536-49980)/256;TL0=(65536-49980)%256;
count++;
if(count>=20)
{count=0;timedata[0]++;
if(timedata[0]==10)
{timedata[0]=0;timedata[1]++;
if(timedata[1]==6)
{timedata[1]=0;timedata[2]++;
if(timedata[2]==10)
{timedata[2]=0;timedata[3]++;
if(timedata[3]==6)
{timedata[3]=0;timedata[4]++;
if(timedata[4]==4)
{timedata[4]=0;timedata[5]++;
if(timedata[5]>=2)
{timedata[5]=0;day1++;}//日递加
//判断几月有几多日,是否润年等.
switch(day1)
{
case 29 :if(mon1==2&&year1%4){mon1=3;day1=1;};break;
case 30 :if(mon1==2&&year1%4==0&&year1%100){mon1=3;day1=1;};break;
case 31 :if(mon1==4||mon1==6||mon1==9||mon1==11)
{day1=1;mon1++;};break;
case 32 :day1=1;mon1++;break;
default: break;
}
if(mon1==13){mon1=1;year1++;};//年递加;
}
}
}
}
}
}
TR0=1;
dis[0]=timedata[0];dis[1]=timedata[1];dis[2]=timedata[2];dis[3]=timedata[3];
dis[4]=timedata[4];dis[5]=timedata[5];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -