⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adddec.asm

📁 01单片机网站51单片机开发板全部配套程序
💻 ASM
字号:
;程序名:  MCS51实验板配套程序-按键控制+1-1程序,最大255
;电路介绍:显示由一片74164驱动4位共阴数码管
;          DsDat-p1.4;DsClk-p1.5;Gw-p1.0;Sw-p1.1;Bw-p1.2;Qw-p1.3
;www.01mcu.net www.01mcu.com 2003/5/11编写
;********************************************************************
xsdat bit p1.4    ;定义驱动74164的数据脚为p1.4
xsclk bit p1.5    ;74164的时钟
gw    bit p1.0    ;个位显示控制脚
sw    bit p1.1    ;十位
bw    bit p1.2    ;百位
qw    bit p1.3    ;千位
Sadd  bit p3.2    ;+key
sdec  bit p3.3    ;-key
sjgw  equ 30h     ;显示数据存储器
sjsw  equ 31h
sjbw  equ 32h
sjqw  equ 33h
temp  equ 35h     ;当前数据
;--------------------------------
          mov sp,#40h
          mov temp,#0
main :    setb sadd
          jb sadd,n1
          lcall addkey    ;+键按下
n1:       lcall display   ;调用显示子程序
          jb sdec,n2
          lcall deckey    ;-键按下
n2:       lcall display
          ljmp main       ;循环显示
          
;--------------------------------
addkey:   mov r0,#5        ;消键抖
addloop:  setb sadd
          lcall display
          jnb sadd,addloop ;键一直=0,循环等待抬起
          djnz r0,addloop
          inc temp         ;当前数据+1
          acall t2_10      ;十进制转换
          ret
;---------------------------------
deckey:   mov r0,#5        ;消键抖
decloop:  setb sdec
          lcall display
          jnb sdec,decloop ;键一直=0,循环等待抬起
          djnz r0,decloop
          dec temp         ;当前数据-1
          acall t2_10      ;十进制转换
          ret         
;转换成两位十进制
t2_10:    mov b,#100
          mov a,temp
          div ab
          mov sjbw,a       ;提取百位
          mov a,b
          mov b,#10
          div ab
          mov sjsw,a       ;提取十位
          mov sjgw,b       ;个位
          ret
;************************************************************************
;74164显示程序,使用RS1=1,RS0=0的1区
;---------------------------------------------------------
display:  PUSH ACC             ;保存ACC
          push psw
          clr rs1
          setb rs0             ;使用第一区工作寄存器 
          mov dptr,#xstab    
          mov a,sjgw           ;取得数据
          movc a,@a+dptr       ;提取字模
          acall dsout          ;调用送出子程序
         clr gw
          acall ds1ms          ;调用显示1ms延时程序
         setb gw
          mov a,sjsw
          movc a,@a+dptr        ;提取字模
          acall dsout          ;送出
         clr sw
          acall ds1ms          ;显示1ms  
         setb sw        
          mov a,sjbw
          movc a,@a+dptr        ;提取字模
          acall dsout          ;送出
         clr bw
          acall ds1ms          ;显示1ms 
         setb bw 
          mov a,sjqw
          movc a,@a+dptr        ;提取字模
          acall dsout          ;送出
         clr qw
          acall ds1ms          ;显示1ms
         setb qw
          pop psw
          POP ACC              ;出栈
          ret                  ;返回调用
  ;---送出循环----------
dsout:    
          MOV R0,#8            ;传送一个字节8位
dSLOOP:   RLC A                ;左移
          MOV xsdat,C          ;送数据到数据口
          SETB xsclk           ;送一时钟
          CLR xsclk
          DJNZ R0,dSLOOP
          RET         
   ;---显示延时---------- 
ds1ms:    mov r1,#10
ds1lo:    mov r2,#100
          djnz r2,$
          djnz r1,ds1lo
          ret                  ;延时返回
;************************************************************************
;显示字表(共阴)
xstab:    DB  3FH,06H,5BH,4FH    ;"0","1","2","3"
          DB  66H,6DH,7DH,07H    ;"4","5","6","7"
          DB  7FH,6FH,77H,7cH    ;"8","9","A","B" 
          DB  39H,5eh,79h,71h    ;"C","D","E","F"

end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -