标题: 单片机流水灯程序哪里错了啊?就是一直说LED=0xfe;和左移函数那里语法错误? [打印本页]

作者: 好好先生gss    时间: 2019-2-9 11:40
标题: 单片机流水灯程序哪里错了啊?就是一直说LED=0xfe;和左移函数那里语法错误?
#include"reg52.h"
#include"intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define LED P2;
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 i=0;
LED=0xfe;
delay(50000);
while(1)
{
  delay(50000);
  for (i=0;i<7;i++)
  {
   LED =_cror_(LED,1);
   delay(50000);
  }

   
  for (i=0;i<7;i++)
  {
   LED=_cror_(LED,1);
   delay(50000);
  }
}
}
哪里错了啊就是一直说LED=0xfe;和左移函数那里语法错误


作者: yaoji123    时间: 2019-2-10 09:20
cror是右移,crol是左移
作者: angmall    时间: 2019-2-10 09:41
“_crol_” 与“_cror_”其实就是左右循环代码,其具有程序代码简单执行效率高的优点!
现实中的应用很多,例如我们经常见到的流水灯,广告牌,马路上的红绿灯 等。。。
下面是最基本的流水灯代码,流水灯移动的快慢可以改变“void delay()”子程序进行修改,例如:你选用的是20M的精震,你要改成一秒移动一格,那么你就将“for(x=50;x>0;x--)”和“for(y=100;y>0;y--)”的X值和Y值改成500!  改变方向更加简单,只需将“_crol_” 与“_cror_”的代码互换就可以了!

下面是程序代码“

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar temp;
  6. uint temp1;
  7. uchar i;
  8. void delay();
  9. void main()
  10. {
  11.         temp=0xfe;
  12.         temp1=0x7f;
  13.         while(1)
  14.         {

  15.                 for(i=0;i<8;i++)
  16.                 {
  17.                         P2=temp;
  18.                         temp=_crol_(temp,1);
  19.                         delay();
  20.                 }
  21.                 for(i=0;i<8;i++)
  22.                 {
  23.                         P2=temp1;
  24.                         temp1=_cror_(temp1,1);
  25.                         delay();
  26.                         P2=temp;
  27.                 }
  28.         }
  29. }   
  30. void delay()
  31. {
  32.         uint x,y;
  33.         for(x=50;x>0;x--)
  34.            for(y=100;y>0;y--);
  35. }
复制代码

作者: 就你****    时间: 2019-2-10 10:33
一看就是答非所问,不能按楼主的意思来回答问题
作者: w1179benp    时间: 2019-2-10 10:39
angmall 发表于 2019-2-10 09:41
“_crol_” 与“_cror_”其实就是左右循环代码,其具有程序代码简单执行效率高的优点!
现实中的应用很多 ...

第二个for中的P2=temp;无意义,可以不要
作者: wulin    时间: 2019-2-11 16:20
本帖最后由 wulin 于 2019-2-12 10:33 编辑

//#define LED P2;这里多了一个分号。
//如果单向流水这样写就可以了。
#include"reg52.h"
#include"intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define LED P2
void delay(u16 i)
{
        while(i--);
}
void main()
{
        LED=0xfe;
        delay(50000);
        while(1)
        {
                LED=_cror_(LED,1);
                delay(50000);
        }
}
作者: 累不死的狗    时间: 2019-2-12 18:19
#include"reg52.h"
#include"intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define LED P2;
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 i=0;
LED=0xfe;
delay(50000);
while(1)
{
  delay(50000);
  for (i=0;i<7;i++)
  {
   LED =_cror_(LED,1);
   delay(50000);
  }

   
  for (i=0;i<7;i++)
  {
   LED=_cror_(LED,1);
   delay(50000);
  }
}
}
void delay(u16 i)
{
while(i--);
}
作者: taotie    时间: 2019-2-16 13:46
将#define LED P2;后面的分号去掉~~~
作者: taotie    时间: 2019-2-16 13:48
分号 分号 分号--------#define LED P2;

作者: taotie    时间: 2019-2-16 13:50
分号——————#define LED P2;

将分号去掉就ok

作者: bluecar    时间: 2019-2-16 14:06
你就将“for(x=50;x>0;x--)”和“for(y=100;y>0;y--)”的X值和Y值改成500!  改变方向更加简单,只需将“_crol_” 与“_cror_”的代码互换就可以了!

作者: 458194106    时间: 2020-8-6 23:02
#define LED P2; 多了分号.    LED=_cror_(LED,1);有2个右移重复了,楼主应该是想写一个左移后右移




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1