涉及主要两个问题:如何实现流水?如何实现闪烁?
针对问题解决方法:平移函数以及延时函数。
1,平移函数
平移函数所在的头文件:intrins.h
右平移:_cror_(变量,平移位数)
左平移:_crol_(变量,平移位数)
2,延时函数
void delay(u16 i) //延时函数
{
while(i--);
}
3,完整程序
#include"reg52.h" //51单片机头文件,库函数
#include"intrins.h" //左移右移函数的头文件
typedef unsigned char u8; //重定义,使用typedef 将unsigned char定义为u8
typedef unsigned int u16; //用加分号
#define led P2 //定义全局变量,不用加分号
void delay(u16 i) //延时函数
{
while(i--);
}
void main() //主函数
{
u16 i=0; //定义 整数i
led=0xfe; //1111 1110前四位高位,后四位低位
delay(50000); //延时450ms,每个系统可能不一样,可以通过计算得出
while(1) //无限循环
{
for(i=0;i<7;i++) //平移一下,延迟一下。
{
led=_crol_(led,1); //左移值,左移数;
delay(50000); //延时450ms
} //最后0111 1111
for(i=0;i<7;i++)
{
led=_cror_(led,1); //右移值,右移数;
delay(50000); //延时450ms
} //最后1111 1110
}
}
4,仿真
![](https://i-blog.csdnimg.cn/blog_migrate/41160978c0d6d899d2135daac154bce8.png)