4577|3

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

使用KEIL加入自己的头文件出错,求助啊 [复制链接]

学习单片机C语言,现在尝试模块化编程的学习,把一个简单的LED灯的程序中的DELAY函数抽出来当作一个独立模块,出错N次,尝试了N+1次后仍然不得其解,看来教学视频也没看出来哪有差别,求助高手指点迷津啊

#include <reg51.h>
#include <intrins.h>

sbit LS138A=P2^2; 
sbit LS138B=P2^3;
sbit LS138C=P2^4;
sbit LED8_1=P1^1;

void delay(unsigned int i);      //函数声名

char DelayCNT;
char LED;
 
main()

   unsigned int i, LedOut[10];
  
   LED = 0x01; 
   DelayCNT=0;

  while(1)
  { 
     if(++DelayCNT>=10)   //点亮动静LED灯速度控制
  {
   DelayCNT=0;
  LED = LED << 1;     // 左移
  if(LED==0) LED = 1; // 移位后,后面的位为高电平
  }

  LedOut[8]=LED;

  for( i=0; i<9; i++)
  { 
   P0 = LedOut;
   switch(i)      
      {    
   case 0:LS138A=0; LS138B=0; LS138C=0; LED8_1=1; break;        
         case 1:LS138A=1; LS138B=0; LS138C=0; LED8_1=1; break;              
         case 2:LS138A=0; LS138B=1; LS138C=0; LED8_1=1; break;
         case 3:LS138A=1; LS138B=1; LS138C=0; LED8_1=1; break;
   case 4:LS138A=0; LS138B=0; LS138C=1; LED8_1=1; break;
   case 5:LS138A=1; LS138B=0; LS138C=1; LED8_1=1; break;
   case 6:LS138A=0; LS138B=1; LS138C=1; LED8_1=1; break;
   case 7:LS138A=1; LS138B=1; LS138C=1; LED8_1=1; break;
      case 8:LS138B=1; LS138B=1; LS138C=1; LED8_1=0; break; 
      } 
     delay(150);
   }
  }  

void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}
上面这个是编译通过的正常程序,我把结尾处的void delay(unsigned int i)函数独立做了一个DELAY.C和一个DELAY.H,然后删除这个程序里的DELAY函数,

DELAY.C里写的是

void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}

DELAY.H里面写的是:

#ifndef __DELAY12_H__
#define __DELAY12_H__
void delay(unsigned int i)
#endif

 

然后工程里添加两个.C源文件  LED.C和DELAY.C

在LED.C中增加了一个包含#include "delay.h"

#include <reg51.h>
#include <intrins.h>

#include "delay.h"

sbit LS138A=P2^2; 
sbit LS138B=P2^3;
sbit LS138C=P2^4;
sbit LED8_1=P1^1;

 

……………

……

编译,然后噩梦就开始了

 

 

Build target 'Target 1'
compiling led.c...
LED.C(4): error C141: syntax error near 'sbit'
compiling delay12.c...
Target not created

 

注释掉#include "delay.h"后,程序正常,DELAY.H是添加不到程序中去的

然后尝试了以下办法

在C51里添加Include文件路径---继续失败

将delay.h复制到INC文件夹中---问题依旧

……

 我一直都是坐车让座,捡钱交公从不欺负花花草草的啊,难道KEIL对人品的要求更高吗?

此帖出自51单片机论坛

最新回复

  详情 回复 发表于 2012-3-29 01:06
点赞 关注
 

回复
举报

1万

帖子

16

TA的资源

版主

沙发
 
楼主的
#ifndef __DELAY12_H__
#define __DELAY12_H__
void delay(unsigned int i)
#endif
delay函数后边没加;号,别的一切正常,加上就应该好了
此帖出自51单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

谢谢非常感谢

是的,是这个问题,谢谢了,还是C语言的使用不够熟练,我会继续努力的,谢谢ddllxxrr。
此帖出自51单片机论坛
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 沙发 ddllxxrr 的帖子

此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表