掌握如何控制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这个头文件。然后,我们就可以在主函数里面直接使用这个函数了,它可以实现循环左移的效果。
实验现象如下:
跑马灯