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