功能:K1是总开关,当K1首次按下时,流水灯由下往上流动;当K2按下时停止流动,且全部灯灭,当K3按下时使灯由上往下流动,K4则使灯由下往上流动。
LED灯循环速度可以调整延时函数的整型调用参数值来改变。
void delay (unsigned char time){
unsigned int j = 12000;
for(; time > 0; time--) // 延时函数
for(; j > 0; j--);
}
实现流水灯向 ↓移动
for(i = 0; i <= 3; i++){
P2 = led[i];
delay(300);
}
实现流水灯向↑移动
for(i = 3;i >= 0; i--){
P2 = led[i];
delay(300);
}
主程序
#include "reg51.h"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7};
void delay (unsigned char time){
unsigned int j=12000;
for(;time>0;time--) // 延时函数
for(;j>0;j--);
}
void main(){
bit dir=0,run=0;
char i;
while(1){
switch(P0&0x0f){ // 读取键值
case 0x0e:run=1;break; // k1动作,设 run = 1
case 0x0d:run=0,dir=0;break; // k2 动作,设run = dir = 0
case 0x0b:dir=1;break; // k3 动作, 设 dir = 1
case 0x07:dir=0;break; // k4动作,设dir = 0
}
if(run) // 若run = dir = 1,自上而下流动
if(dir)
for(i=0;i<=3;i++){
P2=led[i];
delay(300);
}
else // 若 run = 1, dir = 0,自下而上流动
for(i=3;i>=0;i--){
P2=led[i];
delay(300);
}
else P2=0xff; // 若 run = 0, 灯全灭
}}
程序电路图
程序电路图链接:https://share.weiyun.com/D6lgdrkD
上一篇:STC89C52单片机 点亮LED灯
下一篇:STC89C52单片机 LCD1602液晶显示屏
推荐阅读最新更新时间:2024-11-11 17:01
设计资源 培训 开发板 精华推荐
- S32K148汽车远程信息处理盒(T-Box)
- LTC4367CMS8-1 用于限制浪涌电流的过压电源保护控制器的典型应用
- MCP1754S 150 mA、16V、高性能 LDO 的典型应用
- 根据 EN50121-3-2(双输出)使用具有 EMC 滤波的 RP40-483.3SFR DC/DC 转换器的典型应用
- AM1S-0324SH30Z 1W DC-DC转换器典型应用
- 具有最大功率点跟踪功能的 LTC4162EUFD-FAD 太阳能供电 3 节 3.2A 充电器的典型应用
- EVAL-ADG888EBZ,采用 WLCSP 封装的 ADG888 CMOS、双 DPDT 开关评估板
- APDS-9960_DK
- 使用 Analog Devices 的 LT1764ET-1.5 的参考设计
- 具有可调跳跃电平和外部锁存输入的 NCP1219 PWM 控制器的典型应用