汇编语言用单片机端口连接 8 个发光二极管和两路开关量输入,编制程序实现通过开关量控制的四种花型显示,并可工 进行花型的切换。提示:注意延时。 (1) 00000001 左循环 (2) 00000001 右循环 (3) 按 00000001,00000011,00000111,……,11111111 规律递增,然后递减。 (4) 01010101 与 10101010 交替闪烁
时间: 2024-03-08 22:49:55 浏览: 136
51单片机步进电机控制汇编语言程序
下面是使用汇编语言编写的代码,可以实现上述要求:
```assembly
;----------------------------
; 定义端口
;----------------------------
P2 equ 0x80 ; 发光二极管端口
P3 equ 0x90 ; 开关量输入端口
;----------------------------
; 定义变量
;----------------------------
flag equ 0x30 ; 标志位
;----------------------------
; 程序入口
;----------------------------
org 0x0000 ; 程序入口地址
ljmp main ; 跳转到主程序
;----------------------------
; 延时函数
;----------------------------
delay:
mov r7, #120 ; 循环计数器
D1: djnz r7, D1 ; 延时
mov r7, #5
D2: djnz r7, D2
ret ; 返回
;----------------------------
; 主程序
;----------------------------
main:
clr P2 ; 初始化发光二极管
clr flag ; 初始化标志位
loop:
jnb P3.0, loop ; 等待K1按下
inc flag ; 标志位加1
mov a, flag
cmp a, #4 ; 判断标志位是否为4
jnc reset ; 超过4时重置为0
jnb P3.0, loop ; 等待K1释放
jnb P3.1, toggle ; 判断K2是否按下
mov a, flag ; 根据标志位控制发光二极管
cjne a, #0, L1
mov r6, #0x01
sjmp loop1
L1: cjne a, #1, L2
mov r6, #0x80
sjmp loop1
L2: cjne a, #2, L3
mov r6, #0x00
mov r5, #0x01
L3: cjne a, #3, L4
mov r5, #0x55
mov r6, #0x00
L4: movc a, @a+dptr ; 显示当前值
mov P2, a
call delay ; 延时
sjmp loop ; 循环
reset:
clr flag ; 重置标志位
sjmp loop ; 循环
toggle:
jnb P3.1, toggle ; 等待K2释放
cpl P2 ; 发光二极管状态取反
sjmp loop ; 循环
end ; 程序结束
```
在此代码中,我们使用P2口连接了8个发光二极管,使用P3.0和P3.1口连接了两个开关量输入。程序通过轮询检测开关量输入状态,根据不同的状态控制发光二极管的显示效果。其中,延时函数`delay()`用于控制花型的切换速度和发光二极管的亮灭时间。在汇编语言中,我们使用了DPTR寄存器来实现对花型的递增递减。
阅读全文