![89C51單片機(jī)最小系統(tǒng)設(shè)計(jì)電子時(shí)鐘秒表按鍵計(jì)數(shù)的單片機(jī)設(shè)計(jì)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/3418a7af-ad19-4a89-9ddf-b390b852912a/3418a7af-ad19-4a89-9ddf-b390b852912a1.gif)
![89C51單片機(jī)最小系統(tǒng)設(shè)計(jì)電子時(shí)鐘秒表按鍵計(jì)數(shù)的單片機(jī)設(shè)計(jì)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/3418a7af-ad19-4a89-9ddf-b390b852912a/3418a7af-ad19-4a89-9ddf-b390b852912a2.gif)
![89C51單片機(jī)最小系統(tǒng)設(shè)計(jì)電子時(shí)鐘秒表按鍵計(jì)數(shù)的單片機(jī)設(shè)計(jì)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/3418a7af-ad19-4a89-9ddf-b390b852912a/3418a7af-ad19-4a89-9ddf-b390b852912a3.gif)
![89C51單片機(jī)最小系統(tǒng)設(shè)計(jì)電子時(shí)鐘秒表按鍵計(jì)數(shù)的單片機(jī)設(shè)計(jì)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/3418a7af-ad19-4a89-9ddf-b390b852912a/3418a7af-ad19-4a89-9ddf-b390b852912a4.gif)
![89C51單片機(jī)最小系統(tǒng)設(shè)計(jì)電子時(shí)鐘秒表按鍵計(jì)數(shù)的單片機(jī)設(shè)計(jì)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/3418a7af-ad19-4a89-9ddf-b390b852912a/3418a7af-ad19-4a89-9ddf-b390b852912a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一、 電子時(shí)鐘、秒表和計(jì)數(shù)器的設(shè)計(jì)1、 實(shí)現(xiàn)的功能:1)有key0,key1兩個(gè)功能按鍵,復(fù)位后,數(shù)碼管會(huì)默認(rèn)顯示時(shí)鐘模式 hh.mm 。 (hh表示小時(shí),mm表示分鐘),key0短按一次就進(jìn)入到了秒表模式,數(shù)碼管顯示格式s.ss.s,(分別表示百秒,秒,毫秒)key0再短按一次就進(jìn)入到了計(jì)數(shù)器模式,數(shù)碼管顯示格式cccc(分別為千位百位十位個(gè)位)。key0再短按一次,又進(jìn)入到了時(shí)鐘顯示模式,就這樣由key0控制模式的轉(zhuǎn)換。 2)有rst復(fù)位鍵,本身電路設(shè)計(jì)有上電自動(dòng)復(fù)位功能,按下rst后,電路復(fù)位。 3)有ckey0,ckey1 兩個(gè)計(jì)數(shù)按鍵,按下ckey0,計(jì)數(shù)加一,按下ckey1,計(jì)數(shù)減
2、一。 4) 電子時(shí)鐘和秒表時(shí)間計(jì)時(shí)方法是采用89s52內(nèi)部計(jì)時(shí)器0的一種工作方式(詳見后面的代碼分析),通過計(jì)時(shí)器0中斷來控制時(shí)間的運(yùn)行。 5)計(jì)數(shù)器是采用外部中斷0和外部中斷1這兩個(gè)外部中斷實(shí)現(xiàn)加1和減1的操作。(1) 電子時(shí)鐘模式:(以下“長按”表示按下按鍵的時(shí)間大于1秒,“短按”表示按下的時(shí)間小于0.7 秒)1)長按key1一次,會(huì)進(jìn)入到調(diào)整分鐘的模式,短按key1一次,分鐘會(huì)加一。第二次長按key1,會(huì)進(jìn)入到調(diào)整小時(shí)的模式,短按key1一次,小時(shí)加一。 第三次長按key1,重新回到時(shí)鐘顯示模式,這時(shí)再短按key1,時(shí)間不會(huì)變化2)長按key0一次,會(huì)進(jìn)入到顯示秒的模式(2) 秒表模式:
3、1) 由key0控制進(jìn)入秒表模式后,短按key1一次,秒表計(jì)時(shí)開始,再短按key1一次計(jì)時(shí)結(jié)束2) 長按key1一次,秒表清零(3) 計(jì)數(shù)器模式1) 按ckey0一下,計(jì)數(shù)加一,數(shù)碼管相應(yīng)的顯示的數(shù)值加一, 按ckey1一下,計(jì)數(shù)減一,數(shù)碼管相應(yīng)的顯示的數(shù)值減一,由于數(shù)碼管的位數(shù)限制,最大只能顯示到9999,此時(shí)按下ckey0無反應(yīng);考慮到實(shí)際計(jì)數(shù)功能,沒有設(shè)置負(fù)數(shù),所以最小顯示0000,這時(shí)按下ckey1 ,無反應(yīng)。2) 長按key1一次計(jì)數(shù)器清零。2、 電路原理圖 (1) 使用片內(nèi)振蕩器 (2) 具有上電復(fù)位和手動(dòng)復(fù)位兩個(gè)功能(3) key0,key1分別接p1.0和p1.1引腳(4) 由
4、p0.0p0.7輸出到七段數(shù)碼顯示管(5) 由p2.0p2.3接三極管,驅(qū)動(dòng)共陽七段數(shù)碼顯示管 (6) ckey0,ckey1接p3.2和p3.3兩個(gè)引腳,為兩個(gè)外部中斷 4電路焊接實(shí)物圖(1)正面 (2)反面:由于顯影、腐蝕過程做得不好,導(dǎo)致電路板過度腐蝕,但是經(jīng)過修改之后,電路可以正常運(yùn)行,并無大礙,只是不美觀。(4) 電路板工作時(shí)。此時(shí)為顯示時(shí)鐘的秒 顯示時(shí)鐘顯示秒表顯示計(jì)數(shù)器5、程序設(shè)計(jì)分析(1)程序代碼#includesbit key0=p10; sbit key1=p11; /定義key0,key1接口unsigned char flag,con,mcount; /flag為計(jì)數(shù)到
5、一秒時(shí)給時(shí)鐘發(fā)的信號(hào)unsigned char count = 0; unsigned char seccount =0; /作為時(shí)鐘的秒的計(jì)量單位unsigned char hour = 0; /時(shí)鐘的時(shí)unsigned char min = 0; /時(shí)鐘的分unsigned char sec = 0; /時(shí)鐘的秒unsigned char keypress0,keypress1,mode,ms,s,ss,start;unsigned char displaynum=0x14,0xd7,0x4c,0x45,0x87,0x25,0x24,0x57,0x04,0x05, 0x10,0xd3,0x
6、48,0x41,0x83,0x21,0x20,0x53,0x00,0x01,0xff,0xfb; /數(shù)碼管十六進(jìn)制譯碼表 unsigned char controlnum=0x08,0x04,0x02,0x01; /控制四個(gè)數(shù)碼管顯示 unsigned char displaybuff=0x00, 0x00, 0x00, 0x00; /每個(gè)數(shù)碼管的值 void display_state(); /數(shù)碼管顯示子程序void keyscan(); /鍵盤掃描子程序void timer(); /秒表子程序unsigned char count1,flag1,t_adjust=0,tm_adjust=
7、0;unsigned charbkey0pressed = 0, bkey1pressed = 0;unsigned char ucstatus = 0;void main() tmod = 0x01; /定時(shí)器0工作在模式1,gate=0,c/t=0,16位模 th0= (216-5000)/256;/定時(shí)器0 預(yù)存值, tl0= (216-5000)%256; tr0= 1; /定時(shí)器0 啟動(dòng) et0= 1; /定時(shí)器中斷0 允許 ea= 1; /開中斷 it0=1; /外部中斷0下降沿觸發(fā) it1=1; /外部中斷1 下降沿觸發(fā) ex0=1; /外部中斷0允許 ex1=1; /外部中斷1
8、允許 px1=1; /外部中斷1 為高優(yōu)先級中斷 while(1) /死循環(huán), if(flag = 1) /時(shí)鐘顯示 flag = 0; sec+; if(sec =60) sec = 0; min+; if(min =60) min = 0; hour +; if(hour = 24) hour = 0; display_state(); keyscan(); timer(); /isr中斷服務(wù)程序,每5ms產(chǎn)生一個(gè)定時(shí)器0 中斷void display() interrupt 1 th0 = (216-5000)/256; tl0 = (216-5000)%256; seccount +;
9、 mcount +; keypress0+; keypress1+; p2=0x00; /p2口先清零 p0 = displaynumdisplaybuffcount; /p0口輸出 p2 = controlnumcount; /p2口輸出 count+; if(count=4) count=0; if(seccount = 200) /200*5ms=1s seccount =0; flag =1; /每過1秒給時(shí)鐘信號(hào)加一秒 /void display_state() if(mode = 0) /時(shí)鐘模式,顯示時(shí)間 displaybuff0 = hour/10; displaybuff1
10、= (hour%10)+10; /“+10”是為了顯示加點(diǎn)的數(shù)字 displaybuff2 = min/10; displaybuff3 = min%10; if(mode = 1) /秒表模式,顯示秒表 displaybuff0 = ss +10; /“+10”是為了顯示加點(diǎn)的數(shù)字 displaybuff1 = s/10; displaybuff2 = (s%10)+10; displaybuff3 = ms; if(mode = 2) / 計(jì)數(shù)器模式,顯示計(jì)數(shù) displaybuff0 = count1/1000; /千位 displaybuff1 = (count1-(count1/10
11、00)*1000)/100; /百位 displaybuff2 = (count1-(count1/100)*100)/10; /十位 displaybuff3 = count1%10; /個(gè)位 if(mode=3) /顯示時(shí)鐘的秒, displaybuff0 = 20; /第一位不顯示 displaybuff1 = 21; /第二位顯示一個(gè)點(diǎn) displaybuff2 = sec/10;/顯示秒的十位 displaybuff3 = sec%10;/顯示秒的個(gè)位 /*/ /鍵盤掃描子程序/*/void keyscan() if(!key0 & bkey0pressed = 0) /檢測到key
12、0按下 keypress0 = 0; bkey0pressed = 1; /防止重入此判斷 while(!key0); /如果沒放開,就等下去 if(key0 & bkey0pressed = 1) /檢測到key0放開 bkey0pressed = 0; /防止重入此判斷 if (keypress0200) /如果是長按 mode=3; /顯示時(shí)鐘的秒的模式 / if(mode = 0) /進(jìn)入時(shí)鐘模式后 if(!key1 & (bkey1pressed = 0) keypress1 = 0; bkey1pressed = 1; while(!key1); if(key1 & (bkey1p
13、ressed = 1) bkey1pressed = 0; if(keypress1 = 200) /如果是長按 t_adjust+;if(t_adjust=3) t_adjust=0; else if(keypress1 120) 如果是短按 switch (t_adjust) case 1: /調(diào)整分 min+; sec = 0; if(min = 60) min = 0; break; case 2: /調(diào)整時(shí) hour + ; sec = 0; if(hour = 24) hour = 0; break; default:break; else if(mode = 1) /進(jìn)入秒表模式
14、 if(!key1 & bkey1pressed = 0) keypress1 = 0; bkey1pressed = 1; while(!key1); if(key1 & bkey1pressed = 1) bkey1pressed = 0; if(keypress1 200) /長按 start=1; /秒表清零 void timer() /秒表子程序 if(mode=1) /進(jìn)入秒表模式才執(zhí)行 if(start=1) /清零 ms = 0; s = 0; ss = 0; mcount=0; if(start=2) /秒表開始計(jì)時(shí) if(mcount=20) /20*5ms=0.1s mcount=0; ms+; if(ms = 10) / 10*0.1s=1s,s+ ms = 0; s +; if(s = 100) /100s s = 0; ss +; if(ss = 10) ss = 0; s = 0; ms = 0; if(start=0);/秒表停止/ void it0(void) interr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學(xué)七年級下冊知識(shí)點(diǎn)
- 粵教版地理八年級下冊第六章第4節(jié)《西部地區(qū)》聽課評課記錄4
- 湘教版數(shù)學(xué)八年級下冊1.2《直角三角形的性質(zhì)和判定(II)》聽評課記錄
- 小學(xué)二年級數(shù)學(xué)100道口算題
- 湘教版數(shù)學(xué)七年級下冊2.2.2《完全平方公式》聽評課記錄1
- 人教版數(shù)學(xué)七年級下冊聽評課記錄9.1.1《 不等式及其解集》
- 2025年水利管理及技術(shù)咨詢服務(wù)項(xiàng)目合作計(jì)劃書
- 合伙開餐飲餐館項(xiàng)目協(xié)議書范本
- 融資咨詢代理協(xié)議書范本
- 網(wǎng)絡(luò)設(shè)備租賃合同范本
- htcc制備工藝書籍
- 中國電信互聯(lián)網(wǎng)+酒店解決方案
- 小學(xué)數(shù)學(xué)人教版六年級上冊分?jǐn)?shù)混合運(yùn)算練習(xí)題
- 調(diào)車作業(yè)-調(diào)車概述(鐵路行車組織)
- 酒店員工招聘與面試技巧培訓(xùn)課件
- 技術(shù)服務(wù)合同-英文版模板
- 公眾聚集場所消防技術(shù)標(biāo)準(zhǔn)要點(diǎn)
- 人教部編版三年級上冊語文【選擇題】專項(xiàng)復(fù)習(xí)訓(xùn)練練習(xí)100題
- DB64-T 1933-2023 園林樹種引種馴化技術(shù)規(guī)程
- 路損案件現(xiàn)場勘查-路損案件現(xiàn)場拍照取證(路政管理課件)
- 幼兒園員工手冊與規(guī)章制度
評論
0/150
提交評論