51單片機電子時鐘完整版
if(n==2)
{
fen--;
if(fen==-1)
fen=59;
writesfm(7,fen);
}
}
}
menu=4;
}
void Alarm(void) //設(shè)定鬧鐘功能,k4鍵跳轉(zhuǎn)其他功能
{
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) //設(shè)置光標所在位置
{
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) //實現(xiàn)加法
{
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轉(zhuǎn)換成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) //實現(xiàn)減法
{
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); //初始化系統(tǒng)時間 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); //設(shè)置16*2行顯示,5*7點陣,8位數(shù)據(jù)接口
write_add(0x0c); //開顯示,不顯示光標
write_add(0x06);
write_add(0x01); //清屏
while(1)
{
disp(); //顯示
}
}
51單片機相關(guān)文章:51單片機教程
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
評論