在keil里运行的C程序 有问题 请大虾帮帮忙

/*缓冲区显示子程序*/
/*入口参数:
DispPosi:要显示数据的LED号
DispChar:要显示的内容
出口参数:无*/
void Disp_Led_Sin(uchar DispChar,uchar DispPosi)
{
LEDPORT=SEGCODE[DispChar]; /*输出显示段吗*/
LEDCON&=BITCODE[DispPosi]; /*输出显示位码*/

Delay1Ms(1); /*延时1ms*/

LEDCON|=0X3F; /*关闭显示器*/
}

void Delay1Ms()
{
int i;
int j;
for(i=0;i<109;i++)
for(j=0;j<109;j++);
}

资料里只有Delay1Ms(); 编译时显示

TEXT1.C(109): warning C206: 'Delay1Ms': missing function-prototype

后来自己加了个延时子程序编译显示
compiling Text1.c...
TEXT1.C(109): warning C206: 'Delay1Ms': missing function-prototype
TEXT1.C(109): error C267: 'Delay1Ms': requires ANSI-style prototype
TEXT1.C(117): error C231: 'Delay1Ms': redefinition
TEXT1.C(122): error C231: 'Delay1Ms': redefinition

你描述的十分不清楚,只能大概的指出可能的问题吧,
首先,void Delay1Ms() 定义有出入,调用处如下:
Delay1Ms(1); 说明这个函数是由参数的,对吧,那么要么编译不能通过,如果是C++支持重载,编译时可以过的,不过链接的时候要找到具体的库吧,找不到的时候就会产生你的这个编译警告C206。
其次,C267的这个错误也是类似的原因吧,你还是自己看看 c51的官方文档

C206
http://www.keil.com/support/man/docs/c51/c51_c206.htm
C267
http://www.keil.com/support/docs/1865.htm
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-17
必须把void Delay1Ms()函数,放到调用它的函数之前。
或者,在前面,加以声明。
第2个回答  2010-05-17
你程序的问题是Delay1Ms没有在使用之前声明。

看我修改后的:

//使用前先声明
void Delay1Ms(void);

/*缓冲区显示子程序*/
/*入口参数:
DispPosi:要显示数据的LED号
DispChar:要显示的内容
出口参数:无*/
void Disp_Led_Sin(uchar DispChar,uchar DispPosi)
{
LEDPORT=SEGCODE[DispChar]; /*输出显示段吗*/
LEDCON&=BITCODE[DispPosi]; /*输出显示位码*/

Delay1Ms(1); /*延时1ms*/

LEDCON|=0X3F; /*关闭显示器*/
}

void Delay1Ms(void)
{
int i;
int j;
for(i=0;i<109;i++)
for(j=0;j<109;j++);
}
第3个回答  2010-05-17
函数没有在main()函数前定义
第4个回答  2010-05-17
把这句话 void Delay1Ms(); 放在 main 函数 前面 。 或在把延时子函数 写在 main函数前面。
2种方法 随便一种就可以了

参考资料:谭浩强

在keil里运行的C程序 有问题 请大虾帮帮忙
首先,void Delay1Ms() 定义有出入,调用处如下:Delay1Ms(1); 说明这个函数是由参数的,对吧,那么要么编译不能通过,如果是C++支持重载,编译时可以过的,不过链接的时候要找到具体的库吧,找不到的时候就会产生你的这个编译警告C206。其次,C267的这个错误也是类似的原因吧,你还是自己看看 c51的官...

请教一个在KEIL下的C程序问题
改变这个指针指向的字符串中第一个字符,也不能*g_cString="b";写啊,要写也要写成*g_cString='b'这个样子啊。不过*g_cString='b';这也是错的,因为g_cString指向的内存是ReadOnly的,你只能读,像 *g_cString='b'这样写的话那也当然是错的。像要改变第一个字符,就必须保证你对指针指向的...

keil里一个.c程序有warning
1. 关于端口的声明应视为全局变量,要在函数外面声明如P1_0 = P1 ^ 0;2. 两个等于号是判断语句,一个等于号才是赋值语句。“P1_0写成p1_0就错了 是不是因为p1_0在头文件里没定义”当然。Keil要区分大小写的,而头文件中只定义P1没有定义p1。

求高手帮看下修改下C程序,能通过keil编译的,生成HEX文件。
你的程序,我在我的Keil3中编译过了。 修改了好些地方,几乎都是拼写错误。1、添加了一句变量申明: extern uchar Cur_Speed;2、添加了LCD1602.H和AT24C02.H两个头文件 3、Write_AT24C02_Byte函数名中的W有时大写,有时是小写w,你应该把它们统一一下 4、Dis_Mileage函数名也是大小写不统一 5、...

求助,51单片机keilC程序问题main(){while(1){P0^0=0;}}
是程序编译的结果不同。P0^0我们认为他是IO口。keil认为他是普通的寄存器的位元件。执行时会当寄存器处理。而不是位。而sbit 定义后。keil才会把他当成特殊位元件。

用keil编的51单片机C程序,不能实现其功能
include<reg51.h> \/\/sbit D=P0; \/\/sbit 是位定义。P0不必定义。void main(){while(1) \/\/ while(1); 这里加了分号,程序就在while(1)这里循环了,不会到括号里 { P0=0xfc; \/\/D=0xfc;} }

keil4中输入c程序不管怎样都不会出现错误,怎么回事啊?
你编译的可能并不是你编辑框中的文件,你没有把编辑框中的c文件添加到工程中来。以前写的c程序又没有将他移除。你看下你的文件名是否一致,不一致说明你的c文件添加错了。你也可以先关闭当前工程重新重建一个工程试下。

Keil编译出错,怎么办?
1、在软件顶部下拉菜单选【工程】-【新建工程】。2、在弹出窗口,选择工程文件。(如果无工程文件,新建一个工程文件,填一个名词点保存。)3、选择一个单片机型号(比如89C52,也可以89C51)。4、右击左侧工程“Source Group 1”,选择增加一个C文件到工程组里。(比如增加下面的C程序文件。)5、增加...

汇编语言在keil中编译生成.HEX文件时候出现下面错误,有懂的大虾帮忙看...
在第一行,有两个汉字的##。删除即可。

在做keil编程的时候出现XIHA.C(23): error C202: 'P3_4': undefined i...
出错原因是你没有定义'P3_4'标示符。在main函数开头使用宏定义:#define P3_4 P3.4 或者在程序中把所有'P3_4'替换为'P3.4'最后说一句,天下没有免费的午餐,适当给点悬赏分是对别人劳动成果的尊重也是一种激励。

相似回答
大家正在搜