c语言单片机编程之头文件编写Word文档格式.docx
《c语言单片机编程之头文件编写Word文档格式.docx》由会员分享,可在线阅读,更多相关《c语言单片机编程之头文件编写Word文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
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
msp430x14x.h"
typedef?
unsignedintuint;
typedefunsignedcharuchar;
voidwrite_595(uchardat);
voidSegInitial(void);
voiddisp(longnum);
voiddelays(uintx);
voiddelay(uintx);
#endif
mydefine.c的内容
/*********************************
流水灯74hc595各引脚定义
*********************************/
#defineCLK0P2OUT&
=~BIT4
#defineCLK1P2OUT|=BIT4
#defineSTB0P2OUT&
=~BIT2
#defineSTB1P2OUT|=BIT2
#defineDS0?
P2OUT&
=~BIT5
#defineDS1?
P2OUT|=BIT5
#defineLEDOFFP5OUT=0x00
uchardis_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>
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;
/*****************************************
数码管显示初始化函数
*****************************************/
voidSegInitial(void)
P5DIR=0XFF;
P4DIR=0XFF;
P5OUT=0X00;
P4OUT=0X00;
/****************************************
数码管防重影延时函数
voiddelays(uintx)
for(;
x>
x--);
数码管显示函数
位选P5.0~P5.5
段选P4
voiddisp(longnum)
uinti;
dispbuf[0]=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
.
其中XXXX习惯大写,名称不要与关键字相同,习惯写法请参照上面的程序,#ifndefXXXX?
#define?
XXXX?
.....?
#endif的作用是有些头文件已经在其他文件里包含过了,但是你在这个文件也包含了,如果没有上面那一句,则编译器会报错:
重复定义!
mydefine.c中用到了mydefine.h中的定义,则需要把mydefine包含进来,包含mydefine.h的意思是mydefine.h替换为mydefine.h的内容,即mydefine.c的完整内容为:
数码管延时函数
}?
下面讲一下mydefine.c的功能,一些常用函数都写在里面,一般情况下我们写好头文件后不必对函数的原型进行深究,只需知道函数的功能即可,即头文件里的函数声明,多个C文件编译链接的时候,相当于主函数放在前面,其他函数放在后面,调用函数的时候就必须先对这些函数进行声明,否则编译器不知道你的函数原型是什么,而这些头文件就起到了函数声明的作用,所谓头文件就可以理解为在main函数前面事先要处理的程序(即声明和定义)。
下面把这个结构化编程的等效程序贴出来,以方便大家理解: