超简单51单片机流星拖尾灯

#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;
}

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值