1. AT89C51单片机IO的最大允许输入电压
AT89C51电源电压VCC和封装有很大关系,大封装VCC=5V,小封装VCC=3.3V.
输入低电压(VIL)Input low voltage指IO口通过软件设置低电平时,输入电压范围。由芯片手册得知:VIL=–0.5 V到0.2 VCC–0.1V,当VCC=5V 输入电压-0.5V到0.9V,如图所示,此时场管V2导通,输入电压过低会导致V2寄生二极管导通而损坏,输入电压过大会时流经V2的电流过大而损坏。
输入高电压(VIH)Input high voltage指IO口通过软件设置高电平时,输入电压范围。由芯片手册得知:VHI=0.2 VCC+0.9V到VCC+0.5V,当VCC=5V,输入电压1.9到5.5V,也就是普通IO口>1.9V就可判断为高电平,当大于5.5V,由于V2截止,V2有击穿可能。即使输入加了限流电阻,仍改变不了V2击穿的命运,顶多不至于应击穿而损坏。
结果分析:他可能设计时可能用的大封装单片机,即使用的小封装也不会顺坏单片机,TCS230输出电流有限,最多使采集性号偶发失真。
2. 有谁用单片机控制RGB彩色灯(4脚)
可根据RGB灯珠是共阴或者共阳调整极性,由于三个发光二极管压降不同,可能需要调整限流电阻阻值。三个控制端接单片机。
如果作流水灯,需要多组这样电路。
3. 一个单片机流水灯程序,但用Proteus仿真时所有灯都不亮,程序如下
没有任何问题
如果你是第一次用proteus,那么我有理由怀疑你是LED用错了
那个带箭头的发光LED是不会发光的,要用RGB那三种LED
如图:用你的程序仿真的,能跑
4. 求一个stc15w202s单片机的呼吸灯程序 要边呼吸边移动(波浪状), 就是相当于呼吸灯流水灯结合。
你可以了解一下ws2812,这个会好很多。
想过这种程序,但因为没什么卵用就给我忘了。
pwm要挺高频率才行,不然会闪,试过3灯的rgb,原理上差不多,但是直接程序死循环都难受,不是很流畅,你也可以参考一下。。。
#include "reg52.h"
#include "intrins.h"
sbit r=P1^0;
sbit g=P1^1;
sbit b=P1^2;
void Delay200ms();
void play(char rz1,char gz1,char bz1,int t);
void Delay10us();
//占空比从0到100变化
void main(void)
{
while(1)
{char rz=0,gz=0,bz=0;
char x=0,y=0,z=0;
r=1;
g=1;
b=1;
Delay200ms(); //接线验证,rgb依次亮起
r=0;
Delay200ms();
r=1;
g=0;
Delay200ms();
g=1;
b=0;
Delay200ms();
b=1;
Delay200ms();
for(x=5;x>=0;x--) //彩色连续变化
{rz=100;gz=0;bz=0;
play(rz,gz,bz,1);
for(gz=0;gz<=100;gz++)
play(rz,gz,bz,1);
for(rz=100;rz>=0;rz--)
play(rz,gz,bz,1);
for(bz=0;bz<=100;bz++)
play(rz,gz,bz,1);
for(gz=100;gz>=0;gz--)
play(rz,gz,bz,1);
for(rz=0;rz<=100;rz++)
play(rz,gz,bz,1);
for(bz=100;bz>=0;bz--)
play(rz,gz,bz,1);
}
}
}
//显示色彩程序,pwm,显示某占空比颜色时间t
void play(char rz1,char gz1,char bz1,int t)
{
char i=rz1,j=gz1,k=bz1,yt;
for(t=t*4;t>=0;--t)
{
i=rz1;j=gz1;k=bz1;
for(yt=100;yt>=0;yt--)
{
if(i>0)
r=0;
else
r=1;
if(j>0)
g=0;
else
g=1;
if(k>0)
b=0;
else
b=1;
--i;
--j;
--k;
Delay10us();
}
}
r=1;g=1;b=1;
}
//延时程序组
void Delay200ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 10;
j = 31;
k = 147;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay10us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 27;
while (--i);
}