51单片机 花样流水灯程序

/**采用T0定时器进行延时,每次延时的时间为1ms
LED小灯的闪烁变化为500ms
LED的样式有三种:
1、从右往左、在从左往右
2、从边缘向中间靠拢
3、从右边依次点亮,在从左边依次写灭
**/

#include <reg52.h>
#include <stdio.h>

#define uchar unsigned char
#define uint unsigned int

/**位绑定**/
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

/**通过定时器溢出作为延时函数**/
void timerDelay(){
	uint count =0;
	while (1)
	{
		if (TF0 == 1 )
		{
			/* code */
			TF0 =0;//软件清零溢出标志位
			TH0 = 0xFC;
			TL0 = 0x67;
			count++;
			if (count == 500)
			{
				/* code */
				count = 0;
				break;
			}
			
		}
		
	}
	

}


/**主函数**/
void main()
{
	
	uchar index = 0;//索引
	uchar initData = 0x00;
	//使能U3
	ADDR0 = 0;
	ADDR1 = 1;
	ADDR2 = 1;
	ADDR3 = 1;
	ENLED = 0;

	//定时器相关的配置
	TMOD = TMOD | 0x01;
	TH0 = 0xFC;
	TL0 = 0x67;
	TR0 = 1;
	while(1){
		
		//样式1
		for (index; index > 7; index++)
		{
			P0 = ~(0x01 << index);
			timerDelay();
		}
		for (index; index > 0; index--)
		{
			P0 = ~(0x01 << index);
			timerDelay();
		}

		//样式二
		for(index = 0;index < 7;index++){
			P0 = (0xFF & ~(0x01 << index)) & (0xFF & ~(0x80 >> index));
			timerDelay();

		//样式三
		for(index = 0;index < 8;index++){
			P0 = ~(initData += 0x01 << index);
			timerDelay();
		}
		for(;index > 0;index--){
			P0 = ~(initData -= 0x01 << index);
			timerDelay();
		}
	}
}
}
  • 37
    点赞
  • 215
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值