51单片机电子时钟完整版

时间:2012-08-02来源:网络

if(n==2)
{
fen--;
if(fen==-1)
fen=59;
writesfm(7,fen);
}
}
}
menu=4;
}
void Alarm(void) //设定闹钟功能,k4键跳转其他功能
{
write_add(0x06);
write_add(0x01); //清屏
write_add(0x80+0x00+0);
for(i=0;i5;i++)
{
write_date(naozhong[i]); //显示Alarm标识符
}
write_add(0x80+0x40+4);
writesfm(4,nshi);
write_date(0x3a);
writesfm(7,nfen);
shi=nshi;
fen=nfen;
while(!k4);
while(k4)
{
key();
}
write_add(0x0c); //开显示,不显示光标
}
void key1(void)
{
if(k1==0) //设置光标所在位置
{
delay(10); //去抖
if(k1==0)
{
num++;
while(!k1);
if(num==1)
{
write_add(0x0f); //显示光标并闪烁
write_add(0x80+0x40+6);
}
if(num==2)
{
write_add(0x0f); //显示光标并闪烁
write_add(0x80+0x40+3);
}
if(num==3)
{
write_add(0x0f); //显示光标并闪烁
write_add(0x80+0x40+0);
}
if(num==4)
{
write_add(0x0f); //显示光标并闪烁
write_add(0x80+0x00+6);
}
if(num==5)
{
write_add(0x0f); //显示光标并闪烁
write_add(0x80+0x00+3);
}
if(num==6)
{
write_add(0x0f); //显示光标并闪烁
write_add(0x80+0x00+0);
}
if(num==7)
{
write_add(0x0f); //显示光标并闪烁
write_add(0x80+0x00+11);
}
if(num==8)
{
num=0;
write_add(0x0c);
}
}
}
}
void key2(void)
{
Write1302(w_protect,0x00); //禁止写保护
if(k2==0) //实现加法
{
delay(10);
if(k2==0)
{
while(!k2);
if(num==1)
{
miao++;
if(miao==60)
{
miao=0;
}
writesfm(6,miao);
Write1302(w_Sec,(miao/10)*16+miao%10); //将miao转换成BCD码
}
if(num==2)
{
fen++;
if(fen==60)
{
fen=0;
}
writesfm(3,fen);
Write1302(w_Min,(fen/10)*16+fen%10);
}
if(num==3)
{
shi++;
if(shi==24)
{
shi=0;
}
writesfm(0,shi);
Write1302(w_Hou,(shi/10)*16+shi%10);
}
if(num==4)
{
ri++;
if(ri==30)
{
ri=0;
}
writenyr(6,ri);
Write1302(w_Day,(ri/10)*16+ri%10);
}
if(num==5)
{
yue++;
if(yue==13)
{
yue=1;
}
writenyr(3,yue);
Write1302(w_Mou,(yue/10)*16+yue%10);
}
if(num==6)
{
nian++;
if(nian==100)
{
nian=0;
}
writenyr(0,nian);
Write1302(w_Yea,(nian/10)*16+nian%10);
}
if(num==7)
{
x++;
writexi(x);
Write1302(w_xi,(x/10)*16+x%10);
if(x==7)
{
x=0;
}
}
}
}
}
void key3(void)
{
Write1302(w_protect,0x00); //禁止写保护
if(k3==0) //实现减法
{
delay(10);
if(k3==0)
{
while(!k3);
if(num==1)
{
miao--;
if(miao==-1)
{
miao=59;
}
writesfm(6,miao);
Write1302(w_Sec,(miao/10)*16+miao%10);
}
if(num==2)
{
fen--;
if(fen==-1)
{
fen=59;
}
writesfm(3,fen);
Write1302(w_Min,(fen/10)*16+fen%10);
}
if(num==3)
{
shi--;
if(shi==-1)
{
shi=23;
}
writesfm(0,shi);
Write1302(w_Hou,(shi/10)*16+shi%10);
}
if(num==4)
{
ri--;
if(ri==-1)
{
ri=30;
}
writenyr(6,ri);
Write1302(w_Day,(ri/10)*16+ri%10);
}
if(num==5)
{
yue--;
if(yue==-1)
{
yue=12;
}
writenyr(3,yue);
Write1302(w_Mou,yue);
}
if(num==6)
{
nian--;
if(nian==-1)
{
nian=99;
}
writenyr(0,nian);
Write1302(w_Yea,(yue/10)*16+yue%10);
}
if(num==7)
{
x--;
writexi(x);
Write1302(w_xi,(x/10)*16+x%10);
if(x==1)
{
x=8;
}
}
}
}
}
void key4()
{
if(k4==0)
{
delay(10);
if(k4==0)
{
while(!k4);
menu++;
}
}
}
void TimeSet()
{
write_add(0x0f);
write_add(0x80+0x40+9);
while(k4)
{
key1();
key2();
key3();
}
Write1302(w_protect,0x00); //写保护
menu=2;
}
void init_DS1302(void)
{
Write1302(w_protect,0x00); //禁止写保护
Write1302(w_Sec,0x56);
Write1302(w_Min,0x59);
Write1302(w_Hou,0x23); //24小时模式
Write1302(w_xi,0x03);
Write1302(w_Day,0x28);
Write1302(w_Mou,0x02);
Write1302(w_Yea,0x11); //初始化系统时间 2011年5月11日周三12:12:12
Write1302(w_protect,0x80); //写保护
}
void disp(void)
{
key4();
if(menu==0)
{
Normal();
read_temp(); //读取温度
ds1820disp();//显示
}
if(menu==1)
{
TimeSet();
}
num=0;
if(menu==2)
{
StopWatch();
}
if(menu==3)
{
Alarm();
}
if(menu==4)
{
init_info();
}
if(menu==5)
{
menu=0;
write_add(0x01); //清屏
}
}
void main()
{
init_DS1302(); //初始化1302
EN=1;
RW=0; //写命令
write_add(0x38); //设置16*2行显示,5*7点阵,8位数据接口
write_add(0x0c); //开显示,不显示光标
write_add(0x06);
write_add(0x01); //清屏
while(1)
{
disp(); //显示
}
}
1 2 3

关键词: 51单片机 电子时钟 1602液晶

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版