非常詳細(xì) 單片機(jī) 數(shù)碼管LED 顯示電子鐘_第1頁
非常詳細(xì) 單片機(jī) 數(shù)碼管LED 顯示電子鐘_第2頁
非常詳細(xì) 單片機(jī) 數(shù)碼管LED 顯示電子鐘_第3頁
非常詳細(xì) 單片機(jī) 數(shù)碼管LED 顯示電子鐘_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、單片機(jī) 數(shù)碼管LED 顯示電子鐘(C語言)轉(zhuǎn)載收藏人:shengshiguanjia2010-11-24 | 閱:862 轉(zhuǎn):50 | 來源| 分享單片機(jī) 數(shù)碼管LED 顯示電子鐘(C語言)轉(zhuǎn)載2010-10-22 01:32 /* * 標(biāo)題: 數(shù)碼管顯示電子鐘(C語言) * 作者: wentao * 軟件: Keil C51 V8.02 * 芯片: AT89X51 * 說明: 實驗板實測通過,數(shù)碼管為8位共陽 * 聲明: 自用存檔!另僅供需要的朋友參考,請勿用做不道德轉(zhuǎn)載及商業(yè) * #include <reg51.h> #include <intrins.h> #de

2、fine uchar unsigned char void delay_ms(uchar ms); / 延時毫秒12M,ms最大值255 void key_scan(); / 按鍵掃描 void key_to(); / 按鍵處理 uchar code dis_code11 = 0xc0,0xf9,0xa4,0xb0,0x99, /段 / 0 1 2 3 4 0x92,0x82,0xf8,0x80,0x90,0xbf; / 5 6 7 8 9 - uchar data dis8; / dis0為秒個位值,dis1為秒十位值 / dis2,dis5為'-'段碼的偏移量 / dis3

3、為分個位值,dis4為分十位值 / dis6為時個位值,dis7為時十位值 uchar data sec = 0; / 秒計數(shù)器(00s-59s) uchar data min = 0; / 分計數(shù)器(00m-59m) uchar data hou = 0; / 時計數(shù)器)00h-23h) uchar data cou = 0; / 軟計數(shù)器,對10ms時基信號累加到1s uchar data dis_b; / dis_b為位碼選通數(shù)碼管 uchar data dis_r; / dis_r為取段碼時的偏移量 uchar data key_v = 0; / 存儲鍵值 uchar data key

4、_t = 0; / 按鍵掃描中臨時存儲鍵值 void main() P2 = 0xff; / 關(guān)所有數(shù)碼管 P1 = 0xff; / p1為準(zhǔn)雙向口,作輸入時先寫1 dis2 = 10; / '-'在段碼表中偏移量為10 dis5 = 10; / '-'在段碼表中偏移量為10 dis_b = 0x7f; / 初始選通P2.7口數(shù)碼管 dis_r = 0; / 初始化偏移量為0 TMOD = 0x11; / 定時/計數(shù)器0,1工作于方式1 TH0 = 0xd8; / 預(yù)置定時常數(shù)55536(d8f0),產(chǎn)生10ms時基信號 TL0 = 0xf0; TH1 = 0x

5、fc; / 預(yù)置定時常數(shù)64536(fc18),產(chǎn)生1ms間隔用于動態(tài)顯示 TH1 = 0x18; EA = 1; / 開總中斷 ET0 = 1; / 定時/計數(shù)器0允許中斷 ET1 = 1; / 定時/計數(shù)器1允許中斷 TR0 = 1; / 開閉定時/計數(shù)器0 TR1 = 1; / 啟動定時/計數(shù)器1 while(1) key_t = P1; / 讀入鍵值 if(key_t != key_v) / 鍵值改變 delay_ms(10); / 延時10ms消抖 key_t = P1; / 再次讀入鍵值 if(key_t != key_v) / 鍵值仍未改變則不是抖動 key_v = key_t;

6、 / 保存鍵值 key_to(); / 鍵處理 void key_to() / 按鍵處理子程序 if(key_v = 0xef) / P1.4口鍵值 if(min = 59) / 分計數(shù)已加到59 min = 0; / 清零之 else min+; / 否則加1 else if(key_v = 0xdf) if(hou = 23) hou = 0; else hou+; void tiem0(void) interrupt 1 cou+; if(cou = 100) cou = 0; sec+; if(sec = 60) sec = 0; min+; if(min = 60) min = 0;

7、 hou+; if(hou = 23) hou = 0; TH0 = 0xd8; TL0 = 0xf0; / P1.5口鍵值 / 時計數(shù)已加到23 / 清零之 / 否則加1 / T/C0中斷服務(wù)程序(產(chǎn)生10ms時基信號) / 軟計數(shù)器加1 / 計數(shù)值到100(1s) / 軟計數(shù)器清零/ 秒計數(shù)器加1(進(jìn)位10ms*100=1s) / 秒計數(shù)值到60 / 秒計數(shù)器清零/ 分計數(shù)器加1(進(jìn)位60s=1m) / 分計數(shù)到60 / 分計數(shù)器清零/ 時計數(shù)器加1(進(jìn)位60m=1h) / 時計數(shù)到23 / 時計數(shù)器清零 / 重置定時常數(shù) void time1(void) interrupt 3 / T/

8、C1中斷服務(wù)程序(延時1ms數(shù)碼管動態(tài)顯示) dis0 = sec % 10; / 秒計數(shù)器個位賦紿dis0 dis1 = sec / 10; / 秒計數(shù)器十位賦紿dis1 dis3 = min % 10; / 分計數(shù)器個位賦紿dis3 dis4 = min / 10; / 分計數(shù)器十位賦紿dis4 dis6 = hou % 10; / 時計數(shù)器個位賦紿dis6 dis7 = hou / 10; / 時計數(shù)器十位賦紿dis7 P0 = dis_codedisdis_r; / 段碼送P0口(dis0.dis7) P2 = dis_b; / 位碼送P2口 dis_r+; / 偏移量加1,下次中斷時顯示下個數(shù) dis_r &= 0x07; / dis_r增到8時自動清0(使之在0到7間循環(huán)) dis_b = _cror_(dis_b,1); / 位碼循環(huán)右移,下次中斷時選

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論