找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 878|回复: 3
收起左侧

使用两个按键控制共阳极数码管计时的暂停和继续(汇编语言+普中单片机)

[复制链接]
ID:1135835 发表于 2024-11-14 22:06 | 显示全部楼层 |阅读模式
实在是不知道怎么加两个中断用来开始和暂停目前只会写以下两种0到9共阳极数码管循环

程序一(自动循环)

    ORG     0000H
        LJMP    START
        ORG     0040H
START:  MOV     DPTR,#NUMTAB       ;读数据表入口地址
        MOV     R0,#00H            ;R0地址初始化
LOPDSP: MOV     A,R0
        MOVC    A,@A+DPTR          ;读数字对应编码
        MOV     P0,A
        ACALL   DELAY
        INC     R0                 ;数字加1
        CJNE    R0,#0AH,LOPDSP     ;大于9,再从0显示
        JMP     START
DELAY:      MOV     R6,#0FFH
LP1:    MOV     R7,#0FFH
LP:     DJNZ    R7,LP
        DJNZ    R6,LP1
        RET

NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
        END


程序二(按键按一下加一,使用一个中断子程序)
; 使用P0接静态数码管
; 使用P1接LED灯(本程序中未使用)
; 使用P3.2接独立按键K1,外部中断0和P3.2引脚绑定
; 按键无消抖
;-------------------------------------
        ORG 0000H     ; ORG为程序段说明伪指令,它向汇编程序说明该程序段的起始地址,所以可以当中断向量地址用
        LJMP L_Main   ; 跳转到L_Main标号处
        ORG 0013H     ; 0003H为外部中断0向量地址
        LJMP I_INT1   ; 跳转到I_INT1标号处
        ORG 0030H
L_Main:
        ; 初始化中断
        SETB EA           ; 总中断允许控制位设置为1
        SETB EX1          ; 外部中断0允许位设置为1
        SETB PX1          ; 外部中断0优先级设置为1
        SETB IT1          ; 外部中断0设置为下降沿触发方式

        MOV DPTR,#T_table ; T_table所在地址赋值给DPTR
        MOV R0,#000H      ; 立即数赋值给R0,给R0赋初值,在中断中用到
        MOV P0,#0C0H      ; 设置数码管显示的初始值(熄灭)

        ; 主循环
L_MainLoop:
        SJMP L_MainLoop   ; 无限循环

;---------------------------------------
I_INT1:
        PUSH ACC           ; ACC地址单元中的数据压栈
        PUSH PSW           ; 程序状态字寄存器压栈
        MOV A,R0           ; 将R0的值移动到累加器A
        MOVC A,@A+DPTR     ; 根据A的值和DPTR的值,从数据表中取数到A
        MOV P0,A           ; 将累加器A的值移动到P0口,更新数码管显示
        INC R0             ; R0寄存器值加1
        CJNE R0,#10,L_Next ; 如果R0不等于10就跳转到L_Next
        MOV R0,#000H       ; 如果R0等于10,则重置为0
L_Next:
        POP PSW            ; 程序状态字寄存器出栈
        POP ACC            ; ACC地址单元中的数据出栈
        RETI               ; 中断返回
;---------------------------------------
T_table:

        DB        0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H,0F8H, 80H, 90H
        END

想用普中开发板P3.2,P3.3连K1,K2两个按钮控制开始和暂停,求教各位大佬,谢谢

回复

使用道具 举报

ID:624769 发表于 2024-11-15 08:45 | 显示全部楼层
P33  暂停
P32  继续


        CSEG                0000H
        LJMP    START
        CSEG                0003H                //P32, INT0
        CLR        IE1
        RETI
MAIN_SEG        segment code
RSEG        MAIN_SEG
START:        SETB        IT0        //下降沿
                SETB        IT1        //下降沿
                SETB        EX0        //开INT0中断
                SETB        EA        //开总中断
Main_Loop:
        MOV     DPTR,#NUMTAB       ;读数据表入口地址
        MOV     R0,#00H            ;R0地址初始化
LOPDSP: MOV     A,R0
        MOVC    A,@A+DPTR          ;读数字对应编码
        MOV     P0,A
        ACALL   DELAY
        JB        IE1,$                //暂停
        INC     R0                 ;数字加1
        CJNE    R0,#0AH,LOPDSP     ;大于9,再从0显示
        JMP     Main_Loop
DELAY:      MOV     R6,#0FFH
LP1:        MOV     R7,#0FFH
LP:        DJNZ    R7,LP
      DJNZ    R6,LP1
      RET

NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
        END
回复

使用道具 举报

ID:161164 发表于 2024-11-15 09:39 | 显示全部楼层
普中板子的数码管不是共阴的吗?
取模应该是3FH, 06H, 5BH...
回复

使用道具 举报

ID:1135835 发表于 2024-11-15 13:07 | 显示全部楼层
lkc8210 发表于 2024-11-15 09:39
普中板子的数码管不是共阴的吗?
取模应该是3FH, 06H, 5BH...

板子上共阳共阴都有,我用的是共阳的那个一位静态数码管
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表