跑马灯实验

掌握如何控制I/O口以及延时操作之后,就可以进一步实现更有意思的事情了。我们这次就可以做一个跑马灯。

8个LED分别对应单片机P2口的8个I/O口,因此要实现跑马灯的效果,则P2对应的功能寄存器,其状态应该是这样的:

1111 0000

1110 0001

1100 0011

1000 0111

0000 1111

0001 1110

0011 1100

0111 1000

1111 0000

怎么样才能实现寄存器像这样赋值呢?一种比较简单的方法是使用C语言进行循环移位。

源代码如下:

#include "reg52.h" //先进入工程文件夹寻找REG52.H文件。若没有,则进入软件安装路径内进行查找。
                   //52系列单片机头文件
#include <intrins.h>

typedef unsigned char u8;

u8 temp;

void delay_xms(unsigned int xms)
{
	unsigned int i,j;
	for(i = xms; i > 0; i--)
		for(j = 110; j > 0; j--);
}


void main(void)
{	temp = 0xf0; 
	while(1)
	{
		  P2 = temp;
		  delay_xms(150);
		  temp = _crol_(temp, 1);	 //从左向右跑
		  //temp = _cror_(temp, 1);    //从右向左跑
	}	  

}

这里,我使用了_crol_函数,这是C51库里面的一个函数。

这个库函数包含在intrins.h头文件里面,所以要在程序的开头处包含intrins.h这个头文件。然后,我们就可以在主函数里面直接使用这个函数了,它可以实现循环左移的效果。 

实验现象如下:

跑马灯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值