c语言单片机编程之头文件编写

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何高效编程之头文件

在网上查了很长时间关于头文件的资料,但是发现很难找到适合我的。学单片机的朋友知道,很多程序经常要调用相同的函数,如果每写一个程序都把这些函数重新写一遍或者复制过来,那是很浪费时间的,现在我通过学习总结以及别人的经验,跟大家分享,欢迎大家转载学习。

写程序最好是结构化编程,因为这样的程序看起来就不那么长了,一目了然,可以很快就知道这个程序实现什么功能,而且排错也非常简单。把常用的函数声明、自定义类型、外部变量的声明等写进头文件,与之配对的扩展名为.c的文件就写常用的函数,main.c 最好就写一个主函数。之前学的51单片机,现在玩430单片机,就以430单片机为例,其他编程软件道理与这个相同。在IAR下新建工程,包含了main.c、mydefine.c和mydefine.h(mydefine.c和mydefine.h是一对)三个文件(注:可包含多个配对的头文件和C 文件)。先把程序贴出来,再详解其中缘由。

main.c内容:

#include "mydefine.h"

void main( void )

{

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD;

SegInitial(); //数码管控制引脚初始化

long m = 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 unsigned int uint; typedef unsigned char uchar;

void write_595(uchar dat);

void SegInitial(void);

void disp(long num);

void delays(uint x);

void delay(uint x);

#endif

mydefine.c的内容

#include "mydefine.h"

#include "msp430x14x.h"

/*********************************流水灯74hc595各引脚定义

*********************************/ #define CLK0 P2OUT &= ~BIT4

#define CLK1 P2OUT |= BIT4

#define STB0 P2OUT &= ~BIT2

#define STB1 P2OUT |= BIT2

#define DS0 P2OUT &= ~BIT5

#define DS1 P2OUT |= BIT5

#define LEDOFF P5OUT = 0x00

uchar dis_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管0~F共阳编码

uchar bitnum[]={0x01,0x02,0x04,0x08,0x10,0x20}; //数码管位选

uchar

dispbuf[6]; //数码管显示缓冲区

//以下是延时函数

void delay(uint x)

{

uint a,b;

for(a=x;a>0;a--)

for(b=10000;b>0;b--);

//控制流水灯,使用P2.2(STB),P2.4(CLK),P2.5(DS) void write_595(uchar dat)

{

uint n;

for(n = 0;n<8;n++)

{

if((dat&0x80) == 0x80)

DS1;

else

DS0;

dat <<= 1;

CLK0;

CLK1;

}

STB1;

STB0;

}

/*****************************************

数码管显示初始化函数

*****************************************/ void SegInitial(void)

{

P5DIR = 0XFF;

P4DIR = 0XFF;

P5OUT = 0X00;

P4OUT = 0X00;

}

/****************************************

数码管防重影延时函数

*****************************************/ void delays(uint x)

{

for(;x>0;x--);

}

/*****************************************

数码管显示函数

位选 P5.0~P5.5

段选 P4

*****************************************/ void disp(long num)

{

uint i;

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;

}

相关文档
最新文档