51单片机汇编语言基本程序 系统管理员 2022-12-11 15:22 221阅读 0赞 ### 目录 ### * * * 1. 点亮第一个LED灯 * 2. LED闪烁 * 3. LED流水灯 * 4. 静态数码管显示 * 5. 动态数码管显示 * 6. 独立按键 * 7. 矩阵按键 ### 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
还没有评论,来说两句吧...