版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何高效编程之头文件在网上查了很长时间关于头文件的资料,但是发现很难找到适合我的。学单片机的朋友知道,很多程序经常要调用相同的函数,如果每写一个程序都把这些函数重新写一遍或者复制过来,那是很浪费时间的,现在我通过学习总结以及别人的经验,跟大家分享,欢迎大家转载学习。??????写程序最好是结构化编程,因为这样的程序看起来就不那么长了,一目了然,可以很快就知道这个程序实现什么功能,而且排错也非常简单。把常用的函数声明、自定义类型、外部变量的声明等写进头文件,与之配对的扩展名为.c的文件就写常用的函数,main.c最好就写一个主函数。之前学的51单片机,现在玩430单片机,就以430单片机为例,其他编程软件道理与这个相同。在IAR下新建工程,包含了main.c、mydefine.c和mydefine.h(mydefine.c和mydefine.h是一对)三个文件(注:可包含多个配对的头文件和 C文件)。先把程序贴出来,再详解其中缘由。main.c内容:#include"mydefine.h"voidmain(void){?//Stopwatchdogtimertopreventtimeoutreset?WDTCTL=WDTPW+WDTHOLD;?SegInitial();???// 数码管控制引脚初始化?longm=0;?while(1)?{?????disp(m);??????//显示m的值??delay(10);??m++;??if(m==1000000)???m=0;?}}mydefine.h的内容#ifndef_MYDEFINE_H#define_MYDEFINE_H#include"msp430x14x.h"typedef?unsignedintuint;typedefunsignedcharuchar;voidwrite_595(uchardat);voidSeglnitial(void);voiddisp(longnum);voiddelays(uintx);#endifmydefine.c的内容#inelude"mydefine.h"#include"msp430x14x.h"/*********************************???流水灯74hc595各引脚定义*********************************/#defineCLKOP2OUT&二~BIT4#defineCLK1P2OUT|=BIT4#defineSTBOP2OUT&二~BIT2#defineSTB1P2OUT|=BIT2#defineDS0?P2OUT&二~BIT5#defineDS1?P2OUT|=BIT5#defineLEDOFFP5OUT=0x00uchardis_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,???????0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};??//数码管0~F共阳编码ucharbitnum[]={0x01,0x02,0x04,0x08,0x10,0x20};????//数码管位选uchardispbuf[6];?????????????????????????????????????????????????????????????//数码管显示缓冲区//以下是延时函数
voiddelay(uintx){?uinta,b;?for(a=x;a>0;a--)??for(b=10000;b>0;b--);}〃控制流水灯,使用P2.2(STB),P2.4(CLK),P2.5(DS)voidwrite_595(uchardat){?uintn;?for(n=0;n<8;n++)?{??if((dat&0x80)==0x80)???DS1;??else???DS0;??dat<<=1;??CLK0;????CLK1;?}?STB1;STB0;/*****************************************?????? 数码管显示初始化函数*****************************************voidSeglnitial(void){?P5DIR=:0XFF;?P4DIR=:0XFF;?P5OUT:=0X00;?P4OUT:=0X00;}/****************************************?????数码管防重影延时函数*****************************************/voiddelays(uintx){?for(;x>0;x--);}/*****************************************?????? 数码管显示函数??????位选P5.0~P5.5*****************************************voiddisp(longnum){??uinti;??dispbuf[O]==num%10;??dispbuf[1]:=num/10%10;??dispbuf[2]:=num/100%10;??dispbuf[3]:=num/1000%10;??dispbuf[4]==num/10000%10;??dispbuf[5]:=num/100000%10;??for(i=0;i<6;i++)??{???P4OUT=:dis_num[dispbuf[i]];???P5OUT=:bitnum[i];???delays(400);???P5OUT=0X00;??}}首先看main.c里面就写了一个主函数,它告诉读者该程序的主要功能。mydefine.h里面包含了一些函数的声明,如果使用到外部变量(或函数),则需要在该变量(或函数)前写 extern力口以说明其为外部变量(或函数)。写头文件一定要注意:
#ifndefXXXX#defineXXXX??????.??????.??????.??????.?????.?????.#endif其中XXXX习I惯大写,名称不要与关键字相同,习惯写法请参照上面的程序,#ifndefXXXX??#define?XXXX?..…?#endif 的作用是有些头文件已经在其他文件里包含过了, 但是你在这个文件也包含了,如果没有上面那一句,则编译器会报错:重复定义!mydefine.c中用到了mydefine.h中的定义,则需要把mydefine包含进来,包含mydefine.h的意思是mydefine.h替换为mydefine.h的内容,即mydefine.c的完整内容为:#include"msp430x14x.h"typedef?unsignedintuint;typedefunsignedcharuchar;voidwrite_595(uchardat);voidSeglnitial(void);voiddisp(longnum);voiddelays(uintx);voiddelay(uintx);/*********************************???流水灯74hc595各引脚定义*********************************/#defineCLKOP2OUT&二~BIT4#defineCLK1P2OUT|=BIT4#defineSTBOP2OUT&二~BIT2#defineSTB1P2OUT|=BIT2#defineDS0?P2OUT&二~BIT5#defineDS1?P2OUT|=BIT5/*********************************???流水灯74hc595各引脚定义*********************************/#defineLEDOFFP5OUT=0x00uchardis_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,???????0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharbitnum[]={0x01,0x02,0x04,0x08,0x10,0x20};uchardispbuf[6];//以下是延时函数?uinta,b;?for(a二x;a>O;a--)??for(b=10000;b>0;b--);}〃控制流水灯,使用P2.2(STB),P2.4(CLK),P2.5(DS)voidwrite_595(uchardat){?uintn;?for(n=0;n<8;n++)?{??if((dat&0x80)==0x80)???DS1;??else???DS0;??dat<<=1;??CLK0;????CLK1;?}?STB1;?STB0;*****************************************
?????? 数码管显示初始化函数*****************************************/voidSeglnitial(void){?P5DIR=:0XFF;?P4DIR=:0XFF;?P5OUT:=0X00;?P4OUT-=0X00;}/****************************************????? 数码管延时函数*****************************************voiddelays(uintx){?for(;x>0;x--);}/*****************************************?????? 数码管显示函数??????位选P5.0~P5.5??????段选P4*****************************************/
{??uinti;??dispbuf[O]==num%10;??dispbuf[1]:=num/10%10;??dispbuf[2]:=num/100%10;??dispbuf[3]:=num/1000%10;??dispbuf[4]==num/10000%10;??dispbuf[5]:=num/100000%10;??for(i=0;i<6;i++)??{???P40UT=:dis_num[dispbuf[i]];???P5OUT=:bitnum[i];???delays(400);???P5OUT=0X00;??}??■ ■I■ ■}????????下面讲一下mydefine.c的功能,一些常用函数都写在里面,一般情况下我们写好头文件后不必对函数的原型进行深究,只需知道函数的功能即可,即头文件里的函数声明,多个C文件编译链接的时候,相当于主函数放在前面,其他函数放在后面,调用函数的时候就必须先对这些函数进行声明,否则编译器不知道你的函数原型是什么,而这些头文件就起到了函数声明的作用,所谓头文件就可以理解为在以方便大家理解:main函数前面事先要处理的程序(即声明和定义)c以方便大家理解:????????下面把这个结构化编程的等效程序贴出来,#include"msp430x14x.h"typedef?unsignedintuint;typedefunsignedcharuchar;voidwrite_595(uchardat);voidSeglnitial(void);voiddisp(longnum);voiddelays(uintx);voiddelay(uintx);voidmain(void){?//Stopwatchdogtimertopreventtimeoutreset?WDTCTL=WDTPW+WDTHOLD;?Seglnitial();?longm=0;?while(1)?{??disp(m);??delay(10);??m++;
??if(m==1000000)???m=0;?}}/*********************************???流水灯74hc595各引脚定义*********************************/#defineCLK0P2OUT&二~BIT4#defineCLK1P2OUT|=BIT4#defineSTB0P2OUT&二~BIT2#defineSTB1P2OUT|=BIT2#defineDS0?P2OUT&二~BIT5#defineDS1?P2OUT|=BIT5/*********************************???流水灯74hc595各引脚定义*********************************/#defineLEDOFFP5OUT=0x00uchardis_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,???????0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharbitnum[]={0x01,0x02,0x04,0x08,0x10,0x20};uchardispbuf[6];//以下是延时函数
voiddelay(uintx){?uinta,b;?for(a=x;a>0;a--)??for(b=10000;b>0;b--);}〃控制流水灯,使用P2.2(STB),P2.4(CLK),P2.5(DS)voidwrite_595(uchardat){?uintn;?for(n=0;n<8;n++)?{??if((dat&0x80)==0x80)???DS1;??else???DS0;??dat<<=1;??CLK0;????CLK1;?}?STB1;STB0;/*****************************************?????? 数码管显示初始化函数**********
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年来宾道路客运输从业资格证考试真题保过
- 2024年客运从业资格证考试题目和答案解析
- 2024年晋中资格证客运题库
- 2024年景德镇客运从业资格证考试模拟考试
- 2023届新高考化学选考一轮总复习学案-热点1 离子方程式的正误判断
- 2024年广州海珠区住宅装修工程合同
- 2024年建筑工程合同详解版
- 《第八单元 世界经济的全球化趋势》试卷及答案-高中历史必修2-人教版-2024-2025学年
- 不同埋深下盾构输水隧洞预应力双层衬砌模型试验
- 提升泵站施工组织设计方案
- 通信行业销售人员销售技巧培训
- 2024建筑门窗安装技术规程
- 降低会阴侧切率的PDCA
- 第二篇创业机会的识别课件
- 2023年江苏省无锡锡山区市场监督管理局招聘11人笔试参考题库(共500题)答案详解版
- 《危机概述》课件
- 浙江省宁波市镇海区蛟川书院2023-2024学年九年级上学期期中科学试卷
- 54设计和开发验证记录表
- 2023年新改版教科版四年级上册科学期中测试卷 (超全)
- 二上【教学】《我们不乱扔》
- 研发流程(EVT-DVT-PVT-MP)实用文档
评论
0/150
提交评论