|
這里上傳了基于89c51單片機(jī)的時(shí)鐘的課程設(shè)計(jì)包括原理圖和代碼
51單片機(jī)時(shí)鐘仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
原理圖
部分代碼截圖
單片機(jī)源程序如下:
- ORG 0000H
- AJMP MAIN
- ORG 000BH
- LJMP INTT0
- ORG 0030H
- MAIN:
- MOV SP,#60H ;確立堆棧區(qū)
- MOV PSW,#00H
- MOV R0,#20H ;RAM區(qū)首地址
- MOV R7,#5FH ;RAM區(qū)單元個(gè)數(shù)
- QL:
- MOV @R0,#00H ;RAM清零
- INC R0
- DJNZ R7,QL
- MOV IP,#02H ;IP初始化,優(yōu)先定時(shí)器0
- MOV IE,#82H ;IE初始化
- MOV TMOD,#01H ;定時(shí)器0方式1工作
- LCALL PP ;調(diào)P.子程序
- NEXT:
- LCALL KEY ;按鍵檢測子程序
- JB ACC.0,RUNF ;A鍵按下運(yùn)行
- LCALL DISP ;調(diào)用顯示子程序
- SJMP NEXT
- RUNF:
- LCALL OUTT ;調(diào)傳送子程序
- LCALL TIME ;開電子鐘
- JK:
- LCALL DISP
- LCALL KEY
- JZ JK
- LCALL ANKEY ;調(diào)用鍵功能子程序
- LCALL DISP
- SJMP JK
- ;P點(diǎn)顯示的8LED段碼初始化子程序
- PP:
- MOV 37H,#12 ;P點(diǎn)編碼送寄存器,對應(yīng)最左LED (共陽極,0CH )
- MOV R0,#30H ;第8個(gè)LED,最右LED,段碼存儲(chǔ)的地址
- MOV R7,#07H ;第8到第2個(gè)LED,共7個(gè),初始化段碼顯示空白
- PPP:
- MOV @R0,#10 ;顯示空白
- INC R0
- DJNZ R7,PPP
- RET
- ;鍵掃描子程序
- KEY:
- LCALL KEYS ;調(diào)用鍵值處理子程序
- JZ EXIT ;沒有鍵按下轉(zhuǎn)到返回
- LCALL DISP
- LCALL DISP ;調(diào)用顯示去抖動(dòng)
- LCALL KEYS
- JZ EXIT
- MOV B,20H ;保存鍵值
- KEYSF:
- LCALL KEYS
- JZ KEYY ;鍵釋放,轉(zhuǎn)到恢復(fù)鍵值
- LCALL DISP ;調(diào)顯示子程序延時(shí)
- AJMP KEYSF ;等到鍵釋放
- KEYY:
- MOV A,B ;鍵值送A
- EXIT:RET
- KEYS:
- MOV P1,#0FFH ;先向P1口寫1
- MOV A,P1 ;P1口值送A (有按鍵按下,對應(yīng)0,取反后1)
- CPL A
- ANL A,#0FH ;保存P1口的低4位
- MOV 20H,A ;A值送20H保存
- RET
- ;鍵功能子程序
- ANKEY:
- CLR EA ;關(guān)中斷
- CHECK:
- JB TR0,YXZ ;判斷是否運(yùn)行
- K0:
- CJNE A,#01H,K1
- AJMP RUN ;A鍵按下,恢復(fù)運(yùn)行,轉(zhuǎn)運(yùn)行
- K1:
- CJNE A,#02H,K2
- AJMP KEY1 ;轉(zhuǎn)時(shí)調(diào)整
- K2:
- CJNE A,#40H,K3
- AJMP KEY2 ;轉(zhuǎn)分調(diào)整
- K3:
- CJNE A,#08H,OUT ;轉(zhuǎn)
- AJMP KEY3 ;轉(zhuǎn)秒調(diào)整
- YXZ:
- JB ACC.0,STOP ;A鍵按下,暫停
- AJMP OUT
- KEY1:
- MOV R0,#45H ;時(shí)調(diào)整
- LCALL ADD1 ;調(diào)加一子程序
- CLR C
- CJNE A,#24H,OUTT ;轉(zhuǎn)傳送顯示數(shù)據(jù)子程序
- ACALL CLR0 ;調(diào)時(shí)間清理子程序
- AJMP OUTT
- KEY2:
- MOV R0,#43H ;分調(diào)整
- LCALL ADD1
- CLR C
- CJNE A,#60H,OUTT
- ACALL CLR0
- AJMP OUTT
- KEY3:
- MOV R0,#41H ;秒調(diào)整
- ACALL ADD1
- CLR C
- CJNE A,#60H,OUTT
- ACALL CLR0
- ;傳送顯示數(shù)據(jù)子程序
- OUTT:
- MOV 30H,40H ;秒顯示單元40H-41H
- MOV 31H,41H
- MOV 32H,#11 ;"-"
- MOV 33H,42H ;分顯示單元42H-43H
- MOV 34H,43H
- MOV 35H,#11 ;"-"
- MOV 36H,44H ;時(shí)顯示單元44H-45H
- MOV 37H,45H
- RET
- STOP:
- CLR TR0
- RET
- RUN:
- LCALL TIME ;調(diào)運(yùn)行電子鐘子程序
- OUT:
- SETB EA ;無鍵按下或完成功能跳出
- RET
- ;運(yùn)行電子鐘子程序
- TIME:
- SETB EA
- MOV TL0,#0B0H ;3CB0H
- MOV TH0,#3CH
- MOV R4,#20 ;50ms,20次循環(huán)
- SETB TR0 ;啟動(dòng)定時(shí)器0
- RET
- ;定時(shí)器0中斷處理子程序
- INTT0:
- PUSH ACC
- PUSH PSW
- CLR ET0
- CLR TR0
- MOV TL0,#0B0H ;重新設(shè)置定時(shí)初值
- MOV TH0,#3CH
- SETB TR0
- DJNZ R4,OUTT0 ;r4-1 != 0 1秒未到,轉(zhuǎn)OUTTO
- ADDSS:
- MOV R4,#14H ;20次計(jì)數(shù)
- MOV R0,#41H ;秒十位
- ACALL ADD1
- CLR C
- CJNE A,#60H,ADDMM ;1分到
- ADDMM:
- JC OUTT0 ;1分,60秒未到
- ACALL CLR0 ;1分到,清零
- MOV R0,#43H ;分十位
- ACALL ADD1
- CLR C
- CJNE A,#60H,ADDHH ;1小時(shí)到
- ADDHH:
- JC OUTT0
- ACALL CLR0
- MOV R0,#45H ;時(shí)十位
- ACALL ADD1
- CLR C
- CJNE A,#24H,HOUR ;1天到
- HOUR:
- JC OUTT0
- ACALL CLR0
- OUTT0:
- MOV 30H,40H ;秒顯示單元40H-41H
- MOV 31H,41H
- MOV 32H,#11 ;"-"
- MOV 33H,42H ;分顯示單元42H-43H
- MOV 34H,43H
- MOV 35H,#11 ;"-"
- MOV 36H,44H ;時(shí)顯示單元44H-45H
- MOV 37H,45H
- POP PSW
- POP ACC
- SETB ET0
- RETI
- ;時(shí)間清理子程序
- CLR0:
- CLR A
- MOV @R0,A
- DEC R0
- MOV @R0,A
- RET
- ;加一子程序
- ADD1:
- MOV A ,@R0 ;取十位
- DEC R0
- SWAP A
- ORL A,@R0 ;組合十位與個(gè)位
- ADD A,#01H ;加1
- DA A ;十進(jìn)制調(diào)整
- MOV R3,A ;暫存
- ANL A,#0FH ;屏蔽十位
- MOV @R0,A ;放入個(gè)位單元
- MOV A,R3 ;取值
- INC R0
- SWAP A
- ANL A,#0FH ;屏蔽個(gè)位
- MOV @R0,A ;放入十位單元
- MOV A,R3 ;數(shù)值放入A中等待判斷
- RET
- ;顯示子程序
- DISP:
- MOV R1,#30H ;顯示緩沖存儲(chǔ)單元首地址,30H-37H
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
時(shí)鐘.zip
(62.13 KB, 下載次數(shù): 95)
2018-5-9 20:05 上傳
點(diǎn)擊文件名下載附件
|
|