51单片机用一个按键控制8个呼吸灯频率C代码
时间: 2024-02-06 07:08:57 浏览: 70
下面是用一个按键控制8个呼吸灯频率的C代码:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit led5 = P1^4;
sbit led6 = P1^5;
sbit led7 = P1^6;
sbit led8 = P1^7;
sbit button = P3^2;
uchar pwm[] = {0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 255};
uint t = 0;
void delay(uint n)
{
uint i, j;
for (i = 0; i < n; i++)
for (j = 0; j < 110; j++);
}
void main()
{
uchar i = 0;
while(1)
{
if (button == 0)
{
delay(10);
if (button == 0)
{
i++;
if (i > 16) i = 0;
while (!button);
}
}
led1 = (t >= pwm[i]) ? 0 : 1;
led2 = (t >= pwm[(i+2)%16]) ? 0 : 1;
led3 = (t >= pwm[(i+4)%16]) ? 0 : 1;
led4 = (t >= pwm[(i+6)%16]) ? 0 : 1;
led5 = (t >= pwm[(i+8)%16]) ? 0 : 1;
led6 = (t >= pwm[(i+10)%16]) ? 0 : 1;
led7 = (t >= pwm[(i+12)%16]) ? 0 : 1;
led8 = (t >= pwm[(i+14)%16]) ? 0 : 1;
t++;
if (t >= 255) t = 0;
delay(1);
}
}
```
在这个程序中,我们使用了一个数组来存储16个不同的占空比值,每个占空比之间相差16,因此占空比的范围是0到255之间的整数。按键被用来切换占空比的值,每次按下按键占空比的值增加16,最大值是255,然后再从0开始。LED灯的亮度通过改变占空比实现,因此呼吸灯的频率也随之改变。函数delay()用来产生一定的延时,以便能够观察到LED灯的亮度变化。
阅读全文