標題: 帶鬧鐘的智能電子時鐘單片機課程設計實驗報告下載 [打印本頁]
作者: liron 時間: 2017-4-12 13:03
標題: 帶鬧鐘的智能電子時鐘單片機課程設計實驗報告下載
上海電力學院電子科學技術專業等電子課設作業實驗報告
微處理器綜合設計實踐報告
1.001.jpg (12.13 KB, 下載次數: 58)
下載附件
2017-4-12 16:27 上傳
題目:智能電子時鐘的設計
院系:電子與信息工程學院
專業: 電子科學與技術年級2014級
姓名:沙沁 學號:20141378
指導老師:楊芳
一、課程設計目的:
綜合應用所學的微處理器原理,匯編語言及相關硬件知識,設計一個具有一定功能的電路。熟練掌握仿真器和編程器的使用。
二、課程設計要求:
在面包板上搭建好硬件電路。以單片機為核心器件,組成一個電子時鐘系統。系統顯示用4位7段LED顯示器,顯示當前時間的小時和分。能夠通過按鍵實現對當前時間的調整,系統時間到整點后能夠通過蜂鳴器報時,時間為1s;能通過按鍵設置鬧鐘時間,鬧鐘時間到后,通過蜂鳴器報時。
三、系統組成與工作原理:
1、電路原理圖
1.002.jpg (30.74 KB, 下載次數: 87)
下載附件
2017-4-12 16:27 上傳
2、工作原理
本課程設計要求以AT89C52單片機為核心器件,組成一個電子時鐘系統。我們可以利用單片機自帶的定時器功能來進行定時,再通過一些軟件編程來構造出一個時鐘,同時也可以利用軟件的編程來實現所要求的其他功能。
通過四個按鍵開關來控制電子時鐘的工作模式。KEY1、KEY2分別對應時鐘的調時和調分。KEY3可以設置鬧鐘,進入鬧鐘模式后,KEY1、KEY2將轉變成鬧鐘的調時和調分鍵。此外,當按下KEY4就可以進入秒表模式,進入秒表模式以后,KEY1可以控制秒表的開始于暫停,KEY2可以對秒表清零,再次按下KEY4鍵便退出秒表模式。程序運行時主程序一直在循環查詢各按鍵的狀態,并將當前時間與鬧鐘設定時間不斷進行比較,如果時間相同則響鈴,同時通過動態顯示的方式將相應的時間顯示在數碼管顯示器上。與此同時,整個過程中時鐘的時間都是由單片機的定時器進行計時的。
單片機的P0口負責輸出段碼,P2.0~P2.3對應四個數碼管的位選端,分別為數碼管1號、2號、3號、4號(由右至左編號);P1.0對應蜂鳴器;P2.4~P2.7對應四個按鍵4、3、2、1(由上至下編號)。
各個分電路:
1.003.jpg (12.64 KB, 下載次數: 52)
下載附件
2017-4-12 16:27 上傳
當P1.0為低電平時,三極管導通,蜂鳴器開始工作
1.004.jpg (4.62 KB, 下載次數: 57)
下載附件
2017-4-12 16:27 上傳
在通電瞬間,電容C通過電阻R20充電,RST端出現正脈沖,用以復位。只要接通電源就完成了系統的復位初始化。
1.005.jpg (5.6 KB, 下載次數: 72)
下載附件
2017-4-12 16:27 上傳
此處晶振為12MHz,提供單片機的時鐘頻率。晶振頻率越高,單片機運行速度越快。
1.006.jpg (61.05 KB, 下載次數: 65)
下載附件
2017-4-12 16:27 上傳
P0口連接上拉電阻(排阻),用萬用表測試得數碼管為共陽極。當P2.3~P2.0口輸出低電平時,三極管導通,所對應的數碼管顯示;因為共陽極,所以P0口為低電平的端口所對應的段碼顯示。
1.007.jpg (21.17 KB, 下載次數: 69)
下載附件
2017-4-12 16:27 上傳
當按鍵沒有按下時,P2.4~P2.7為高電平,若按下則變低電平。
31H——時鐘分的個位 3AH——時鐘分的個位的段碼
32H——時鐘分的十位 3BH——時鐘分的十位的段碼
33H——時鐘時的個位 3CH——時鐘時的個位的段碼
34H——時鐘時的十位 3DH——時鐘時的十位的段碼
41H——鬧鐘分的個位 4AH——鬧鐘分的個位的段碼
42H——鬧鐘分的十位 4BH——鬧鐘分的十位的段碼
43H——鬧鐘時的個位 4CH——鬧鐘時的個位的段碼
44H——鬧鐘時的十位 4DH——鬧鐘時的個位的段碼
51H~54H 分別存放著秒表模式下1~4號管要顯示的數字
5AH~5DH 分別存放著秒表模式下1~4號管要顯示的數字的段碼
其中,1號管——秒的十分位
2號管——秒的個位
3號管——秒的十位
4號管——分的個位
R7的初值為20,控制定時器T0的中斷次數,T0中斷1次定時50ms,20次定時1s;
R0用來記錄秒;
詳見附件
四、總結
因為平時對于電路設計這方面的訓練比較少,電路也是自己最薄弱的地方。因此,在第一天拿到器件以后完全沒有方向,不知道從哪里開始設計。后來通過自己上網搜索資料,逐漸摸索出了思路,最終完成了電路的設計。
電路設計完之后,在面包板上搭建也讓我犯了難。什么器件應該放在哪個位置,這么放插孔夠不夠用,這么放連線方不方便成了我一直頭疼的問題。后來通過觀察上一屆學長的面包板和同學的討論,終于搭好了板子。但是因為對于面包板不熟悉,搭小燈泡時,把它的兩個引腳插在了聯通的兩個孔里,導致小燈泡一直不亮;插按鍵的時候也是,沒有搞清楚按鍵和面包板的構造,把按鍵的兩邊引腳都插在聯通的一排里,導致后面在驗證的時候出現了數碼管一直不亮的問題,后來經過老師的指導,解決了這個問題。
軟件的編寫可能是最困難的一個部分了。雖然之前有做過單片機實驗,寫過代碼,但是,實驗的代碼非常簡短,實現的功能很簡單。這次因為要實現很多功能,一開始我想偷懶,直接寫了代碼。這樣就導致了我的思路不成熟,運行下來有很多地方都是錯誤的。因此我才意識到,直接寫代碼是不可能的,要先畫流程圖理清思路。在我畫完流程圖以后,再會過去看我原來的代碼,才知道有多么的混亂。后來經過我分模塊的編寫,最后把它們匯總到一起,構成了最后的代碼,開始調試。
首先,我先在WAVE軟件里寫了一個最小系統的代碼,再通過wellon軟件,燒制到AT89C52單片機上,對最小系統進行測試。測試時發現小燈和蜂鳴器都沒有正常的工作。因為當時剛剛開始,并不知道該如何調試,就馬上叫老師了,老師發現小燈的兩個引腳插在了聯通的兩個孔里,才導致了不亮。當我把小燈的引腳插在其他地方時,燈就亮了。至于蜂鳴器不響的問題,我用萬用表測試了蜂鳴器周圍的所有電路發現都是正確的,測試蜂鳴器兩端的電壓,發現也是有電壓差的,我的代碼又沒有問題,一時不知道怎么辦才好。后來,我又連接電源,讓電路運行了一次,發現其實蜂鳴器是發出聲音的,只是很微弱以至于我們都把它忽略了。然后我就想是不是因為蜂鳴器兩端電壓太小導致的。于是,我就把和蜂鳴器相連接的電阻拿掉了,終于蜂鳴器也響了。最小系統測試完成。
后來,老師教我們使用了仿真器,這讓整個調試過程變得方便了許多。當我把整個代碼都編譯到仿真器里面時,板子上的數碼管沒有任何反應,但是換成同學的板子就可以顯示,這讓我覺得很不可思議。當我又寫了段測試數碼管的程序,讓它顯示的時候,數碼管也是可以正確顯示的。我實在想不出辦法,決定單步運行,看看到底哪里出現了問題。但是我單步運行了幾次,都沒有發現哪里有問題,于是只能求助于老師。老師通過設斷點的方法發現,我的按鍵完全沒有實現它的功能,于是就詢問我怎么安裝的按鍵,這才找出了原因,原來我的按鍵的安裝方向錯了。在改正了之后,我的數碼管就能正常的顯示了。
數碼管顯示之后,我發現我的鬧鐘到了指定時間不會響,然后我仔細再看了我的代碼,發現雖然寫了鬧鈴的子程序,但是在主程序里面并沒有調用,這才導致了鬧鐘不響。在有加了一句調用語句以后,鬧鐘就能正常工作了。
當我把前一天調試好的程序第二天再用仿真器進行測試時,發現蜂鳴器只要一通電就響了,完全不受程序的控制。為什么我程序一點都沒改過但是再次驗證又失敗了呢?我又拿了同學的板子做測試,發現她跟我是一樣的問題,于是我就想會不會是仿真器的問題。于是,我又拿了另一個仿真器測試了一下,發現程序是正常運行的;我又把蜂鳴器接在了第一個仿真器的P3口進行實驗,發現程序也是正常運行的。因此,我認為是第一個仿真器的P1口壞了。
通過這次課程設計,我對單片機有了更加深刻的認識,體會到了單片機的強大。同時,從設計電路圖到最后的驗證成功,在這整個過程中遇到了很多的問題,當遇到問題時我認為最重要的還是冷靜下來自己思考,仔細的檢查。因為很多的問題的出現大部分程度上是因為自己的不仔細。一個地方的出錯可能就導致了整個數碼管的不顯示,整個程序的實現不了功能。當出現了問題時,應該自己默默地看代碼,仔仔細細地觀察,看看到底哪里出現了問題,因為自己的代碼只有自己知道具體哪里是干什么的,自己檢查出來錯誤才會有成就感。總之,通過這次課程設計,我學習到了很多,也意識到了自己在動手方面的不足,希望在以后的學習中能改正這一缺點。
程序清單:
- ORG 0000H
- AJMP MAIN
- ORG 000BH
- LJMP TIME ;時鐘程序
- ORG 001BH
- LJMP IT1P ;IT1P用于秒表計時
- ORG 0030H
- MAIN: MOV SP,#60H ;堆棧指針初始化
- MOV IE,#8AH ;允許T0和T1中斷
- MOV TMOD,#11H ;T0和T1均工作在方式1
- MOV TL0,#0B0H ;給T0裝初值,中斷一次定時50ms
- MOV TH0,#3CH
- MOV R0,#0 ;用R0記錄秒
- MOV R7,#20 ;中斷20次,定時1s
- MOV 31H,#00H ;時間初始化,顯示器顯示:00:00
- MOV 32H,#00H
- MOV 33H,#00H
- MOV 34H,#00H
- MOV 3AH,#0C0H
- MOV 3BH,#0C0H
- MOV 3CH,#0C0H
- MOV 3DH,#0C0H
- MOV 41H,#00H ;鬧鐘初始化,定在00:00時刻
- MOV 42H,#00H
- MOV 43H,#00H
- MOV 44H,#00H
- MOV 4AH,#0C0H
- MOV 4BH,#0C0H
- MOV 4CH,#0C0H
- MOV 4DH,#0C0H
- MOV DPTR,#TAB ;段碼表首地址傳給DPTR
- SETB P1.0
- SETB TR0
- START1: JB P2.7,NEXT1 ;按鍵1調時
- LCALL DEL1 ;調用延時程序,消除按鍵抖動
- JB P2.7,NEXT1
- JNB P2.7,[ DISCUZ_CODE_1 ]nbsp; ;等待按鍵彈開
- LCALL KEY1
- NEXT1: JB P2.6,NEXT2 ;按鍵2調分
- LCALL DEL1
- JB P2.6,NEXT2
- JNB P2.6,$
- LCALL KEY2
- NEXT2: JB P2.5,NEXT3 ;按鍵3設置鬧鐘
- LCALL DEL1
- JB P2.5,NEXT3
- JNB P2.5,$
- LCALL KEY3
- NEXT3: LCALL NAOZHONG ;鬧鐘響鈴程序,當前時間與鬧鐘時間相同則響鈴
- JB P2.4,DSPLY1 ;按鍵4秒表
- LCALL DEL1
- JB P2.4,DSPLY1
- JNB P2.4,$
- LCALL KEY4
-
- DSPLY1: ;顯示時間
- MOV P2,#0FEH ;1號管顯示分的個位
- MOV P0,3AH
- LCALL DEL2
- MOV P2,#0FDH ;2號管顯示分的十位
- MOV P0,3BH
- LCALL DEL2
- MOV P2,#0FBH ;3號管顯示時的個位
- MOV P0,3CH
- CLR P0.7 ;點亮3號管后的小數點,區別時和分
- LCALL DEL2
- MOV P2,#0F7H ;4號管顯示時的十位
- MOV P0,3DH
- LCALL DEL2
- LJMP START1
-
- TIME: ;時鐘程序
- DJNZ R7,LOOP1
- MOV R7,#20
- INC R0
- CJNE R0,#60,LOOP1
- MOV R0,#00H
- INC 31H
- MOV R1,31H
- CJNE R1,#10,TABLP1
- MOV 31H,#00H
- INC 32H
- MOV R1,32H
- CJNE R1,#6,TABLP1
- MOV 32H,#00H
- LCALL BAOSHI
- INC 33H
- MOV R1,33H
- MOV R2,34H
- CJNE R2,#2,LOOP2 ;判斷時的十位是否為2,若不是跳轉到LOOP2
- CJNE R1,#4,TABLP1 ;接著判斷時的個位是否為4,若不是查表獲取段碼
- MOV 33H,#00H ;若為24時,則將時的個位和十位清零
- MOV 34H,#00H
- SJMP TABLP1
- LOOP2: CJNE R1,#10,TABLP1
- MOV 33H,#00H
- INC 34H
- TABLP1: MOV A,31H
- MOVC A,@A+DPTR
- MOV 3AH,A ;分的個位的段碼
- MOV A,32H
- MOVC A,@A+DPTR
- MOV 3BH,A ;分的十位的段碼
- MOV A,33H
- MOVC A,@A+DPTR
- MOV 3CH,A ;時的個位的段碼
- MOV A,34H
- MOVC A,@A+DPTR
- MOV 3DH,A ;時的十位的段碼
- LOOP1: MOV TL0,#0B0H ;給T0重裝初值
- MOV TH0,#3CH
- RETI
-
- DEL1: ;按鍵去抖延時程序(約10ms)
- MOV R6,#20
- DEL11: MOV R5,#248
- DJNZ R5,$
- DJNZ R6,DEL11
- RET
-
- DEL2: ;動態顯示延時程序(約5ms)
- MOV 2CH,#10
- DEL21: MOV 2BH,#248
- DJNZ 2BH,$
- DJNZ 2CH,DEL21
- RET
-
- KEY2: ;調分程序
- MOV R0,#0 ;秒清零,使校時更加精準
- MOV R7,#20
- INC 31H ;分的個位增1
- MOV R1,31H
- CJNE R1,#10,TABLP2
- MOV 31H,#00H
- INC 32H
- MOV R1,32H
- CJNE R1,#6,TABLP2
- MOV 32H,#00H
- TABLP2: MOV A,31H
- MOVC A,@A+DPTR
- MOV 3AH,A ;時鐘分的個位的段碼
- MOV A,32H
- MOVC A,@A+DPTR
- MOV 3BH,A ;時鐘分的十位的段碼
- RET
-
-
-
- KEY1: ;調時程序
- INC 33H ;時的個位增1
- MOV R1,33H
- MOV R2,34H
- CJNE R2,#2,LOOP3
- CJNE R1,#4,TABLP3
- MOV 33H,#00H
- MOV 34H,#00H
- AJMP TABLP3
- LOOP3: CJNE R1,#10,TABLP3
- MOV 33H,#00H
- INC 34H
- TABLP3: MOV A,33H
- MOVC A,@A+DPTR
- MOV 3CH,A ;時的個位的段碼
- MOV A,34H
- MOVC A,@A+DPTR
- MOV 3DH,A ;時的十位的段碼
- RET
-
- KEY3: ;鬧鐘設置程序
- START2: JB P2.5,NEXT4 ;判斷是否完成鬧鐘設置
- LCALL DEL1
- JB P2.5,NEXT4
- JNB P2.5,$
- LJMP EXIT1
- NEXT4: JB P2.7,NEXT5 ;按鍵1鬧鐘調時
- LCALL DEL1
- JB P2.7,NEXT5
- JNB P2.7,$
- LCALL AKEY1
- NEXT5: JB P2.6,DSPLY2 ;按鍵2鬧鐘調分
- LCALL DEL1
- JB P2.6,DSPLY2
- JNB P2.6,$
- LCALL AKEY2
- DSPLY2: MOV P2,#0FEH ;1號管顯示鬧鐘分的個位
- MOV P0,4AH
- CLR P0.7 ;點亮1號管后面的小數點,區分時鐘和鬧鐘
- LCALL DEL2
- MOV P2,#0FDH ;2號管顯示鬧鐘分的十位
- MOV P0,4BH
- LCALL DEL2
- MOV P2,#0FBH ;3號管顯示鬧鐘時的個位
- MOV P0,4CH
- CLR P0.7 ;點亮3號管后面的小數點,區別時和分
- LCALL DEL2
- MOV P2,#0F7H ;4號管顯示鬧鐘時的十位
- MOV P0,4DH
- LCALL DEL2
- LJMP START2
- EXIT1: RET
-
- AKEY2: ;鬧鐘調分程序
- INC 41H
- MOV R3,41H
- CJNE R3,#10,TABLP4
- MOV 41H,#00H
- INC 42H
- MOV R3,42H
- CJNE R3,#6,TABLP4
- MOV 42H,#00H
- TABLP4: MOV A,41H
- MOVC A,@A+DPTR
- MOV 4AH,A ;鬧鐘分的個位的段碼
- MOV A,42H
- MOVC A,@A+DPTR
- MOV 4BH,A ;鬧鐘分的十位的段碼
- RET
-
-
- AKEY1: ;鬧鐘調時程序
- INC 43H
- MOV R3,43H
- MOV R4,44H
- CJNE R4,#2,LOOP4
- CJNE R3,#4,TABLP5
- MOV 43H,#00H
- MOV 44H,#00H
- AJMP TABLP5
- LOOP4: CJNE R3,#10,TABLP5
- MOV 43H,#00H
- INC 44H
- TABLP5: MOV A,43H
- MOVC A,@A+DPTR
- MOV 4CH,A ;鬧鐘時的個位的段碼
- MOV A,44H
- MOVC A,@A+DPTR
- MOV 4DH,A ;鬧鐘時的十位的段碼
- RET
-
- NAOZHONG: ;鬧鐘響鈴程序
- MOV A,31H ;當前時間與鬧鐘設定時間相同則響鈴
- CJNE A,41H,OFF
- MOV A,32H
- CJNE A,42H,OFF
- MOV A,33H
- CJNE A,43H,OFF
- MOV A,34H
- CJNE A,44H,OFF
- CLR P1.0
- AJMP ON
- OFF: SETB P1.0
- ON: RET
- KEY4: ;秒表程序
- MOV 51H,#00H ;秒的十分位
- MOV 52H,#00H ;秒的個位
- MOV 53H,#00H ;秒的十位
- MOV 54H,#00H ;分的個位
- MOV 5AH,#0C0H ;秒表初始化,顯示器顯示:0:00.0
- MOV 5BH,#0C0H
- MOV 5CH,#0C0H
- MOV 5DH,#0C0H
- MOV TL1,#0B0H ;T1裝初值,中斷一次計時50ms
- MOV TH1,#3CH
- MOV R4,#2 ;中斷兩次,定時0.1s
- SETB PT1 ;設T1為高優先級中斷
- CLR TR1
- START3: JB P2.4,NEXT6 ;判斷是否退出秒表模式
- LCALL DEL1
- JB P2.4,NEXT6
- JNB P2.4,$
- LJMP EXIT2
- NEXT6: JB P2.7,NEXT7 ;秒表開始/暫停
- LCALL DEL1
- JB P2.7,NEXT7
- JNB P2.7,$
- CPL TR1
- NEXT7: JB P2.6,DSPLY3 ;秒表清零
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整的論文下載(word格式可編輯):
11111.doc
(684 KB, 下載次數: 51)
2017-4-12 13:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: fxhfxh 時間: 2017-4-12 19:26
匯編寫的,以前的了.可以參考.
作者: doublercloud 時間: 2017-12-23 10:12
參考 看看
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
成人免费观看男女羞羞视频
|
av一区二区在线观看
|
国产精品久久久久久一区二区三区
|
国产激情视频在线观看
|
国产精品久久久免费
|
亚洲精品乱码久久久久久9色
|
精久久久
|
中文天堂在线观看
|
国产精品精品视频
|
国产成人区|
一区二区三区视频在线观看
|
99re视频|
久久久久久久久久影视
|
在线成人免费视频
|
99国产精品视频免费观看一公开
|
羞羞视频免费观看
|
久久久久久99
|
福利视频一区
|
国产95在线
|
久久精品国产免费
|
欧美伊人影院
|
欧美激情在线观看一区二区三区
|
视频在线一区二区
|
国产一级一级
|
亚洲视频www
|
国产成人精品一区二区三区
|
精品中文字幕一区
|
91视频网址
|
精品视频久久久
|
日韩精品一区二区三区在线
|
午夜视频免费在线观看
|
天天干夜夜操
|
欧美一区二区在线免费观看
|
yiren22 亚洲综合
|
大乳boobs巨大吃奶挤奶
|
久草综合在线视频
|
国产精品久久国产精品
|
精品美女久久久久久免费
|
午夜资源
|
免费黄色大片
|
蜜桃视频在线观看免费视频网站www
|