51单片机彩灯控制器设计代码
时间: 2023-11-13 08:02:56 浏览: 141
51单片机光控路灯设计程序代码.zip
5星 · 资源好评率100%
下面是一个简单的51单片机彩灯控制器设计代码示例,供参考:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 定义RGB LED引脚
sbit R = P2^0;
sbit G = P2^1;
sbit B = P2^2;
// 定义光敏电阻引脚
sbit LDR = P3^7;
// 定义调节灯光亮度的电位器引脚
sbit POT = P3^6;
// 定义按键引脚
sbit KEY = P3^5;
// 延时函数
void delay(uint i)
{
while(i--);
}
// ADC采集函数
uchar ADC_Read(uchar chn)
{
uchar ADC_Value;
ADC_CONTR = ADC_POWER | ADC_SPEEDH | chn;
delay(10);
ADC_CONTR |= ADC_START;
while(!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
ADC_Value = ADC_RES;
return ADC_Value;
}
// 控制RGB LED亮度和颜色
void Control_RGB_LED(uchar r_val, uchar g_val, uchar b_val)
{
R = r_val;
G = g_val;
B = b_val;
}
// 主函数
void main()
{
uchar ldr_val, pot_val;
uchar r_val, g_val, b_val;
uchar mode = 0;
// 初始化ADC
ADC_RES = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDH | ADC_SPEEDL;
delay(5);
while(1)
{
// 采集光敏电阻的值
ldr_val = ADC_Read(7);
// 采集电位器的值
pot_val = ADC_Read(6);
// 根据光敏电阻的值调整灯光亮度
r_val = (255 - ldr_val) * pot_val / 255;
g_val = (255 - r_val) * pot_val / 255;
b_val = (255 - g_val) * pot_val / 255;
// 根据按键切换灯光模式
if(KEY == 0)
{
delay(1000);
mode++;
if(mode > 2)
{
mode = 0;
}
}
// 根据不同的灯光模式设置RGB LED颜色
switch(mode)
{
case 0:
Control_RGB_LED(r_val, g_val, b_val); // RGB LED颜色跟随环境光线和电位器调节
break;
case 1:
Control_RGB_LED(255, 0, 0); // 红色闪烁
delay(500);
Control_RGB_LED(0, 255, 0); // 绿色闪烁
delay(500);
Control_RGB_LED(0, 0, 255); // 蓝色闪烁
delay(500);
break;
case 2:
Control_RGB_LED(255, 255, 255); // 白色呼吸灯
for(uchar i = 0; i < 255; i++)
{
r_val = i;
g_val = i;
b_val = i;
Control_RGB_LED(r_val, g_val, b_val);
delay(50);
}
for(uchar i = 255; i > 0; i--)
{
r_val = i;
g_val = i;
b_val = i;
Control_RGB_LED(r_val, g_val, b_val);
delay(50);
}
break;
default:
break;
}
}
}
```
该代码实现了根据环境光线和电位器调节RGB LED的颜色和亮度,同时可以通过按键切换不同的灯光模式,包括闪烁和呼吸灯两种效果。具体实现还需要根据具体的硬件电路进行调整和优化。
阅读全文