用汇编语言实现七段数码管0-99自动计数,并用按钮实现暂停与复位

 

Proteus仿真电路图(下图)

 

 

数码管编码 

本人使用AT89C51单片机来控制电路

 使用共阴极七段数码管

 

 采用两个数码管分别表示十位和个位,数码管编码与单片机引脚对应关系如下图:

 

 

因为没跟管脚对应一根晶体管,用编码查表赋值可以大大缩减代码数量 

TAP:DB    3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH

实现暂停 

为了实现计数暂停操作,使用外部中断INT_1,P3.3管脚。跳转进入中断程序,再进入事先准备好的循环计数程序,然后再利用中断跳出循环计数程序,实现暂停计数。大体框架如下:

INT_1:
        CLR IE1  

…………

        JB IE1,LMP

…………

LMP:
        CLR IE1
        NOP
RETI

延时程序

为了数字的变化好观察又不至于太慢,设计延时程序:

TIME:

        MOV R1,#200
        JB IE1,LMP
        MOV R2,#250
        DJNZ R2,$
        MOV R2,#250
        DJNZ R2,$
        DJNZ R1,TIME 

大概延时0.3S

 实现复位

采用复位电路实现

 

汇编语言展示

         ORG 0000H    
        LJMP MAIN
        ORG 0013H
        LJMP INT_1 
        ORG 01000H

MAIN:    SETB P3.3
        MOV P0,#3FH
        MOV P2,#3FH
        MOV R4,#00H     
        MOV R3,#00H
        MOV R1,#200
        SETB IT1  
        SETB EA
        SETB EX1
        SETB P3.3
        MOV SP,#60H    
        SJMP $
        LJMP MAIN
INT_1:
        CLR IE1    
LOP:    
        MOV DPTR,#TAP 
        MOV A,R4
        MOVC A,@A+DPTR
        MOV P2,A
        INC R4
TIME:
        JB IE1,LMP
        MOV R2,#250
        DJNZ R2,$
        MOV R2,#250
        DJNZ R2,$
        DJNZ R1,TIME 

        MOV A,R4          
        SUBB A,#09H      
        JZ LOOP
        LJMP LUP          
LOOP:
        MOV R4,00H                              
        INC R3              
        MOV A,R3          
        SUBB A,#0AH
        JZ LUU             
        MOV DPTR,#TAP      
        MOV A,R3
        MOVC A,@A+DPTR
        MOV P0,A
        LJMP LUP
LUU:
        MOV R3,00H          
        MOV A,R3
        MOV DPTR,#TAP
        MOVC A,@A+DPTR
        MOV P0,A
        SJMP LUP                     
LUP:
        LJMP LOP
LMP:
        CLR IE1
        NOP
RETI
    TAP:DB    3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH
END

在这段程序中

        MOV A,##          
        SUBB A,###   
        JZ LOOP
        LJMP LUP     

用于判断计数是否超过9,方法较为复杂,读者可以用CJNE比较不相等转移指令自行改进

  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值