|
#include <REG51.H>
#define uint unsigned int
#define uchar unsigned char
unsigned char code tabb[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //衡條表
uint PWM_Count,PWM_ZKB,PWM_Delay,PWM_Number;
unsigned char LED;
bit PWM_END;
void Timer0Init(void); //10微秒@12.000MHz
void Delay500MS();
/*************主函數(shù)*****************************/
void main(void)
{
Timer0Init();
P2=0x00;
while(1)
{
for(LED=0; LED<8; LED++) //循環(huán)8次逐條點(diǎn)亮8個LED點(diǎn)陣燈
{
P0=tabb[7-LED];
Delay500MS();
P0=0x00;
Delay500MS();
TR0=1;
PWM_END = 1;
while(PWM_END);
}
}
}
void Timer0Init(void) //10微秒@12.000MHz
{
TMOD &= 0xF0; //設(shè)置定時器模式
TMOD |= 0x02; //設(shè)置定時器模式
TL0 = 0xF7; //設(shè)置定時初值
TH0 = 0xF7; //設(shè)置定時重載值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 0; //定時器0開始計時
ET0 = 1;
EA = 1;
}
/*************延時函數(shù)*********************/
void Delay500MS() //@11.0592MHz
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void TIME0() interrupt 1
{
PWM_Count++;
if(PWM_Count > 100)
{
PWM_Count = 0;
PWM_Delay++;
if(PWM_Delay > 20)
{
PWM_Delay = 0;
// if(PWM_ZKB > 60)
// PWM_ZKB +=2;
// else
PWM_ZKB++;
}
if(PWM_ZKB > 30)
{
PWM_ZKB = 0;
PWM_Number++;
if(PWM_Number > 3)
{
PWM_Number = 0;
PWM_END=0;
TR0 = 0;
}
}
}
if(PWM_Count < PWM_ZKB)
P0=tabb[7-LED];
else
P0 = 0x00;
} |
|