




免費(fèi)預(yù)覽已結(jié)束,剩余22頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)課程設(shè)計(jì)報(bào)告基于單片機(jī)的數(shù)字時(shí)鐘姓名: 班級(jí):學(xué)號(hào):一、 前言利用實(shí)驗(yàn)板上的4個(gè)LED數(shù)碼管,設(shè)計(jì)帶有鬧鈴、秒表功能的數(shù)字時(shí)鐘。功能要求:a) 計(jì)時(shí)并顯示(LED)。由于實(shí)驗(yàn)板上只有4位數(shù)碼管,可設(shè)計(jì)成顯示“時(shí)分”和顯示“分秒”并可切換。b) 時(shí)間調(diào)整功能。利用4個(gè)獨(dú)立按鈕,實(shí)現(xiàn)時(shí)鐘調(diào)整功能。這4個(gè)按鈕的功能為工作模式切換按鈕(MODE),數(shù)字加(INC),數(shù)字減(DEC)和數(shù)字移位(SHITF)。c) 定鬧功能。利用4個(gè)獨(dú)立按鈕設(shè)定鬧鐘時(shí)間,時(shí)間到以蜂鳴器響、繼電器動(dòng)作作為鬧鈴。d) 秒表功能。最小時(shí)間單位0.01秒。二、 硬件原理分析1. 電源部分 電源部份采用兩種輸入接口(如上圖)。a) 外電源供電,采用2.1電源座,可接入電源DC5V,經(jīng)單向保護(hù)D1接入開關(guān)S1。b) USB供電,USB供電口輸入電源也經(jīng)D1單向保護(hù),送到開關(guān)S1。 注:兩路電源輸入是并連的,因此只選擇一路就可以了,以免出問(wèn)題。 S1為板子工作電源開關(guān),按下后接通電源,提供VCC給板子各功能電路。電路采用兩個(gè)濾波電容,給板子一個(gè)更加穩(wěn)定的工作電源。LED為電源的指示燈,通電后LED燈亮。2. 蜂鳴器 蜂鳴器分為有源和無(wú)源兩種,有源即兩引腳有一個(gè)直流電源就可以長(zhǎng)鳴,無(wú)源則需要一個(gè)1K左右的脈沖才可以蜂鳴,因此對(duì)于按鍵的提示音及報(bào)警蜂鳴使用有源來(lái)得方便。有源也可以當(dāng)無(wú)源使用,而無(wú)源則不能當(dāng)有源使用,當(dāng)然用有源蜂鳴器作音樂(lè)發(fā)聲會(huì)失真厲害。如上圖:?jiǎn)纹瑱C(jī)P15輸出高低電平經(jīng)R21連接三極管B極,控制三極管的導(dǎo)通與截止,從而控制蜂鳴器的工作。低電平時(shí)三極管導(dǎo)通,蜂鳴器得電蜂鳴,高電平時(shí)三極管截止,蜂鳴器失電關(guān)閉蜂鳴。3. 數(shù)碼管 電路使用一個(gè)四位共陽(yáng)型數(shù)碼管,四個(gè)公共陽(yáng)級(jí)由三極管放大電流來(lái)驅(qū)動(dòng),三極管由P10-P13控制開與關(guān)。數(shù)碼管的陰級(jí)由P0口經(jīng)過(guò)電阻限流連接。 例如,要十位的數(shù)碼管工作,P12輸出0,使三極管Q12導(dǎo)通,8腳得電,當(dāng)P0口相應(yīng)位有輸出0時(shí),點(diǎn)亮相應(yīng)的LED燈組合各種字符數(shù)字。4. 獨(dú)立鍵盤如上圖,由六個(gè)按鍵組成,每個(gè)按鍵的一端連接IO口,另一端直接連接GND(0電位)。六個(gè)按鍵分別接入P37-P32,只要按下按鍵,相應(yīng)位的IO口位將被拉為低電平(0),程序可以判斷相應(yīng)位是否為0來(lái)確認(rèn)按鍵己按下。5. 動(dòng)態(tài)顯示 動(dòng)態(tài)顯示驅(qū)動(dòng)電路是單片機(jī)應(yīng)用中最常用的顯示方式。 動(dòng)態(tài)顯示接口電路是把所有顯示器的8個(gè)筆劃段的同名段連在一起,而每一個(gè)顯示器的公共極COM是各自獨(dú)立地受I/O線控制。CPU向字段輸出口送出字形碼時(shí),所有顯示器接收到相同的字形碼,但究竟是哪個(gè)顯示器亮,則取決于COM端。在輪流點(diǎn)亮掃描過(guò)程中,每位顯示器的點(diǎn)亮?xí)r間是極為短暫的(約1ms),但由于人眼的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位顯示器并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感。 動(dòng)態(tài)掃描顯示必須由CPU不斷地調(diào)用顯示程序,才能保證持續(xù)不斷的顯示。在實(shí)際工作中,當(dāng)然不可能只顯示,這樣在兩次調(diào)用顯示程序之間的時(shí)間間隔就不一定了,如果時(shí)間間隔比較長(zhǎng),就會(huì)使顯示不連續(xù)。三、 軟件設(shè)計(jì)l 主程序?qū)存I1設(shè)定為功能選擇鍵,每按一次按鍵1,進(jìn)入相應(yīng)的功能模式。l 分秒顯示分秒顯示模式下,數(shù)碼管顯示時(shí)鐘時(shí)間的分和秒。當(dāng)按鍵1按下后,進(jìn)入下一模式。l 時(shí)分顯示時(shí)分顯示模式下,數(shù)碼管顯示時(shí)鐘時(shí)間的時(shí)和分。當(dāng)按鍵1按下后,進(jìn)入下一模式。l 時(shí)間調(diào)整時(shí)間調(diào)整模式下,僅調(diào)整時(shí)鐘的時(shí)、分。數(shù)碼管閃爍的為當(dāng)前調(diào)整的位子,按鍵2為加,按鍵3為減,按鍵4為移位鍵。l 鬧鐘鬧鐘模式下,可設(shè)置鬧鐘的時(shí)、分。數(shù)碼管閃爍的為當(dāng)前調(diào)整的位子,按鍵2為加,按鍵3為減,按鍵4為移位鍵。當(dāng)鬧鐘時(shí)間調(diào)整完畢之后,按下按鍵5,確認(rèn)鬧鐘時(shí)間。隨后等待時(shí)鐘時(shí)間到達(dá)鬧鐘時(shí)間。時(shí)鐘時(shí)間到達(dá)鬧鐘時(shí)間后,蜂鳴器工作。l 秒表秒表模式下,按下按鍵4,秒表開始計(jì)時(shí);再次按下按鍵4,秒表暫停。按下按鍵2或按鍵3,秒表清零。四、 軟件調(diào)試在軟件調(diào)試過(guò)程中碰到了很多問(wèn)題。其中比較重要的幾個(gè)問(wèn)題如下:1、時(shí)鐘調(diào)整子程序中,時(shí)、分的十位數(shù)、個(gè)位數(shù)加減不符合常識(shí)。比如在加減時(shí),小時(shí)可以達(dá)到27、28等數(shù)值,而這是不符合常識(shí)的。在查看代碼后發(fā)現(xiàn),可以在加、減過(guò)程中設(shè)置if函數(shù)判斷當(dāng)前所處位置,調(diào)整當(dāng)前數(shù)值所能達(dá)到的最大值或最小值。修改后代碼如下:else if(keyval=0xbf) /按鍵2 加if(pos=0)dispbufpos+;if(dispbufpos=3)dispbufpos=0;else if(pos=1)if(dispbuf0=0|dispbuf0=1)dispbufpos+;dispbufpos=dispbufpos%10;if(dispbuf0=2)dispbufpos+;if(dispbufpos=4)dispbufpos=0;else if(pos=2)dispbufpos+;if(dispbufpos=6)dispbufpos=0;else if(pos=3)dispbufpos+;dispbufpos=dispbufpos%10;else if(keyval=0xdf) /按鍵3 減 if(pos=0)if(dispbufpos=0)dispbufpos=2;else dispbufpos-;else if(pos=1)if(dispbuf0=0|dispbuf0=1)if(dispbufpos=0)dispbufpos=9;else dispbufpos-;if(dispbuf0=2)if(dispbufpos=4&dispbufpos=9)dispbufpos=3;else if(dispbufpos=0)dispbufpos=3;else dispbufpos-;else if(pos=2)if(dispbufpos=0)dispbufpos=5;else dispbufpos-;else if(pos=3)if(dispbufpos=0)dispbufpos=9;else dispbufpos-;2、秒表模式下,無(wú)法很好地區(qū)分當(dāng)前計(jì)時(shí)所達(dá)到的具體數(shù)值。在秒的個(gè)位數(shù)位子設(shè)置一個(gè)小數(shù)點(diǎn),使秒表的顯示更加直觀。修改后代碼如下:在程序開始處,添加如下代碼:unsigned char code segtab_dot=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/帶小數(shù)點(diǎn)的數(shù)碼管代碼 在void t0int(void) interrupt 1 using 1之中添加如下代碼:if(mode=4&P1=0xfd)/秒表處顯示小數(shù)點(diǎn)的if語(yǔ)句P0=segtab_dotdispbufdispindex;elseP0=segtabdispbufdispindex;3、在秒表運(yùn)行一遍后,進(jìn)入其他模式操作完畢,再次進(jìn)入秒表模式下發(fā)現(xiàn)秒表無(wú)法清零。檢查代碼后發(fā)現(xiàn),在鬧鐘模式下,進(jìn)入秒表模式時(shí),未對(duì)秒表清零。修改后代碼如下:if(keyval=0x7f)/1號(hào)按鍵 模式 進(jìn)入秒表模式mode=4;old_ss=0;old_ms=0;miaobiao_ss=old_ss;miaobiao_ms=old_ms;dispbuf0=miaobiao_ss/10;dispbuf1=miaobiao_ss%10;dispbuf2=miaobiao_ms/10;dispbuf3=miaobiao_ms%10;clocksing=0;附完整實(shí)驗(yàn)代碼:/*基于單片機(jī)的數(shù)字時(shí)鐘 功能:時(shí)鐘、鬧鐘、秒表模式0:時(shí)鐘顯示模式-分、秒模式0下,數(shù)碼管顯示時(shí)鐘時(shí)間-分、秒。按鍵說(shuō)明:按鍵1:選擇下一模式。模式1:時(shí)鐘顯示模式-時(shí)、分模式1下,數(shù)碼管顯示時(shí)鐘時(shí)間-時(shí)、分。按鍵說(shuō)明:按鍵1:選擇下一模式。模式2:時(shí)鐘調(diào)整模式模式2下,調(diào)整時(shí)鐘時(shí)間,僅調(diào)整時(shí)、分時(shí)間。按鍵說(shuō)明:按鍵1:選擇下一模式。按鍵2:增加選中數(shù)碼管的數(shù)值。按鍵3:減少選中數(shù)碼管的數(shù)值。按鍵4:移位鍵,按鍵選擇下一數(shù)碼管。模式3:鬧鐘模式模式3下,設(shè)置鬧鈴時(shí)間之后,等時(shí)鐘到達(dá)相應(yīng)時(shí)間,發(fā)出鈴聲。按鍵說(shuō)明:按鍵1:選擇下一模式。按鍵2:增加選中數(shù)碼管的數(shù)值。按鍵3:減少選中數(shù)碼管的數(shù)值。按鍵4:移位鍵,按鍵選擇下一數(shù)碼管。按鍵5:設(shè)置鬧鈴時(shí)間后,按鍵確認(rèn),數(shù)碼管顯示當(dāng)前時(shí)鐘時(shí)間。模式4:秒表模式模式4為秒表模式,可記錄0-59秒。最小時(shí)間單位為0.01秒。按鍵說(shuō)明:按鍵1:選擇下一模式。按鍵2:清除秒表當(dāng)前數(shù)值。按鍵3:清除秒表當(dāng)前數(shù)值。按鍵4:開始、暫停秒表。*/#include unsigned char dispbuf4=0,0,0,0;unsigned char code segtab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/不帶小數(shù)點(diǎn)的數(shù)碼管代碼unsigned char code segtab_dot=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/帶小數(shù)點(diǎn)的數(shù)碼管代碼unsigned char code bittab=0xfe,0xfd,0xfb,0xf7;unsigned char dispindex;unsigned char mode;unsigned char pos;unsigned char keyval;unsigned char hh,mm,ss;unsigned char miaobiao_ms=0,miaobiao_ss=0;/秒表unsigned char old_ms,old_ss;/保存秒表時(shí)間unsigned char clock_hh,clock_mm;/用于存放所設(shè)鬧鐘時(shí)間unsigned int clock_shanshuo;/用于控制鬧鐘調(diào)整時(shí)間時(shí)是否閃爍 0:閃爍 1:不閃爍sbit clocksing=P15;/鬧鐘所用蜂鳴器unsigned int cnt;/用于10ms轉(zhuǎn)1s計(jì)數(shù)unsigned char cnt1;/用于10ms轉(zhuǎn)0.5s處計(jì)數(shù)(用于閃爍)unsigned char cnt2;/用于秒表處計(jì)時(shí)unsigned char keyscan(void);void delay(unsigned int t);void keypro(void);bit flash;/*主函數(shù)*/void main(void)TMOD=0x11;TH0=(0-2000)/256;TL0=(0-2000)%256;ET0=1;TR0=1;TH1=(0-2000)/256;TL1=(0-2000)%256;ET1=1;TR1=0;/秒表 先不開EA=1;mode=0;hh=02;mm=03;ss=15;while(1)if(mode=3)if(hh=clock_hh)if(mm=clock_mm)clocksing=0;elseclocksing=1;elseclocksing=1;if(keyscan()=0xff) continue;keypro();/*鍵掃描程序*/unsigned char keyscan(void)P3=0xff;keyval=P3;if(keyval=0xff) return 0xff;delay(10000);if(keyval!=P3) return 0xff;else while(P3!=0xff);return keyval;/*時(shí)鐘中斷及顯示程序*/void t0int(void) interrupt 1 using 1TH0=(0-2000)/256;/2msTL0=(0-2000)%256;P0=0xff;P1=0xff;P1=bittabdispindex;if(mode=4&P1=0xfd)/秒表處顯示小數(shù)點(diǎn)的if語(yǔ)句P0=segtab_dotdispbufdispindex;elseP0=segtabdispbufdispindex;if(dispindex=pos)&(flash=1)&(mode=2|(mode=3&clock_shanshuo=0)/閃爍控制程序P0=0xff;P1=0xf0;dispindex+;dispindex=dispindex&0x03;cnt+;cnt1+;if(cnt1=250)/0.5ms閃爍cnt1=0;flash=flash;if(cnt=500)/2ms*500=1scnt=0;ss+;if(ss=60)ss=0;mm+;if(mm=60)mm=0;hh+;if(hh=24)hh=0;if(mode=0)dispbuf0=mm/10;dispbuf1=mm%10;dispbuf2=ss/10;dispbuf3=ss%10;else if(mode=1|(mode=3&clock_shanshuo=1)dispbuf0=hh/10;dispbuf1=hh%10;dispbuf2=mm/10;dispbuf3=mm%10; /*按鍵選擇,進(jìn)入不同模式*/void keypro(void)switch(mode)case 0:/顯示分秒if(keyval=0x7f)mode=1;dispbuf0=hh/10;dispbuf1=hh%10;dispbuf2=mm/10;dispbuf3=mm%10;break;case 1:/顯示時(shí)分if(keyval=0x7f) mode=2;dispbuf0=hh/10;dispbuf1=hh%10;dispbuf2=mm/10;dispbuf3=mm%10;break;case 2:/時(shí)間調(diào)整(只調(diào)整時(shí)分) if(keyval=0x7f) /按鍵1調(diào)整模式進(jìn)入鬧鐘模式mode=3;clock_hh=0;clock_mm=0;clock_shanshuo=0;hh=dispbuf0*10+dispbuf1; /保存調(diào)整后的時(shí)間mm=dispbuf2*10+dispbuf3;dispbuf0=clock_hh/10;/顯示鬧鐘的初始時(shí)間dispbuf1=clock_hh%10;dispbuf2=clock_mm/10;dispbuf3=clock_mm%10;TR0=1;else if(keyval=0xbf) /按鍵2 加if(pos=0)dispbufpos+;if(dispbufpos=3)dispbufpos=0;else if(pos=1)if(dispbuf0=0|dispbuf0=1)dispbufpos+;dispbufpos=dispbufpos%10;if(dispbuf0=2)dispbufpos+;if(dispbufpos=4)dispbufpos=0;else if(pos=2)dispbufpos+;if(dispbufpos=6)dispbufpos=0;else if(pos=3)dispbufpos+;dispbufpos=dispbufpos%10;else if(keyval=0xdf) /按鍵3 減 if(pos=0)if(dispbufpos=0)dispbufpos=2;else dispbufpos-;else if(pos=1)if(dispbuf0=0|dispbuf0=1)if(dispbufpos=0)dispbufpos=9;else dispbufpos-;if(dispbuf0=2)if(dispbufpos=4&dispbufpos=4)dispbufpos=0;else if(pos=2)dispbufpos+;if(dispbufpos=6)dispbufpos=0;else
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 岳云鵬介紹課件
- 2025年黑龍江省龍東地區(qū)中考?xì)v史真題【含答案、解析】
- 2017輔音教學(xué)課件
- 餐飲店知識(shí)產(chǎn)權(quán)租賃合作協(xié)議
- 城市綠化采購(gòu)合同預(yù)付款管理細(xì)則
- 餐飲行業(yè)場(chǎng)地租賃及廣告合作合同
- 廠區(qū)綠化養(yǎng)護(hù)與生態(tài)修復(fù)工程監(jiān)理協(xié)議
- 車輛掛靠業(yè)務(wù)風(fēng)險(xiǎn)控制與保障合同
- 樓盤逾期交房催告函合同違約責(zé)任明確協(xié)議
- 平陰縣2023-2024學(xué)年度七年級(jí)第二學(xué)期期末學(xué)習(xí)診斷檢測(cè)語(yǔ)文試題含答案
- 在線網(wǎng)課知道智慧《人工智能(復(fù)旦)》單元測(cè)試考核答案
- 天津大洋寧夏隆德萬(wàn)頭高端肉牛全產(chǎn)業(yè)鏈建設(shè)項(xiàng)目環(huán)境影響報(bào)告書
- 壯醫(yī)藥水蛭療法
- 《繃帶包扎法》課件
- 南京中聯(lián)水泥有限公司石灰石礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 2023年湖北省高中學(xué)業(yè)水平合格性考試語(yǔ)文試卷真題(答案詳解)
- 中國(guó)現(xiàn)代文學(xué)中的革命文學(xué)思潮
- 寧夏銀川外國(guó)語(yǔ)實(shí)驗(yàn)學(xué)校2024屆數(shù)學(xué)七下期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 農(nóng)村集體聚餐食品安全管理培訓(xùn)課件
- 電子文件管理復(fù)習(xí)資料
評(píng)論
0/150
提交評(píng)論