#include <REGX52.H>
#include <INTRINS.H>
#define LED P1
unsigned char D1=0xFE,D2=0xFD,D3=0xFB,D4=0xF7;
void Timer0_Init()//0.1ms
{
TMOD &=0xF0;
TMOD |=0x01;
TL0=0xF5;
TH0=0xFF;
TF0=0;
TR0=1;
ET0=1;
EA=1;
PT0=0;
}
void main(void)
{
Timer0_Init();//定时器初始化
while(1);
}
void Timer0_Routine() interrupt 1 //0.1ms执行一次
{
static unsigned int ZKB,t;
TL0 = 0xA4; //设置定时初始值
TH0 = 0xFF; //设置定时初值
ZKB++;
t++;
ZKB%=100;//周期为10ms
if(t>=1500)//150ms循环左移一次
{
t=0;
D1=_crol_(D1,1);
D2=_crol_(D2,1);
D3=_crol_(D3,1);
D4=_crol_(D4,1);
}//通过与和或的运算,让每个I/O口输出不同的pwm,而且不干扰其他I/O口的pwm输出
if(ZKB<=0)LED&=D1;//与等于D1复位一位,不影响其他7位
else LED|=~D1;//或等于D1置位一位,不影响其他7位
if(ZKB<=10)LED&=D2;
else LED|=~D2;
if(ZKB<=40)LED&=D3;
else LED|=~D3;
if(ZKB<=101)LED&=D4;
else LED|=~D4;
}
超简单51单片机流星拖尾灯
最新推荐文章于 2024-01-23 22:07:21 发布