51单片机汇编语言基本程序

1. 点亮第一个LED灯

		ORG    0000H
    	LJMP   MAIN
    	
MAIN:
		CLR P2.0
		LJMP MAIN
		
		END

2. LED闪烁

		ORG    0000H
    	LJMP   MAIN
        
DELAY:  
		MOV    R5,#2
		MOV    R6,#0
        MOV    R7,#0
DELAYLOOP:       
		NOP;延时程序
        DJNZ   R7,DELAYLOOP
        DJNZ   R6,DELAYLOOP
		DJNZ   R5,DELAYLOOP
        RET
        
MAIN:  	    
		CLR P2.0
		LCALL DELAY
		SETB P2.0
		LCALL DELAY
        LJMP   MAIN
		
		END

3. LED流水灯

		ORG    0000H
    	LJMP   MAIN
    	
MAIN:  	    
		MOV    A, #0FEH
        MOV    R2,#8
LED_LOOP: 	
		MOV    P2,A
        RL     A
        LCALL  DELAY
        DJNZ   R2,LED_LOOP
        LJMP   MAIN
        
DELAY:  
		MOV    R5,#2
		MOV    R6,#0
        MOV    R7,#0
DELAYLOOP:       
		NOP;延时程序
        DJNZ   R7,DELAYLOOP
        DJNZ   R6,DELAYLOOP
		DJNZ   R5,DELAYLOOP
        RET
		
		END

4. 静态数码管显示

		ORG    0000H
		LCALL   DEF
    	LCALL   MAIN


DEF:
		LSA BIT P2.2
		LSB BIT P2.3
		LSC BIT P2.4
		SMG EQU P0
		RET
			

MAIN:  	    
		CLR LSA
		CLR LSB
		CLR LSC
		MOV A, #1
		MOV DPTR, #SMGDUAN
		MOVC A, @A+DPTR
		MOV SMG, A
        LJMP   MAIN
		RET
		
SMGDUAN: 
		DB 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
			
		END

5. 动态数码管显示

		ORG    0000H
		LCALL   DEF
    	LCALL   MAIN

;管脚定义
DEF:
		LSA BIT P2.2
		LSB BIT P2.3
		LSC BIT P2.4
		SMG EQU P0
		RET

;延时函数
DELAY:  
		MOV    R5,#2
		MOV    R6,#0
        MOV    R7,#0
DELAYLOOP:       
		NOP;延时程序
        DJNZ   R7,DELAYLOOP
        DJNZ   R6,DELAYLOOP
		DJNZ   R5,DELAYLOOP
        RET

;数码管表
SMGDUAN: 
		DB 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71


;数码管显示
DISPLAY:
		MOV R2, #8
DISPLAY_LOOP:
		CJNE R2, #1, NEXT2
		CLR LSA
		CLR LSB
		CLR LSC
		LJMP SMGOUT
	NEXT2:
		CJNE R2, #2, NEXT3
		SETB LSA
		CLR LSB
		CLR LSC
		LJMP SMGOUT
	NEXT3:
		CJNE R2, #3, NEXT4
		CLR LSA
		SETB LSB
		CLR LSC
		LJMP SMGOUT
	NEXT4:
		CJNE R2, #4, NEXT5
		SETB LSA
		SETB LSB
		CLR LSC
		LJMP SMGOUT
	NEXT5:
		CJNE R2, #5, NEXT6
		CLR LSA
		CLR LSB
		SETB LSC
		LJMP SMGOUT
	NEXT6:
		CJNE R2, #6, NEXT7
		SETB LSA
		CLR LSB
		SETB LSC
		LJMP SMGOUT
	NEXT7:
		CJNE R2, #7, NEXT8
		CLR LSA
		SETB LSB
		SETB LSC
		LJMP SMGOUT
	NEXT8:
		SETB LSA
		SETB LSB
		SETB LSC
	SMGOUT:
		MOV A, R2
		MOV DPTR, #SMGDUAN
		MOVC A, @A+DPTR
		MOV SMG, A
		LCALL DELAY
		MOV SMG, #0
		DJNZ R2, DISPLAY_LOOP
		RET

;主函数
MAIN:  	    
		LCALL DISPLAY
        LJMP   MAIN
		RET
		
			
		END

6. 独立按键

		ORG     0000H
		LCALL   DEF
    	LCALL   MAIN

;重定义
DEF:
		LED BIT P2.0
		K1  BIT P3.1

;延时函数		
DELAY:  
		MOV    R6,#4
        MOV    R7,#0
DELAYLOOP:       
		NOP;延时程序
        DJNZ   R7, DELAYLOOP
        DJNZ   R6, DELAYLOOP
        RET
		
;按键函数		
KEY:
		JB K1, KEY_OUT
		LCALL DELAY  ;延时消抖
		JB K1, KEY_OUT
		CPL LED 	 ;LED取反
	KEY_LOOP:	
		JNB K1, KEY_LOOP  ;检测按键是否松开
	KEY_OUT:
		RET
		
;主函数
MAIN:  	    
		LCALL  KEY
        LJMP   MAIN
		RET
		
		END

7. 矩阵按键

		ORG     0000H
		LCALL   DEF
    	LCALL   MAIN

;重定义
DEF:
		GPIO_DIG EQU P0
		GPIO_KEY EQU P1
		LSA      BIT P2.2
		LSB      BIT P2.3
		LSC      BIT P2.4
		RET

;数码管数据
SMGDUAN:
		DB 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

;延时函数		
DELAY:  
		MOV    R6,#4
        MOV    R7,#0
DELAYLOOP:       
		NOP;延时程序
        DJNZ   R7, DELAYLOOP
        DJNZ   R6, DELAYLOOP
        RET
		
;按键函数		
MATRIX_KEY:
		MOV GPIO_KEY, #0FH
		MOV A, GPIO_KEY
		CJNE A, #0FH, KEY_DOWN
		LJMP MATRIX_KEY_OUT
	KEY_DOWN:
	    LCALL DELAY
		MOV A, GPIO_KEY
		CJNE A, #0FH, COL_TEST ;消抖
		LJMP MATRIX_KEY_OUT
	COL_TEST:
		;测试列
		MOV GPIO_KEY, #0FH
	KEY_NEXT_1:
		MOV A, GPIO_KEY
		CJNE A, #07H, KEY_NEXT_2
		MOV R2, #0
		LJMP ROW_TEST
	KEY_NEXT_2:
		MOV A, GPIO_KEY
		CJNE A, #0BH, KEY_NEXT_3
		MOV R2, #1
		LJMP ROW_TEST
	KEY_NEXT_3:
		MOV A, GPIO_KEY
		CJNE A, #0DH, KEY_NEXT_4
		MOV R2, #2
		LJMP ROW_TEST
	KEY_NEXT_4:
		MOV A, GPIO_KEY
		CJNE A, #0EH, ROW_TEST
		MOV R2, #3
		LJMP ROW_TEST
		
	ROW_TEST:
		;测试行
		MOV GPIO_KEY, #0F0H
	KEY_NEXT_5:
		MOV A, GPIO_KEY
		CJNE A, #70H, KEY_NEXT_6
		MOV A, R2
		ADD A, #0
		MOV R2, A
		LJMP MATIX_KEY_LOOP
	KEY_NEXT_6:
		MOV A, GPIO_KEY
		CJNE A, #0B0H, KEY_NEXT_7
		MOV A, R2
		ADD A, #4
		MOV R2, A
		LJMP MATIX_KEY_LOOP
	KEY_NEXT_7:
		MOV A, GPIO_KEY
		CJNE A, #0D0H, KEY_NEXT_8
		MOV A, R2
		ADD A, #8
		MOV R2, A
		LJMP MATIX_KEY_LOOP
	KEY_NEXT_8:
		MOV A, GPIO_KEY
		CJNE A, #0E0H, MATIX_KEY_LOOP
		MOV A, R2
		ADD A, #12
		MOV R2, A
		LJMP MATIX_KEY_LOOP
	MATIX_KEY_LOOP:
		MOV A, GPIO_KEY
		CJNE A, #0F0H, MATIX_KEY_LOOP
	MATRIX_KEY_OUT:
		MOV A, R2 
		RET
		
;主函数
MAIN:  	
		CLR LSA
		CLR LSB
		CLR LSC
MAIN_LOOP:
		MOV DPTR, #SMGDUAN
		LCALL  MATRIX_KEY
		MOVC A, @A+DPTR
		MOV GPIO_DIG, A
        LJMP   MAIN_LOOP
		RET
		
		END
  • 15
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43964993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值