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

📄 ss.asm

📁 单片机自发自收
💻 ASM
字号:
;--------------------------------------------
OUTBIT   equ 0e101h  ; 位控制口
CLK164   equ 0e102h  ; 段控制口(接164时钟位)
DAT164   equ 0e102h  ; 段控制口(接164数据位)
LEDBuf   equ   60h   ; 显示缓冲区首址
FLAG     equ   00h   

        org   0000h
        ljmp  start
        org   0023h
        ljmp  intr

LEDtab:              ; 八段管显示码
         db      3fh,71h,79h,5eh,00h,00h
	  db	 06h,5bh,4fh,39h,00h,00h
	  db     66h,6dh,7dh,7ch,00h,00h
	  db	 07h,7fh,6fh,77h,00h,00h
;------------------------------------------
start: mov dptr,#0e100h
       mov a,#03h
       movx @dptr,a
       mov sp,#40h        
       mov  LEDBuf,#06h      ;初始化缓冲区
       mov  LEDBuf+1,#06h
       mov  LEDBuf+2,#00h 
       mov  LEDBuf+3,#00h
       mov  LEDBuf+4,#06h
       mov  LEDBuf+5,#06h
       mov  flag,#0
       mov  tmod,#20h
       mov  tl1,#0f3h
       mov  th1,#0f3h
       mov   pcon,#00h
       setb  ea
       setb  tr1
       mov  scon,#50h

main:  acall keyscan         ;键盘扫描      
       mov   LEDBuf,LEDBuf+1 ;发送的个位左移至十位
       mov   LEDBuf+1,a      ;发送缓冲区的个位接收新数据,即发送数据  
       mov   sbuf,a        
t:     jnb  ti,t          ;等待发送完毕
       clr  ti            
       setb  es           
       acall DISP       
       ajmp  main
;-------------------------------------
intr:                     ;接收中断子程序
       clr  ri
       mov  a,sbuf 
       mov  LEDBuf+4,LEDBuf+5 ;左移      
       mov  LEDBuf+5,a        ;装入接收数据
       reti
;------------------------------------------
;键盘扫描模块
keyscan:
        acall KEY
        jnz lk1
        acall DISP
        ajmp keyscan
lk1:    acall DISP
        acall DISP
        acall KEY
        jnz lk2
        acall DISP
        ajmp keyscan
lk2:
       mov r4,#0feh     ;扫描初值
       mov r5,#00h      ;扫描列号
lk3:
      mov dptr,#0e101h
      mov a,r4
      movx  @dptr,a
      inc dptr
      inc dptr
      movx a,@dptr
      jb  acc.0,one
      mov a,#0
      ajmp keycode
one: jb  acc.1,two
       mov a,#6
       ajmp keycode
two:
       jb acc.2,thr
        mov  a,#12
        ajmp keycode
thr:  
       jb acc.3,next      
        mov  a,#18
keycode:   add  a,r5      ;得到键码
           push acc       ;入栈存储
waitrelease:   
          acall DISP     
          acall KEY
          jnz  waitrelease   ;等待键释放
          pop acc            ;键释放后,出栈,寄存器ACC中为键码
           mov  dptr,#LEDtab
           movc a,@a+dptr        ;将键码转换为显示码 
          
          ajmp exit          ;退出,键盘扫描程序结束
next:     inc r5             ;下一列
          mov a,r4
          jnb  acc.5,keyscan
          rl  a
          mov r4,a
          ajmp lk3
exit:   ret       
;------------------------
KEY:    mov dptr,#0e101h    ; 判断是否有键按下的子程序
        mov a,#00h
        movx @dptr,a
        inc dptr
        inc dptr
        movx a,@dptr
        cpl a            
        anl a,#0fh         
ret
;-----------------------------------------------
;显示模块
DISP:
       mov   r0, #LEDBuf
       mov   r6, #6          ; 共6个八段管
       mov   r2, #00100000b  ; 从左边开始显示
Loop:
       mov   dptr, #OUTBIT
       mov   a, #0
       movx  @dptr, a        ; 关所有八段管

       mov   a, @r0
       mov   B, #8           ; 送164      
DLP:
       rlc   a
       mov   r3, a
       mov   acc.0, c
       mov   dptr, #DAT164
       anl a,#0fdh
       movx  @dptr, a
       mov   dptr, #CLK164
       orl a,#02h
       movx  @dptr, a
       anl a,#0fdh
       movx  @dptr, a
       mov   a, r3
       djnz  B, DLP
       mov   dptr, #OUTBIT
       mov   a, r2
       movx  @dptr, a        ; 显示一位八段管
       acall  Delay           ;延时1ms
       mov   a, r2           ; 显示下一位
       rr    a
       mov   r2, a
       inc   r0
       djnz  r6, Loop        
ret
;---------------------------------
Delay:               ; 延时子程序,延时1ms
       mov   r7, #0
do:
      djnz  r7, do      
ret
end 
 ;-------------------------------------------------------- 


⌨️ 快捷键说明

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