|
我用的AO3400控制一個(gè)固態(tài)繼電器來實(shí)現(xiàn)PWM漸變
有個(gè)問題,是漸亮的時(shí)候在后端會增量明顯,想要黑色線條效果,最終確實(shí)紅色線條效果.
我感覺是是LED在問題,越到后,需求電流就越小,然后電壓升高.亮度變化更快.
有什么解決辦法呢?
無標(biāo)題.png (6.2 KB, 下載次數(shù): 37)
下載附件
2022-5-12 15:52 上傳
單片機(jī)源程序如下:
#include "reg51.h"
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr AUXR = 0x8e;//輔助寄存器
sbit P14 = P1^4; //PWM輸出腳
unsigned int HIGHDUTY,LOWDUTY,q;//高低時(shí)間存放寄存器
unsigned char num;//記錄分辯個(gè)數(shù)
bit flag;
void Delayms(unsigned int ms)//1mS@11.0592MHz
{unsigned char i, j;
while(ms--)
{
i = 11;
j = 190;
do
{
while (--j);
} while (--i);}
}
void main()
{ P37=0;
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
AUXR = 0x80; //定時(shí)器0為1T模式
TMOD &= 0xf0; //設(shè)置定時(shí)器0為模式0(16位自動重裝載)
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
ET0 = 1; //使能定時(shí)器0中斷
EA = 1;
HIGHDUTY=54477+(11058/255)*num;
LOWDUTY=54477+(11058/255)*(256-num);
while (1)
{
if(q==1){
num++;
}else{
num--;
}
//HIGHDUTY=60006+(5529/255)*num;
//LOWDUTY=60006+(5529/255)*(255-num);
HIGHDUTY=(65535/255)*num;
LOWDUTY=(65535/255)*(255-num);
if(num==255){q=0;}
if(num==0){q=1;}
Delayms(5);
}
}
void tm0() interrupt 1//定時(shí)器0中斷服務(wù)程序
{
flag = !flag;
if (flag)//反轉(zhuǎn)標(biāo)志去執(zhí)行高低電平的時(shí)間
{
TL0 = HIGHDUTY; //設(shè)置定時(shí)初值
TH0 = HIGHDUTY>>8;//設(shè)置定時(shí)初值
P14=1;//輸出高電位
}
else
{
TL0 = LOWDUTY; //設(shè)置定時(shí)初值
TH0 = LOWDUTY>>8; //設(shè)置定時(shí)初值
P14=0;//輸出低電位
}
}
|
|