LED_1_3(按键多模式控制流水灯)
2017-10-02 15:38
267 查看
测试平台:清翔8051单片机
编译器:Keil5
任务描述:用汇编语言控制一个发光二极管(LED)闪烁
涉及硬件电路原理图:
程序清单:
;
; ******************************************************************************
; * @file main.asm
; * @author Chen Bing
; * @version V1.0
; * @date 28-September-2017
; * @brief This file provides all the main.asm
; ******************************************************************************
; * @attention
; *
; * This project code is for personal learning only, and can be freely
; * transplanted and modified, but this statement must be retained. Any changes
; * occurred during the transplantOther immeasurable BUG, I am not responsible!!!
; * No commercial!!!
; ******************************************************************************
;
;-----------------按键控制流水灯------------------;
;----------------------------------------------------------
ORG 0000H
MOV P1, #0FFH
MOV P3, #0FFH
S1: JB P3.0, S2 ;判断第一个按键是否按下,按下调用XS1
LCALL XS1
S2: JB P3.1, S3
;判断第二个按键是否按下,按下调用XS2
LCALL XS2
S3: JB P3.2, S4
;判断第三个按键是否按下,按下调用XS3
LCALL XS3
S4: JB P3.3, S1
;判断第四个按键是否按下,按下调用XS4
LCALL XS4
SJMP S1;
;执行完后返回重新判断按键
;XS1子程序:利用循环左移指令控制LED从右至左逐个点亮
XS1:MOV A, #0FEH
MOV R2, #8
;循环次数
M1: MOV P1, A
;A通过P1输出
RL A ;A中的数据左移
LCALL DELAY
DJNZ R2, M1
;判断是否到循环次数
RET ;子程序返回
;XS2子程序:利用循环右移指令控制LED从左至右逐个点亮
XS2:MOV A, #7FH
MOV R2, #8
M2: MOV P1, A
RR A ;A中的数据右移
LCALL DELAY
DJNZ R2, M2
RET
;XS3子程序:利用查表指令控制LED无序显示
XS3:CLR A
XSM1: MOV 40H, A
;40H单元暂存所取表格位数,0位开始
MOV DPTR, #TAB
;DPTR指向数据表格首地址
LOOP: MOVC A, @ A+ DPTR ;根据A+DPTR的地址查表取数并保存至A
MOV P1, A
LCALL DELAY
INC 40H
;所取表格位数加一
MOV A, 40H
;40H单元送至A中
CJNE A, #08H,LOOP
;判断循环次数是否到8次
RET
TAB: DB 34H,54H,69H,88H,8AH
DB 6BH,72H,5CH,9AH,25H
;XS4子程序:利用数据传送指令控制LED对称成对熄灭
XS4:MOV R2, #4 ;保存循环次数
M4: MOV P1, #81H
LCALL DELAY
MOV P1, #42H
LCALL DELAY
MOV P1, #24H
LCALL DELAY
MOV P1, #18H
LCALL DELAY
DJNZ R2, M4
RET
DELAY: MOV R7, 0FFH
L1: MOV R6, #0FFH
L2: NOP
NOP
DJNZ R6, L2
DJNZ R7, L1
RET
END
工程截图:
编译器:Keil5
任务描述:用汇编语言控制一个发光二极管(LED)闪烁
涉及硬件电路原理图:
程序清单:
;
; ******************************************************************************
; * @file main.asm
; * @author Chen Bing
; * @version V1.0
; * @date 28-September-2017
; * @brief This file provides all the main.asm
; ******************************************************************************
; * @attention
; *
; * This project code is for personal learning only, and can be freely
; * transplanted and modified, but this statement must be retained. Any changes
; * occurred during the transplantOther immeasurable BUG, I am not responsible!!!
; * No commercial!!!
; ******************************************************************************
;
;-----------------按键控制流水灯------------------;
;----------------------------------------------------------
ORG 0000H
MOV P1, #0FFH
MOV P3, #0FFH
S1: JB P3.0, S2 ;判断第一个按键是否按下,按下调用XS1
LCALL XS1
S2: JB P3.1, S3
;判断第二个按键是否按下,按下调用XS2
LCALL XS2
S3: JB P3.2, S4
;判断第三个按键是否按下,按下调用XS3
LCALL XS3
S4: JB P3.3, S1
;判断第四个按键是否按下,按下调用XS4
LCALL XS4
SJMP S1;
;执行完后返回重新判断按键
;XS1子程序:利用循环左移指令控制LED从右至左逐个点亮
XS1:MOV A, #0FEH
MOV R2, #8
;循环次数
M1: MOV P1, A
;A通过P1输出
RL A ;A中的数据左移
LCALL DELAY
DJNZ R2, M1
;判断是否到循环次数
RET ;子程序返回
;XS2子程序:利用循环右移指令控制LED从左至右逐个点亮
XS2:MOV A, #7FH
MOV R2, #8
M2: MOV P1, A
RR A ;A中的数据右移
LCALL DELAY
DJNZ R2, M2
RET
;XS3子程序:利用查表指令控制LED无序显示
XS3:CLR A
XSM1: MOV 40H, A
;40H单元暂存所取表格位数,0位开始
MOV DPTR, #TAB
;DPTR指向数据表格首地址
LOOP: MOVC A, @ A+ DPTR ;根据A+DPTR的地址查表取数并保存至A
MOV P1, A
LCALL DELAY
INC 40H
;所取表格位数加一
MOV A, 40H
;40H单元送至A中
CJNE A, #08H,LOOP
;判断循环次数是否到8次
RET
TAB: DB 34H,54H,69H,88H,8AH
DB 6BH,72H,5CH,9AH,25H
;XS4子程序:利用数据传送指令控制LED对称成对熄灭
XS4:MOV R2, #4 ;保存循环次数
M4: MOV P1, #81H
LCALL DELAY
MOV P1, #42H
LCALL DELAY
MOV P1, #24H
LCALL DELAY
MOV P1, #18H
LCALL DELAY
DJNZ R2, M4
RET
DELAY: MOV R7, 0FFH
L1: MOV R6, #0FFH
L2: NOP
NOP
DJNZ R6, L2
DJNZ R7, L1
RET
END
工程截图:
相关文章推荐
- 树莓派 Learning 003 — GPIO 002 输入模式 — 按键控制LED
- wince6.0 +S3C6410 中断处理例子(按键控制LED灯)+应用程序控制LED流水灯
- 树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED
- 基于STM32CT117E竞赛板(STM32f103RB)按键控制LED流水灯
- P1口外接8个LED,通过按键控制,实现左右移动的流水灯
- 8个独立按键控制LED
- 基于CT117E的按键控制流水灯
- 中断——按键控制LED状态
- [精品书单]Button: 使用按键,控制开关 LED 灯
- tq2440裸机程序. 按键控制LED灯.
- jz2440裸板开发之GPIO:用按键控制led
- C51源代码--用按键控制led走马灯实例
- 4412裸机程序按键控制led灯
- Verilog/CPLD代码之按键控制流水灯
- ARM按键控制LED
- 【嵌入式】——arm裸机开发 step by step 之 按键控制 LED 和 蜂鸣器
- S3C2440学习之GPIO按键控制LED灯
- Linux驱动开发--通过按键控制led灯
- 【ARM】按键・查询式控制led灯・fs2410
- mini2440裸机试炼之--按键控制蜂鸣器和LED