仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei圖片20210319190643.png (49.84 KB, 下載次數: 58)
下載附件
2021-3-19 19:07 上傳
獨立按鍵調節(jié)時間,年,月,日,星期
單片機源程序如下:
#include<reg52.h>
#define ds12887 P0
#define lcd P1
sbit dsas=P2^4;
sbit dsrw=P2^5;
sbit dsds=P2^6;
sbit dscs=P2^7;
sbit lcdrs=P2^0;
sbit lcde=P2^2;
sbit k1=P3^5;
sbit k2=P3^6;
sbit k3=P3^7;
#define uchar unsigned char
#define uint unsigned int
uchar houir,min,sad,qi,year, month,day,kai,kai1,kai2,ting;
void delay(uint x)
{
uchar y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
uchar ds_read(uchar x)
{
uchar y;
dscs=0;
dsrw=1;
dsas=1;
dsds=1;
ds12887=x;
dsas=0;
dsds=0;
ds12887=0xff;
y=ds12887;
dsds=1;
dsas=1;
dscs=1;
return y;
}
void ds_write(uchar x,y)
{
dscs=0;
dsrw=1;
dsas=1;
dsds=1;
ds12887=x;
dsas=0;
dsrw=0;
ds12887=y;
dsrw=1;
dsas=1;
dscs=1;
}
void lcd_mingling(uchar x)
{
lcdrs=0;
lcde=0;
lcd=x;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void lcd_shuju(uchar x)
{
lcdrs=1;
lcde=0;
lcd=x;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void lcdlnit()
{
lcd_mingling(0x38);
lcd_mingling(0x0c);
lcd_mingling(0x06);
lcd_mingling(0x01);
lcd_mingling(0x80);
}
void dslnit()
{
ds_write(0x0a,0x20);
ds_write(0x0b,0x06);
ds_write(4,18);
ds_write(2,41);
ds_write(0,33);
ds_write(7,19);
ds_write(8,3);
ds_write(9,21);
ds_write(6,5);
}
void sfm()
{
houir=ds_read(4);
lcd_mingling(0x80);
lcd_shuju(houir/10+0x30);
lcd_shuju(houir%10+0x30);
lcd_shuju(':');
min=ds_read(2);
lcd_shuju(min/10+0x30);
lcd_shuju(min%10+0x30);
lcd_shuju(':');
sad=ds_read(0);
lcd_shuju(sad/10+0x30);
lcd_shuju(sad%10+0x30);
}
void nyr()
{
lcd_mingling(0x80+0x40);
lcd_shuju('2');
lcd_shuju('0');
year=ds_read(9);
lcd_shuju(year/10+0x30);
lcd_shuju(year%10+0x30);
lcd_shuju('-');
month=ds_read(8);
lcd_shuju(month/10+0x30);
lcd_shuju(month%10+0x30);
lcd_shuju('-');
day=ds_read(7);
lcd_shuju(day/10+0x30);
lcd_shuju(day%10+0x30);
lcd_shuju('-');
lcd_shuju('-');
qi=ds_read(6);
lcd_shuju(qi+0x30);
}
void key()
{
if(k1==0)
{
delay(20);
if(k1==0)
{
while(!k1);
kai++;
if(kai==1)
{
ting++;
lcd_mingling(0x80+6);
lcd_mingling(0x0f);
}
if(kai==2)
{
lcd_mingling(0x80+3);
lcd_mingling(0x0f);
}
if(kai==3)
{
lcd_mingling(0x80);
lcd_mingling(0x0f);
}
if(kai==4)
{
lcd_mingling(0x80+0x40+8);
lcd_mingling(0x0f);
}
if(kai==5)
{
lcd_mingling(0x80+0x40+5);
lcd_mingling(0x0f);
}
if(kai==6)
{
lcd_mingling(0x80+0x40+2);
lcd_mingling(0x0f);
}
if(kai==7)
{
lcd_mingling(0x80+0x40+12);
lcd_mingling(0x0f);
}
if(kai==8)
{
lcd_mingling(0x80+1);
lcd_mingling(0x0c);
kai=0;
ting=0;
ds_write(0,sad);
ds_write(2,min);
ds_write(4,houir);
ds_write(6,qi);
ds_write(7,day);
ds_write(8,month);
ds_write(9,year);
}
}
}
if(kai==1)
{
if(k2==0)
{
delay(20);
if(k2==0)
{
while(!k2);
sad++;
if(sad==60)
sad=0;
lcd_shuju(sad/10+0x30);
lcd_shuju(sad%10+0x30);
lcd_mingling(0x80+6);
}
}
if(k3==0)
{
delay(20);
if(k3==0)
{
while(!k3);
if(sad==0)
sad=60;
sad--;
lcd_shuju(sad/10+0x30);
lcd_shuju(sad%10+0x30);
lcd_mingling(0x80+6);
}
}
}
if(kai==2)
{
if(k2==0)
{
delay(20);
if(k2==0)
{
while(!k2);
min++;
if(min==60)
min=0;
lcd_shuju(min/10+0x30);
lcd_shuju(min%10+0x30);
lcd_mingling(0x80+3);
}
}
if(k3==0)
{
delay(20);
if(k3==0)
{
while(!k3);
if(min==0)
min=60;
min--;
lcd_shuju(min/10+0x30);
lcd_shuju(min%10+0x30);
lcd_mingling(0x80+3);
}
}
}
if(kai==3)
{
if(k2==0)
{
delay(20);
if(k2==0)
{
while(!k2);
houir++;
if(houir==24)
houir=0;
lcd_shuju(houir/10+0x30);
lcd_shuju(houir%10+0x30);
lcd_mingling(0x80);
}
}
if(k3==0)
{
delay(20);
if(k3==0)
{
while(!k3);
if(houir==0)
houir=24;
houir--;
lcd_shuju(houir/10+0x30);
lcd_shuju(houir%10+0x30);
lcd_mingling(0x80);
}
}
}
if(kai==4)
{
if(k2==0)
{
delay(20);
if(k2==0)
{
while(!k2);
day++;
if(day==31)
day=0;
lcd_shuju(day/10+0x30);
lcd_shuju(day%10+0x30);
lcd_mingling(0x80+0x40+8);
}
}
if(k3==0)
{
delay(20);
if(k3==0)
{
while(!k3);
if(day==0)
day=31;
min--;
lcd_shuju(day/10+0x30);
lcd_shuju(day%10+0x30);
lcd_mingling(0x80+0x40+8);
}
}
}
if(kai==5)
{
if(k2==0)
{
delay(20);
if(k2==0)
{
while(!k2);
month++;
if(month==12)
month=0;
lcd_shuju(month/10+0x30);
lcd_shuju(month%10+0x30);
lcd_mingling(0x80+0x40+5);
}
}
if(k3==0)
{
delay(20);
if(k3==0)
{
while(!k3);
if(month==0)
month=12;
month--;
lcd_shuju(month/10+0x30);
lcd_shuju(month%10+0x30);
lcd_mingling(0x80+0x40+5);
}
}
}
if(kai==6)
{
if(k2==0)
{
delay(20);
if(k2==0)
{
while(!k2);
year++;
if(year==100)
year=0;
lcd_shuju(year/10+0x30);
lcd_shuju(year%10+0x30);
lcd_mingling(0x80+0x40+2);
}
}
if(k3==0)
{
delay(20);
if(k3==0)
{
while(!k3);
if(year==0)
min=100;
year--;
lcd_shuju(year/10+0x30);
lcd_shuju(year%10+0x30);
lcd_mingling(0x80+0x40+2);
}
}
}
if(kai==7)
{
if(k2==0)
{
delay(20);
if(k2==0)
{
while(!k2);
qi++;
if(qi==8)
qi=1;
lcd_shuju(qi+0x30);
lcd_mingling(0x80+0x40+12);
}
}
if(k3==0)
{
delay(20);
if(k3==0)
{
while(!k3);
if(qi==1)
qi=8;
qi--;
lcd_shuju(qi+0x30);
lcd_mingling(0x80+0x40+12);
}
}
}
}
void main()
{
dslnit();
lcdlnit();
ds_write(0x0a,0x00);
while(1)
{
key();
if(ting==0)
{
sfm();
nyr();
delay(200);
}
}
}
51hei.png (13.91 KB, 下載次數: 60)
下載附件
2021-3-19 23:26 上傳
全部資料51hei下載地址:
復習液晶時鐘.zip
(92.28 KB, 下載次數: 39)
2021-3-19 19:14 上傳
點擊文件名下載附件
這是程序和仿真 下載積分: 黑幣 -5
|