1、c语言知识单片机编程之头文件编写如何高效编程之头文件在网上查了很长时间关于头文件的资料,但是发现很难找到适合我的。学单片机的朋友知道,很多程序经常要调用相同的函数,如果每写一个程序都把这些函数重新写一遍或者复制过来,那是很浪费时间的,现在我通过学习总结以及别人的经验,跟大家分享,欢迎大家转载学习。 写程序最好是结构化编程,因为这样的程序看起来就不那么长了,一目了然,可以很快就知道这个程序实现什么功能,而且排错也非常简单。把常用的函数声明、自定义类型、外部变量的声明等写进头文件,与之配对的扩展名为.c的文件就写常用的函数,main.c最好就写一个主函数。之前学的51单片机,现在玩430单片机,就
2、以430单片机为例,其他编程软件道理与这个相同。在IAR下新建工程,包含了main.c、mydefine.c和mydefine.h(mydefine.c和mydefine.h是一对)三个文件(注:可包含多个配对的头文件和C文件)。先把程序贴出来,再详解其中缘由。main.c内容:#include mydefine.hvoid main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; SegInitial(); /数码管控制引脚初始化 long m = 0; while(1) di
3、sp(m); /显示m的值 delay(10); m+; if(m = 1000000) m = 0; mydefine.h的内容#ifndef _MYDEFINE_H#define _MYDEFINE_H#include msp430x14x.htypedef 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);#endifmydefine.
4、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 = 0x00uchar dis_num=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
5、0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /数码管0F共阳编码uchar bitnum=0x01,0x02,0x04,0x08,0x10,0x20; /数码管位选uchar dispbuf6;/数码管显示缓冲区/以下是延时函数void delay(uint x) uint a,b; for(a=x;a0;a-) for(b=10000;b0;b-);/控制流水灯,使用P2.2(STB),P2.4(CLK),P2.5(DS)void write_595(uchar dat) uint n; for(n = 0;n8;n+) if(dat&0x80) = 0
6、x80) DS1; else DS0; dat 0;x-);/* 数码管显示函数 位选 P5.0P5.5 段选 P4*/void disp(long num) uint i; dispbuf0 = num%10; dispbuf1 = num/10%10; dispbuf2 = num/100%10; dispbuf3 = num/1000%10; dispbuf4 = num/10000%10; dispbuf5 = num/100000%10; for(i=0;i0;a-) for(b=10000;b0;b-);/控制流水灯,使用P2.2(STB),P2.4(CLK),P2.5(DS)vo
7、id write_595(uchar dat) uint n; for(n = 0;n8;n+) if(dat&0x80) = 0x80) DS1; else DS0; dat 0;x-);/* 数码管显示函数 位选 P5.0P5.5 段选 P4*/void disp(long num) uint i; dispbuf0 = num%10; dispbuf1 = num/10%10; dispbuf2 = num/100%10; dispbuf3 = num/1000%10; dispbuf4 = num/10000%10; dispbuf5 = num/100000%10; for(i=0;
8、i0;a-) for(b=10000;b0;b-);/控制流水灯,使用P2.2(STB),P2.4(CLK),P2.5(DS)void write_595(uchar dat) uint n; for(n = 0;n8;n+) if(dat&0x80) = 0x80) DS1; else DS0; dat 0;x-);/* 数码管显示函数 位选 P5.0P5.5 段选 P4*/void disp(long num) uint i; dispbuf0 = num%10; dispbuf1 = num/10%10; dispbuf2 = num/100%10; dispbuf3 = num/1000%10; dispbuf4 = num/10000%10; dispbuf5 = num/100000%10; for(i=0;i6;i+) P4OUT = dis_numdispbufi; P5OUT = bitnumi; delays(400); P5OUT=0X00;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2