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

📄 run.asm

📁 C51下编写的跑马灯程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
weixuan	  EQU 8fffH
duanxuan  EQU 9fffH
keytimest EQU 38H
keytimest2 EQU 50h
keytimest3 EQU 51h
keytimest4 EQU 52h
keys      equ 4eH ;定义键值寄存器
LEDBUF    EQU 40H ;53H到5aH存储区用来存放要显示的段码
keystate  bit 00H ;定义键状态寄存位,有键时为1,无键时为0
fshst     bit 03h
qing      bit 04h
chang     bit 05h

      org 0000H
      ljmp main
      org 0030H
;主函数
main: 
      MOV   sp,#70h
      mov   keys,#00h
      mov   keytimest,#00h
      mov   keytimest2,#00h
      mov   keytimest3,#00h
      mov   keytimest4,#00h
      CLR   keystate
      clr  fshst
      clr  qing
      clr  chang
      MOV   R0,#LEDBUF       
      MOV   R7,#0aH       
CLEARDISP: 
      MOV   @R0,#00H       
      INC   R0    
      DJNZ  R7,CLEARDISP          
begin:
      lcall key
      lcall dokey
      mov a,keys 
      cjne  a,#01h,xianshi
      lcall runma  
xianshi:
      cjne  a,#02h,xianshi1
      lcall runma
xianshi1: 
      cjne  a,#03h,xianshi2 
      lcall runma
xianshi2:
      lcall display
      ljmp  begin 
;定义查找表  
TABLE1: DB  3FH,66H,3FH,6DH,5BH,3FH,66H,7DH ;04052046
TABLE2:	DB  06H,6FH,7FH,6DH,06H,06H,06H,7DH ;19851116
TABLE3: DB  5BH,3FH,3FH,07H,3FH,66H,06H,6DH ;20070415
/*TABLE4:
	DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H
	DB  7FH,6FH,77H,7CH,39H,5EH,79H,71H	    */
;显示子程序	  
DISPLAY:
        mov a,keys
	cjne a,#00h,dong
        mov r1,#00h
	MOV R7,#8
	MOV R2,#10000000B
LOOP:
        MOV DPTR,#duanxuan
	MOV A,#00H
	MOVX @DPTR,A         ;先清一次显示
        mov dpl,r5
	mov dph,r6
	mov a,r1
        movc a,@a+dptr 
	MOV DPTR,#duanxuan  
	MOVX @DPTR,A
	MOV DPTR,#weixuan
	MOV A,R2
	MOVX @DPTR,A
	CALL DELAY           ;每一位数码管亮一段时间
	MOV A,R2
	RR A
	MOV R2,A
	INC R1
	DJNZ R7,LOOP
        mov r1,#00h
	jmp disp_end
;动态显示
dong:                 
 	MOV R1,#LEDBUF
	MOV R7,#8
	MOV R2,#10000000B
LOOP1:
        MOV DPTR,#duanxuan
	MOV A,#00H
	MOVX @DPTR,A         ;先清一次显示
	MOV A,@R1
	MOV DPTR,#duanxuan  
	MOVX @DPTR,A
	MOV DPTR,#weixuan
	MOV A,R2
	MOVX @DPTR,A
	CALL DELAY         ;每一位数码管亮一段时间
	MOV A,R2
	RR A
	MOV R2,A
	INC R1
	DJNZ R7,LOOP1
	RET 
disp_end:  RET
; 延时子程序
DELAY: MOV  R3,#30
DEL1:  MOV  R4,#30
DEL2:  DJNZ R4,DEL2
       DJNZ R3,DEL1       
	    RET
/*DELAY2: MOV  R3,#90
DEL11:  MOV  R4,#90
DEL22:  DJNZ R4,DEL22
       DJNZ R3,DEL11       
	    RET           */
;键盘子程序:
KEY:  lcall  keytest
      jnb    keystate,over
      ajmp   next00
over: ajmp   keyend
next00:	
      acall  display
      acall  display
      acall  display      ;消除抖动
      lcall  keytest
      jnb    keystate,over
      MOV    dptr,#duanxuan
      MOV    a,#00h		 
      movx   @dptr,a  ;关显示
;读取键盘的值
                MOV    a,#01h
		mov    dptr,#weixuan
		movx   @dptr,a
		movx   a,@dptr
		anl    a,#0fh
key0: cjne   a,#01h,key1
		mov    keys,#00h
		setb   keystate
		ajmp   keyend
key1: cjne   a,#02h,key2
		mov    keys,#01h
		setb   keystate
		ajmp   keyend
key2: cjne   a,#04h,key3
		mov    keys,#02h
		setb   keystate
		ajmp   keyend
key3: cjne   a,#08h,keynext1
		mov    keys,#03h
		setb   keystate
		ajmp   keyend
keynext1:clr   keystate		
keyend:  ret			
;键盘测试程序,返回结果在keystate中
keytest:
        mov   a,#0ffh
        MOV   dptr,#weixuan
	MOVX  @dptr,a
	MOVX  a,@dptr
	anl   a,#0fh
	jz    keytest0
	setb  keystate
	jmp   keytest1
keytest0: clr   keystate
keytest1: ret
;键盘处理子程序
dokey:    jb      keystate,key_all
          ajmp    keyend1
;判断键值
key_all:
         mov	  a,keys
key_0:   cjne     a,#00h,key_1
         ajmp     key00
key_1:   cjne	  a,#01h,key_2
	 ajmp     key11
key_2:	 cjne	  a,#02h,key_3
	 ajmp     key22
key_3:	 cjne	  a,#03h,keyend1
	 ajmp     key33
;执行相应的动作
key00:   lcall    start
         ajmp     keyend1
key11:   lcall    run
         ajmp     keyend1
key22:   lcall    flash
         ajmp     keyend1
key33:   lcall    control
         ajmp     keyend1
keyend1: ret 
;判断键盘是否弹起
keyup:
scan:    lcall  keytest
         lcall  display
         jb    keystate,scan
ret
;键盘响
xiang:   clr  p1.6
	 lcall delay
         lcall delay
         lcall delay
         lcall delay
         lcall delay
	 setb p1.6
ret                  
;初始化界面      
start:  
         lcall keyup
         lcall xiang
         mov  a,keytimest
         add  a,#01h
	 mov  keytimest,a         
         cjne a,#01H,next0
         mov  dptr,#TABLE1
	 mov  r5,dpl
	 mov  r6,dph
	 jmp  keyover
next0:
         cjne a,#02H,next1
         mov  dptr,#TABLE2
	 mov  r5,dpl
	 mov  r6,dph
	 jmp  keyover
next1:
         cjne a,#03H,keyover
         mov  dptr,#TABLE3
	 mov  r5,dpl
	 mov  r6,dph
	 mov  keytimest,#00h               
keyover:ret
;跑马程序  
run:    
         lcall keyup
         lcall xiang
         mov  a,keytimest2
         add  a,#01h
	 mov  keytimest2,a           
         cjne a,#04h,keyover2
	 mov  keytimest2,#00h  
keyover2:ret 
;闪烁
flash:   lcall keyup
         lcall xiang 
         mov  a,keytimest3
         add  a,#01h
	 mov  keytimest3,a          
         cjne a,#09h,keyover3
	 mov  keytimest3,#00h 
keyover3:ret  
;控制
control:    
         lcall keyup
         lcall xiang
         mov  a,keytimest4
         add  a,#01h
	 mov  keytimest4,a           
         cjne a,#03h,keyover22
	 mov  keytimest4,#00h  
keyover22:ret    
;跑马方式选择            
runma:   mov   a,keytimest2
         cjne  a,#01h,runma2
         lcall shan1
         jmp runmaend
runma2 : 
         cjne  a,#02h,runma3    
         lcall shan2
         jmp runmaend
runma3:  cjne  a,#03h,runma4 
         lcall shan3
         jmp runmaend
runma4:  
         lcall shan4
runmaend: ret
;方式1
shan1: 
         mov a,keytimest3
         cjne a,#01h,go0
         lcall fsh
go0:     jb  qing,wo0
         mov  LEDBUF,  #0fh
	 lcall display
         jb fshst,wo0
         lcall display
         lcall display
         lcall display
         lcall display
wo0:     jb   chang,wo1            
	 mov  LEDBUF,  #0

wo1:     lcall clear
         mov a,keytimest3
         cjne a,#02h,go1
         lcall fsh
go1:	 jb  qing,wo2
         mov  LEDBUF+1,#39h
	 lcall display
         jb fshst,wo2
         lcall display
	 lcall display
         lcall display
         lcall display
wo2:     jb   chang,wo3  
	 mov  LEDBUF+1,#0

wo3:     lcall clear 
         mov a,keytimest3
         cjne a,#03h,go2
         lcall fsh
go2:     jb  qing,wo4
	 mov  LEDBUF+2,#0fh
	 lcall display
         jb fshst,wo4
         lcall display
	 lcall display
         lcall display
         lcall display
wo4:     jb   chang,wo5
	 mov  LEDBUF+2,#0

wo5:     lcall clear 
         mov a,keytimest3
         cjne a,#04h,go3
         lcall fsh
go3:     jb  qing,wo6
	 mov  LEDBUF+3,#39h
	 lcall display
         jb fshst,wo6
         lcall display
	 lcall display
         lcall display
         lcall display
wo6:     jb   chang,wo7
	 mov  LEDBUF+3,#0

wo7:      lcall clear 
         mov a,keytimest3
         cjne a,#05h,go4
         lcall fsh
go4:     jb  qing,wo8
	 mov  LEDBUF+4,#0fh
	 lcall display
         jb fshst,wo8
         lcall display
	 lcall display
         lcall display
         lcall display
wo8:     jb   chang,wo9
	 mov  LEDBUF+4,#0

wo9:      lcall clear     
         mov a,keytimest3
         cjne a,#06h,go5
         lcall fsh
go5:     jb  qing,wo00
	 mov  LEDBUF+5,#39h
	 lcall display
          jb fshst,wo00
         lcall display
	 lcall display
         lcall display
         lcall display
wo00:     jb   chang,wo01
	 mov  LEDBUF+5,#0

wo01:    lcall clear 
         mov a,keytimest3
         cjne a,#07h,go6
         lcall fsh
go6:     jb  qing,wo02   
	 mov  LEDBUF+6,#0fh
	 lcall display
         jb fshst,wo02
         lcall display
	 lcall display
         lcall display
         lcall display
wo02:     jb   chang,wo03
	 mov  LEDBUF+6,#0

wo03:     lcall clear 
         mov a,keytimest3
         cjne a,#08h,go7
          lcall fsh
go7:     jb  qing,wo04   
	 mov  LEDBUF+7,#39h
	 lcall display
         jb fshst,wo04
	 lcall display

⌨️ 快捷键说明

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