RGB三基色单片机按键调光.docx
《RGB三基色单片机按键调光.docx》由会员分享,可在线阅读,更多相关《RGB三基色单片机按键调光.docx(11页珍藏版)》请在冰豆网上搜索。
![RGB三基色单片机按键调光.docx](https://file1.bdocx.com/fileroot1/2023-2/6/f74a93c3-35ec-46b2-a970-47e5170dcc4f/f74a93c3-35ec-46b2-a970-47e5170dcc4f1.gif)
RGB三基色单片机按键调光
《电子创新设计》课程作品报告
RGB三基色单片机按键调光
班级
学号
姓名
前言
现代生活中,无论是在繁华的步行街,还是我们美丽的校园中,都能看到巨型显示频的身影,显示屏成为了现代信息传递的一个重要工具,当看到一个个美丽的画面在播放时,我们不禁好奇是什么原理让这些得以实现,众所周知,彩色LED显示屏,是以RGB三原色为基础。
显示出了丰富多彩的颜色,但具体的原理可能就没那么多人知道了,抱着学习的目的,以PWM为原理,我们制造了基于单片机的,三个按键控制,三基色显全彩灯光合成电路,希望给大家对了解彩色显示屏工作原理有所帮助。
一:
PWM原理(脉冲宽度调制)
控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。
按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。
这些脉冲宽度相等,都等于∏/n,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。
如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。
可以看出,各脉冲宽度是按正弦规律变化的。
根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。
对于正弦的负半周,也可以用同样的方法得到PWM波形。
在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。
根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就可以准确计算出来。
按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。
下图为变频器输出的PWM波的实时波形。
二:
原理图
三:
程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitred=P0^0;//红色LED输出口
sbitgreen=P0^1;//绿色LED输出口
sbitblue=P0^2;//蓝色LED输出口
sbitk1=P1^4;//红色LEDpwm控制
sbitk2=P1^5;//绿色LEDpwm控制
sbitk3=P1^6;//蓝色LEDpwm控制
ucharr_temp=1,g_temp=1,b_temp=1;//三色占空比数值缓存
ucharflag;//定时器T2定时次数标志
//延时函数,大约延时10ms.
voidDelay10ms()//@11.0592MHz
{
unsignedchari,j;
i=108;
j=145;
do
{
while(--j);
}while(--i);
}
//按键扫描程序
voidkey()
{
ucharnum1=0,num2=0,num3=0;
//if(k1==0)//按键K1处理程序
//{
//Delay10ms();
if(k1==0)
{
if(r_temp<99)
{
r_temp++;
while(!
k1)
{
num1++;//长按标志位加到10约100ms
Delay10ms();
if(num1==10&&r_temp<95)
{
r_temp+=5;
num1=0;
}
if(r_temp>=95)r_temp=1;
}
}
elser_temp=1;
}
//}
if(k2==0)//按键K2处理程序
{
Delay10ms();
if(k2==0)
{
if(g_temp<99)
{
g_temp++;
while(!
k2)
{
num2++;//长按标志位加到10约100ms
Delay10ms();
if(num2==10&&g_temp<95)
{
g_temp+=5;
num2=0;
}
if(g_temp>=95)g_temp=1;
}
}
elseg_temp=1;
}
}
if(k3==0)//按键K3处理程序
{
Delay10ms();
if(k3==0)
{
if(b_temp<99)
{
b_temp++;
while(!
k3)
{
num3++;//长按标志位加到10约100ms
Delay10ms();
if(num3==10&&b_temp<95)
{
b_temp+=5;
num3=0;
}
if(b_temp>=95)b_temp=1;
}
}
elseb_temp=1;
}
}
}
//定时器T016位自动模式定时1ms控制灯灭时间
voidInitTimer0()interrupt1//1毫秒@11.0592MHz
{
ET1=0x00;//关闭定时器1中断
TR1=0x00;
//AUXR=0XE4;//关闭定时器1计数
TL0=0x18;
TH0=0xFC;
red=1;
green=1;
blue=1;
flag=1;
//AUXR=0xF4;//开启定时器1计数
//IE2=0x04;
EA=1;
ET1=1;
TR1=1;//开启定时器1中断允许
}
//定时器T116位自动模式定时10us控制灯亮时间
voidInitTimer2()interrupt3//10微秒@11.0592MHz
{
flag++;
TH1=0xFF;//设置定时初值
TL1=0xDC;//设置定时初值
if(r_temp==flag)red=0;
if(g_temp==flag)green=0;
if(b_temp==flag)blue=0;
}
voidinit()
{
//AUXR=0XE4;//设置定时器0和2为1T模式
TMOD=0x11;
TL0=0xCD;
TH0=0xD4;
TH1=0x91;//设置定时初值
TL1=0xFF;//设置定时初值
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
voidmain()
{
init();
while
(1)
{
key();
}
}
四:
实物图
总结
在本次作品中我深入了解了PWM技术,PWM在工业应用中是十分的广泛的,例如直流电机转速的控制,这为我们以后在电子产品设计中,当不能通过硬件时时控制电流电压大小时,提供了一种解决方法。
并且在这次制作当中我们自己制作了PCB板的最小系统,让我对单片机与PCB制作更一步的加深。