找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2301|回复: 6
收起左侧

单片机程序很疑惑,为什么led灯全亮了,没有进行流水

[复制链接]
ID:699774 发表于 2020-4-17 16:11 | 显示全部楼层 |阅读模式
为什么led灯全亮了,没有进行流水

  1. #include<reg52.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5.         
  6. #define led P2

  7. void delay(uchar i)
  8. {
  9.         while(i--);
  10. }

  11. void main()
  12. {
  13.         uchar i;
  14.         led=0x7f;
  15.         
  16.         while(1)
  17.         {
  18.                 for(i=0;i<7;i++)
  19.                 {
  20.                         led=_cror_(led,1);
  21.                         delay(50000);
  22.                 }
  23.         }
  24. }
复制代码



回复

使用道具 举报

ID:699774 发表于 2020-4-17 16:16 | 显示全部楼层
这是我之前写的下载是可以正常的,今天想写一个红外遥控控制流水的,写出来全亮,然后我新建了一个项目写了上面的代码,也是全亮,我对比看看了好久没看出来两个有啥区别,为啥一个可以一个不可以#include<reg52.h> #include<intrins.h>  #define uint unsigned int #define led P2 //sbit led = P2;是错的   sbit只能定义一个引脚,P2是一个端口,#define 是宏替换,将P2口用led所替换  void delay(int i) {         while(i--); }  void main() {         int i,y;         led = 0x7f;                  while(1)         {                 for (i=0;i<7;i++)                 {                         led=_cror_(led,1);                         delay(50000);                 }         } }
回复

使用道具 举报

ID:213173 发表于 2020-4-17 17:41 | 显示全部楼层
流水速度太快,视觉全亮,数据类型用错:void delay(uchar i)改void delay(uint i)。
回复

使用道具 举报

ID:695749 发表于 2020-4-17 18:00 | 显示全部楼层
本帖最后由 hbcqd 于 2020-4-17 21:07 编辑

你自己在写程序时要注明每条语句的作用,然后再来检查,是否正确与否。
例如:

#include<reg52.h>             //预处理命令
#include<intrins.h>           //预处理命令
#define uchar unsigned char//宏定义
#define uint unsigned int     //宏定义
        
#define LED P2                 //将P2口定义为LED后面就可以使用LED代替P2口
void delay(uint i)             //无符号整型 0~65535
{
        while(i--);             //循环50000次
}
void main()                 //主程序
{
        uchar i;             //无符号字符类型,单字节0~255
        led=0x7f;         //0111 1111B ,即P2^7输出低电平  第八个LED灯亮
        
        while(1)            //  无限循环
        {
                for(i=0;i<7;i++)           //循环7次
                {
                        led=_cror_(led,1);    //将LED右移一位
                        delay(50000);         //大约延时450ms
                }
        }
}


回复

使用道具 举报

ID:367369 发表于 2020-4-17 18:31 | 显示全部楼层
延时太短50ms基本分辨不出来所以看着就像全亮
回复

使用道具 举报

ID:275826 发表于 2020-4-17 18:35 | 显示全部楼层
void delay(uchar i)
{
        while(i--);
}改成
void delay(uint i)
{
...............
}
回复

使用道具 举报

ID:699774 发表于 2020-4-18 08:15 | 显示全部楼层
hbcqd 发表于 2020-4-17 18:00
你自己在写程序时要注明每条语句的作用,然后再来检查,是否正确与否。
例如:

我明白了,感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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