1602时钟带设定.docx
《1602时钟带设定.docx》由会员分享,可在线阅读,更多相关《1602时钟带设定.docx(17页珍藏版)》请在冰豆网上搜索。
1602时钟带设定
#includereg52.h
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]=HL-8051---clock;
ucharcodetable1[]=--------------;
ucharcodetable2[]=ALL0000--;
ucharcodetable3[]=;
ucharclk_time[3];秒,分,时寄存器初始值
sbitT_RST=P1^0;ds1302-5
sbitT_IO=P1^1;ds1302-6
sbitT_CLK=P1^2;ds1302-7
sbiten=P3^4;
sbitrw=P3^6;
sbitrs=P3^5;
sbitled=P2^5;
sbitdula=P2^6;
sbitwela=P2^7;
sbitACC0=ACC^0;
sbitACC7=ACC^7;
sbitup=P3^0;
sbitdown=P3^1;
sbitset=P3^2;
sbitdid=P2^3;
sbitGND=P3^7;
ucharnum,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg,b,clock_s,clock_g;
charhour,mie,sei,c,nhour,nmie,shour,smie;
DS1302:
写入操作(上升沿)
voidwrite_byte(ucharda)
{
uchari;
ACC=da;
for(i=8;i0;i--)
{
T_IO=ACC0;
T_CLK=0;
T_CLK=1;
ACC=ACC1;
}
}
DS1302:
读取操作(下降沿)
ucharread_byte(void)
{
uchari;
for(i=0;i8;i++)
{
ACC=ACC1;
T_CLK=1;
T_CLK=0;
ACC7=T_IO;
}
return(ACC);
}
DS1302写入数据(先送地址,再写数据)
voidwrite_1302(ucharaddr,ucharda)
{
T_RST=0;停止工作
T_CLK=0;
T_RST=1;重新工作
write_byte(addr);写入地址
write_byte(da);
T_RST=0;
T_CLK=1;
}
DS1302读取数据(先送地址,再读数据)
ucharread_1302(ucharaddr)
{
uchartemp;
T_RST=0;停止工作
T_CLK=0;
T_RST=1;重新工作
write_byte(addr);写入地址
temp=read_byte();
T_RST=0;
T_CLK=1;停止工作
return(temp);
}
延时程序=a1ms
voiddelay(uintz)
{
uintx,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
voidfn()
{
did=0;
delay(120);
did=1;
delay(120);
did=0;
delay(120);
did=1;
delay(120);
did=0;
delay(120);
did=1;
delay(120);
did=0;
delay(320);
did=1;
delay(400);
}
voidwrite_com(ucharcom)
{
rs=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
voidwrite_data(uchardate)
{
rs=1;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
voidmorning()
{shour=clock_ss10+clock_sg;
smie=clock_fs10+clock_fg;
if(b==0)
{
if(nhour==shour)
{
if(smie=nmie)
{
fn();
}
}
}
}
voidinit()
{
b=0;
nhour=0;
nmie=0;
led=0;关led
rw=0;
GND=0;
en=0;
write_com(0x38);设置液晶
write_com(0x0c);设光标等
write_com(0x06);写一个字符地址指针加1且光标加1
write_com(0x01);清屏
write_com(0x80);设置s地址指针
}
voiddisplay(ucharadd,date)
{
if(b==0)
{
clock_ms=clk_time[0]16;clock_mg=clk_time[0]%16;
led=0;
clock_fs=clk_time[1]16;clock_fg=clk_time[1]%16;
led=0;
clock_ss=clk_time[2]16;clock_sg=clk_time[2]%16;
write_com(0x80+0x44);
write_data(0x30+clock_ss);
write_com(0x80+0x45);
write_data(0x30+clock_sg);
write_com(0x80+0x47);
write_data(0x30+clock_fs);
write_com(0x80+0x48);
write_data(0x30+clock_fg);
write_com(0x80+0x4a);
write_data(0x30+clock_ms);
write_com(0x80+0x4b);
write_data(0x30+clock_mg);
}
if(b!
=0)
{
clock_s=date10;clock_g=date%10;
write_com(0x80+0x40+add);
write_data(0x30+clock_s);
write_data(0x30+clock_g);
}
}
voidkey()
{
ucharclock_s1,clock_s2,clock_f1,clock_f2;
rw=0;
if(set==0)
{
delay(10);
if(set==0)
{
did=0;
delay(10);did=1;
b++;
}
while(!
set);
if(b==1)
{
hour=clock_ss10+clock_sg;
mie=clock_fs10+clock_fg;
write_com(0x80+0x45);
write_com(0x0f);
}
if(b==2)
{
write_com(0x80+0x48);
}
if(b==3)
{
write_com(0x80+0x40);
for(num=0;num13;num++)
{
write_data(table2[num]);
}
write_com(0x80+0x45);display(4,nhour);write_com(0x80+0x45);
}
if(b==4)
{
write_com(0x80+0x48);
display(7,nmie);write_com(0x80+0x48);
}
if(b==5)
{
write_com(0x80+0x40);
for(num=0;num4;num++)
{
write_data(table3[num]);
}
write_com(0x80+0x45);
write_com(0x0c);
b=0;
clock_s1=hour10;十进制转十六进制
clock_s2=hour%10;十进制转十六进制
clock_s1=clock_s1&0xff;十进制转十六进制
clock_s2=clock_s2&0xff;十进制转十六进制
clock_s1=4;十进制转十六进制
clock_s1=clock_s1clock_s2;十进制转十六进制
clock_f1=mie10;十进制转十六进制
clock_f2=mie%10;十进制转十六进制
clock_f1=clock_f1&0xff;全1出1与运算
clock_f2=clock_f2&0xff;十进制转十六进制
clock_f1=4;十进制转十六进制
clock_f1=clock_f1clock_f2;十进制转十六进制
write_1302(0x8e,0x00);WP=0写操作
write_1302(0x80,0x00);写秒
write_1302(0x82,clock_f1);写分
write_1302(0x84,clock_s1);写时
write_1302(0x86,0x14);写日
write_1302(0x88,0x02);写月
write_1302(0x8a,0x06);写星期
write_1302(0x8c,0x09);
write_1302(0x8e,0x80);WP=1写保护
}
}
if(b!
=0)
{
if(up==0)
{
delay(10);
if(up==0)
{
did=0;
delay(10);
did=1;
while(!
up);
if(b==1)
{
hour++;
if(hour=24)
{
delay
(1);
hour=0;
}
display(4,hour);
write_com(0x80+0x45);
}
if(b==2)
{
mie++;
if(mie=60)
{
mie=0;
}
display(7,mie);
write_com(0x80+0x48);
}
if(b==3)
{
nhour++;
if(nhour=24)
{
delay
(1);
nhour=0;
}
display(4,nhour);
write_com(0x80+0x45);
}
if(b==4)
{
nmie++;
if(nmie=60)
{
nmie=0;
}
display(7,nmie);
write_com(0x80+0x48);
}
}
}
if(down==0)
{
delay(10);
if(down==0)
{
did=0;
delay(10);
did=1;
while(!
down);
if(b==1)
{
hour--;
if(hour0)
{
hour=23;
}
display(4,hour);
write_com(0x80+0x45);
}
if(b==2)
{
mie--;
if(mie0)
{
mie=59;
}
display(7,mie);
write_com(0x80+0x48);
}
if(b==3)
{
nhour--;
if(nhour0)
{
nhour=23;
}
display(4,nhour);
write_com(0x80+0x45);
}
if(b==4)
{
nmie--;
if(nmie0)
{
nmie=59;
}
display(7,nmie);
write_com(0x80+0x48);
}
}
}
}
}
voidmain()
{
uchartemp=0x80;
uchari;
init();
wela=1;关开发板数码管
P0=0Xff;关开发板数码管
wela=0;关开发板数码管
for(num=0;num15;num++)
{
write_data(table[num]);
delay(100);
}
write_com(0x80+0x40);
for(num=0;num15;num++)
{
write_data(table1[num]);
}
for(num=0;num16;num++)
{
write_com(0x18);
delay(20);
}
write_1302(0x8e,0x00);
write_1302(0x90,0xa4);
write_1302(0x8e,0x80);
while
(1)
{
if(b==0)
{temp=0x81;
for(i=0;i3;i++)
{
clk_time[i]=read_1302(temp);
temp+=2;
}
display(0x4b,0x00);
}
morning();
key();
}
}