打印
[DemoCode下载]

51单片机“呼吸灯”程序

[复制链接]
1920|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
仙女山|  楼主 | 2015-8-6 09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


刚看了一份关于光立方的视频里片面提到“呼吸灯”一词,忙草草写了一个带数码管显示亮度变化的呼吸灯程序,其中整型frequency为调节呼吸频率的参数,附图为临时做的gif文件,需等会儿才见效果
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint f=100; /*????????f????????????1~10khz*/
uint H=6;/*????????·§????????0~10000/f????H>L*/
uint L=0;/*????????·§????????0~10000/f????H>L*/
uchar code wela[]={0xfe,0xfd,0xfb,0xf7};
uchar code dula[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80,0x90};
uint m=0,t;
uchar amp=0,frequency=100;
sbit pwm=P1^7;
sbit pwm_=P1^6;
sbit hkey=P3^5;
sbit lkey=P3^3;
void diskey();
void delay(uint z);
void display();
void xunhuan();
void main()
{
EA=1;
ET0=1;
TMOD=0x02;
TH0=146;
t=10000/f;
TR0=1;
while(1)
{
if(hkey==0)diskey();
if(lkey==0)diskey();
display();
xunhuan();
}
}
void TRT0() interrupt 1
{
m++;
if(m>=t)m=0;
if(m==L){pwm=0;}
if(m==H){pwm=1;pwm_=0;}
}
void diskey()
{
display();
if(hkey==0&&H<100)H++;
delay(10);
if(lkey==0&&H>0)H--;
display();
}
void xunhuan()
{
if(amp==1)H++;
if(H>99)amp=0;
if(amp==0)H--;
if(H<1)amp=1;
delay(frequency);
}
void delay(uint z)
{
uint x,y;
for(y=z;y>0;y--)
for(x=12;x>0;x--);
}
void display()
{
delay(2);
P2=dula[H/1000];
P0=wela[0];
delay(5);
P0=0xff;
P2=dula[H%1000/100];
P0=wela[1];
delay(5);
P0=0xff;
P2=dula[H%100/10];
P0=wela[2];
delay(5);
P0=0xff;
P2=dula[H%10];
P0=wela[3];
delay(5);
P0=0xff;
}



沙发
forget345| | 2015-8-6 09:17 | 只看该作者
效果还可以,只是这都在main里面delay ,还能干别的事不?

使用特权

评论回复
板凳
Luis德华| | 2015-8-6 21:03 | 只看该作者
这个呼吸灯是不是和魅族手机的呼吸灯是一样的啊,好像用pwm也能实现

使用特权

评论回复
地板
玛尼玛尼哄| | 2015-8-7 10:06 | 只看该作者
魅族小圆圈就是呼吸灯,比较有意思。

使用特权

评论回复
5
大苏牙| | 2015-8-7 11:03 | 只看该作者
呼吸灯看起来还挺漂亮的啊,实现起来不难吧

使用特权

评论回复
6
598330983| | 2015-8-7 16:13 | 只看该作者
楼主的图片动画效果贼拉好。

使用特权

评论回复
7
IversonCar| | 2015-8-9 20:19 | 只看该作者
呼吸灯主要是用pwm实现吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

340

帖子

2

粉丝