找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机LED灯循环点亮程序调试问题

[复制链接]
ID:480306 发表于 2019-4-20 13:08 | 显示全部楼层 |阅读模式
#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);
  u8 i=0;
  while(1)
  {
  for(i=0;i<7;i++)
  {
   led=_crol_(led,1);
   delay(50000);
   }
   for(i=0;i<7;i++)
   {
   led=_cror_(led,1);
   delay(50000);
   }
  }
  }
提示我未定义变量i,但是变量i我已经定位为unsigned int类型了,请问为何程序还是无法运行?

回复

使用道具 举报

ID:480306 发表于 2019-4-20 13:19 | 显示全部楼层
把u8 i=0;这个语句往上移两行好像就能运行了,这是咋回事儿
回复

使用道具 举报

ID:511857 发表于 2019-4-20 18:59 | 显示全部楼层
u8 i=1;这个语句移到
void main()
{     的后面
你这个i=1必须在主程序开始时就做出定义,你把i=1的定义移到下面,电脑从头进行程序的编译时检测不到变量i=1的定义就会报错,程序就无法编译运行
回复

使用道具 举报

ID:517444 发表于 2019-4-20 22:21 | 显示全部楼层
建议 延时函数写成void delay_1ms(uint c)   {     uint a,b;     for(b=c;b>0;b--)     for(a=110;a>0;a--); }
回复

使用道具 举报

ID:514901 发表于 2019-4-20 22:50 | 显示全部楼层
这个是keil的规定,变量初始化必须放在函数开头。
void main()
{        
            u8 i=0;
           led=0xfe;
           delay(50000);
   while(1)
  {
  led=0xfe;
  for(i=0;i<7;i++)
  {
   led<<=1;
   delay(50000);
   }
    }
  }
回复

使用道具 举报

ID:480306 发表于 2019-4-21 23:15 | 显示全部楼层
不靠谱的萌猪 发表于 2019-4-20 22:21
建议 延时函数写成void delay_1ms(uint c)   {     uint a,b;     for(b=c;b>0;b--)     for(a=110;a>0;a-- ...

能不能稍微解释一下这段延时程序的含义
回复

使用道具 举报

ID:473758 发表于 2019-4-22 00:49 来自手机 | 显示全部楼层
声明变量应放在函数的开头,不能放在中间,把这个变量定义,放到函数中的第一行就对了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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