單片機課程設計電子時鐘6_第1頁
單片機課程設計電子時鐘6_第2頁
單片機課程設計電子時鐘6_第3頁
單片機課程設計電子時鐘6_第4頁
單片機課程設計電子時鐘6_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設計實驗報告課設名稱:電子時鐘姓名 班級 學號 任課教師: 時間 2011-12-14 課設名稱電子時鐘一、實驗目的 1掌握單片機編程的流程,以及程序的調(diào)試方式。2了解led動態(tài)顯示原理及動態(tài)顯示程序設計方法。3學習8051定時器時間計時處理、按鍵掃描的設計方法。二、設計任務和要求 利用4個led數(shù)碼管, 設計帶有鬧鈴功能的數(shù)字時鐘(實驗臺或自行焊接),要求:1 在4位數(shù)碼管上顯示當前時間。顯示格式“時時.分分”。2 由led燈閃動做秒顯示。3 利用開關(guān)可對時間及鬧玲進行設置,并可顯示鬧玲時間。 4 當鬧玲時間到由p1.7控制蜂鳴器發(fā)出聲響,并可通過開關(guān)使它停止。三、設計原理與思路原

2、理部分:led動態(tài)顯示原理:數(shù)碼管的動態(tài)顯示利用視覺暫留作用,使得人眼看到的是靜態(tài)的不變的顯示,視覺暫留時間約為0.01秒,因而每次顯示的時間間距要比較短。本實驗選擇的是每5毫秒顯示一個比特。首先以串行方式由sda口向led顯示器數(shù)據(jù)端口發(fā)送第一個8位數(shù)據(jù),這時發(fā)送位碼數(shù)據(jù)0bfh到p1口,此時由于p1.6位低電平而其他口都為高電平,因此只有l(wèi)ed1數(shù)碼管顯示該數(shù)碼。這樣就可以發(fā)送第二個數(shù)據(jù),同時應使其對應的位碼為低電平且保證其他位為高電平。依次類推,對各顯示器進行掃描,顯示器分時輪流工作。雖然買此只有一個顯示器顯示,但由于人的視覺暫留現(xiàn)象我們?nèi)詴杏X所有的顯示器都在同時顯示。它的優(yōu)點是硬件電

3、路簡單,占用較少的i/o口,但其傳送速度相對較慢。 由數(shù)碼管的顯示原理,再考慮到數(shù)碼管上顯示的數(shù)字對應與一個八位的二進制數(shù),09一共十個,把這些數(shù)存到程序存儲器的table表中,將dptr作為指針,用r1r4(或任意四個單元)分別存儲實際的時和分的數(shù)字,把寄存器存儲的數(shù)字作為偏移量,這樣,就把實際的數(shù)字和數(shù)碼管中顯示的數(shù)字對應起來了。設計及思路部分:1.硬件設計部分:通過跳將單片機的p1口中的控制線與數(shù)碼管顯示電路如圖1所示相連(在實驗箱上即將p10、p11、p13、p14、p15、p16接至a位)它們的作用是:p1.3、p1.4、p1.5和p1.6是四個數(shù)碼管的位掃描線,其中p1.6對應數(shù)碼

4、管w1,顯示小時高位;p1.5對應數(shù)碼管w2,顯示小時低位;p1.4對應數(shù)碼管w3,顯示分鐘高位;p1.3對應數(shù)碼管w4,顯示分鐘低位。 實驗中用p1.2口作為脈沖輸出端,將p1.2口連到一個二極管,做秒顯示;p3.2,p3.3,p3.4,p.5分別與4個撥動開關(guān)連接,做時間顯示和鬧鈴的控制;p1.7則連接到蜂鳴器。實驗中要利用單片機定時器完成計時功能,定時器t0計時中斷程序每隔5ms中斷一次并當作一個計數(shù),每中斷一次計數(shù)加1,當計數(shù)200次時,則表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了。為了將時間在led數(shù)碼管上顯示,可采用靜態(tài)顯示法和動態(tài)顯示法,由于靜態(tài)顯

5、示法需要數(shù)據(jù)鎖存器等較多硬件,可采用動態(tài)顯示法實現(xiàn)led顯示。顯示電路如圖1所示: 圖1鬧鈴聲由交流蜂鳴器產(chǎn)生,電路如圖2,當p1.7輸出不同頻率的方波,.蜂鳴器便會發(fā)出不同的聲音。 圖2數(shù)碼管顯示設計:四位共陽led數(shù)碼管,其標號分別為led1led4。為了節(jié)省mcu的i/o口,采用串行接口方式,它僅占用系統(tǒng)2個i/o口,即p1.0口和p1.1口,一個用作數(shù)據(jù)線sda,另一個用作時鐘信號線clk,它們都通過跳線相連。其中串并轉(zhuǎn)換電路部分我選用的是集成芯片74hc595,74hc595是8位串行輸入/輸出或者并行輸出移位寄存器,具有高阻關(guān)斷狀態(tài)。 4位共陽led數(shù)碼管與p87c52x2的連接如

6、上面圖1所示。其中,kd_q0-kd_q7為led顯示器數(shù)據(jù)線即段碼線,ebit1-ebit4位led顯示器的位碼掃描線,它們通過跳線與p1.3-p1.6相連,低電平有效,且任何時候僅有一位輸出低電平,顯示時對各顯示器進行動態(tài)掃描,顯示器分時輪流工作。雖然每次只有一個顯示器顯示,但是由于人的視覺暫留現(xiàn)象我們?nèi)詴杏X所有的顯示器都在同時顯示。由于實驗采用的是共陽led數(shù)碼管,它的陰極分別通過限流電阻r20-r27連接到控制kd_0-kd_q7。這樣控制8個發(fā)光二極管,就需要8個i/o口。但由于單片機的i/o口資源是有限的,因此常采用實驗電路所示的串并轉(zhuǎn)換電路來擴充系統(tǒng)資源。串并轉(zhuǎn)換電路其實質(zhì)是一

7、個串入并處的移位寄存器,串行數(shù)據(jù)再同步移位脈沖clk的作用下經(jīng)串行數(shù)據(jù)線sda把數(shù)據(jù)移位到kd_0-kd_q7端,這樣僅需2根線就可以分別控制8個發(fā)光二極管的亮滅。2.軟件設計部分:鬧鈴設置:通過p3.4口控制鬧鈴設置,與撥動開關(guān)連接,高電平有效,當p3.4口變成高電平時,進入鬧鈴設置,用p3.2和3.3分別控制分和時的設置,也與撥動開關(guān)連接,高電平有效,當p3.2變成低電平時回到主程序。時間設定:通過p3.5口控制時間設定,與撥動開關(guān)連接,低電平有效,當p3.3口變成低電平時,進入時間設置,同樣用p3.2和3.3口控制分和時的設置,也與撥動開關(guān)連接,低電平有效,當p3.3口變成高電平時回到主

8、程序。蜂鳴器:用四個地址存儲鬧鈴時間的偏移量,判斷當前的時間與鬧鈴時間是否完全一樣,相同時驅(qū)動鬧鈴,實驗板上的蜂鳴器是交流驅(qū)動的,因此當?shù)竭_鬧鈴時刻時,給p1.7口幾個脈沖,頻率控制在人耳可以聽到的范圍內(nèi)。i/o口的說明:p1口: 用來控制數(shù)碼管的顯示,其中p1.2作為秒脈沖輸出口,p1.7控制蜂鳴器p3口: p3.2控制設定中的分鐘的設定,與撥動開關(guān)相連,高電平有效 p3.3控制設定中的小時的設定,與撥動開關(guān)相連,高電平有效p3.4控制鬧鈴設定,與撥動開關(guān)相連,高電平設置鬧鈴,低電平鎖定鬧鈴時間 p3.5控制時間及鬧鐘的開關(guān)設定,與撥動開關(guān)相連,低電平有效允許時間的設定和關(guān)掉鬧鈴3.程序流程

9、圖部分:(1)、開關(guān)掃描程序:開關(guān)1和2用來調(diào)整時鐘的分與時;開關(guān)3用來控制顯示時間或鬧鐘;開關(guān)4用來控制時間的可調(diào)與否,同時控制鬧鈴的開與關(guān)。(2)、t0中斷服務程序:采用定時器t0計時,中斷程序每隔5ms中斷一次計數(shù)加1,當計數(shù)200次時,則表示1s到了,秒變量加1,同理再判斷是否1分鐘到了,再判斷是否1小時到了,再判斷是否24小時到了。(3)、顯示部分: 程序流程圖如下:4.程序部分:-; 中斷入口程序 ; ;-;org 4000h;程序執(zhí)行開始地址ajmp main;跳到標號main執(zhí)行org 000bh;定時器t0中斷程序入口ajmp intt0;跳到intt0執(zhí)行;-; 主 程 序

10、 ;-; main:mov tmod,#01h;定時器t0工作于方式1mov 20h,#198 ;t0溢出次數(shù)為200次 mov 40h,#00h;時鐘的時清零 mov 41h,#00h ;時鐘的分清零 mov 42h,#00h ;時鐘的秒清零 mov 43h,#00h ;鬧鐘的時清零 mov 44h,#00h ;鬧鐘的分清零 setb et0 ;允許t0中斷 setb ea;總中斷開放 mov th0,#0ech;5ms定時初值0ec78h mov tl0,#78h; setb tr0 ;啟動定時器t0;-; 開關(guān)掃描程序 ;-; here:jb p3.2,here1 ;判斷是否按下,按下則

11、跳到here1調(diào)整時鐘的分 jb p3.3,here2 ;判斷是否按下,按下則跳到here2調(diào)整時鐘的時 jb p3.4,here3 ;判斷是否按下,按下則跳到here3調(diào)整鬧鐘 jb p3.5,here4 ;判斷是否按下,按下則跳到here4停止鬧鐘響 lcall disc;調(diào)用顯示時鐘程序 lcall rin;調(diào)用判斷鬧鐘程序 ajmp here;重復執(zhí)行 here4:ljmp here44;調(diào)用停止鬧鈴 here1:lcall disc;調(diào)用顯示時鐘程序 mov 45h,#10 ;延時,減慢分鐘調(diào)整速度,使人眼能看清分鐘變化 lcall disc; dl1:mov 46h,#0fah;

12、lcall disc;延時過程中要調(diào)用顯示程序,使顯示不閃爍 dl2:nop; nop; djnz 46h,dl2;內(nèi)循環(huán)0fah次 djnz 45h,dl1;外循環(huán)10次 總共60s mov a,#01h ;時鐘的分鐘加1 add a,41h; mov 41h,a; cjne a,#60,lm;判斷分鐘是否為60,不為60則跳到lm mov 41h,#00h;為60則分鐘清零 mov a,#01h;時鐘的時加1 add a,40h; mov 40h,a; cjne a,#24,lm;判斷時是否為24,不為24則跳到lm mov 40h, #00h ;為24則時清零 lm:jb p3.2,he

13、re1 ;判斷是否按下,按下則跳到here1 ajmp here;沒按下則跳到here here2:lcall disc;調(diào)用顯示時鐘程序 mov 45h,#10 ;延時,減慢時的調(diào)整速度,使人眼能看清時的變化 lcall disc; dl3:mov 46h,#0fah; lcall disc;延時過程中要調(diào)用顯示程序,使顯示不閃爍 dl4:nop; nop; djnz 46h,dl4; djnz 45h,dl3; mov a,#01h ;時鐘的時加1 add a,40h; mov 40h,a ; cjne a,#24,lh ;判斷時是否為24,不為24則跳到lh mov 40h,#00h;為

14、24則時清零 lh:jb p3.3,here2 ;判斷是否按下,按下則跳到here2 ajmp here;沒按下則跳到here here3:lcall disr;調(diào)用顯示鬧鐘程序 lcall rin;調(diào)用判斷鬧鐘程序 jb p3.2,m1;判斷是否按下,按下則跳到m1 jb p3.3,h1;判斷是否按下,按下則跳到h1 ajmp lh1;都沒按下則跳到lh1 m1:mov 50h,#10 ;延時,減慢調(diào)整速度,使人眼能看清變化 lcall disr; dl7:mov 51h,#0fah ; lcall disr;調(diào)用顯示鬧鐘的程序 dl8:nop; nop; djnz 51h,dl8; djn

15、z 50h,dl7; mov a,#01h ;鬧鐘的分加1 add a,44h; mov 44h,a ; cjne a,#60,lm1;判斷分鐘是否為60,不為60則跳到lm1 mov 44h,#00h;為60則分鐘清零 mov a,#01h;鬧鐘的時加1 add a,43h; mov 43h,a; cjne a,#24,lm1;判斷時是否為24,不為24則跳到lm1 mov 43h,#00h; ;為24則時清零 lm1:jb p3.2,m1;判斷是否按下,按下則跳到m1繼續(xù)調(diào)整分鐘 ajmp lh1;沒按下則跳到lh1 h1:mov 50h,#10;延時,同上 lcall disr; dl5

16、:mov 51h,#0fah ; lcall disr; dl6:nop; nop; djnz 51h,dl6; djnz 50h,dl5; mov a,#01h ;鬧鐘的時加1 add a,43h; mov 43h,a ; cjne a,#24,lh1;判斷時是否為24,不為24則跳到lh1 mov 43h,#00h;為24則時清零 lh1:jb p3.3,h1;判斷是否按下,按下則跳到h1繼續(xù)調(diào)整小時 jb p3.4,here3 ;判斷是否按下,按下則跳會here3 ajmp here;沒按下則跳回herehere44:clr p1.7; ;停止鬧鈴 lcall disc;調(diào)用顯示時鐘程序

17、 jb p3.5,here44;判斷是否按下 ajmp here;-; t0中斷服務程序 ;-; intt0:push psw ;狀態(tài)字入棧保護 push acc ;累加器入棧保護 clr et0 ;關(guān)t0中斷允許 clr tf0 ;清除溢出標志位 clr tr0 ;關(guān)閉定時器t0 mov th0,#0ech; ;裝初值 mov tl0,#78h; djnz 20h,return ;1s未到,繼續(xù)計 mov 20h,#198 ; cpl p1.2 ;秒顯示 mov 60h,#05 ;延時子程序 dlp8:mov 61h, #0fah; dlp9: nop ; nop ; djnz 61h,dl

18、p9; djnz 60h,dlp8; cpl p1.2 ;秒顯示 mov a,#01h ;秒加1add a,42h ; mov 42h,a ; cjne a,#60,return ;1分未到,繼續(xù)計 mov 42h,#00h ;到1分則秒清零 mov a,#01h ;分加1 add a,41h; mov 41h,a; cjne a,#60,return;1小時未到,繼續(xù)計 mov 41h,#00h;到1小時則分清零 mov a,#01h ;時加1 add a,40h; mov 40h,a; cjne a,#24,return ;判斷時是否到24,不到,繼續(xù)計 mov 40h, #00h; ;到

19、24時清零return:pop acc ;恢復累加器 pop psw ;恢復狀態(tài)字(出棧) setb et0 ;開放t0中斷setb tr0 ;開定時器t0 reti ;中斷返回;-; 顯示程序 ;-; disc:push acc; mov r0, 40h;時鐘顯示 mov r1, 41h; ljmp dis1; disr:push acc; mov r0, 43h;鬧鐘顯示 mov r1, 44h; ljmp dis1; dis1:mov a,r0;將時鐘小時除以10 mov b,#10; div ab; a中為小時的十位數(shù)字,b中為小時的個位數(shù)字 ajmp duph; dis2:mov a

20、,r1;將鬧鐘小時除以10 mov b,#10; div ab; a中為小時的十位數(shù)字,b中為小時的個位數(shù)字 ajmp dupm; duph:mov dptr,#table ;查表 movc a,a+dptr ; mov r3,#08h ;定義移位次數(shù)為8次 y0:rlc a ;循環(huán)左移位 mov p1.0, c ; clr p1.1 ; setb p1.1;0變1, 獲得移位所需的上升沿 djnz r3,y0; clr p1.6 ;w1數(shù)碼管顯示小時的十位數(shù)字 lcall dl5ms ;延時5ms setb p1.6 ;w1數(shù)碼管滅 dup1:mov a,b; mov dptr,#table

21、 ;查表 movc a,a+dptr ; anl a,#01111111b;w2數(shù)碼管的點變亮 mov r3,#08h ;循環(huán)移位8次 y1:rlc a ; mov p1.0, c ; clr p1.1 ; setb p1.1; djnz r3,y1; clr p1.5 ;w2數(shù)碼管顯示小時的個位數(shù)字 lcall dl5ms ;延時5ms setb p1.5 ;w2數(shù)碼管滅 ljmp dis2; dupm:mov dptr,#table ; movc a,a+dptr; mov r3,#08h ; y2:rlc a ; mov p1.0, c ; clr p1.1 ; setb p1.1 ;

22、djnz r3,y2; clr p1.4 ;w3數(shù)碼管顯示分鐘的十位數(shù)字 lcall dl5ms ;延時5ms setb p1.4 ;w3數(shù)碼管滅 dup2:mov a,b; mov dptr,#table; movc a,a+dptr; mov r3,#08h ; y3:rlc a ; mov p1.0, c ; clr p1.1 ; setb p1.1 ; djnz r3,y3; clr p1.3 ;w4數(shù)碼管顯示分鐘的個位數(shù)字 lcall dl5ms ;延時5ms setb p1.3 ;w4數(shù)碼管滅 pop acc ;恢復累加器 ret ;中斷返回 table:db 0c0h,0f9h,

23、0a4h,0b0h,099h db 092h,082h,0f8h,080h,090h ;數(shù)碼管顯示09;-; 延時子程序 ;-; dl5ms:mov r4,#05 ;延時子程序 dlp1: mov r5, #0fah dlp2: nop nop djnz r5,dlp2 djnz r4,dlp1;-; 判斷鬧鈴程序 ;-; rin:mov a,40h ;比較小時 cjne a,43h,exit mov a,41h ;比較分鐘 cjne a,44h,exit cpl p1.7 ;輸入周期為10ms的方波,蜂鳴器發(fā)聲 lcall dl5ms exit:retend;-;四、電路焊接與實驗操作 一開

24、始,我是焊了板子進行調(diào)試的,最小系統(tǒng)部分能正常運行,但是在數(shù)碼管顯示部分出了問題,顯示不完整,而且數(shù)字總是跳動,沒法設置時間。雖然最后沒用板子演示但是我還是進行了板子的設計和焊接展示:最小系統(tǒng)部分電路:顯示部分電路:后來,用實驗箱操作的電路連接圖如下:其中要注意的是一定要用跳線選擇器將p10、p11、p13、p14、p15、p16接至a位。還有就是在程序?qū)懭胄酒且煜eil軟件的操作,并且在使用dpflash下載軟件載入程序時也要熟悉操作步驟,我在實驗箱的調(diào)試中就多次遇到擦除不了和通信口出錯的問題,一定要檢查是否連接好實驗箱電路并打開開關(guān),同時記得要關(guān)掉keil軟件,不要兩個軟件同時打開;再將實驗箱上的工作模式選擇開關(guān)sx撥至“l(fā)oad

溫馨提示

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

評論

0/150

提交評論