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);
}