左右走马灯的问题
以下是一个走马灯的程序,但我想到的是只是亮一个灯去走马灯,不是像程序一样是灭一个灯来走马灯。求助各位大神帮帮忙指点迷津。
#include <reg52.h>
void delay(unsigned int i); //声明延时函数
char LED;
main()
{
unsigned char i;
while (1)
{ LED = 0xfe;
for (i = 0 ;i < 8; i++)
{
P1 = LED;
delay(700);
LED = LED << 1; // 左移
LED = LED | 0x01; // 移位后,后面的位为高电平
if (LED == 0x7f ) break; //提前退出 FOR 循环
}
for (i = 0 ;i < 7 ; i++)
{
P1 = LED;
delay(700);
LED = LED >> 1; // 右移
LED = LED | 0x80; // 移位后,后面的位为高电平
}
}
}
/*******延时函数*************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 255; j > 0; j--);
}
如下
while(1)
{
LED=0XFE;
for(i=8;i<0;i--)
{
P2=LED;
LED=_clro_(LED,1);
delay(1);
}
for(;i<8;i++)
{
P2=LED;
LED=_clrl(LED,1);
delay(1);
}
}
先把LED = 0xfe;改成LED = 0x01;
后面的我没看了
往左走的就行啦,但往右的就不行啦!
0xfe=1111 1110 你这相当于是只是最后一个灯不亮其他的灯亮,你改成0x01试试看可以吗
其实一样的效果可以有不同的方法可以解决的。你的这个问题有一种更简单的方法就是:通过数组去实现,你把走马灯的现象对应的值放在数组中,用两个for循环可以实现左右跑马。
往左走的就行啦,但往右的就不行啦!
要注意共阴共阳问题,0XFE和0X01没啥区别的。还是要自己分析的
我的意思是想用位移去解决这个问题。
创建目标 '目标 1'
编译 led-6-6.c ...
LED-6-6.C(15): 警告 C206: '_clro_': missing function-prototype
LED-6-6.C(15): 错误 C267: '_clro_': requires ANSI-style prototype
目标未产生
是什么意思呀?
#include <intrins.h>
最顶部加入这个头文件
这是他写的有错误,【_clro】应为【_clro_】才对。
另外,有些程序你不要直接复制,最好是手工输入。因为有的人会无意之间用中文输入字符,程序对中文字符是不认的,这一点一定要注意!
祝你编译成功!
首先感谢:《music_mc》的提点,令我认识到#include <intrins.h>这个头文件的用处。
重新整理程序如下:
#include <reg52.h>
#include <intrins.h>
void delay(unsigned int i);
char LED;
main()
{
unsigned char i;
while(1)
{
LED=0x01;
for(i=0;i<7;i++)
{
P1=LED;
LED=_crol_(LED,1);
delay(100);
}
for(i=0;i<7;i++)
{
P1=LED;
LED=_cror_(LED,1);
delay(100);
}
}
}
/*******延时函数*************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 250; j > 0; j--);
}
非常感谢各位大大的指点。