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