51单片机--实现跑马灯的两种办法

1.通过左移实现跑马灯

#include "reg52.h"
#define LED_PORT P0 //使用宏定义的方式将P0端口定义

typedef unsigned char u8;
typedef unsigned int u16;

void delay_10us(u16 ten_us) //当传入Ten_us=1时,大约延时10us
{
	while(ten_us--);
}

void main()
{
	u8 i=0;
	
	while(1)
	{
		for(i=0;i<8;i++)
		{
			LED_PORT=~(0x01<<i);//i=0, 0000 0001 取反:1111 1110
												  //i=1, 0000 0010 取反:1111 1101
												  //i=2, 0000 0100 取反:1111 1011
												  //…… (C语言移位补零)
			delay_10us(50000);
		}
	}
}

关于0xef

 2.通过库函数实现跑马灯

#include "reg52.h"
#include "intrins.h"
#define LED_PORT	P0 //使用宏定义的方式将P0端口定义

typedef unsigned char u8;
typedef unsigned int u16;

void delay_10us(u16 ten_us) //当传入Ten_us=1时,大约延时10us
{
	while(ten_us--);
}

void main()
{
	u8 i=0;
	LED_PORT=~0x01; //写成 0xfe 也可以 保证最低位为0即可
	delay_10us(50000);
	while(1)
	{
		for(i=0;i<7;i++)
		{
				LED_PORT=_crol_(LED_PORT,1); //最后一位的0往前移一位时,第一位移到最后一位,转圈循环
				delay_10us(50000);			//i=0 1111 1101 
											//i=1 1111 1011
											//i=2 1111 0111
											//……
		}
		for(i=0;i<7;i++)
		{
			LED_PORT=_cror_(LED_PORT,1); //右移同理
			delay_10us(50000);
		}
	}
}

关于左移右移函数(在intrins.h文件里的第21、24行)

 

  • 8
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值