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