|
#include <reg52.h>
#define ufloat unsigned float
#define uchar unsigned char
#define uint unsigned int
uchar zkb, t0;
bit flag1, flag2; //flag1占空比標(biāo)志位, flag2占空比方向標(biāo)志位(0自增, 1自減);
sbit led = P1^1; //輸出口;
void init ();
void display ();
/**********----------**********/
int main (void)
{
init();
while (1)
{
display ();
}
return 0;
}
/**********----------**********/
void init () //初始化子函數(shù)
{
TMOD = 0x01; //定時(shí)器0模式;
TH0 = (65536-10)/256; //附高8位初值(0.01ms);
TL0 = (65536-10)%256; //附底8位初值(0.01ms);
EA = 1; //開總中斷;
ET0 = 1; //開定時(shí)器0中斷;
TR0 = 1; //開啟定時(shí)器0;
}
/**********----------**********/
void display () //占空比子函數(shù);
{
if (flag1 == 1) //占空比標(biāo)志起始;
{
flag1 = 0; //復(fù)位占空比標(biāo)志位;
if (flag2 == 0) //占空比自增標(biāo)志;
{
zkb++;
if (zkb == 200) //占空比最大值;
{
flag2 = 1; //占空比進(jìn)入自減標(biāo)志位開啟;
}
}
else //占空比自減開始;
{
zkb--;
if (zkb == 0) //占空比最小值;
{
flag2 = 0; //占空比進(jìn)入自增標(biāo)志位開啟;
}
}
}
}
/**********----------**********/
void timer0() interrupt 1
{
TH0 = (65536-10)/256;
TL0 = (65536-10)%256;
t0++;
if (t0 <= zkb) //未到占空比數(shù)值輸出為0;
{
led = 0;
}
else
{
led = 1; //到達(dá)占空比數(shù)值輸出為1;
}
if (t0 == 200) //總周期為200*0.01ms 一旦到達(dá)總周期,動(dòng)態(tài)計(jì)數(shù)器t0累加值清零,進(jìn)入下個(gè)循環(huán);
{
t0 = 0;
led = 1;
flag1 = 1; //占空比標(biāo)志再次開啟;
}
}
|
評(píng)分
-
查看全部評(píng)分
|