51单片机心形灯——实现旋转呼吸灯流水编程
其他心形灯类型编码请看我的其他博文~
心形灯效果图 如果是静态效果请刷新页面哦
心形灯原理图
- 编译软件:Keil uVision5
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343174) - 单片机程序下载软件:STC-ISP
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343157) - 程序代码:
灯状态处于0亮1灭
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0 =P3^6;
sbit led1 = P2^2;
uint num, timenum=100, leddirction=0, ledpwm=0, ledpwm_temp, pwm_max=100, pwm_min=0;
unsigned char code table[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
unsigned char code table1[]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};
uint flag0=0;
void init(){
TMOD=0x01; //定时器1模式
TH0 = (65536-10)/256;
TL0 = (65536-10)%256;
ET0=1; //开定时器0中断
EA=1; //开总中断
TR0=1; //启动定时器0
}
void Delay(unsigned int i){
unsigned char j;
for(;i>0;i--){
for(j=110;j>0;j--);
}
}
void main(){
//init();
uint i=0;
while(1){
while(flag0==0){ //先让心形灯做底部D17号灯呼吸闪烁,在这里利用flag来控制当前接口内灯的循环闪烁
if((timenum++)>=100){
timenum=0;
if(leddirction==0){
ledpwm++;
if(ledpwm>=pwm_max){
ledpwm=pwm_max;
leddirction=1;
}
}
if(leddirction==1){
ledpwm--;
if(ledpwm<=pwm_min){
ledpwm=pwm_min;
flag0=1;
leddirction=0;
}
}
ledpwm_temp=ledpwm;
}
if(ledpwm_temp>0){
led0 = 0;
ledpwm_temp--;
}else{
led0 = 1;
}
}
P3=0xff; //D17号灯闪烁结束,让其位置变为1让其熄灭
flag0=0;
for(i=0;i<8;i++){ //让心形灯右半部分呼吸闪烁
while(flag0==0){
if((timenum++)>=100){
timenum=0;
if(leddirction==0){
ledpwm++;
if(ledpwm>=pwm_max){
ledpwm=pwm_max;
leddirction=1;
}
}
if(leddirction==1){
ledpwm--;
if(ledpwm<=pwm_min){
ledpwm=pwm_min;
flag0=1;
leddirction=0;
}
}
ledpwm_temp=ledpwm;
}
if(ledpwm_temp>0){
P0 = table[i];
ledpwm_temp--;
}else{
P0 = 0xff;
}
}
P0=0xff;
flag0=0;
}
for(i=0;i<8;i++){ //左半部分
P2 = table1[i];
while(flag0==0){
if((timenum++)>=100){
timenum=0;
if(leddirction==0){
ledpwm++;
if(ledpwm>=pwm_max){
ledpwm=pwm_max;
leddirction=1;
}
}
if(leddirction==1){
ledpwm--;
if(ledpwm<=pwm_min){
ledpwm=pwm_min;
flag0=1;
leddirction=0;
}
}
ledpwm_temp=ledpwm;
}
if(ledpwm_temp>0){
P2 = table1[i];
ledpwm_temp--;
}else{
P2 = 0xff;
}
}
P2=0xff;
flag0=0;
}
}
}
可能存在我心形灯效果图与代码放错不匹配的情况,如果你按照我的代码装载运行效果与我效果图不一样请评论告诉我!我找一下改一下,如果我后期把相应的效果视频删了,那么就emmmmm意会~意会~我觉得你很聪明肯定懂我的意思hiahia