|
51單片機(jī)匯編語言寫的4位7段數(shù)碼管秒表 帶仿真 自己下載查看。
proteus仿真原理圖(仿真工程文件可到附件下載):
單片機(jī)源程序如下:
- ;要求:至少包括4個(gè)功能:時(shí)間清零;啟動(dòng)計(jì)時(shí);暫定計(jì)時(shí);繼續(xù)計(jì)時(shí);
- ; 計(jì)時(shí)最小單位0.1 秒,最大計(jì)時(shí)時(shí)間999.9秒,
- ; 用數(shù)碼管顯示時(shí)間,同時(shí)要求按下任何一個(gè)功能鍵必須有聲音提示。
- ;
- ;使用方法: 設(shè)有啟動(dòng)鍵K1和暫停/清零鍵K2。按k1啟動(dòng)計(jì)時(shí),按k2則暫停計(jì)時(shí),再按k2則清零。
- ;常數(shù)設(shè)置
- TLOW EQU 78H
- THIGH EQU 0ECH
- LED_WEI_Pro EQU 0f0H;數(shù)碼管位選 保護(hù)位
- ;寄存器設(shè)置
- COUN_INT EQU 21H ;5ms * 20 = 100ms = 0.1S
- COUN_PASSNUM EQU 22H ;
- COUN_TIME_L EQU 23H ;時(shí)間累加 低位 100MS加1
- COUN_TIME_H EQU 24H ;時(shí)間累加 高位
- COUN_WEI EQU 3CH ;顯示位
- DISP_BUF EQU 50H
- ;端口配置
- LED_WEI EQU P2 ;數(shù)碼管位選
- LED_DAT EQU P0 ;數(shù)碼管數(shù)據(jù)
- BEEP_PIN EQU P3.7 ;蜂鳴器
- KEY_START EQU P3.0 ;啟動(dòng)
- KEY_STOP EQU P3.1 ;停止/歸零鍵
- ;標(biāo)志位配置
- FLAG_TIMING EQU 20H.1 ;20H.1 為計(jì)時(shí)狀態(tài)標(biāo)記
- FLAG_GO EQU 20H.2 ;20H.2 為使能標(biāo)記
- BEEP_EN EQU 20H.3 ;蜂鳴器響使能
- ;--------------------------------------------------
- ORG 0000H
- JMP MAIN
- ORG 0BH
- JMP T0_INT
- ;--------------------------------------------------
- MAIN:
- MOV SP,#60H
- MOV A,#00H
- MOV COUN_WEI,A
- MOV COUN_PASSNUM,A;
- MOV COUN_TIME_L,A
- MOV COUN_TIME_H,A
-
- CLR C
- CLR FLAG_GO
- CLR FLAG_TIMING;剛開機(jī)為非計(jì)時(shí)狀態(tài)
- SETB BEEP_EN;開機(jī)響一聲
- CALL INIT_TIMER
- SETB TR0
- LOOP:
- CALL BEEP
- K1:
- JB KEY_START,K2;啟動(dòng)
- NOP
- JNB KEY_START,[ DISCUZ_CODE_1 ]nbsp;
- SETB BEEP_EN;蜂鳴器響
- JB FLAG_GO,LOOP
- SETB FLAG_GO
- SETB FLAG_TIMING
-
- JMP LOOP
- K2:
- JB KEY_STOP,LOOP;暫停、歸零鍵
- NOP
- JNB KEY_STOP,$
- SETB BEEP_EN;蜂鳴器響
- JB FLAG_TIMING,STOP;計(jì)時(shí)中按此鍵則暫停計(jì)時(shí),暫停時(shí)按此鍵則歸零
- RESET_TIME:;歸零
- CLR FLAG_GO
- CLR FLAG_TIMING
- MOV COUN_TIME_L,#00H
- MOV COUN_TIME_H,#00H
- CALL DISP_TRANSDAT
-
- JMP LOOP
- STOP:;暫停
- CLR FLAG_GO
- CLR FLAG_TIMING;暫停計(jì)時(shí)
- JMP LOOP
-
- ;;;-------------------------
- ;;-------------------------
- ;;顯示子程序
- ;;使用寄存器組:第2組寄存器
- ;;出口:
- ;;入口:
- ;;--------------------------
- DISPLAY:
- PUSH ACC
- PUSH PSW
- CLR PSW.3 ;RS1、RS0(PSW.4、PSW.3): 1 0
- SETB PSW.4
-
- ; MOV DISP_BUF,#1H ;test
- ; MOV DISP_BUF+1,#2H
- ; MOV DISP_BUF+2,#3H
- ; MOV DISP_BUF+3,#4H
- MOV A,COUN_WEI
- CJNE A,#0,CJMP1
- JMP DISP_WEI1
- CJMP1:
- CJNE A,#1,CJMP2
- JMP DISP_WEI2
- CJMP2:
- CJNE A,#2,CJMP3
- JMP DISP_WEI3
- CJMP3:
- CJNE A,#3,CJMP4
- JMP DISP_WEI4
- CJMP4:
- MOV COUN_WEI,#0
- DISP_WEI1:
- MOV A,LED_WEI;P3
- ANL A,#LED_WEI_Pro
- ORL A,#01H
- ; CPL A
- MOV LED_WEI,A
-
- JMP DISP_WEI_END
- DISP_WEI2:
- MOV A,LED_WEI
- ANL A,#LED_WEI_Pro
- ORL A,#02H
- ; CPL A
- MOV LED_WEI,A
-
- JMP DISP_WEI_END
- DISP_WEI3:
- MOV A,LED_WEI
- ANL A,#LED_WEI_Pro
- ORL A,#04H
- ; CPL A
- MOV LED_WEI,A
- JMP DISP_WEI_END
- DISP_WEI4:
- MOV A,LED_WEI
- ANL A,#LED_WEI_Pro
- ORL A,#08H
- ; CPL A
- MOV LED_WEI,A
- DISP_WEI_END:
- MOV R0,#DISP_BUF
- MOV A,COUN_WEI
- ADD A,R0
- MOV R0,A
- MOV A,@R0
- MOV DPTR,#LED_TAB
- MOVC A,@A+DPTR
- MOV B,A
- MOV A,COUN_WEI
- CJNE A,#2,DISP_WEI_NODOT;增加小數(shù)點(diǎn)
- MOV A,B
- ANL A,#7FH
- MOV B,A
- DISP_WEI_NODOT:
- MOV A,B
- MOV LED_DAT,A
- INC COUN_WEI
- POP PSW
- POP ACC
-
- RET
- LED_TAB:;共陽數(shù)碼管表
- DB 0C0H ;"0"
- DB 0F9H ;"1"
- DB 0A4H ;"2"
- DB 0B0H ;"3"
- DB 99H ;"4"
- DB 92H ;"5"
- DB 82H ;"6"
- DB 0F8H ;"7"
- DB 80H ;"8"
- DB 90H ;"9"
- DB 88H ;"A"
- DB 83H ;"B"
- DB 0C6H ;"C"
- DB 0A1H ;"D"
- DB 86H ;"E"
- DB 8EH ;"F";15
- ;;-------------------------
- ;;-------------------------
- DELAY2:
- MOV R5,#2H
- DELAY: ;延時(shí)R5×10MS
- MOV R6,#50
- D1:
- MOV R7,#100
- DJNZ R7,$
- DJNZ R6,D1
- DJNZ R5,DELAY
- RET
- ;;-------------------------
- DELAY1: ;延時(shí)5MS
- MOV R6,#25
- D2:
- MOV R7,#100
- DJNZ R7,$
- DJNZ R6,D2
- RET
- BEEP:
- JNB BEEP_EN,NOT_BEEP
- CLR BEEP_EN
- CLR BEEP_PIN ;低電平有效
- CALL DELAY1 ;延時(shí)
- ;NOT_BEEP:
- SETB BEEP_PIN
- NOT_BEEP:
- RET
- ;;-------------------------
- INIT_TIMER: ;初始化定時(shí)器
- MOV TMOD,#01H ;設(shè)置定時(shí)器0 工作模式為模式1
- MOV IE, #82H ;啟用定時(shí)器0 中斷產(chǎn)生
- MOV TL0,#TLOW
- MOV TH0,#THIGH
- RET
- ;;-------------------------
- T0_INT:
- PUSH ACC
- PUSH PSW
- MOV TL0,#TLOW
- MOV TH0,#THIGH
- CALL DISPLAY
-
- JNB FLAG_TIMING,T0_EXIT
- CLR C
- INC COUN_INT
- MOV A,COUN_INT
- CJNE A,#20,T0_EXIT
- MOV COUN_INT,#0
- MOV A,COUN_TIME_L
- ADDC A,#1
- DA A
- MOV COUN_TIME_L,A
-
- JNC TIME_ADD_END
- MOV A,COUN_TIME_H
- ADDC A,#0
- DA A
- MOV COUN_TIME_H,A
- TIME_ADD_END:
- MOV A,COUN_TIME_H
- CJNE A,#99H,TIME_ADD_T
- MOV A,COUN_TIME_L
- CJNE A,#99H,TIME_ADD_T
- CLR FLAG_TIMING;達(dá)到最大值999,則停止
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
LED數(shù)碼管_4位秒表.zip
(128.91 KB, 下載次數(shù): 94)
2017-5-26 11:28 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|