📄 12864eight.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^0;
sbit scl=P1^1;
sbit RS=P2^7;
sbit RW=P2^6;
sbit EN=P2^5;
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit key4=P1^3;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit dsrs=P2^4;
sbit dscl=P3^7;
sbit IO=P3^2;
sbit feng=P3^6;
sbit kaiguan=P1^4;
int nian;
char shi,fen,miao,day,ri,yue,qian,bai,nqb,nsg,nshi,nfen,nmiao;
uchar num,sh,ge,shu,flag,i,shsh,gege,fs,fg,ss,sg,ys,ye,rqs,rqg,ns,ng,flag1,k;
uchar code table[]={"-"};
uchar code table1[]={"2009-04-13"};
uchar code table2[]={"0123456789"};
uchar code table3[]={"MONTUEWEDTHUFRISATSUN"};
uchar code table4[]={"闹钟 "};
//sbit PSB=P2^4;
void delay(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
void wcom(uchar com)
{
RS=0;
RW=0;
EN=0;
P0=com;
delay(5);
EN=1;
delay(5);
EN=0;
}
void wdata(uchar dat)
{
RS=1;
RW=0;
EN=0;
P0=dat;
delay(5);
EN=1;
delay(5);
EN=0;
}
void pos(uchar x,uchar y)
{
uchar pos;
if(x==1)
{x=0x80;}
else if(x==2)
{x=0x90;}
else if(x==3)
{x=0x88;}
else if(x==4)
{x=0x98;}
pos=x+y;
wcom(pos);
}
void wadda(uchar x,uchar y,uchar date)
{
sh=date/10;
ge=date%10;
pos(x,y);
wdata(table2[sh]);
wdata(table2[ge]);
pos(x,y);
}
void wfen(uchar x,uchar y,uchar date)
{
sh=date/10;
ge=date%10;
pos(x,y);
wdata(':');
wdata(table2[sh]);
wdata(table2[ge]);
pos(x,y+1);
}
void wadnian(uchar x,uchar y,int date)
{
uchar qian,bai,sh,ge;
qian=date/1000;
bai=date%1000/100;
sh=date%100/10;
ge=date%10;
pos(x,y);
wdata(table2[qian]);
wdata(table2[bai]);
wdata(table2[sh]);
wdata(table2[ge]);
}
void wsfm(uchar x,uchar y,uchar shi,uchar fen,uchar miao)
{
uchar ss,sg,fs,fg,ms,mg;
pos(x,y);
ss=shi/10;
sg=shi%10;
fs=fen/10;
fg=fen%10;
ms=miao/10;
mg=miao%10;
wdata(table2[ss]);
wdata(table2[sg]);
wdata(':');
wdata(table2[fs]);
wdata(table2[fg]);
wdata(':');
wdata(table2[ms]);
wdata(table2[mg]);
}
void wnyr(int nian,uchar yue,uchar ri)
{
uchar num;
wadnian(1,0,nian);
pos(1,2);
while(table[num]!='\0')
{
wdata(table[num]);
num++;
}
wadda(1,3,yue);
num=0;
pos(1,4);
while(table[num]!='\0')
{
wdata(table[num]);
num++;
}
wadda(1,5,ri);
pos(1,6);
wdata(0x20);
for(i=0;i<3;i++)
{
wdata(table3[i+3*day]);
}
}
void writeds(uchar date)
{
uchar i;
ACC=date;
for(i=8;i>0;i--)
{
IO=ACC0;
dscl=1;
dscl=0;
ACC=ACC>>1;
}
}
uchar readds()
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=IO;
dscl=1;
dscl=0;
}
return(ACC);
}
void write1302(uchar add,uchar date)
{
dsrs=0;
dscl=0;
dsrs=1;
writeds(add);
writeds(date);
dscl=1;
dsrs=0;
}
uchar read1302(uchar add)
{
uchar date;
dsrs=0;
dscl=0;
dsrs=1;
add++;
writeds(add);
date=readds();
dscl=1;
dsrs=0;
return (date);
}
void settime(uchar add,uchar date)
{
write1302(0x8e,0x00);
write1302(add,(date/10)<<4|(date%10));
write1302(0x8e,0x80);
}
void gettime()
{
uchar time;
time=read1302(0x80);
gege=time&0x0f;
shsh=(time&0x70)>>4;
miao=shsh*10+gege;
time=read1302(0x82);
fs=(time&0x70)>>4;
fg=time&0x0f;
fen=fs*10+fg;
time=read1302(0x84);
ss=(time&0x70)>>4;
sg=time&0x0f;
shi=ss*10+sg;
time=read1302(0x8a);
day=(time&0x07);
time=read1302(0x86);
rqs=(time&0x30)>>4;
rqg=(time&0x0f);
ri=rqs*10+rqg;
time=read1302(0x88);
ys=(time&0x10)>>4;
ye=(time&0x0f);
yue=ys*10+ye;
time=read1302(0x8c);
ns=(time&0xf0)>>4;
ng=(time&0x0f);
nsg=ns*10+ng;
nian=nsg+nqb*100;
}
void initds()
{
uchar second=read1302(0x80);
if(second&0x80)
settime(0x80,0);//设定几秒
settime(0x82,4);//设定几分
settime(0x84,8);//设定几时
settime(0x86,19);//设定几号
settime(0x88,4);//设定几月
nian=0;
settime(0x8c,88);//设定几年
settime(0x8a,6);//设定星期几
}
void init()
{
wcom(0x30);//基本指令操作
delay(5);
wcom(0x0c);//显示开关坐标
delay(5);
wcom(0x01);//清屏
delay(5);
}
void delay2()
{;;}
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void in()
{
sda=1;
// delay();
scl=1;
// delay();
}
void start()
{
sda=1;
delay2();
scl=1;
delay2();
sda=0;
delay2();
}
void stop()
{
sda=0;
delay2();
scl=1;
delay2();
sda=1;
delay2();
}
void respond()
{
uchar i;
scl=1;
delay2();
while((sda==1)&&(i<250))i++;
scl=0;
delay2();
}
void write(uchar date)
{
uchar temp,i;
temp=date;
scl=0;
delay2();
sda=1;
delay2();
for(i=0;i<8;i++)
{
temp=temp<<1;
sda=CY;
delay2();
scl=1;
delay2();
scl=0;
delay2();
}
sda=1;
delay2();
}
uchar read()
{
uchar i,j,k;
sda=1;
delay2();
scl=1;
delay2();
for(i=0;i<8;i++)
{
scl=1;
delay2();
j=sda;
k=k<<1|j;
scl=0;
delay2();
}
sda=1;
delay2();
return (k);
}
void WIIC(uchar add,uchar date)
{
start();
write(0xa0);
respond();
write(add);
respond();
write(date);
respond();
stop();
}
uchar RIIC(uchar add)
{
uchar date;
start();
write(0xa0);
respond();
write(add);
respond();
start();
write(0xa1);
respond();
date=read();
stop();
return date;
}
void keyscan()
{
if(flag==0)
{
if(key2==0)
{
delay(10);
if(key2==0)
while(!key2);
flag1=0;
pos(4,0);
wsfm(4,2,nshi,nfen,nmiao);
}
if(key3==0)
{
delay(10);
if(key3==0)
while(!key3);
flag1=0;
pos(4,0);
for(num=0;num<16;num++)
{
wdata(table4[num]);
}
}
}
if(key4==0)
{
delay(10);
{
if(key4==0)
{
wsfm(4,2,nshi,nfen,nmiao);
flag=1;
flag1=0;
k++;
pos(4,5);
wcom(0x0f);
}
switch(k)
{
case 2:pos(4,4);//fen
break;
case 3:pos(4,2);//shi
break;
case 4:
{
k=0;
flag=0;
wcom(0x0c);
pos(4,0);
pos(4,0);
for(num=0;num<16;num++)
{
wdata(table4[num]);
}
}
break;
}
}
while(!key4);
}
if(k==1)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
nmiao++;
if(nmiao==60)
nmiao=0;
}
while(!key2);
wadda(4,5,nmiao);
WIIC(3,nmiao);
}
}
if(k==2)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
nfen++;
if(nfen==60)
nfen=0;
}
while(!key2);
wfen(4,3,nfen);
WIIC(4,nfen);
}
}
if(k==3)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
nshi++;
if(nshi==24)
nshi=0;
}
while(!key2);
wadda(4,2,nshi);
WIIC(5,nshi);
}
}
if(k==1)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
nmiao--;
if(nmiao==-1)
nmiao=59;
}
while(!key3);
wadda(4,5,nmiao);
WIIC(3,nmiao);
}
}
if(k==2)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
nfen--;
if(nfen==-1)
nfen=59;
}
while(!key3);
wfen(4,3,nfen);
WIIC(4,nfen);
}
}
if(k==3)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
nshi--;
if(nshi==-1)
nshi=23;
}
while(!key3);
wadda(4,2,nshi);
WIIC(5,nshi);
}
}
if(key1==0)
{
delay(10);
if(key1==0)
{
flag=1;
flag1=0;
shu++;
pos(3,5);
wcom(0x0f);
}
switch(shu)
{
case 2:pos(3,4);//fen
break;
case 3:pos(3,2);//shi
break;
case 4:
{
wcom(0x0c);
pos(1,6);
wdata(0x20);
pos(1,7);
wcom(0x0f);
};
//xingqi
break;
case 5:pos(1,5);//ri
break;
case 6:pos(1,3);//yue
break;
case 7:pos(1,1);//nian1
break;
case 8:pos(1,0);//nian2
break;
case 9:
{
shu=0;
flag=0;
wcom(0x0c);
settime(0x80,miao);
settime(0x82,fen);
settime(0x84,shi);
settime(0x8a,day);
settime(0x86,ri);
settime(0x88,yue);
delay(5);
settime(0x8c,nian%100);
}
break;
}
while(!key1);
}
if(shu==1)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
miao++;
if(miao==60)
miao=0;
}
while(!key2);
wadda(3,5,miao);
}
}
if(shu==2)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
fen++;
if(fen==60)
fen=0;
}
while(!key2);
wfen(3,3,fen);
}
}
if(shu==3)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
shi++;
if(shi==24)
shi=0;
}
while(!key2);
wadda(3,2,shi);
}
}
if(shu==4)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
day++;
if(day==7)
day=0;
}
while(!key2);
pos(1,6);
wdata(0x20);
for(i=0;i<3;i++)
{
wdata(table3[i+3*day]);
}
pos(1,7);
}
}
if(shu==5)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
ri++;
if(ri==32)
ri=0;
}
while(!key2);
wadda(1,5,ri);
}
}
if(shu==6)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
yue++;
if(yue==13)
yue=0;
}
while(!key2);
wadda(1,3,yue);
}
}
if(shu==7)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
nsg++;
if(nsg==100)
nsg=0;
}
while(!key2);
nian=nsg+nqb*100;
wadnian(1,0,nian);
pos(1,1);
}
}
if(shu==8)
{
if(key2==0)
{
delay(10);
if(key2==0)
{
nqb++;
if(nqb==100)
nqb=0;
}
while(!key2);
nian=nsg+nqb*100;
wadnian(1,0,nian);
pos(1,0);
WIIC(6,nqb);
}
}
if(shu==1)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
miao--;
if(miao==-1)
miao=59;
}
while(!key3);
wadda(3,5,miao);
}
}
if(shu==2)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
fen--;
if(fen==-1)
fen=59;
}
while(!key3);
wfen(3,3,fen);
}
}
if(shu==3)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
shi--;
if(shi==-1)
shi=23;
}
while(!key3);
wadda(3,2,shi);
}
}
if(shu==4)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
day--;
if(day==-1)
day=6;
}
while(!key3);
pos(1,6);
wdata(0x20);
for(i=0;i<3;i++)
{
wdata(table3[i+3*day]);
}
pos(1,7);
}
}
if(shu==5)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
ri--;
if(ri==-1)
ri=31;
}
while(!key3);
wadda(1,5,ri);
}
}
if(shu==6)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
yue--;
if(yue==-1)
yue=12;
}
while(!key3);
wadda(1,3,yue);
}
}
if(shu==7)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
nsg--;
if(nsg==-1)
nsg=99;
}
while(!key3);
nian=nsg+nqb*100;
wadnian(1,0,nian);
pos(1,1);
}
}
if(shu==8)
{
if(key3==0)
{
delay(10);
if(key3==0)
{
nqb--;
if(nqb==-1)
nqb=99;
}
while(!key3);
nian=nsg+nqb*100;
wadnian(1,0,nian);
pos(1,0);
WIIC(6,nqb);
}
}
}
void didi()
{
feng=0;
delay(50);
feng=1;
delay(50);
feng=0;
delay(50);
feng=1;
delay(50);
}
void main()
{
init();
in();
kaiguan=0;// 蜂鸣器控制
num=0;
pos(4,0);
while(table4[num]!='\0')
{
wdata(table4[num]);
num++;
}
nmiao=RIIC(3);
nfen=RIIC(4);
nshi=RIIC(5);
nqb=RIIC(6);
///initds();
while(1)
{
keyscan();
if(flag==0)
{
gettime();
if(shi==nshi)
{
if(fen==nfen)
{
if(miao==nmiao)
flag1=1;
}
}
if(flag1==1)
{
didi();
wsfm(4,2,nshi,nfen,nmiao);
}
wsfm(3,2,shi,fen,miao);//写时分秒
wnyr(nian,yue,ri);//写年月日
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -