51编译器为什么不能添加C文件
1. KEIL C51的编译连接问题
字面意思是未解析的外部符号,你没把包含外部变量的c文件放在同一文件夹下,或者说你没把那个文件添加到工程。我刚测试完,就是这个问题
啊对了,如果还有问题可以网络hi我,我每天都会看。很喜欢单片机设计,愿意一起研究
2. 为什么在KEIL中C文件不能添加到工程里面
因为你的项目中已经添加了这个C文件,所以,KEIL就不让你重复添加了。
你可以看一下项目的文件树,里面应该能看到这个文件。
3. 看很多单片机的头文件里写着 extern "c",这是什么意思另外,51单片机可不可以用C++编写程序
我们的C语言有个进化版,叫C++,这个想必楼主知道,Keil
MDK是支持C++编程的,也就是说,你可以用C语言或者C++写你的程序,都可以。
但是,有一个问题,就是头文件的问题,C语言写的头文件C++是不认识的,需要转换一下,这个转换的方法就是加上extern
"C"
#ifdef
__cplusplus
extern
"C"
{
}
这句话意思是,如果你定义了“__cplusplus”这个宏,说明你的意图是想在C++文件中调用这个头文件,我前头说了,C语言的头文件C++是不认识的,怎么办呢,就加上
extern
"C"
{。。。。。}
告诉C++文件,大括号里面的东西是用C语言写的,然后C++文件就认识了,就能调用这个头文件里的东西了,
extern
"C"
{
}
的存在,使得C语言和C++能更好的结合的一块。
另外,楼主的问题是错误的,不管什么单片机,他们只识别二进制语言,至于你的高级语言用什么编写,那要看你的编译或者编辑环境支持与否,比如ARM,可以扶持C,C++,而C51编译器并不支持C++,所以C51编译器只能把C语言翻译成最终的二进制语言,不能翻译C++
4. 51单片机C语言程序头文件问题
REG51内部规定的SFR寄存器的地址与INTEL MCS-8051单片机的相同,即任何一种型号的51单片机都有的基本SFR,REG52则是对REG51进行扩充,增加了T2和DPTR1。因此可以认为REG51是REG52的子集,此外对于不同厂家生产的51单片机,如AT89S52、W78E58等都有自己相应的SFR定义头文件。
5. 51单片机C语言问题
这个程序有2个重要错误
//第一个
虽然不知道你的锁存芯片是什么。
注意看这里 你的程序:
u1=1; //U1 锁存芯片 使能 打开
P0=cbw[shi]; //送 十位段选数据
u1=0; //U1 锁存芯片 使能 关闭 U1 锁存十位段选数据
P0=0xff; //防混乱 (这句不能理解)
u2=1; //U2 锁存芯片 使能 打开
P0=0xfe; //U2 锁存 位选数据 1111 1110
u2=0; ////U2 锁存芯片 使能 关闭 U2 锁存位选数据
cc(5); //延时
u1=1; //U1 锁存芯片 使能 打开
P0=cbw[ge]; //送 个位段选数据
u1=0; //U1 锁存芯片 使能 关闭 U1 锁存个位段选数据
P0=0xff; //防混乱 (这句不能理解)
u2=1; //U2 锁存芯片 使能 打开
P0=0xfd; //U2 锁存 位选数据 1111 1010
u2=0; ////U2 锁存芯片 使能 关闭 U2 锁存位选数据
cc(5); //延时
如果我的理解没错的话 看下面程序:
u1=1; //U1 锁存芯片 使能 打开
P0=cbw[shi]; //送 十位段选数据
u1=0; //U1 锁存芯片 使能 关闭 U1 锁存十位段选数据
u2=1; //U2 锁存芯片 使能 打开
P0=0xfe; //U2 锁存 位选数据 1111 1110
u2=0; ////U2 锁存芯片 使能 关闭 U2 锁存位选数据
cc(5); //延时 //滞留下显示数据 增加亮度
//以上 正常 显示了 十位
//接下来我们清 U2 选中数据为 下一个段 做准备
//为啥要清除 U2的数据呢 若 在下一个段 送完显示数据之前 上一个段的位选任然有效 是不是 下一个段的数据 显示在了上一个段 所以我们进行清除
u2 = 1;
P0 = 0xFF;//位选都不选中
u2 = 0;
//接下来是下一位的显示
u1=1; //U1 锁存芯片 使能 打开
P0=cbw[ge]; //送 个位段选数据
u1=0; //U1 锁存芯片 使能 关闭 U1 锁存个位段选数据
u2=1; //U2 锁存芯片 使能 打开
P0=0xfd; //U2 锁存 位选数据 1111 1010
u2=0; ////U2 锁存芯片 使能 关闭 U2 锁存位选数据
cc(5); //延时
u2 = 1;
P0 = 0xFF;//位选都不选中
u2 = 0;
//以上是数码管显示驱动的问题, 程序结构不合理,要多多参看写系统性的大程序,提高程序结构水平 这个由你以后自己学习 这里不做多解释 这是你第一个问题
//第二个是 main 写成了 mian 所以编译器报错 这个问题你自己要多多注意
6. keil5添加c文档的问题
那是因为,你保存这个程序文件时,所起的文件名就是TXT型的。
估计你不是用keil5里面新建的程序文件吧?而是在文件夹下,点右键新建的文件。
因为,对于windows操作系统,文件的扩展名都隐藏的,即那个TXT是隐藏的,需要改系统的设置,显示出扩展名才能改扩展名的。
你不知道怎么设置也不要紧。打开keil 5后,新建一个文件,打字输入程序,然后保存,起文件名时,一定要带 .C 。如:main.c ,这样,就不会是TXT型的程序文件了。
7. keil c51添加工程模块C文件的问题
错误显示为定义了多个同名公共变量,我估计可能是你在main.c开头把头文件包含的变量声明又写了一遍,导致出错了,把main 中的多余的变量声明删除试试
8. 51单片机中汇编语言如何调用C的子程序
我的程序是KEIL编译的,如下
先申明
EXTRN CODE (_Send_CRC) ;Send_CRC是C中的函数,汇编中加了_
调用的时候
LCALL _Send_CRC
如果要使用C中的变量,那么CODE变成相应的DATA,XDATA等
9. 51单片机,如何建立多C文件,
1. 模块化编程的原则:
模块化编程通常要遵循以下几个原则:
每一个c文件对应一个同名的h头文件
一个h文件伴随相应c文件存在,头文件是为了声明对外公开的接口。如果一个c文件不需要对外公布任何接口,则其就不应当存在,除非它是程序的入口,如main函数所在的文件,同时main函数所在文件可以没有对应的头文件。如有一个led.c,那应该同时制作一个led.h头文件。
头文件中适合放置接口的声明,不适合放置实现
头文件是模块的对外的接口,供外部程序调用。头文件中应放置对外部的声明,如对外提供的函数声明、宏定义、变量类型声明等。函数的实现、变量的赋值、语句的操作等决不能放在头文件中。因为头文件的功能是向外提供接口,譬如函数,变量,具体如何实现是在c文件中进行,头文件仅是进行了描述声明。
任意一个c文件只要使用了其他c文件提供的接口,都要同时包含其对应的头文件,每个c文件应该头文件自包含
任意一个c文件只要使用了其他c文件提供的接口,都要将其对应的头文件包含到该c文件中,没有使用到其他c文件的接口就不应该将其匹配的头文件包含,并且每个c文件都应该包含自己的头文件。
防止头文件被重复包含
避免一个头文件被重复包含,通常使用条件编译命令#ifndef--#endif,如下示例:
示例1:
#ifndef TIME_H
#define TIME_H
……
#endif
示例2:
#ifndef LED_H
#define LED_H
……
#endif
其中#define FILENAME_H为基本格式,FILENAME_H为头文件名称,但要全部使用大写形式,使用单下划线后紧跟一个H表明是头文件。不要在宏名最前面加上“_"或“__”,即使用FILENAME_H代替_FILENAME_H_,因为一般以"_"和”__"开头的标识符为系统保留或者标准库使用。
10. 51单片机KEIL如何建立多个C文件及注意事项
只管建就是了,建了之后要有头文件引导,并且一定要将这些源文件添加到工程中