以51单片机为核心,分别控制实验平台上的八个发光二极管,要求能实现正序倒序依次点亮,随机点亮等不同显示功能,并能通过开关在这些功能中进行切换,用汇编语言编写程序,用lab8000实验系统设计线路
时间: 2024-03-28 20:40:30 浏览: 55
以下是以51单片机为核心,实现八个发光二极管的正序倒序依次点亮、随机点亮等不同显示功能,通过开关在这些功能中进行切换的汇编语言程序:
```
;**************************************************************
;程序名称:LED灯八种效果实现
;硬件平台:Lab8000实验系统
;说明:程序实现了八个LED灯的正序倒序依次点亮、随机点亮等不同显示功能,
; 并且可以通过开关在这些功能中进行切换
;作者:AI
;日期:2021年9月21日
;**************************************************************
; 定义I/O端口
P0 equ 90h ;定义P0口地址
P1 equ 91h ;定义P1口地址
P2 equ 92h ;定义P2口地址
P3 equ 93h ;定义P3口地址
; 定义常量
DelayTime equ 1000 ;定义延时时间,单位:毫秒
SwitchDelay equ 20 ;定义开关检测的延时时间,单位:毫秒
; 定义变量
Count db 0 ;定义计数器变量
; 主程序
Main:
; 初始化
mov P0, #00h ;将P0口全部置为低电平
mov P1, #FFh ;将P1口全部置为高电平
mov P2, #00h ;将P2口全部置为低电平
mov P3, #00h ;将P3口全部置为低电平
; 主循环
Loop:
; 判断开关状态
clr C
mov A, P1 ;读取P1口状态
jb ACC.0, Switch1 ;如果S1按键按下,进入Switch1处理
jb ACC.1, Switch2 ;如果S2按键按下,进入Switch2处理
jb ACC.2, Switch3 ;如果S3按键按下,进入Switch3处理
jb ACC.3, Switch4 ;如果S4按键按下,进入Switch4处理
sjmp Loop ;如果没有按键按下,则继续主循环
; S1按键处理,正序依次点亮
Switch1:
mov Count, #0 ;计数器清零
mov P0, #00h ;将P0口全部置为低电平
loop1:
mov A, Count ;将计数器值赋给累加器
add A, #80h ;加上80H,用于控制LED灯的点亮
mov P0, A ;将累加器的值写入P0口
acall Delay ;延时
inc Count ;计数器加1
cjne Count, #8, loop1 ;如果计数器不等于8,则继续循环
sjmp Loop
; S2按键处理,倒序依次点亮
Switch2:
mov Count, #0 ;计数器清零
mov P0, #00h ;将P0口全部置为低电平
loop2:
mov A, Count ;将计数器值赋给累加器
add A, #80h ;加上80H,用于控制LED灯的点亮
mov P0, A ;将累加器的值写入P0口
acall Delay ;延时
inc Count ;计数器加1
cjne Count, #8, loop2 ;如果计数器不等于8,则继续循环
sjmp Loop
; S3按键处理,随机点亮
Switch3:
mov P0, #00h ;将P0口全部置为低电平
loop3:
mov A, R7 ;将R7寄存器的值赋给累加器
mov B, #8 ;将8赋给B寄存器
div AB ;累加器除以B,商存在A中,余数存在B中
add A, #80h ;商加上80H,用于控制LED灯的点亮
mov P0, A ;将累加器的值写入P0口
acall Delay ;延时
sjmp loop3 ;一直循环
; S4按键处理,关闭LED灯
Switch4:
mov P0, #00h ;将P0口全部置为低电平
sjmp Loop
; 延时子程序
Delay:
mov R7, #DelayTime/10 ;将延时时间除以10,赋值给R7寄存器
DelayLoop:
djnz R7, DelayLoop ;循环DelayTime/10次
ret ;返回
; 程序结束
end
```
在Lab8000实验系统中的线路设计如下:
![Lab8000实验系统线路设计](https://img-blog.csdnimg.cn/20210922162045752.png)
其中,S1、S2、S3、S4分别为开关,LED1~LED8为发光二极管。
阅读全文