仿真圖:
系統采用通用的80C51芯片,顯示器為6個共陽極LED數碼管,用1個BCD 7段譯碼器74LS47驅動數碼管(74LS47的輸入為BCD碼,其輸出級為集電極開路輸出,可直接驅動7段譯碼管,具有首尾消零等特點),用3-8譯碼器74LS138的輸出作為動態掃描時數碼管的選通信號,因為采用了上述兩個芯片,所以在對數碼管進行掃描顯示時,只需要單片機的7條I/O線就能完成顯示功能了。
選用P0.0--P0.3作為顯示數據值的輸出,連接在BCD 7段譯碼器74LS47的BCD碼輸入端,P0.4--P0.6作為掃描值的輸出連接在3-8譯碼器74LS138的輸入端(74LS138的A、B、C),因此,寫程序時應以P0口高4位為位掃描值,低4位為顯示數據值(分離BCD碼)。由于LED數據管點亮時耗電量較大,因此使用了排阻作為電源驅動輸出,以保證數碼管的正常亮度。單片機的P1.0--P1.5口分別接在S1--S6 6個按鍵上,以控制“時”,“分”,“秒”的調整。
時間以24小時為一個周期,數字時鐘鐘的格式為:XX XX XX,由左向右分別為:時、分、秒。完成顯示由秒加1,一直加1至59,再恢復為00;分加1,一直加1至59,再恢復00;時加1,一直加1至23,再恢復00。
***** 按鍵功能*****
1.啟動時,數字時鐘從23:59:00 開始自動計時;
2.按鍵S1控制對“時”的調整,每按一次時計數值加1;
3.按鍵S2控制對“分”的調整,每按一次分計數值加1;
4.按鍵S3控制對“秒”的調整,每按一次秒計數值加1;
5.按鍵S4控制對“時”的調整,每按一次時計數值減1;
6.按鍵S5控制對“分”的調整,每按一次分計數值減1;
7.按鍵S6控制對“秒”的調整,每按一次秒計數值減1。
課程設計報告內容預覽:
單片機源程序如下:
- ORG 0000H
- LJMP START
- ORG 000BH
- LJMP TT0
- ORG 0050H
- START:
- MOV SP,#70H
- MOV 36H,#00H ;(36H)為掃描指針
- MOV 40H,#00H ;秒控制
- MOV 41H,#59H ;分控制
- MOV 42H,#23H ;時控制
- MOV 30H,#00H
- MOV 31H,#00H ;顯示秒
- MOV 32H,#09H
- MOV 33H,#05H ;顯示分
- MOV 34H,#03H
- MOV 35H,#02H ;顯示時
- MOV TMOD,#01H ;定時器T0工作方式設定
- MOV TL0,#0B0H ;設置定時器T0低4位初值
- MOV TH0,#3CH ;設置定時器T0高4位初值
- MOV IE,#82H ;閉合EA,ET0
- MOV 50H,#20 ;定時1秒循環次數
- SETB TR0
- LOOP: JB P1.0,N2 ;S1按下時加1
- CALL DE ;消除抖動
- MOV A,42H
- ADD A,#01H
- DA A
- MOV 42H,A
- CJNE A,#24H,N1
- MOV 42H,#00H
- N1: JNB P1.0,$
- CALL DE
- N2: JB P1.1,N4 ;S2按下分加1
- CALL DE
- MOV A,41H
- ADD A,#01H
- DA A
- MOV 41H,A
- CJNE A,#60H,N3
- MOV 41H,#00H
- N3: JNB P1.1,$
- CALL DE
- N4: JB P1.2,N6 ;S3按下秒加1
- CALL DE
- MOV A,40H
- ADD A,#01H
- DA A
- MOV 40H,A
- CJNE A,#60H,N5
- MOV 40H,#00H
- N5: JNB P1.2,$
- CALL DE
- N6: JB P1.3,N8 ;S4按下時減1
- CALL DE
- MOV R7,34H
- CJNE R7,#00H,N60
- MOV R6,35H
- CJNE R6,#00H,N61
- MOV 42H,#23H
- JMP N7
- N60: MOV A,34H
- DEC A
- MOV 34H,A
- MOV A,35H
- SWAP A
- ADD A,34H
- MOV 42H,A
- JMP N7
- N61: MOV 34H,#09H
- MOV A,35H
- DEC A
- SWAP A
- ADD A,34H
- MOV 42H,A
- N7: JNB P1.3,$
- CALL DE
- N8: JB P1.4,N10 ;S5按下分減1
- CALL DE
- MOV R7,32H
- CJNE R7,#00H,N80
- MOV R6,33H
- CJNE R6,#00H,N81
- MOV 41H,#59H
- JMP N9
- N80: MOV A,32H
- DEC A
- MOV 32H,A
- MOV A,33H
- SWAP A
- ADD A,32H
- MOV 41H,A
- JMP N9
- N81: MOV 32H,#09H
- MOV A,33H
- DEC A
- SWAP A
- ADD A,32H
- MOV 41H,A
- N9: JNB P1.4,$
- CALL DE
- N10: JB P1.5,N11 ; S6按下秒減1
- CALL DE
- MOV R7,30H
- CJNE R7,#00H,N100
- MOV R6,31H
- CJNE R6,#00H,N101
- MOV 40H,#59H
- JMP N11
- N100: MOV A,30H
- DEC A
- MOV 30H,A
- MOV A,31H
- SWAP A
- ADD A,30H
- MOV 40H,A
- JMP N11
- N101: MOV 30H,#09H
- MOV A,31H
- DEC A
- MOV 31H,A
- SWAP A
- ADD A,30H
- MOV 40H,A
- N11: JNB P1.5,$
- CALL DE
-
- TT0: MOV TH0,#3CH
- MOV TL0,#0B0H
- PUSH ACC
- PUSH PSW
- DJNZ 50H,TINT0
- CALL TIME
- CALL VIEW
- TINT0: CALL SCAN
- POP ACC
- POP PSW
- LJMP LOOP
- SCAN: MOV R0,#36H
- SCAN0: MOV A,@R0
- ADD A,#30H ;A加30H即為顯示緩沖區地址
- MOV R1,A
- MOV A,@R0
- SWAP A
- ORL A,@R1
- MOV P0,A ;P0高4位為掃描值,低4位為顯示數據值
- CALL DELAY
- INC @R0
- CJNE @R0,#06H,SCAN0
- MOV @R0,#00H
- RET
- TIME: MOV A,40H
- ADD A,#01H
- DA A
- MOV 40H,A
- CJNE A,#60H,TTI
- MOV 40H,#00H
- MOV A,41H
- ADD A,#01H
- DA A
- MOV 41H,A
- MOV A,41H
- CJNE A,#60H,TTI
- MOV 41H,#00H
- MOV A,42H
- ADD A,#01H
- DA A
- MOV 42H,A
- CJNE A,#24H,TTI
- MOV 42H,#00H
- TTI: RET
- VIEW: MOV A,40H ;30H為顯示緩沖區首地址
- ANL A,#0FH
- MOV 30H,A
- MOV A,40H
- SWAP A
- ANL A,#0FH
- MOV 31H,A
- MOV A,41H
- ANL A,#0FH
- MOV 32H,A
- MOV A,41H
- SWAP A
- ANL A,#0FH
- MOV 33H,A
- MOV A,42H
- ANL A,#0FH
- MOV 34H,A
- MOV A,42H
- SWAP A
- ANL A,#0FH
- MOV 35H,A
- RET
- DELAY: MOV R7,#65
- DJNZ R7,$
- RET
- DE: MOV R4,#10 ;延時5ms
- DE1: MOV R5,#249
- DJNZ R5,$
- DJNZ R4,DE1
- RET
- END
復制代碼
所有資料51hei提供下載:
單片機課程設計可運行.zip
(393.35 KB, 下載次數: 82)
2017-6-13 19:41 上傳
點擊文件名下載附件
數字時鐘
|