51单片机51流水灯程序程序问题

2被浏览88分享邀请回答暂时还没有回答,开始写第一个回答21ic官方微信-->
51单片机多文件C程序问题
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
我在学51单片机,用c语言编程。我建立的工程由多个文件构成。有一些常用器件的驱动程序(18B20,ds1302等)都是反复使用的,这些驱动程序由多个函数构成,那么,把这些函数体和函数声明都放在一个.h的头文件中(例如18B20drive.h)好,还是把函数声明放在.h头文件中( 例如18B20drive.h
),把函数体放在.c的文件中(例如18B20drive.c)好?这两种方式有何区别,哪种更好、更规范?请高手指教。
满意回复+2
函数体肯定放在.c文件里,外部函数和全局变量才需要在.h里声明,内部函数及局部变量都在.c里
要不多个文件包含这个头文件就会重复编译这些函数体 ...
一个C对应一个H
函数声明放在.h头文件中,函数体放在.c的文件中
一个C对用一个H文件,函数和全局变量放在C文件里,包含头文件、函数声明、变量声明、宏定义放在H文件里,这个C文件只包含对应H文件即可, 其他文件想用C文件里的 ...
技术总监, 积分 40764, 距离下一级还需 9236 积分
技术总监, 积分 40764, 距离下一级还需 9236 积分
技术总监, 积分 40764, 距离下一级还需 9236 积分
技术总监, 积分 40764, 距离下一级还需 9236 积分
一个C对应一个H
中级工程师, 积分 4710, 距离下一级还需 290 积分
中级工程师, 积分 4710, 距离下一级还需 290 积分
中级工程师, 积分 4710, 距离下一级还需 290 积分
中级工程师, 积分 4710, 距离下一级还需 290 积分
函数体肯定放在.c文件里,外部函数和全局变量才需要在.h里声明,内部函数及局部变量都在.c里
要不多个文件包含这个头文件就会重复编译这些函数体
中级技术员, 积分 256, 距离下一级还需 44 积分
中级技术员, 积分 256, 距离下一级还需 44 积分
中级技术员, 积分 256, 距离下一级还需 44 积分
中级技术员, 积分 256, 距离下一级还需 44 积分
函数声明放在.h头文件中,函数体放在.c的文件中
资深技术员, 积分 408, 距离下一级还需 92 积分
资深技术员, 积分 408, 距离下一级还需 92 积分
资深技术员, 积分 408, 距离下一级还需 92 积分
资深技术员, 积分 408, 距离下一级还需 92 积分
那使用时是不是只调用.h就可以使用.c里的函数了?
高级技术员, 积分 699, 距离下一级还需 301 积分
高级技术员, 积分 699, 距离下一级还需 301 积分
高级技术员, 积分 699, 距离下一级还需 301 积分
高级技术员, 积分 699, 距离下一级还需 301 积分
如果&&你搞得东西的某些是非常固定的 那么&&那些固定的东西 放到一个.h里面 也是不错的。比如&&你看看那个UCOS 就是这样弄得。
当然&&如果 不是很固定 那么 就 一个.c& &对应一个.h
比如 那些&&ARM芯片的官方库&&都是这样弄得。
有些东西要搞得 死板&&有些要活用& &。关键是要自己好好思考。
否则 别人说好&&自己却不知道好在哪里&&也是个麻烦事
高级技术员, 积分 699, 距离下一级还需 301 积分
高级技术员, 积分 699, 距离下一级还需 301 积分
高级技术员, 积分 699, 距离下一级还需 301 积分
高级技术员, 积分 699, 距离下一级还需 301 积分
晕&&.h里面当然不能放函数了& &甚至 不要定义变量
为什么呢?
初级工程师, 积分 2565, 距离下一级还需 435 积分
初级工程师, 积分 2565, 距离下一级还需 435 积分
初级工程师, 积分 2565, 距离下一级还需 435 积分
初级工程师, 积分 2565, 距离下一级还需 435 积分
赞成2L的说法
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
那么,请问多个文件都需要reg52.h这个头文件,是在每个.c文件都写#include&reg52.h&还是只在一个.c文件中写?
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
那么,请问多个文件都需要reg52.h这个头文件,是在每个.c文件都写#include&reg52.h&还是只在一个.c文件中写?
初级工程师, 积分 2644, 距离下一级还需 356 积分
初级工程师, 积分 2644, 距离下一级还需 356 积分
初级工程师, 积分 2644, 距离下一级还需 356 积分
初级工程师, 积分 2644, 距离下一级还需 356 积分
mcustudypeace
可以建一个标准头文件如 stdafx.h 把通用性特别强的文件 如这个reg52。h,和一些宏定义 放进去。 个人习惯 仅供参考。
初级工程师, 积分 2030, 距离下一级还需 970 积分
初级工程师, 积分 2030, 距离下一级还需 970 积分
初级工程师, 积分 2030, 距离下一级还需 970 积分
初级工程师, 积分 2030, 距离下一级还需 970 积分
“把这些函数体和函数声明都放在一个.h的头文件中”
这个要糟...
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
中级技术员, 积分 277, 距离下一级还需 23 积分
一个C对用一个H文件,函数和全局变量放在C文件里,包含头文件、函数声明、变量声明、宏定义放在H文件里,这个C文件只包含对应H文件即可, 其他文件想用C文件里的函数,只需包含次C文件对应的H文件即可,包含C文件的话会出现重复定义错误,记住,一定要把C文件添加到工程中
助理工程师, 积分 1273, 距离下一级还需 727 积分
助理工程师, 积分 1273, 距离下一级还需 727 积分
助理工程师, 积分 1273, 距离下一级还需 727 积分
助理工程师, 积分 1273, 距离下一级还需 727 积分
H盘里我放的是岛国的片子。。。。:lol
中级技术员, 积分 195, 距离下一级还需 105 积分
中级技术员, 积分 195, 距离下一级还需 105 积分
中级技术员, 积分 195, 距离下一级还需 105 积分
中级技术员, 积分 195, 距离下一级还需 105 积分
扫描二维码,随时随地手机跟帖
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章
技术奇才奖章
人才类勋章
时间类勋章
涓涓之细流
发帖类勋章
时间类勋章
技术导师奖章
人才类勋章
湍急之河流
发帖类勋章
精华达人奖章
等级类勋章
时间类勋章
时间类勋章
无冕之王奖章
等级类勋章
时间类勋章
技术高手奖章
人才类勋章
时间类勋章
欢快之小溪
发帖类勋章
社区建设奖章
等级类勋章
您需要登录后才可以回帖
热门推荐 /5深藏不露的‘NUL‘(51单片机串口通讯是遇到的错误之一)
> 深藏不露的‘NUL‘(51单片机串口通讯是遇到的错误之一)
深藏不露的‘NUL‘(51单片机串口通讯是遇到的错误之一)
NUl的定义:C语言中规定以字符&\0作为字符串结束标志。&\0是一个ASCII码为0的字符,从ASCII码表中可以看到ASCII码为0的字符是&空操作字符&,本文引用地址:它不引起任何控制动作,也不是一个可显示的字符 这是本人在用单片机做串口通讯时遇到的小问题,因为那个电子设备比较特殊,发送的数据也是比较的特殊,所以我便遇到了这个问题。一开始按照预定的指令和电子设备通讯,总是不行,后来通过串口调试器才发现,发送的数据只能发送一半。于是我返回去看代码,这才发现了症结所在。以下便是我的程序出错的原因:出错的程序代码段:void Send_data(char p[]){a=0;while(p[a] != \0){SBUF = p[a];
//SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)while(!TI);
// 等特数据传送 (TI发送中断标志)TI = 0;
// 清除数据传送标志a++;
// 下一个字符} }调用该程序的代码段:const char Message[8]={0x01,0x03,0x00,0xB9,0x00,0x02,0x15,0xEE};while(1){ if (Flag==1){ Send_data(Message);while(TI!=0);TI=0;Flag=0;}}(刚开始的时候没发现,很郁闷,通过串口调试器才找到原因。)对于程序错误的分析:程序执行到0x00==p[2]时,即相当于&\0&==p[2];(即遇到NUL退出)到这一步程序的判断结束,发送函数也结束。在C语言中\0其实就是ASCII码表上值为0的,它是不显示的我想通过这个小问题来说明在写程序是尤其要和硬件打交道的时候一定要注意&\0&。写的不好请见谅!欢迎大家批评指正
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一51单片机编程让新手最容易出错的几点总结
11:20:56来源: 51hei 关键字:&&
最近在网上看到很提问都是程序出错,而且找不到错误在那,所以在这我也总结一下,和大家分享一下:
& &1、在写头件时,有的朋友会把""或""""这两忘记写,比如说:#include reg52.h,它就写成这样,所以你编译的时候肯定会出错的,正确的应该这样:#include ;再说一点,一般""的是编译器中自带的文件,而""""是自己定义的头文件,这是C语言规则里面提到的,不这样写也没事,但是我们也应该遵守是吧!
& &2、在写宏定义时最容把关键字中字母写错,#define uint unsigned int #define uchar unsigned char,在网上找到很多鞋童,把unsigned中的'n'写成'h',不知道是不是有近视还是按错了,所以大家写程序的时候特别注意,没事的时候,多写程序,把32个关键字记牢,以免后面写程序时犯同样的毛病。
& &3、在写宏定义时,后面不需要写分号,有的朋友经常这样,#define False 0;这句是用False代替0;,当在调用时,比如:return F你们说这样写有没有错,有可能的朋友说没错,但是真正的是错了,在编译的时候肯定会错,那么错在那呢?因为#define False 0;,它的作用是用False代替"0;",所以在调用时这样return False,后面不要加分号。为了避免错误,大家在定义宏时,后面最好不要加分号。
关键字:&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
相关关键词
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
51单片机实验程序..doc 16页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
51单片机实验程序.
你可能关注的文档:
··········
··········
用查表方式编写y=x13+x23+x33。(x为0~9的整数)
#include&reg51.h&
void main()
int code a[10]={0,1,8,27,64,125,216,343,512,729};//将0~9对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255或-128~+127之间的话就用char,而现在的值明显超过这个范围,用int较合适。int的范围是0~65535或-。
int y,x1,x2,x3;//此处定义根据习惯,也可写成char x1,x2,x3但是变量y一定要用int 来定义。
x3=9;//x1,x2,x3三个的值是自定的,只要是0~9当中的数值皆可,也可重复。
y=a[x1]+a[x2]+a[x3];
while(1);//单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。
//结果的查询在Keilvision软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch的框架内双击“double-click or F2 to add”文字输入y后按回车,右侧会显示其16进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10进制数。
有10个8位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的数据(1的个数为偶数)都要存到内RAM50H开始的数据区中。试编写有关程序。
#include&reg51.h&
void main()
int a[10]={0,1,5,20,24,54,64,88,101,105};//将所要处理的值存入RAM中,这些可以根据个人随意设定,但建议不要超过0~255的范围。
//定义一个变量
char *q=0x50;
//定义一个指针*q指向内部0x50这个地址。
for(i=9;i&=0;i--)//9~0循环,共十次,也可以用for(i=0;i&10;i++)
ACC=a[i];//将a[i]的值赋给累加器ACC
if (P==0)//PSW0位上的奇偶校验位,如果累加器ACC内数值1的个数为偶数那么P为0,若为奇数,P为1。这里的P是大写的。
q++;//每赋一个值,指针挪一个位置指向下一个。
while(1);//同实验一,程序不能停。
3.有10个8位带符号二进制数,请将10个数按从小到大的顺序排列,并存到内RAM50H开始的单元中。
#include&reg51.h&
void main()
char data a[10]={-50,-36,0,-128,1,99,127,89,-89,40} ;//将所有值存入RAM中,因为有负数,所以不能用unsigned char。因为是char所以假设的数值不要超过-128~+127之外
unsigned char *q=0x50;
//定义指针*q指向0x50
unsigned char i,j;
//定义三个变量,用于循环及换位。在换位时有赋值,所以t要用char不能用unsigned char。
for(i=0;i&10;i++)
for(j=0;j&10-i;j++)//冒泡法,具体可以参考C语言程序设计的书。
if(a[j]&a[j+1])
a[j]=a[j+1];
for(i=0;i&10;i++)
//将已经排好序的数组存入*q指向的地址。
1、基本部分:
(1)P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
#include&reg51.h&
void delay(unsigned char x)
//定义延迟函数,用于后面LED灯亮的持续时间。
unsigned char i,j,k;
for(i=10;i&0;i--)
for(j=100;j&0;j--)
for(k=249;k&0;k--);
while(--x);}
P1=0//第一个灯亮
delay(1);//延时500ms
正在加载中,请稍后...

我要回帖

更多关于 rfid单片机51整体程序 的文章

 

随机推荐