




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)實驗報告題 目: 數(shù)字時鐘的設(shè)計 指導(dǎo)老師: 班 級: 姓 名: 學(xué) 號: 數(shù)字鐘設(shè)計報告一、實驗?zāi)康耐ㄟ^實踐設(shè)計出能準(zhǔn)確顯示時、分、秒的時鐘,并可以調(diào)時、定時,包括蜂鳴器的整點報時與鬧鐘功能。二、實驗要求基本功能:準(zhǔn)確計時,以數(shù)字形式顯示時間,24時制;具備時、分調(diào)整和整點報時功能。擴(kuò)展功能:定時與鬧鐘功能三、設(shè)計方案及論證、硬件部分:1、時鐘顯示用七段LED數(shù)碼管來實現(xiàn),采用共陽管和PNP驅(qū)動方式。PNP工作于開關(guān)狀態(tài),基極通過1K的電阻連到單片機(jī)的P2口。為節(jié)省P口,將六位數(shù)碼管的8段段選端分別并接并加上470的限流電阻,由P0口控制,給低電平的段會被點亮。因為六位管的段被并接只能
2、通過動態(tài)掃描的方式來顯示,即利用管子的余暉和人眼的視覺殘留實現(xiàn)六位管子在“同一時間”顯示不同的值,而掃描這是靠位選的輪流有效實現(xiàn)。如左圖。2、整點報時和鬧鐘鈴此部分用一個5V有源蜂鳴器來做,同樣用PNP作為開關(guān)來控制,此外為防止其可能的方向電壓尖峰在蜂鳴器兩端反接一個IN4148二極管來保護(hù)。如右圖。3、校時、定時此部分由4個按鍵控制,如下圖,key1和key3用來選定要調(diào)校的時、分的位,被選中的為將閃爍;key2用來是選中的為按相應(yīng)的進(jìn)制增1變化;key4是進(jìn)入定時模式,定時的時數(shù)改變與調(diào)時方法相同。4、單片機(jī)最小系統(tǒng)本實驗采用STC89C52RC單片機(jī),指令系統(tǒng)完全與51兼容。其最小系統(tǒng)包
3、含電源電路、晶振電路、復(fù)位電路。本實驗才用STC單片機(jī)的典型系統(tǒng),各模塊參數(shù)配置如圖:其中晶振頻率為12MHz,震蕩部分電容為30pF的瓷片電容。復(fù)位電路采用圖示的兼有上電復(fù)位和按鍵復(fù)位功能的方式,其中的電容為10uF電解電容。5、硬件系統(tǒng)全電路圖、軟件部分軟件部分主要有兩大塊:一是上電后程序靠定時器T1產(chǎn)生的中斷而實現(xiàn)的常規(guī)時鐘顯示,這里面就是要處理時、分、秒的六位數(shù)字的循環(huán)和進(jìn)位問題。按照24時制的規(guī)則,其進(jìn)位邏輯為:秒的個位為十進(jìn)制(09)滿10向秒的十位進(jìn)1,而秒的十位為六進(jìn)制(05)滿6向分的個位進(jìn)1,分與秒相似,時的個位在時的十位為0、1的時候也是10進(jìn)制,而在時的十位為2的時候則
4、只是0到4就進(jìn)位了。但時的十位是3進(jìn)制的(02)。m0+;if(m0=10)m0=0;m1+;if(m1=6)m1=0;f0+;if(f0=10)f0=0;f1+;if(f1=6)f1=0;h0+;if(h0=10)h0=0;h1+;二是程序監(jiān)控4個按鍵的狀態(tài)并進(jìn)行相應(yīng)處理。本實驗中我們并未利用外中斷來監(jiān)控鍵盤,只是在主函數(shù)中用一個函數(shù)key_scan()來不停地掃4個鍵的狀態(tài)并進(jìn)行相應(yīng)處理,這一部分的程序中主要的問題是按鍵抖動的去除,試驗中,我們用的是軟件延時的辦法。四、心得體會通過本次課程設(shè)計,我學(xué)習(xí)到了很多,也收獲了很多??偨Y(jié)如下:1、 我對單片機(jī)的理論知識有了進(jìn)一步的掌握,對單片機(jī)的原
5、理和實際應(yīng)用有了更多地理解和掌握。2、 我對單片機(jī)的C語言編程有了更深刻的認(rèn)識和更扎實的掌握,我們不斷修改,不斷嘗試,對源代碼各個模塊的函數(shù)都有了一個非常深入的掌握。3、 理論與實踐相結(jié)合才能更好的理解和掌握所學(xué)的知識。五、附件(程序源代碼)#includesbit k1=P14;sbit k2=P15;sbit k3=P16;sbit k4=P17;sbit voice=P36;/蜂鳴器使能端unsigned char code duan=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/段的共陽編碼:0、1、2、3、4、5、6、
6、7、8、9、滅燈unsigned char code wei=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07;/共陽位選編碼:第0位、第1位、第2位、第3位、第4位、第5位、第6位、第7位unsigned char m0=0,m1=0,f0=0,f1=0,h0=0,h1=0,num=0,con=0;/正常時鐘模式unsigned char d_f0=0,d_f1=0,d_h0=0,d_h1=0,d_con=0;/定時模式相關(guān)變量unsigned shan=0;/閃爍函數(shù)中量、滅的次數(shù)的控制變量unsigned sound=0;/蜂鳴器叫與不叫的次數(shù)的控制變量bi
7、t xiang=0;/蜂鳴器使能變量bit dingshi=0;/定時模式的使能變量bit naozhong=0,only=0;/鬧鐘的止叫控制變量void init();/初始化定時器1void display();/正常時鐘顯示void d_display();/定時模式的顯示void delay_ms(unsigned);/非準(zhǔn)確延時void key_scan();/按鍵掃描、處理函數(shù)void shanshuo(unsigned char);/數(shù)碼管閃爍顯示void fengming(unsigned);/蜂鳴器叫/*main()void main()init();while(1)key
8、_scan();/整點報時if(m0=0&m1=0&f0=0&f1=0) xiang=1;if(m0=2&m1=0&f0=0&f1=0)voice=1;xiang=0;/ 蜂鳴器叫兩聲 /鬧鐘if(h1=d_h1&h0=d_h0&f1=d_f1&f0=d_f0&naozhong=0&only=1)naozhong=1;/預(yù)定時間到if(naozhong=1&(k1=0|k2=0|k3=0|k4=0)naozhong=0;only=0;voice=1;while(!k1);while(!k2);while(!k3);while(!k4);/禁止鬧鐘叫if(only=0&h1!=d_h1&h0!=
9、d_h0&f1!=d_f1&f0!=d_f0)only=1;/時刻喚醒鬧鐘、另外,在退出定時模式時也能喚醒鬧鐘/正常顯示if(dingshi=0)display();/鬧鐘定時模式if(dingshi=1)d_display();/*/*init()/*參數(shù):無返回值:無功能:設(shè)置T1計數(shù)器相關(guān)的特殊功能寄存器,初始化計時器T1細(xì)節(jié):備注:*/void init()TMOD=0X10;TH1=0X3C;TL1=0XB0;EA=1;ET1=1;TR1=1;/*/*TI_time() interrupt 3/*參數(shù):返回值:功能:細(xì)節(jié):備注:*/void TI_time() interrupt 3
10、TH1=0X3C;TL1=0XB0;num+;if(num=20)num=0;m0+;if(m0=10)m0=0;m1+;if(m1=6)m1=0;f0+;if(f0=10)f0=0;f1+;if(f1=6)f1=0;h0+;if(h0=10)h0=0;h1+;if(h1=2)if(h0=4)h0=0;h1=0;/*/*display()/*參數(shù):返回值:功能:細(xì)節(jié):備注:*/void display() int j;for(j=0;j8;j+)P2=weij;switch(j)case 0:if(!naozhong&xiang)fengming(400);if(naozhong=1)feng
11、ming(200); P0=duanm0;delay_ms(1);P0=0xff;break;case 1:P0=duanm1;delay_ms(1);P0=0xff;break;case 3:if(con=1)shanshuo(f0);else P0=duanf0;delay_ms(1);P0=0xff;break;case 4:if(con=2)shanshuo(f1);else P0=duanf1;delay_ms(1);P0=0xff;break;case 6:if(con=3)shanshuo(h0);else P0=duanh0;delay_ms(1);P0=0xff;break;
12、case 7:if(con=4)shanshuo(h1);else P0=duanh1;delay_ms(1);P0=0xff;break;/*/*d_display()/*參數(shù):返回值:功能:細(xì)節(jié):備注:*/void d_display()int j;for(j=0;j8;j+)P2=weij;switch(j)case 0:P0=0xff;delay_ms(1);break;case 1:P0=0xff;delay_ms(1);break;case 3:if(d_con=1)shanshuo(d_f0);else P0=duand_f0;delay_ms(1);P0=0xff;break;
13、case 4:if(d_con=2)shanshuo(d_f1);else P0=duand_f1;delay_ms(1);P0=0xff;break;case 6:if(d_con=3)shanshuo(d_h0);else P0=duand_h0;delay_ms(1);P0=0xff;break;case 7:if(d_con=4)shanshuo(d_h1);else P0=duand_h1;delay_ms(1);P0=0xff;break;/*/*keyscan()/*參數(shù):返回值:功能:細(xì)節(jié):備注:*/void key_scan()/*調(diào)時if(dingshi=0&naozhon
14、g=0)if(k1=0)/調(diào)時選位delay_ms(60);/去抖動延時if(k1=0)con+;if(con=5)con=0;while(!k1); /程序會停在這里,所以此時會沒有任何顯示 .但時間的進(jìn)位并沒有停,因為中斷有優(yōu)先權(quán)。即時間還在走 if(k3=0)/tiao時選位delay_ms(60);/去抖動延時if(k3=0)con-;if(con=-1)con=4;while(!k3);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停if(con=1&k2=0)/調(diào)分的個位+delay_ms(60);if(k2=0)f0+;if(f0=10)f0=0;while(!k2
15、);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停if(con=2&k2=0)/調(diào)分的十位+delay_ms(60);if(k2=0)f1+;if(f1=6)f1=0; while(!k2);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停 if(con=3&k2=0)/調(diào)時的個位+delay_ms(60);if(k2=0)if(h1=1|h1=0)h0+;if(h0=10) h0=0;if(h1=2)h0+;if(h0=4)h0=0;while(!k2);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停if(con=4&k2=0)/調(diào)時的十位+de
16、lay_ms(60);if(k2=0)h1+;if(h1=3)h1=0;while(!k2);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停 if(k4=0)/啟動定時功能delay_ms(60);/去抖動延時if(k4=0)dingshi=1;while(!k4); /*定時if(dingshi=1&naozhong=0) if(k4=0)/退出定時功能delay_ms(60);/去抖動延時if(k4=0)dingshi=0;only=1;d_con=0;while(!k4); if(k3=0)/定時選位delay_ms(60);/去抖動延時if(k3=0)d_con-;if
17、(d_con=-1)d_con=4;while(!k3);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停if(k1=0)/定時選位delay_ms(60);/去抖動延時if(k1=0)d_con+;if(d_con=5)d_con=0;while(!k1); /程序會停在這里,所以此時會沒有任何顯示 .但時間的進(jìn)位并沒有停,因為中斷有優(yōu)先權(quán)。即時間還在走if(d_con=1&k2=0)/調(diào)定時分的個位+delay_ms(60);if(k2=0)d_f0+;if(d_f0=10)d_f0=0;while(!k2);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停if
18、(d_con=2&k2=0)/調(diào)定時分的十位+delay_ms(60);if(k2=0)d_f1+;if(d_f1=6)d_f1=0; while(!k2);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停 if(d_con=3&k2=0)/調(diào)定時時的個位+delay_ms(60);if(k2=0) if(d_h1=1|d_h1=0)d_h0+;if(d_h0=10)d_h0=0;if(d_h1=2)d_h0+;if(d_h0=4)d_h0=0;while(!k2);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停 if(d_con=4&k2=0)/調(diào)定時時的十位+delay_ms(60);if(k2=0)d_h1+;if(d_h1=3)d_h1=0;while(!k2);/程序會停在這里,所以此時會沒有任何顯示 但時間的進(jìn)位并沒有停 /keysca
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中介購買合同正式合同范本
- 全職舞蹈老師合同范例
- 加盟分公司合同范本
- 加盟新鮮豬肉合同范本
- 2024年西安電力中心醫(yī)院招聘筆試真題
- 準(zhǔn)新車購車合同范本
- 2024年空港數(shù)字城市開發(fā)建設(shè)有限公司社會招聘考試真題
- 產(chǎn)權(quán)回購合同范本
- 公司雇傭會計合同范例
- 買雞合同范本
- 《抖音生活服務(wù)服務(wù)商合作手冊》
- 語文教學(xué)設(shè)計(教案目標(biāo))
- 中山大學(xué)抬頭信紙中山大學(xué)橫式便箋紙推薦信模板a
- 無形資產(chǎn)評估完整版課件
- 一體化學(xué)工服務(wù)平臺、人事管理系統(tǒng)、科研管理系統(tǒng)建設(shè)方案
- 市場營銷學(xué)課后習(xí)題與答案
- 常暗之廂(7規(guī)則-簡體修正)
- 10kV變電所設(shè)備檢修內(nèi)容與周期表
- 制冷系統(tǒng)方案的設(shè)計pptx課件
- 修心七要原文
- 中國TBHQ行業(yè)市場調(diào)研報告
評論
0/150
提交評論