学习单片机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对人品的要求更高吗?
此帖出自小平头技术问答
#ifndef __DELAY12_H__
#define __DELAY12_H__
void delay(unsigned int i)
#endif
delay函数后边没加;号,别的一切正常,加上就应该好了
一周热门 更多>