標(biāo)題: [求助]誰(shuí)能幫我編寫(xiě)個(gè)時(shí)鐘的程序啊 [打印本頁(yè)]
作者: yyj531338365 時(shí)間: 2008-6-6 05:46
標(biāo)題: [求助]誰(shuí)能幫我編寫(xiě)個(gè)時(shí)鐘的程序啊
要求:1.能顯示時(shí)間和日期,而且是交替顯示
2.帶蜂鳴器的,每隔10分鐘想下
作者: xb_crazyman 時(shí)間: 2008-6-9 19:15
上學(xué)期寫(xiě)的一個(gè)時(shí)鐘程序
可能很多可以優(yōu)化的
不過(guò)你可以參考一下
#include<reg51.h>
unsigned char shows1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char shows2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unsigned char i,j,num,temp;
unsigned int hour,minute,second,tens,units,second1,minute1,hour1;
void delay(unsigned int n)
{
for(i=n;i>0;i--)
for(j=0;j<110;j++);
}
void showtime(int x)
{
tens=x/10;
units=x%10;
}
void debughour()
{
if(P3==0xbf)
{
delay(1);
while(P3==0xbf);
hour++;
if(hour==24)
hour=0;
showtime(hour);
P0=shows1[tens];
P2=0x01;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x02;
delay(1);
P2=0x00;
}
if(P3==0xdf)
{
delay(1);
while(P3==0xdf);
hour--;
if(hour==-1)
hour=23;
showtime(hour);
P0=shows1[tens];
P2=0x01;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x02;
delay(1);
P2=0x00;
}
if(P3==0x7f)
{
delay(1);
while(P3==0x7f);
temp++;
}
}
void debugminute()
{
if(P3==0xbf)
{
delay(1);
while(P3==0xbf);
minute++;
if(minute==60)
minute=0;
showtime(minute);
P0=shows1[tens];
P2=0x04;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x08;
delay(1);
P2=0x00;
}
if(P3==0xdf)
{
delay(1);
while(P3==0xdf);
minute--;
if(minute==-1)
minute=59;
showtime(minute);
P0=shows1[tens];
P2=0x04;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x08;
delay(1);
P2=0x00;
}
if(P3==0x7f)
{
delay(1);
while(P3==0x7f);
temp++;
}
}
void keyscan1()
{
while(temp<=2)
{
if(P3==0x7f)
{
delay(1);
while(P3==0x7f);
temp++;
}
TR0=0;
showtime(second);
P0=shows1[tens];
P2=0x10;
delay(1);
P2=0x00;
P0=shows1[units];
P2=0x20;
delay(1);
P2=0x00;
showtime(minute);
P0=shows1[tens];
P2=0x04;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x08;
delay(1);
P2=0x00;
showtime(hour);
P0=shows1[tens];
P2=0x01;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x02;
delay(1);
P2=0x00;
if(temp==1)
debughour();
if(temp==2)
debugminute();
if(temp==3)
{
TR0=1;
temp=0;
break;
}
}
}
void keyscan2()
{
while(temp<=1)
{
if(P3==0xef)
{
delay(1);
while(P3==0xef);
temp++;
}
if(num==18)
{
num=0;
P1=~P1;
second1++;
if(second1==60)
{
second1=0;
minute1++;
if(minute1==60)
{
minute1=0;
hour1++;
if(hour1==100)
hour1=0;
}
}
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
showtime(second1);
P0=shows1[tens];
P2=0x10;
delay(1);
P2=0x00;
P0=shows1[units];
P2=0x20;
delay(1);
P2=0x00;
showtime(minute1);
P0=shows1[tens];
P2=0x04;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x08;
delay(1);
P2=0x00;
showtime(hour1);
P0=shows1[tens];
P2=0x01;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x02;
delay(1);
P2=0x00;
if(temp==2)
{
temp=0;
hour1=0;
minute1=0;
second1=0;
break;
}
}
}
void runtime()
{
if(num==18)
{
num=0;
P1=~P1;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P3=0xff;
temp=0;
hour=3;
minute=58;
while(1)
{
runtime();
showtime(second);
P0=shows1[tens];
P2=0x10;
delay(1);
P2=0x00;
P0=shows1[units];
P2=0x20;
delay(1);
P2=0x00;
showtime(minute);
P0=shows1[tens];
P2=0x04;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x08;
delay(1);
P2=0x00;
showtime(hour);
P0=shows1[tens];
P2=0x01;
delay(1);
P2=0x00;
P0=shows2[units];
P2=0x02;
delay(1);
P2=0x00;
if(P3==0x7f)
keyscan1();
if(P3==0xef)
keyscan2();
}
}
void timer0() interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
作者: hanguijia 時(shí)間: 2013-10-5 22:34
#include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[]=" 2013-09-23 MON"; //設(shè)定開(kāi)始顯示的時(shí)間 uchar code table1[]=" 00:00:01"; uchar code table2[7][3]= {{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}}; //定義二維字符數(shù)組 sbit wr=P1^1; // 1602液晶的讀/寫(xiě)端 sbit lcden=P1^2; // 1602液晶使能端 sbit lcdrs=P1^0; // 1602液晶命令/數(shù)據(jù)端 sbit key1=P3^2; // 聲明s1按鍵時(shí)間調(diào)整 sbit key2=P3^3; // 聲明s2按鍵+1 sbit key3=P3^4; // 聲明s3按鍵-1 sbit key4=P3^5; // 聲明s4按鍵鬧鐘調(diào)整 sbit beep=P1^4; // 聲明蜂鳴器 uchar num1,shi=00,fen=00,miao=01,yue=9,ri=23,shi1,fen1,miao1,keynum1,week; //定義時(shí)分秒變量 uint nian=2013; //定義年變量 void delayms(uint x) { uint i,j; for(i=x;i>0;i--) //定義帶參數(shù)延時(shí)函數(shù) for(j=110;j>0;j--); } void write_com(uchar com) //1602液晶寫(xiě)指令函數(shù) { wr=0; lcdrs=0; P0=com; delayms(1); lcden=1; delayms(1); lcden=0; } void write_date(uchar date) //1602液晶寫(xiě)數(shù)據(jù)函數(shù) { wr=0; lcdrs=1; P0=date; delayms(1); lcden=1; delayms(1); lcden=0; } void write_addate1(uchar add,uint date) //定義顯示年的函數(shù) { uint qian; uchar bai,shi,ge; qian=date/1000; bai=date%1000/100; shi=date%1000%100/10; ge=date%10; write_com(add+0x80); write_date(0x30+qian); write_date(0x30+bai); write_date(0x30+shi); write_date(0x30+ge); } void write_addate2(uchar add,uchar date) //定義顯示月、日、時(shí)、分、秒函數(shù) { uchar shi,ge; shi=date/10; ge=date%10; write_com(add+0x80); write_date(0x30+shi); write_date(0x30+ge); } void write_rq(uchar i) //定義顯示星期的函數(shù) { uchar x; for(x=0;x<3;x++) { write_date(table2[i][x]); delayms(1); } } void init () //定義初始化函數(shù) { TMOD=0x01; // 定時(shí)器0工作方式為11.0592M晶振 16位 TH0=(65536-45566)/256; // 裝初值 TL0=(65536-45566)%256; EA=1; // 開(kāi)總中斷 ET0=1; // 開(kāi)定時(shí)器0中斷 write_com(0x38); // 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)口 write_com(0x06); // 寫(xiě)一個(gè)字符后地址指針加1 write_com(0x0c); // 設(shè)置開(kāi)顯示,不顯示光標(biāo) write_com(0x01); // 顯示清0,數(shù)據(jù)清0 write_com(0x80); // 使指針指向第1行第1列 } void keyscan() // 定義按鍵函數(shù) { uchar keynum; if(key1==0) //s1按鍵被按下 { delayms(3); //去抖延時(shí) if(key1==0) //確認(rèn)s4按鍵被按下,進(jìn)入調(diào)時(shí)間模式 { keynum++; while(!key1); //松手檢測(cè) } if(keynum==1) //s1按下一次 { TR0=0; //關(guān)閉定時(shí)器0 write_com(0x81); //指針指向第1行2列 write_com(0x0f); //開(kāi)啟光標(biāo)顯示,光標(biāo)閃爍 } if(keynum==2) { write_com(0x86); //光標(biāo)跳到月份 } if(keynum==3) { write_com(0x89); //光標(biāo)跳到日 } if(keynum==4) { write_com(0x8c); //光標(biāo)跳到星期 } if(keynum==5) { write_com(0xc4); //光標(biāo)跳到時(shí) } if(keynum==6) { write_com(0xc7); //光標(biāo)跳到分 } if(keynum==7) { write_com(0xca); //光標(biāo)跳到秒 } if(keynum==8) { keynum=0; //退出調(diào)時(shí)間模式 TR0=1; //開(kāi)啟定時(shí)器0 write_com(0x0c); //關(guān)閉光標(biāo)顯示 } } if(keynum) //當(dāng)進(jìn)入調(diào)時(shí)間模式時(shí) { if(key2==0) //s2按鍵按下 { delayms(3); //去抖延時(shí) if(key2==0) { if(keynum==1) { nian++; //s2每按下一次年份加1 if(nian==10000) // 加滿清0 nian=0; write_addate1(1,nian); // 顯示年份 write_com(0x81); //寫(xiě)完數(shù)據(jù)指針指向年份原來(lái)位置 } if(keynum==2) { yue++; //s2每按下一次月份加1 if(yue==13) yue=0; //加滿清0 write_addate2(6,yue); //顯示月份 write_com(0x86); //寫(xiě)完數(shù)據(jù)指針指向月份原來(lái)位置 } if(keynum==3) { ri++; if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) //1,3,5,7,8,10,12月有31天 if(ri==32) //加滿還原 ri=1; if(yue==4||yue==6||yue==9||yue==11) //4,6,9,11月有30天 if(ri==31) ri=1; if(yue==2&&((nian%4==0&&nian%100!=0)||nian%400==0)) //閏年2月有30天 if(ri==30) ri=1; if(yue==2&&(nian%4!=0)||(nian%100==0&&nian%400!=0)) //非閏年2月有31天 if(ri==29) ri=1; write_addate2(9,ri); //顯示日 write_com(0x89); //寫(xiě)完數(shù)據(jù)指針指向日原來(lái)位置 } if(keynum==4) { week++; //s2每按下一次星期加1 if(week==7) //加滿還原 week=0; write_rq(week); //顯示星期 write_com(0x8c); //寫(xiě)完數(shù)據(jù)指針指向星期原來(lái)位置 } if(keynum==5) { shi++; //s2每按下一次時(shí)加1 if(shi==24) shi=0; //加滿還原 write_addate2(0x44,shi); //顯示時(shí) write_com(0xc4); //寫(xiě)完數(shù)據(jù)指針指向時(shí)原來(lái)位置 } if(keynum==6) { fen++; //s2每按下一次分加1 if(fen==60) fen=0; //加滿還原 write_addate2(0x47,fen); //顯示分 write_com(0xc7); //寫(xiě)完數(shù)據(jù)指針指向分原來(lái)位置 } if(keynum==7) { miao++; //s2每按下一次秒加1 if(miao==60) miao=0; //加滿還原 write_addate2(0x4a,miao); //顯示秒 write_com(0xca); //寫(xiě)完數(shù)據(jù)指針指向秒原來(lái)位置 } while(!key2); //松手檢測(cè) } } if(key3==0) { delayms(3); if(key3==0) { //s3按下時(shí)減1 if(keynum==1) { nian--; if(nian==-1) nian=9999; write_addate1(1,nian); write_com(0x81); } if(keynum==2) { yue--; if(yue==-1) yue=12; write_addate2(6,yue); write_com(0x86); } if(keynum==3) { ri--; if(ri==0) { if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) ri=31; if(yue==4||yue==6||yue==9||yue==11) ri=30; if(yue==2&&((nian%4==0&&nian%100!=0)||nian%400==0)) ri=29; if(yue==2&&(nian%4!=0)||(nian%100==0&&nian%400!=0)) ri=28; } write_addate2(9,ri); write_com(0x89); } if(keynum==4) { week--; if(week==-1) week=6; write_rq(week); write_com(0x8c); } if(keynum==5) { shi--; if(shi==-1) shi=23; write_addate2(0x44,shi); write_com(0xc4); } if(keynum==6) { fen--; if(fen==-1) fen=59; write_addate2(0x47,fen); write_com(0xc7); } if(keynum==7) { miao--; if(miao==-1) miao=59; write_addate2(0x4a,miao); write_com(0xca); } while(!key3); //松手檢測(cè) } } } if(key4==0) //s4被按下進(jìn)入調(diào)鬧鐘模式 { delayms(3); if(key4==0) { keynum1++; while(!key4); } if(keynum1==1) { write_com(0x01); //清屏,指針清0 write_com(0xc6); //在時(shí)分之間顯示“:” write_date(':'); write_com(0xc9); //在分秒之間顯示“:” write_date(':'); write_com(0x0f); //開(kāi)啟光標(biāo) write_com(0xc4); //光標(biāo)指向時(shí) } if(keynum1==2) { write_com(0xc7); //光標(biāo)指向分 } if(keynum1==3) { write_com(0xca); //光標(biāo)指向秒 } if(keynum1==4) { keynum1=0; write_com(0x0c); //關(guān)閉光標(biāo) } } if(keynum1) { if(key2==0) //s2按下加1 { delayms(3); if(key2==0) { if(keynum1==1) { shi1++; if(shi1==24) shi1=0; write_addate2(0x44,shi1); write_com(0xc4); } if(keynum1==2) { fen1++; if(fen1==60) fen1=0; write_addate2(0x47,fen1); write_com(0xc7); } if(keynum1==3) { miao1++; if(miao1==60) miao1=0; write_addate2(0x4a,miao1); write_com(0xca); } while(!key2); } } if(key3==0) //s3每按一次減1 { delayms(3); if(key3==0) { if(keynum1==1) { shi1--; if(shi1==-1) shi1=23; write_addate2(0x44,shi1); write_com(0xc4); } if(keynum1==2) { fen1--; if(fen1==-1) fen1=59; write_addate2(0x47,fen1); write_com(0xc7); } if(keynum1==3) { miao1--; if(miao1==-1) miao1=59; write_addate2(0x4a,miao1); write_com(0xca); } while(!key3); //松手檢測(cè) } } } } void main() { uchar num; init(); for(num=0;num<15;num++) { write_date(table[num]); delayms(5); } //顯示初始時(shí)間 write_com(0xc0); for(num=0;num<12;num++) { write_date(table1[num]); delayms(5); } TR0=1; //開(kāi)啟定時(shí)器0 while(1) { if(shi==shi1&&fen==fen1&&miao==miao1) //鬧鐘到了蜂鳴器響 beep=0; if(shi==shi1&&fen==fen1&&miao==miao1+30) //鬧鐘到了蜂鳴器響 beep=1; keyscan(); //掃描鍵盤(pán) } } void time() interrupt 1 //中斷函數(shù) { TH0=(65536-45566)/256; TL0=(65536-45566)%256; //進(jìn)入中斷裝初值 num1++; if(num1==20) //一秒到了 { num1=0; //清0 miao++; if(miao==60) //一分到了 { miao=0; fen++; } if(!keynum1) write_addate2(0x4a,miao); //當(dāng)調(diào)鬧鐘模式按下時(shí)不顯示當(dāng)前時(shí)間 if(fen==60) { fen=0; shi++; } if(!keynum1) write_addate2(0x47,fen); //當(dāng)調(diào)鬧鐘模式按下時(shí)不顯示當(dāng)前時(shí)間 if(shi==24) { shi=0; ri++; week++; } if(!keynum1) write_addate2(0x44,shi); //當(dāng)調(diào)鬧鐘模式按下時(shí)不顯示當(dāng)前時(shí)間 if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12) if(ri==32) { ri=1; yue++; } if(yue==4||yue==6||yue==9||yue==11) if(ri==31) { ri=1; yue++; } if(yue==2&&((nian%4==0&&nian%100!=0)||nian%400==0)) if(ri==30) { ri=1; yue++; } if(yue==2&&(nian%4!=0)||(nian%100==0&&nian%400!=0)) if(ri==29) { ri=1; yue++; } if(!keynum1) write_addate2(9,ri); //當(dāng)調(diào)鬧鐘模式按下時(shí)不顯示當(dāng)前時(shí)間 if(week==7) week=0; if(!keynum1) //當(dāng)調(diào)鬧鐘模式按下時(shí)不顯示當(dāng)前時(shí)間 { write_com(0x8c); write_rq(week); } if(yue==13) { yue=0; nian++; } if(!keynum1) //當(dāng)調(diào)鬧鐘模式按下時(shí)不顯示當(dāng)前時(shí)間 { write_addate2(6,yue); write_com(0x88); write_date('-'); } if(nian==10000) nian=0; if(!keynum1) { write_addate1(1,nian); //當(dāng)調(diào)鬧鐘模式按下時(shí)不顯示當(dāng)前時(shí)間 write_com(0x85); write_date('-'); } } }
作者: 13620819446 時(shí)間: 2013-10-13 23:47
支持支持!!
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
91精品国产91久久久久久最新
|
精区3d动漫一品二品精区
|
亚洲九九
|
欧美综合一区
|
精品无码久久久久久国产
|
中文字幕av第一页
|
久久黄色精品视频
|
午夜影院操
|
嫩呦国产一区二区三区av
|
亚洲欧美中文日韩在线v日本
|
一区二区在线不卡
|
国产传媒视频在线观看
|
欧美a区
|
欧美性区
|
亚洲高清在线
|
国产精品99久久久久久www
|
91精品国产91久久久久久吃药
|
亚洲欧美国产精品久久
|
一区二区三区四区免费视频
|
久久在线
|
午夜成人免费视频
|
国产成人免费观看
|
做a视频
|
国产精品久久久久永久免费观看
|
九九九久久国产免费
|
久久一二
|
黄色成人免费在线观看
|
黄色在线网站
|
欧美做暖暖视频
|
天天躁日日躁狠狠躁白人
|
www..99re
|
国产美女视频一区
|
日日草夜夜草
|
国产真实精品久久二三区
|
久久精品二区
|
亚洲3p
|
一区二区久久精品
|
国产电影精品久久
|
av网站在线免费观看
|
日韩欧美在线观看视频
|
日韩高清国产一区在线
|