历史上的今天
今天是:2024年11月26日(星期二)
2021年11月26日 | 基于51单片机电子秒表倒计时器
2021-11-26 来源:eefocus
刚刚咱们讲了电子秒表用的是C语言,接下来咱们再讲一讲用汇编。
硬件设计
(末尾附文件)
电路图1:
数码管显示;时间清零;启动计时;暂定计时;继续计时;

电路图2

程序设计
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,$
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"
文件仅供参考:
链接:https://pan.baidu.com/s/12Yc0D2vZqSAloPW4UgGGig
提取码:ih55
史海拾趣
|
高手们,怎么能知道PIC单片机的输入模拟量,对应的输出结果? 比如供电电压为5V,参考电压是单片机自己内部电压(5V),10位AD,输入模拟量1V对应多少?1.5V对应多少?2V对应多少?… 查看全部问答> |
|
电路如图所示,现在遇到的问题是不知道用什么器件来担任J2的开关角色,说下这个电路的工作情况和参数要求: C1原本充好200V的电,现通过开关闭合使通过R1和J1放电,当检测到C2上的电压降到2V时,马上断开开关J2。要求断开时间不超过500us(最 ...… 查看全部问答> |
|
我是通信工程专业的学生,我有数电,模电等电路基础,有基本C/C++基础,懂点单片机。我打算考研,发现报考的学校(现在定在北航)许多老师,都搞嵌入方向,我也想想学习下,为考研增加筹码。也许以后就定在嵌入方向了,但是我对嵌入方向没有什么方 ...… 查看全部问答> |
|
我在调试arm的休眠的时候用了点灯的方法,调用子程序 下面是子程序 ALIGN GREEN bl GON bl DELAY bl GOFF   ...… 查看全部问答> |
|
请各位大侠帮帮忙,把UC/IP移植到44BOX上,使用Q2403A GPRS模块,通过PPP协议与服务器收发数据.串口驱动,以及GPRS上网功能已经实现,接下来PPP协议移植实在是搞不出来了,请大虾们帮帮忙,给俺指导指导!… 查看全部问答> |
|
刚学vhdl,问个关于quartus仿真的菜鸟问题。 照书上写了个分频器的程序,然后想用quartus5.0看看波形。 在新建工程的时候让选择所用芯片,选哪个啊?不选不行吗?(貌似新建工程的时候好像必过这一步。---family and device settings) 程序编译 ...… 查看全部问答> |
|
比如说,向路由表中添加路由信息时,有两个接口routeAdd()和mRouteAdd()。这两个函数在功能上有何不同呢?在实现上又有什么不同呢? 我看了一下,routeAdd()最后是调用ioctl来添加路由信息的,而mRouteAdd()却不太知道了,希望哪位高人能够指点, ...… 查看全部问答> |
|
需要把AT89S51中计数器中的值输出,采用直通方式连接DAC0832,然后电流电压转换,结果电压根本没变化,请问是什么原因? 把计数器中的值进行了BCD编码处理,原来是通过P0和P2端口输出给LED显示的,显示正确。现在通过P0直接输出给DAC0832是否可以 ...… 查看全部问答> |
|
ubuntu 10.04及10.10版本下SAMBA服务配置 一.这个SAMBA服务配置搞了好长时间。使用所有人可访问模式,很块就可以实现。但是使用用户名和密码模式费了我好大的劲。这主要涉及到XP和ubuntu两方面的配置。真奇怪的很,同一个命令和同一个问题,不同的人写的书竟然不一样,再加上UBUNTU自己弄的 ...… 查看全部问答> |




