1、mydefine.hvoid 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_Hmsp430x14x.htypedef ?unsigned int uint;typedef uns
2、igned char uchar;void write_595(uchar dat);void SegInitial(void);void disp(long num);void delays(uint x);void delay(uint x);#endifmydefine.c的内容/* 流水灯74hc595各引脚定义*/#define CLK0 P2OUT &= BIT4#define CLK1 P2OUT |= BIT4#define STB0 P2OUT &= BIT2#define STB1 P2OUT |= BIT2#define DS0 ?P2OUT &= BIT5#define
3、 DS1 ?P2OUT |= BIT5#define LEDOFF P5OUT = 0x00uchar dis_num=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 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;bb-);/控制流水灯
4、,使用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 x-); 数码管显示函数 位选 P5.0P5.5 段选 P4void disp(long num) uint i; dispbuf0 = num%10; dispbuf1 = num/10%10; dispbuf2 = num/100%10; dispbuf3 = num/1000%10; dispbuf4 = num/10000%10; dispbuf
5、5 = num/100000%10; for(i=0;i6;i+) P4OUT = dis_numdispbufi; P5OUT = bitnumi; delays(400); P5OUT=0X00;首先看main.c里面就写了一个主函数,它告诉读者该程序的主要功能。mydefine.h里面包含了一些函数的声明,如果使用到外部变量(或函数),则需要在该变量(或函数)前写extern加以说明其为外部变量(或函数)。写头文件一定要注意:#ifndef XXXX#define XXXX .其中XXXX习惯大写,名称不要与关键字相同,习惯写法请参照上面的程序,#ifndef XXXX ?#define
6、 ?XXXX ? . ? #endif的作用是有些头文件已经在其他文件里包含过了,但是你在这个文件也包含了,如果没有上面那一句,则编译器会报错:重复定义!mydefine.c中用到了mydefine.h中的定义,则需要把mydefine包含进来,包含mydefine.h的意思是mydefine.h替换为mydefine.h的内容,即mydefine.c的完整内容为: 数码管延时函数 ?下面讲一下mydefine.c的功能,一些常用函数都写在里面,一般情况下我们写好头文件后不必对函数的原型进行深究,只需知道函数的功能即可,即头文件里的函数声明,多个C文件编译链接的时候,相当于主函数放在前面,其他函数放在后面,调用函数的时候就必须先对这些函数进行声明,否则编译器不知道你的函数原型是什么,而这些头文件就起到了函数声明的作用,所谓头文件就可以理解为在main函数前面事先要处理的程序(即声明和定义)。下面把这个结构化编程的等效程序贴出来,以方便大家理解:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2