找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5708|回复: 11
收起左侧

单片机流水灯程序哪里错了啊?就是一直说LED=0xfe;和左移函数那里语法错误?

[复制链接]
ID:475380 发表于 2019-2-9 11:40 | 显示全部楼层 |阅读模式
#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;和左移函数那里语法错误

回复

使用道具 举报

ID:432823 发表于 2019-2-10 09:20 | 显示全部楼层
cror是右移,crol是左移
回复

使用道具 举报

ID:155507 发表于 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. }
复制代码
回复

使用道具 举报

ID:475444 发表于 2019-2-10 10:33 | 显示全部楼层
一看就是答非所问,不能按楼主的意思来回答问题
回复

使用道具 举报

ID:149451 发表于 2019-2-10 10:39 | 显示全部楼层
angmall 发表于 2019-2-10 09:41
“_crol_” 与“_cror_”其实就是左右循环代码,其具有程序代码简单执行效率高的优点!
现实中的应用很多 ...

第二个for中的P2=temp;无意义,可以不要
回复

使用道具 举报

ID:213173 发表于 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);
        }
}
回复

使用道具 举报

ID:453974 发表于 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--);
}
回复

使用道具 举报

ID:342822 发表于 2019-2-16 13:46 | 显示全部楼层
将#define LED P2;后面的分号去掉~~~
回复

使用道具 举报

ID:342822 发表于 2019-2-16 13:48 | 显示全部楼层
分号 分号 分号--------#define LED P2;
回复

使用道具 举报

ID:342822 发表于 2019-2-16 13:50 | 显示全部楼层
分号——————#define LED P2;

将分号去掉就ok
回复

使用道具 举报

ID:476214 发表于 2019-2-16 14:06 | 显示全部楼层
你就将“for(x=50;x>0;x--)”和“for(y=100;y>0;y--)”的X值和Y值改成500!  改变方向更加简单,只需将“_crol_” 与“_cror_”的代码互换就可以了!
回复

使用道具 举报

ID:802900 发表于 2020-8-6 23:02 | 显示全部楼层
#define LED P2; 多了分号.    LED=_cror_(LED,1);有2个右移重复了,楼主应该是想写一个左移后右移
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表