要求:循环点亮流水灯,再沿原路返回
原理图如下

方式1:数组字节操作实现
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//前8个,后8个
uchar tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay()
{
uint i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
void main()
{
uchar k;
while(1)
{
for(k=0;k<16;k++)
{
P1=tab[k];//逐个移位
delay();//延时使灯亮能被人眼察觉
}
}
}
方式2:移位运算符实现:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{
uchar i,temp;
while(1)
{
temp=0x01;//0000 0001
for(i=0; i<8; i++)
{
P1=~temp; //temp数值取反送回P1 1111 1110
delay();
te

本文介绍了三种通过C语言在51单片机上实现流水灯效果的方法:数组字节操作、移位运算符以及循环移位函数。详细展示了代码实现过程,并特别强调了移位操作与循环移位的区别,以及在处理I/O口电平时的注意事项。
&spm=1001.2101.3001.5002&articleId=121866534&d=1&t=3&u=f74fc5b0adcc4315b153a9cd88b43910)
6497

被折叠的 条评论
为什么被折叠?



