國慶八天假我也沒閑著,用這幾天時間仿真出來一個可以調時間的電子時鐘。下面是仿真圖片。
下面是核心的單片機編程: #include<reg51.h> #define ulong unsigned long #define uint unsigned int sbit duan=P2^0; sbit wei=P2^1; sbit led=P2^2; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; sbit key5=P1^4; uint code shuju1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint code shuju2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//為讓小數點點亮,另建一個數組 void delayms(uint); void keyscan(); void Play(uint t); void display(uint,uint,uint,uint,uint,uint); ulong num; uint i,j,num1,shi,fen,miao,sw,w,q,b,s,g,h,f,m; void main() { TMOD=0x10; TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1; ET1=1; TR1=1; while(1) { keyscan(); display(sw,w,q,b,s,g); } } void display(uint sw,uint w,uint q,uint b,uint s,uint g) { duan=1; //打開 段 鎖存端 P3=shuju1[g]; //傳入數據 duan=0; //關閉 段 鎖存端 P3=0xff; //清影 wei=1; //打開 位 鎖存端 P0=0x01; //傳入位選數據 wei=0; //關閉 位 鎖存端 delayms(5); //延時 duan=1; //打開 段 鎖存端 P3=shuju1[s]; //傳入數據 duan=0; //關閉 段 鎖存端 P3=0xff; //清影 wei=1; //打開 位 鎖存端 P0=0x02; //傳入位選數據 wei=0; //關閉 位 鎖存端 delayms(5); //延時 duan=1; //打開 段 鎖存端 P3=shuju2[b]; //傳入數據 duan=0; //關閉 段 鎖存端 P3=0xff; //清影 wei=1; //打開 位 鎖存端 P0=0x04; //傳入位選數據 wei=0; //關閉 位 鎖存端 delayms(5); //延時 duan=1; //打開 段 鎖存端 P3=shuju1[q]; //傳入數據 duan=0; //關閉 段 鎖存端 P3=0xff; //清影 wei=1; //打開 位 鎖存端 P0=0x08; //傳入位選數據 wei=0; //關閉 位 鎖存端 delayms(5); //延時 duan=1; //打開 段 鎖存端 P3=shuju2[w]; //傳入數據 duan=0; //關閉 段 鎖存端 P3=0xff; //清影 wei=1; //打開 位 鎖存端 P0=0x10; //傳入位選數據 wei=0; //關閉 位 鎖存端 delayms(5); //延時 duan=1; //打開 段 鎖存端 P3=shuju1[sw]; //傳入數據 duan=0; //關閉 段 鎖存端 P3=0xff; //清影 wei=1; //打開 位 鎖存端 P0=0x20; //傳入位選數據 wei=0; //關閉 位 鎖存端 delayms(5); //延時 } void delayms(uint xms) { for(i=xms;i>0;i--) for(j=110;j>0;j--); } void T1_time()interrupt 3 { TH1=(65536-45872)/256; TL1=(65536-45872)%256; num1++; if(num1==16) { num1=0; num++; if(num==86400) num=0; m=num%60; f=num%3600/60; h=num/3600; shi=num/3600; //拆分 sw=shi/10; w=shi%10; fen=num%3600/60; q=fen/10; b=fen%10; miao=num%60; s=miao/10; g=miao%10; } } void keyscan() { if(key1==0) { delayms(10); if(key1==0) { led=0; TR1=0; while(!key1); //等待按鍵釋 led=1; } } if(key2==0) { delayms(10); if(key2==0) { led=0; m++; if(m==60) m=0; s=m/10; g=m%10; while (!key2); led=1; } } if(key3==0) { delayms(10); if(key3==0) { led=0; f++; if(f==60) f=0; q=f/10; b=f%10; while (!key3); led=1; } } if(key4==0) { delayms(10); if(key4==0) { led=0; h++; if(h==12) h=0; sw=h/10; w=h%10; while (!key4); led=1; } } if(key5==0) { delayms(10); if(key5==0) { led=0; num=h*3600+f*60+m; TR1=1; while (!key5); led=1; } } } 程序代碼下載地址:http://www.zg4o1577.cn/f/fe788.rar 下面的是功能說明:
程序寫的有些不完美,按鍵按下數碼管會暗下,需要再修改下。等程序修改完美了,再到淘寶買齊原件就可以做出這個時鐘來。估計過年時我就能做出這個時鐘來,而且這個時鐘經過后期修改能有定時功能,時間到就驅動繼電器閉合從而控制220V家庭電路。再加上蜂鳴器就能有鬧鐘功能,總之后期不斷修改功能會不斷增加!