基于AT89S52單片機數字鐘的設計
新人不好的話原諒啊
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.jpg (117.17 KB, 下載次數: 68)
下載附件
2018-1-11 17:23 上傳
0.jpg (16.27 KB, 下載次數: 70)
下載附件
2018-1-11 17:23 上傳
單片機匯編語言源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 000BH
- LJMP DINGSHI
- ORG 001BH
- LJMP TIAOSHI
- STYLE BIT P3.0 ;模式健
- PLUS BIT P3.1 ;加鍵
- MINUS BIT P3.2 ;減鍵
- SHI EQU 30H ;時針
- FEN EQU 31H ;分針
- MIAO EQU 32H ;鈔針
- MAIN:
- MOV SHI , #00H
- MOV FEN , #00H
- MOV MIAO , #00H
- MOV 33H,#00H ;時鐘掃描
- MOV 34H,#00H ;分鐘掃描
- MOV 35H,#00H ;秒鐘掃描
- MOV 36H,#00H ;時鐘掃描計數
- MOV 37H,#00H ;時鐘掃描閃爍
- MOV 38H,#00H ;分鐘掃描計數
- MOV 39H,#00H ;分鐘掃描閃爍
- MOV 3AH,#00H ;秒鐘掃描計數
- MOV 3BH,#00H ;秒鐘掃描閃爍
- MOV 3CH,#00H ;定時
- MOV 3DH, #00H ;模式
- MOV 40H, #00H ;消抖
- MOV SP, #50H ;堆棧指針
- MOV DPTR, #TABLE ;查找表首地址
- MOV TH0, #(65535-20000)/256 ;定時器初值
- MOV TL0, #(65535-20000) MOD 256
- MOV TH1, #(65535-20000)/256
- MOV TL1, #(65535-20000) MOD 256
- MOV TMOD, #11H ;定時器工作方式設置,T0,T0設置為方式一
- SETB PT0 ;設置T0為高優先級
- SETB ET0 ;開定時器中斷
- SETB ET1
- SETB TR0 ;啟動定時器
- SETB TR1
- SETB EA ;開總中斷
- DISPLAY:
- MOV A, 33H
- CJNE A,#00,X1 ;判斷時針是否掃描
- MOV P2, #7FH ;選通數碼管時鐘的十位
- MOV A, SHI
- MOV B, #10
- DIV AB ;把時針的十位個位分離
- MOVC A, @A+DPTR ;把時針的十位放在累加器A中
- MOV P1,A ;顯示時針的十位
- LCALL DELAY ;延時
- MOV P2,#0BFH ;選通時針的個位
- MOV A, B
- MOVC A,@A+DPTR
- MOV P1,A
- LCALL DELAY
- MOV A, 37H
- CJNE A,#01,X3 ;判斷是否閃爍
- X1:
- INC 36H
- MOV A, 36H
- CJNE A,#10,X2
- MOV 33H, #00
- X2:
- CJNE A,#20,X3
- MOV 36H, #00
- MOV 33H, #01
- X3:
- MOV P2, #0DFH ;顯示分隔符
- MOV A, #40H
- MOV P1, A
- LCALL DELAY
- MOV A, 34H ;分針的顯示
- CJNE A,#00,F1
- MOV P2, #0EFH
- MOV A, FEN
- MOV B, #10
- DIV AB
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV P2, #0F7H
- MOV A, B
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV A, 39H
- CJNE A,#01H ,F3
- F1:
- INC 36H
- MOV A, 36H
- CJNE A,#10, F2
- MOV 34H, #00H
- F2:
- CJNE A,#20H,F3
- MOV 36H, #00H
- MOV 34H, #01H
- F3:
- MOV P2, #0FBH ;顯示分隔符
- MOV A, #40H
- MOV P1, A
- LCALL DELAY
- MOV A,35H
- CJNE A,#00H ,M1
- MOV P2, #0FDH ;秒針的顯示
- MOV A, MIAO
- MOV B, #10
- DIV AB
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV P2, #0FEH
- MOV A, B
- MOVC A, @A+DPTR
- MOV P1, A
- LCALL DELAY
- MOV A, 3BH
- CJNE A,#01,M3
- M1:
- INC 3AH
- MOV A, 3AH
- CJNE A,#10,M2
- MOV 35H, #00H
- M2:
- CJNE A,#20H,M3
- MOV 3AH, #00H
- MOV 35H, #01H
- M3:
- LJMP DISPLAY
- DINGSHI:
- PUSH ACC
- PUSH PSW
- MOV TH0, #(65535-20000)/256 ;定時器賦初值
- MOV TL0, #(65535-20000) MOD 256
- INC 3CH
- MOV A, 3CH
- CJNE A,#50,J1 ;判斷是否為一秒,若為一秒順序執行,否發生跳轉
- MOV 3CH, #00H ;定時次數清零
- INC MIAO ;秒針加一
- MOV A, MIAO
- CJNE A,#60, J1 ;判斷是否為一分
- MOV MIAO, #00 ;秒針清零
- INC FEN ;分針加一
- MOV A, FEN
- CJNE A,#60,J1 ;判斷是否為一時
- MOV FEN, #00H ;分針清零
- INC SHI ;時針加一
- MOV A, SHI
- CJNE A,#24,J1 ;判斷是否溢出
- MOV SHI, #00H ;時針清零
- J1:
- CLR ET0
- POP ACC
- POP PSW
- SETB ET0
- RETI
- TIAOSHI:
- PUSH ACC
- PUSH PSW
- MOV TH1, #(65535-20000)/256 ;定時器賦初值
- MOV TL1, #(65535-20000) MOD 256
- JB STYLE, G1 ;判斷模式鍵是否按下
- INC 40H ;清抖
- MOV A, 40H
- CJNE A,#10,G1
- JB STYLE ,G1 ;模式鍵真的被按下
- MOV 40H,#00
- INC 3DH ;模式鍵加一
- MOV A, 3DH
- CJNE A,#01,A1 ;判斷是否為模式一
- MOV 33H,#01 ;時針掃描判斷
- MOV 37H,#01 ;時針掃描閃爍判斷
- A1:CJNE A,#02,A2 ;模式是否為二
- MOV 33H,#00
- MOV 37H,#00
- MOV 34H,#01
- MOV 39H,#01
- A2:CJNE A,#03,A3 ;模式是否為三
- MOV 34H,#00
- MOV 39H,#00
- MOV 35H,#01
- MOV 3BH,#01
- A3:CJNE A,#04,G1 ;模式是否為四,為四正常走時
- MOV 3DH,#00
- MOV 35H,#00
- MOV 3BH,#00
- G1:JB PLUS,B1 ;判斷加鍵是否按下
- INC 40H ;消抖
- MOV A, 40H
- CJNE A,#11,B1
- JB PLUS ,B1
- MOV 40H,#00
- MOV A,3DH
- CJNE A,#01,C1 ;若為模式一,時針加一
- INC SHI
- MOV A, SHI
- CJNE A,#24,B1
- MOV SHI,#00
- C1: CJNE A,#02,C2 ;若為模式二,分針加一
- INC FEN
- MOV A,FEN
- CJNE A,#60, B1
- MOV FEN, #00
- C2:CJNE A,#03,B1 ;若為模式三,秒針加一
- INC MIAO
- MOV A, MIAO
- CJNE A,#60,B1
- MOV MIAO,#00
- B1:JB MINUS,E1 ;判斷減鍵是否按下
- INC 40H ;清抖
- MOV A, 40H
- CJNE A,#12,E1
- JB MINUS ,E1
- MOV 40H,#00
- MOV A, 3DH
- CJNE A,#01,Q1 ;若為模式一,時針減一
- MOV A, SHI
- CJNE A,#00,Q2 ;判斷時針是否為0
- MOV SHI, #23
- LJMP E1
- Q2:DEC SHI ;時針減一
- LJMP E1
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于AT89S52單片機數字鐘的設計.zip
(90.66 KB, 下載次數: 93)
2018-1-11 15:44 上傳
點擊文件名下載附件
課程設計 下載積分: 黑幣 -5
|