51单片机心形灯——实现按键控制流水编程
其他心形灯类型编码请看我的其他博文~
实现按键K1实现从左向右流水,按键K2实现从右往左流水,按键K3实现暂停流水,按键K4实现继续流水
注意:本代码存在小小BUG即按键K1以后可以按键K3和K4控制流水,不能按K2中断K1流水操作来实现K2从右向左流水。按键K2对于K1也同理!
心形灯效果图 如果是静态效果请刷新页面哦
心形灯原理图
- 编译软件:Keil uVision5
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343174) - 单片机程序下载软件:STC-ISP
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343157) - 程序代码:
灯状态处于0亮1灭
#include "reg52.h"
sbit k1 = P3^2;
sbit k2 = P3^3;
sbit k3 = P3^4;
sbit k4 = P3^5;
unsigned char code table[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
unsigned char code table1[]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};
void Delay(unsigned int xms){
unsigned int i, j;
for(i=xms;i>0;i--){
for(j=110;j>0;j--);
}
}
unsigned int flag=0;
void checkflag(){
if(k3==0){
flag=1;
}
while(flag==1){
if(k4==0){
flag=0;
}
}
}
void main(){
unsigned char i;
while(1){
if(k1==0){
P3=0;
Delay(1000);
checkflag();
P3=0xff;
checkflag();
for(i=0;i<8;i++){
P0 = table[i];
Delay(1000);
checkflag();
}
P0=0xff;
checkflag();
for(i=0;i<8;i++){
P2 = table1[i];
Delay(1000);
checkflag();
}
P2=0xff;
checkflag();
}
if(k2==0){
for(i=0;i<8;i++){
P2 = table[i];
Delay(1000);
checkflag();
}
P2=0xff;
checkflag();
for(i=0;i<8;i++){
P0 = table1[i];
Delay(1000);
checkflag();
}
P0=0xff;
checkflag();
P3=0;
Delay(1000);
checkflag();
P3=0xff;
checkflag();
}
if(k4==0){
P3=0;
Delay(1000);
checkflag();
P3=0xff;
checkflag();
for(i=0;i<8;i++){
P0 = table[i];
Delay(1000);
checkflag();
}
P0=0xff;
checkflag();
for(i=0;i<8;i++){
P2 = table1[i];
Delay(1000);
checkflag();
}
P2=0xff;
checkflag();
}
}
}
可能存在我心形灯效果图与代码放错不匹配的情况,如果你按照我的代码装载运行效果与我效果图不一样请评论告诉我!我找一下改一下,如果我后期把相应的效果视频删了,那么就emmmmm意会~意会~我觉得你很聪明肯定懂我的意思hiahia