|
數(shù)字電子鐘,很基礎(chǔ)的,用得共陽數(shù)碼管顯示,四個按鍵,分別是開啟關(guān)閉鍵,調(diào)時調(diào)分調(diào)秒鍵。和大家一起學(xué)習(xí)。
0.png (58.7 KB, 下載次數(shù): 91)
下載附件
2016-11-12 19:22 上傳
完整的代碼下載:
Practice1--要求1.zip
(73.99 KB, 下載次數(shù): 34)
2016-11-11 19:17 上傳
點擊文件名下載附件
這是比較基本的電子鐘,用數(shù)碼管顯示 下載積分: 黑幣 -5
- /*******************************************************************
- 程 序 名:數(shù)字電子時鐘模塊化程序(緩沖數(shù)組)
- 編 寫 者:龍皓明
- 指導(dǎo)老師:王韌
- 時 間 :2016.8.12
- 功 能 :顯示時分秒,設(shè)有四個功能鍵:啟動/停止,調(diào)時,調(diào)分,調(diào)秒
-
- 使用說明:將單片機(jī)的P2口用排線連于J31即73ls573位選(P20對I11),P0口
- 連于J32即數(shù)碼管段選(P00對O11),P1口連接J16(P10--P7...S1--S7)
-
- ********************************************************************/
- #include <reg52.h>
- #include "delay.h" //延時頭文件
- #include "display.h" //顯示函數(shù)頭文件
- #include "set_find_code.h" //設(shè)置緩沖數(shù)組文件
- #include "key.h" //鍵掃描函數(shù)文件
- uchar find_code[8];
- bit sign=0;
- uchar i,hour,minute,second,keyzhi,c=0;
- /*****************主函數(shù)****************/
- void main()
- { hour=8; //設(shè)置小時初始值
- minute=30; //設(shè)置分鐘初始值
- second=0; //設(shè)置秒鐘初始值
- TMOD=0x01; //設(shè)置定時器0為工作方式1
- TH0=(65536-50000)/256; //定時50ms高8位求模
- TL0=(65536-50000)%256; //定時50ms低8位求模
- EA=1; //開總中斷
- ET0=1; //開定時器0中斷
- //TR0=1;
- set_find_code(12,12,12,12,12,12,12,10);//顯示系統(tǒng)提示符“P.”
- while(1)
- {
- display(find_code);
- keyzhi=key_scan(); //鍵掃函數(shù),提取返回值(即鍵值)
- if(keyzhi==0x01)
- {
- sign=~sign; //取反,判定開啟/暫停
- if(sign==1) //判定開啟電子鐘
- {
- TR0=1; //開啟定時器0,電子鐘運(yùn)行
- display(find_code); //電子鐘顯示
- }
- if(sign==0) //判定暫停電子鐘,進(jìn)入調(diào)節(jié)模式
- {
- TR0=0; //關(guān)閉定時器0,電子鐘停止運(yùn)行
- keyzhi=key_scan();
- while(keyzhi!=0x01) //如果開啟/暫停鍵沒有按下
- {
- keyzhi=key_scan();//讀取鍵值
- switch(keyzhi) //進(jìn)入調(diào)時/分/秒模式
- {
- case 0x02: hour++;if(hour==24) //調(diào)時鍵按下并釋放后時鐘+1
- {
- hour=0; //調(diào)到24時時清零
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- break;
- case 0x04: minute++;if(minute==60)//調(diào)分鍵按下并釋放后分鐘+1
- {
- minute=0; //調(diào)到60分時清零
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- break;
- case 0x08: second++;if(second==60)//調(diào)秒鍵按下并釋放后秒鐘+1
- {
- second=0; //秒調(diào)到60時清零
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- break;
- default : display(find_code);break; //穩(wěn)定顯示所有數(shù)據(jù)
- }
- }
- }
- }
- }
- }
- void timer0() interrupt 1 //定時器0中斷入口
- {
- TH0=(65536-50000)/256; //定時器重賦初值
- TL0=(65536-50000)%256;
- c++; //中斷次數(shù)
- if(c==20)
- {
- c=0;
- second++;
- if(second==60) //計時一分鐘后清零
- {
- second=0;
- minute++; //秒鐘每計時一分鐘,分鐘自+1
- if(minute==60) //計時一小時后清零
- {
- minute=0;
- hour++; //分鐘每計時一小時,時鐘自+1
- if(hour==24) //24小時倒計時到
- {
- hour=0; //清零
- }
- }
- }
- }
- set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
- } //送顯示數(shù)據(jù)
復(fù)制代碼
|
|