51单片机汇编语言写的4位7段数码管秒表 带仿真 自己下载查看。
proteus仿真原理图(仿真工程文件可到附件下载):
单片机源程序如下:
- ;要求:至少包括4个功能:时间清零;启动计时;暂定计时;继续计时;
- ; 计时最小单位0.1 秒,最大计时时间999.9秒,
- ; 用数码管显示时间,同时要求按下任何一个功能键必须有声音提示。
- ;
- ;使用方法: 设有启动键K1和暂停/清零键K2。按k1启动计时,按k2则暂停计时,再按k2则清零。
- ;常数设置
- TLOW EQU 78H
- THIGH EQU 0ECH
- LED_WEI_Pro EQU 0f0H;数码管位选 保护位
- ;寄存器设置
- COUN_INT EQU 21H ;5ms * 20 = 100ms = 0.1S
- COUN_PASSNUM EQU 22H ;
- COUN_TIME_L EQU 23H ;时间累加 低位 100MS加1
- COUN_TIME_H EQU 24H ;时间累加 高位
- COUN_WEI EQU 3CH ;显示位
- DISP_BUF EQU 50H
- ;端口配置
- LED_WEI EQU P2 ;数码管位选
- LED_DAT EQU P0 ;数码管数据
- BEEP_PIN EQU P3.7 ;蜂鸣器
- KEY_START EQU P3.0 ;启动
- KEY_STOP EQU P3.1 ;停止/归零键
- ;标志位配置
- FLAG_TIMING EQU 20H.1 ;20H.1 为计时状态标记
- FLAG_GO EQU 20H.2 ;20H.2 为使能标记
- 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;刚开机为非计时状态
- SETB BEEP_EN;开机响一声
- CALL INIT_TIMER
- SETB TR0
- LOOP:
- CALL BEEP
- K1:
- JB KEY_START,K2;启动
- 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;计时中按此键则暂停计时,暂停时按此键则归零
- 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;暂停计时
- 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;增加小数点
- 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:;共阳数码管表
- 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: ;延时R5×10MS
- MOV R6,#50
- D1:
- MOV R7,#100
- DJNZ R7,$
- DJNZ R6,D1
- DJNZ R5,DELAY
- RET
- ;;-------------------------
- DELAY1: ;延时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 ;延时
- ;NOT_BEEP:
- SETB BEEP_PIN
- NOT_BEEP:
- RET
- ;;-------------------------
- INIT_TIMER: ;初始化定时器
- MOV TMOD,#01H ;设置定时器0 工作模式为模式1
- MOV IE, #82H ;启用定时器0 中断产生
- 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;达到最大值999,则停止
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
LED数码管_4位秒表.zip
(128.91 KB, 下载次数: 94)
|