标题: 一个LED灯闪灭的程序,错在哪里 [打印本页]

作者: yang0011102    时间: 2014-8-7 11:56
标题: 一个LED灯闪灭的程序,错在哪里
#include <reg51.h>          
void delay(unsigned int i);  
void main()
{
        while(1)
        {
                P2  = 0x00;
                delay(600);
                P2  = 0xff;
                delay(600);
        }
}
void delay(unsigned int i)
{
        unsigned char j;
        for(i; i > 0; i--)  
                for(j = 255; j > 0; j--);
}
输出以下
Build target 'Target 1'
assembling STARTUP.A51...
compiling led2.c...
linking...
BL51 BANKED LINKER/LOCATER V6.22 - SN: K1RMC-724WNC
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
*** ERROR: COMMAND-FILE 'led' NOT FOUND
Target not created
错在哪里哇
作者: dingygc    时间: 2014-8-7 13:15
void delay(unsigned int i)
{
        unsigned char j;
        for(i; i > 0; i--)  
                for(j = 255; j > 0; j--);
}




这一段有问题


void delay(unsigned int x)
{
        unsigned char i,j;
        for(i; i > 0; i--)  
                for(j = 255; j > 0; j--);
}
这样就ok啦
作者: zycheng    时间: 2014-8-7 13:45
delay函数里
作者: yang0011102    时间: 2014-8-7 17:26
dingygc 发表于 2014-8-7 13:15
void delay(unsigned int i)
{
        unsigned char j;

Build target 'Target 1'
assembling STARTUP.A51...
compiling led2.c...
LED2.C(13): warning C280: 'x': unreferenced local variable
linking...
BL51 BANKED LINKER/LOCATER V6.22 - SN: K1RMC-724WNC
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
*** ERROR: COMMAND-FILE 'led' NOT FOUND
Target not created
作者: slamdunk_czt    时间: 2014-8-7 18:23
程序没有问题,

无标题.png (25.49 KB, 下载次数: 206)

无标题.png

作者: slamdunk_czt    时间: 2014-8-7 18:24

作者: xiaojuan    时间: 2014-8-7 20:20
zycheng 发表于 2014-8-7 13:45
delay函数里

zychen 大牛说的对,就是这个问题
作者: 明白    时间: 2014-8-7 20:29
程序没有错误
作者: yang0011102    时间: 2014-8-8 09:28
zycheng 发表于 2014-8-7 13:45
delay函数里

求改正
作者: XUSHENG    时间: 2014-8-8 09:58
yang0011102 发表于 2014-8-8 09:28
求改正

学习学习~~
作者: bianzhu    时间: 2014-8-8 22:36
传递函数i 没有过度函数
作者: NB没B    时间: 2014-8-21 12:03
dingygc 发表于 2014-8-7 13:15
void delay(unsigned int i)
{
        unsigned char j;


void delay(unsigned int x)
{
         unsigned char j;
         for(i=x; i > 0; i--)  
                 for(j = 255; j > 0; j--);
}
这样才对

作者: NB没B    时间: 2014-8-21 12:04
yang0011102 发表于 2014-8-7 17:26
Build target 'Target 1'
assembling STARTUP.A51...
compiling led2.c...

void delay(unsigned int x)
{
         unsigned char j;
         for(i=x; i > 0; i--)  
                 for(j = 255; j > 0; j--);
}
这样才对
作者: NB没B    时间: 2014-8-21 12:04
yang0011102 发表于 2014-8-8 09:28
求改正

void delay(unsigned int x)
{
         unsigned char j;
         for(i=x; i > 0; i--)  
                 for(j = 255; j > 0; j--);
}
作者: NB没B    时间: 2014-8-21 12:05
slamdunk_czt 发表于 2014-8-7 18:23
程序没有问题,

void delay(unsigned int x)
{
         unsigned char j;
         for(i=x; i > 0; i--)  
                 for(j = 255; j > 0; j--);
}
作者: liaolinhui    时间: 2014-8-21 12:29
本帖最后由 liaolinhui 于 2014-8-21 12:48 编辑

程序没有问题,说延时函数有问题的人也不怎么懂,void delay(unsigned int i)这句可以直接给 i 赋值的,i 称为delay的形参,当用delay(600)这样的语句调用delay函数时,会自动给 i 赋值为600,不需要再定义一个x,再让i=x没那必要,看你的错误提示应该是文件led不存在,你要把文件保存为led.c文件再把文件添加到工程,列如5楼的工程左边哪里就是加了个1.c文件,又或者是你写好程序了,没保存一下
作者: liaolinhui    时间: 2014-8-21 12:34
本帖最后由 liaolinhui 于 2014-8-21 12:36 编辑

我把代码复制过来了,完全没问题
创建目标 '目标 1'
PA51汇编 STARTUP.A51 ...
编译 1.c ...
连接 ...
Program Size: data=9.0 xdata=0 code=58
创建 HEX 文件 "1" ...
"1" - 0 个错误, 0 个警告。

1.JPG (103.33 KB, 下载次数: 206)

1.JPG

作者: liaolinhui    时间: 2014-8-21 12:39
给你看一下我实验板上的程序,跟你的一样。

/**************************************************************************************
*                              LED闪烁的简单试验                                                                                                  *
*       
*     连接方法: JP11(P2)和JP1用8PIN排线连接起来                                                                      *
*                                                                                                                                                                          *
***************************************************************************************/

#include <reg51.h>           //此文件中定义了51的一些特殊功能寄存器

void delay(unsigned int i);  //声明延时函数

main()
{
   
  P2  = 0x00; //置P0口为低电平
  
  delay(600); //调用延时程序

  P2  = 0xff; //置P0口为高电平
  

  delay(600); // 调用延时程序


}

/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)   //循环 600*255 次
        for(j = 255; j > 0; j--);
}












作者: highffff    时间: 2014-8-21 14:25
*** ERROR: COMMAND-FILE 'led' NOT FOUND--错误提示没找到led文件,查看下keil创建程序的步骤对不对,保存路径对不对
作者: a110    时间: 2014-8-21 22:21
看你们讨论得热火朝天 气氛很不错 ,让我学到了很多知识 谢谢!
作者: wo_sxc    时间: 2014-8-29 19:26
学习啦!!!!!!
作者: 黑暗主宰    时间: 2014-8-31 21:41
delay函数里面的char形变量改成int型就行了
作者: heweli888    时间: 2014-9-2 06:36
呵呵和我一样,新手
作者: highffff    时间: 2014-9-2 17:16
没有导入C文件,
作者: clfpc    时间: 2014-9-3 22:00
程序没问题不代表执行结果是你想要的,12#正解
作者: 349362187    时间: 2014-9-3 22:03
C文件   没有保存  好像是这样
作者: tianzhiguo0629    时间: 2014-9-4 02:04
程序没有问题程序
作者: 老菜鸟    时间: 2014-9-5 15:39
i没置数啊
作者: wuchuang    时间: 2014-9-13 23:35
学习了,要上机试下。
作者: 向前看zk    时间: 2014-9-18 11:59
延时函数需要声明
作者: 向前看zk    时间: 2014-9-18 12:02
向前看zk 发表于 2014-9-18 11:59
延时函数需要声明

看错,不好意思
作者: 1134761078    时间: 2014-9-22 19:46
学习学习~~
作者: 1134761078    时间: 2014-9-22 19:47
学习学习~~
作者: nojiya88    时间: 2014-9-27 21:35
看不明白,但不是要学学
作者: 小LJ    时间: 2014-9-30 08:27
把delay(600)改成60000,delay这么写也行
void delay(unsigned int i)
{
         for(; i > 0; i--);  
  }
或者说在主函数里定义个i,把delay换掉,直接写个for(i=0;i<60000;i++);也可以
作者: skyhanfeng    时间: 2014-9-30 12:55
void delay(unsigned int i)
{
        unsigned char j;
        for(i; i > 0; i--)  
                for(j = 255; j > 0; j--);
}
i没有给值。for(i=10;i>0;i--)
作者: 天天好心情亲    时间: 2014-10-1 05:21
可以试试把延迟函数改一下
作者: 骑着毛驴的小帅    时间: 2014-10-5 08:13
延迟函数
作者: yezio    时间: 2014-10-5 10:19
void delay(unsigned int i)
{
         unsigned char j;
         for(i; i > 0; i--)  
                 for(j = 255; j > 0; j--);
}


这一段,把 i 删除也可以的,就这样就行了。 for(    ; i > 0; i--)  
作者: 804534944    时间: 2014-10-5 13:13
yezio 发表于 2014-10-5 10:19
void delay(unsigned int i)
{
         unsigned char j;

用  
void delayms(unsigned char x )

     while(x--);

更简单
作者: gaozhaohong    时间: 2014-10-5 17:35
程序没有问题。
作者: yiyiyi11    时间: 2014-10-6 20:57
写得很棒,,,
作者: yezio    时间: 2014-10-8 10:28
804534944 发表于 2014-10-5 13:13
用  
void delayms(unsigned char x )

,换思路了,这里是找错,呵呵

作者: 时尚小飞侠    时间: 2014-10-10 15:57
在一个文件里创建了两个.c的文件,就会出现这种情况
作者: 时尚小飞侠    时间: 2014-10-10 15:59
程序没有问题的,如果一个文件同时存在不同的.c文件就会出现这类问题
作者: liuhao123    时间: 2014-10-10 20:41
错在哪呢
作者: jinanyuanyue    时间: 2014-10-18 13:10
学习了,谢谢高手指点
作者: gaozhaohong    时间: 2014-10-18 14:55
根本就没有问题,仿真也很对,检查一下Keil软件是不是出了问题啊?
作者: wujian    时间: 2014-10-18 17:47
程序本身是没有任何问题的,是你没有创建好工程,先创建工程,然后选择芯片类型,然后写程序,然后保存,然后点右边的grounce吧,然后右击有一个选项是添加到。。然后选择你保存刚刚写的程序,就是这样,你应该是才学的,我也经常犯这种错误,当年走了很多弯路。。具体的怎么添加工程,自己百度都可以查到!!希望可以帮到你!!
作者: 永远的xing    时间: 2014-10-22 22:14
延时函数有问题吧。
作者: rober    时间: 2014-10-23 13:17
想知道最后正确答案
作者: Elect_DIYer    时间: 2014-12-22 13:54
程序是没有错误的,错误提示说命令文件led没有找到,说明你的文件路径没有设置好,还是看看你的文件设置情况吧。编译的是led2.c为什么说led这个文件没有找到呢,楼主还是自己查查看吧。
作者: qazxcvbnmklp    时间: 2014-12-22 17:10
你在编译时,一定要重新导入。C文件,设置晶振和输出格式,要就是你在保存时忘记在文件后面加。C格式,如果没有。就会在便是出错
作者: qazxcvbnmklp    时间: 2014-12-22 17:12
对了,要选择合适你的单片机型号,不然也会出错的,生成HEX 文件在你的单片机中无法运行
作者: alala2643    时间: 2014-12-24 15:06
个人估计应该是建立.c文件后要么没有保存,要没有添加进去工程。。。。。。。。。。。
作者: 少年梦    时间: 2014-12-26 19:30
没建工程。。。。。
作者: 大哥小弟    时间: 2014-12-26 19:56
仔细看了你的程序,你程序问题很多。有以下错误。
1)延时函数中的i没给初值。
2)延时函数写的有误,你可以写的简单点,比如 void Delay(unsigned int i) { while(i--); }
3)你延时函数写在了主函数的下面,因此要对该Delay函数声明。建议初学者把延时函数写在主函数上面。
4)可能你在创建c文件时没保存等、



作者: 沙漠一滴水    时间: 2017-4-16 00:05
是HEX文件的名字有中文且有空格导致的。
作者: 帅也是一种错    时间: 2017-4-16 14:43
delay那里
作者: rebios    时间: 2019-7-29 08:21
我试了你的程序,程序没有问题。
是创建工程及加及.c文件过程出的问题
好象KEIL对文件名有要求。

作者: rebios    时间: 2019-7-29 08:27
我刚才试了一个,工程命名的时候,文件名中间有空格和-就不行
你试试看。
另外,我也是刚学单片机,这可能就是新手容易出的问题吧。
楼主可以联系我,我们一起学。
作者: rebios    时间: 2019-7-29 09:14
我试了,所建工程的名字,不能有空格
作者: 小黑屋525    时间: 2019-7-30 11:50
看ERROR下面的那串英文啊,明显是创建工程的问题,可能是文件没保存或者没添加!
作者: 月之光芒    时间: 2019-7-30 15:27
没有将led函数添加到工程里进行编译
作者: asdasdadadad    时间: 2019-7-30 17:51
楼上很多错的
/*******延时函数*************/
void delay(unsigned int x)
{
    unsigned char i,j;
    for(i=x; i > 0; i--)   //循环 600*255 次
        for(j = 255; j > 0; j--);
}
这样试下

作者: aaaaaa。    时间: 2019-7-30 20:23
给你一个led流水灯的程序参考一下
//led流水灯
# 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)
        {
                for(i=0;i<3;i++)
                {
                        led=_crol_(led,2);
                        delay(50000);
                }
                led=0xfd;
                delay(50000);
                for(i=0;i<3;i++)
                {
                        led=_crol_(led,2);
                        delay(50000);
                }
                led=0xfe;
                delay(50000);
         }
}
作者: 韦孟祥    时间: 2019-7-30 21:54
嗯,程序我试过了没有问题,像一些人说的一样,不是程序的问题,是缺少.c文件不过我觉得在延时函数中一个变量是int型,另一个是char型,我觉得这样不太好
作者: 黄youhui    时间: 2019-7-31 22:42
char 定义的不是字符吗?char j;那么j不应该椒字符型变量吗?怎么j=255?

作者: jifutao    时间: 2019-8-2 14:48
很明显是延时函数的问题啊,多从基本的小程序开始吧,看懂,能敲出来,多积累经验。




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