www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機實例 >> 正文

教你如何高效編程之頭文件書寫,頭文件怎么編程

作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2018-12-19

       在網(wǎng)上查了很長時間關(guān)于頭文件的資料,但是發(fā)現(xiàn)很難找到適合我的。學(xué)單片機的朋友知道,很多程序經(jīng)常要調(diào)用相同的函數(shù),如果每寫一個程序都把這些函數(shù)重新寫一遍或者復(fù)制過來,那是很浪費時間的,現(xiàn)在我通過學(xué)習(xí)總結(jié)以及別人的經(jīng)驗,跟大家分享,歡迎大家轉(zhuǎn)載學(xué)習(xí)。

        寫程序最好是結(jié)構(gòu)化編程,因為這樣的程序看起來就不那么長了,一目了然,可以很快就知道這個程序?qū)崿F(xiàn)什么功能,而且排錯也非常簡單。把常用的函數(shù)聲明、自定義類型、外部變量的聲明等寫進頭文件,與之配對的擴展名為.c的文件就寫常用的函數(shù),main.c最好就寫一個主函數(shù)。之前學(xué)的51單片機,現(xiàn)在玩430單片機,就以430單片機為例,其他編程軟件道理與這個相同。在IAR下新建工程,包含了main.c、mydefine.cmydefine.hmydefine.c和mydefine.h是一對)三個文件(注:可包含多個配對的頭文件和C文件)。先把程序貼出來,再詳解其中緣由。以下是單片機c語言編程

main.c內(nèi)容:
#include "mydefine.h"
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  SegInitial();      //數(shù)碼管控制引腳初始化
  
  long m = 0;
  while(1)
  {    
   disp(m);            //顯示m的值
    delay(10);
   m++;
   if(m == 1000000)
     m = 0;
  }
}
 
 
mydefine.h的內(nèi)容
 
#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的內(nèi)容
 
#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};    //數(shù)碼管0~F共陽編碼
uchar bitnum[]={0x01,0x02,0x04,0x08,0x10,0x20};         //數(shù)碼管位選
uchar dispbuf[6];                                                             //數(shù)碼管顯示緩沖區(qū)

//以下是延時函數(shù)
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;
}

/*****************************************
            數(shù)碼管顯示初始化函數(shù)

*****************************************/
void SegInitial(void)
{
  P5DIR = 0XFF;
  P4DIR = 0XFF;
  P5OUT = 0X00;
  P4OUT = 0X00;
}


/****************************************
          數(shù)碼管防重影延時函數(shù)

*****************************************/
void delays(uint x)
{
  for(;x>0;x--);
}


/*****************************************
            數(shù)碼管顯示函數(shù)
            位選 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;
    }
}
 
首先看main.c里面就寫了一個主函數(shù),它告訴讀者該程序的主要功能。mydefine.h里面包含了一些函數(shù)的聲明,如果使用到外部變量(或函數(shù)),則需要在該變量(或函數(shù))前寫extern加以說明其為外部變量(或函數(shù))。寫頭文件一定要注意:
 
#ifndef XXXX
#define XXXX
        .
        .
        .
        .
        .
        .
#endif
 
其中XXXX習(xí)慣大寫,名稱不要與關(guān)鍵字相同,習(xí)慣寫法請參照上面的程序,#ifndef XXXX    #define  XXXX   .....   #endif的作用是有些頭文件已經(jīng)在其他文件里包含過了,但是你在這個文件也包含了,如果沒有上面那一句,則編譯器會報錯:重復(fù)定義!mydefine.c中用到了mydefine.h中的定義,則需要把mydefine包含進來,包含mydefine.h的意思是mydefine.h替換為mydefine.h的內(nèi)容,即mydefine.c的完整內(nèi)容為:
#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);
/*********************************
      流水燈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


/*********************************
      流水燈74hc595各引腳定義

*********************************/
#define LEDOFF P5OUT = 0x00


uchar dis_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
              0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar bitnum[]={0x01,0x02,0x04,0x08,0x10,0x20};
uchar dispbuf[6];

//以下是延時函數(shù)
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;
}

/*****************************************
            數(shù)碼管顯示初始化函數(shù)

*****************************************/
void SegInitial(void)
{
  P5DIR = 0XFF;
  P4DIR = 0XFF;
  P5OUT = 0X00;
  P4OUT = 0X00;
}


/****************************************
          數(shù)碼管延時函數(shù)

*****************************************/
void delays(uint x)
{
  for(;x>0;x--);
}


/*****************************************
            數(shù)碼管顯示函數(shù)
            位選 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;
    }  
}
 
        下面講一下mydefine.c的功能,一些常用函數(shù)都寫在里面,一般情況下我們寫好頭文件后不必對函數(shù)的原型進行深究,只需知道函數(shù)的功能即可,即頭文件里的函數(shù)聲明,多個C文件編譯鏈接的時候,相當(dāng)于主函數(shù)放在前面,其他函數(shù)放在后面,調(diào)用函數(shù)的時候就必須先對這些函數(shù)進行聲明,否則編譯器不知道你的函數(shù)原型是什么,而這些頭文件就起到了函數(shù)聲明的作用,所謂頭文件就可以理解為在main函數(shù)前面事先要處理的程序(即聲明和定義)。
 
        下面把這個結(jié)構(gòu)化編程的等效程序貼出來,以方便大家理解:
 
#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);

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  SegInitial();
  
  long m = 0;
  while(1)
  {
    
   disp(m);
    delay(10);
   m++;
   if(m == 1000000)
     m = 0;
  }

}

/*********************************
      流水燈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


/*********************************
      流水燈74hc595各引腳定義

*********************************/
#define LEDOFF P5OUT = 0x00


uchar dis_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
              0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar bitnum[]={0x01,0x02,0x04,0x08,0x10,0x20};
uchar dispbuf[6];

//以下是延時函數(shù)
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;
}

/*****************************************
            數(shù)碼管顯示初始化函數(shù)

*****************************************/
void SegInitial(void)
{
  P5DIR = 0XFF;
  P4DIR = 0XFF;
  P5OUT = 0X00;
  P4OUT = 0X00;
}


/****************************************
          數(shù)碼管延時函數(shù)

*****************************************/
void delays(uint x)
{
  for(;x>0;x--);
}


/*****************************************
            數(shù)碼管顯示函數(shù)
            位選 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;
    }    
}
 
希望這些總結(jié)能對大家有所幫助,又不能理解的地方,可以互相交流一下。
Tags:單片機編程,頭文件,單片機c語言,編程  
責(zé)任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網(wǎng)友評論
最新推薦
熱門文章
  • 此欄目下沒有熱點文章
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久
亚洲色欲色欲www| 麻豆成人91精品二区三区| 欧美军同video69gay| 奇米色一区二区| 26uuuu精品一区二区| 成人黄色在线看| 一区2区3区在线看| 日韩你懂的在线播放| 国产成人在线免费| 亚洲卡通欧美制服中文| 欧美一区二区三区的| 国产一区二区调教| 亚洲精品欧美综合四区| 欧美一级精品在线| 成人avav影音| 青青草成人在线观看| 久久综合色天天久久综合图片| 99久久精品情趣| 日韩精品久久理论片| 久久精品一区二区三区四区| 色香蕉成人二区免费| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品成人网| 欧美一级一级性生活免费录像| 国产成人免费xxxxxxxx| 亚洲一区二区视频| 久久久久久久久久久黄色| 在线观看国产一区二区| 国产精品综合在线视频| 亚洲制服欧美中文字幕中文字幕| 欧美成人精品1314www| 色综合网站在线| 国产一区二区日韩精品| 亚洲国产中文字幕在线视频综合| 久久久精品中文字幕麻豆发布| 欧美在线观看视频在线| 国产一本一道久久香蕉| 亚洲成人福利片| 国产精品五月天| 欧美一区二区日韩| 日本高清免费不卡视频| 国产福利一区二区三区视频在线| 亚洲成人黄色影院| 国产精品免费视频网站| 精品少妇一区二区三区日产乱码| 在线欧美日韩国产| 国产aⅴ综合色| 美日韩一区二区| 亚洲国产精品一区二区www在线| 国产日本一区二区| 日韩三级在线观看| 欧美天堂亚洲电影院在线播放| 国产aⅴ综合色| 麻豆精品在线视频| 洋洋av久久久久久久一区| 国产精品女同互慰在线看| 精品国产一区二区三区久久影院| 欧洲一区二区三区免费视频| 成人午夜短视频| 激情都市一区二区| 免费一级片91| 亚洲电影在线免费观看| 日韩毛片视频在线看| 国产欧美一区二区在线观看| 日韩欧美国产精品一区| 欧美日韩一区高清| 色综合久久中文综合久久97| 成人黄色a**站在线观看| 国产麻豆精品久久一二三| 蜜桃视频在线观看一区| 丝袜美腿亚洲色图| 亚洲一二三区在线观看| 亚洲免费看黄网站| 中文字幕日本不卡| 国产精品丝袜一区| 中文字幕国产精品一区二区| 国产精品91xxx| 久久99热99| 日本最新不卡在线| 日韩精彩视频在线观看| 五月激情综合色| 亚洲一区精品在线| 亚洲综合在线免费观看| 椎名由奈av一区二区三区| 成人免费在线播放视频| 一区在线播放视频| 成人免费一区二区三区视频| 一区精品在线播放| 最新欧美精品一区二区三区| 国产精品欧美一级免费| 中文字幕一区二区三区不卡| 国产精品国产馆在线真实露脸| 久久精品人人做| 国产日韩欧美在线一区| 国产日韩三级在线| 国产精品美女久久久久久久久久久| 国产日产亚洲精品系列| 国产精品欧美久久久久一区二区| 国产精品无遮挡| 日韩码欧中文字| 一区二区三区自拍| 亚洲午夜激情av| 亚洲大片精品永久免费| 日韩在线一区二区| 美女一区二区三区在线观看| 久久精品国产亚洲aⅴ| 精品午夜久久福利影院| 国产乱色国产精品免费视频| 国产传媒日韩欧美成人| 成人av电影在线| 91福利区一区二区三区| 欧美日韩国产综合草草| 7777女厕盗摄久久久| 日韩精品一区二区三区四区视频| 亚洲精品在线观看视频| 国产三区在线成人av| 国产精品福利电影一区二区三区四区| 国产精品久久久久一区二区三区 | 久久成人免费电影| 国产福利一区二区三区视频在线| 成人午夜电影小说| 在线视频一区二区三区| 欧美精品乱人伦久久久久久| 日韩精品影音先锋| 国产精品色一区二区三区| 亚洲男女一区二区三区| 亚洲v精品v日韩v欧美v专区 | 狠狠狠色丁香婷婷综合久久五月| 国产福利一区在线| 色综合天天狠狠| 91精品蜜臀在线一区尤物| 久久一二三国产| 亚洲欧洲日韩av| 视频一区免费在线观看| 黑人巨大精品欧美黑白配亚洲| 成人一级片在线观看| 在线国产电影不卡| 日韩欧美精品在线| 国产精品乱码人人做人人爱| 亚洲综合小说图片| 精品一区二区三区在线观看国产| 成人app下载| 欧美精品亚洲二区| 久久精品这里都是精品| 亚洲影视在线观看| 韩国女主播成人在线| aaa国产一区| 欧美一三区三区四区免费在线看| 久久精品欧美一区二区三区麻豆| 一区二区三区自拍| 国产专区综合网| 色综合天天综合给合国产| 日韩一区二区三| 日韩理论电影院| 麻豆91精品91久久久的内涵| 99re视频这里只有精品| 日韩欧美一区在线观看| 亚洲婷婷综合色高清在线| 麻豆91在线观看| 日本高清免费不卡视频| 久久久精品中文字幕麻豆发布| 亚洲一区在线观看免费观看电影高清| 国内久久精品视频| 欧美亚洲自拍偷拍| 欧美激情中文字幕一区二区| 午夜久久久影院| 99久久久久免费精品国产 | 天天av天天翘天天综合网| 国产夫妻精品视频| 欧美一区二区在线视频| 日韩美女视频一区| 韩国视频一区二区| 欧美日韩高清一区二区三区| 国产欧美日韩另类一区| 天堂精品中文字幕在线| 91免费观看国产| 久久久99久久精品欧美| 亚洲成人7777| 91片在线免费观看| 久久一夜天堂av一区二区三区| 亚洲电影视频在线| 波多野结衣一区二区三区| 欧美刺激午夜性久久久久久久| 亚洲一区二区精品久久av| 粉嫩嫩av羞羞动漫久久久| 日韩欧美一卡二卡| 亚洲成人自拍偷拍| 91老师国产黑色丝袜在线| 欧美激情一区二区三区蜜桃视频| 青青草国产精品亚洲专区无| 欧美日韩另类一区| 亚洲三级视频在线观看| 国产盗摄女厕一区二区三区| 日韩一区二区在线看| 午夜精品久久久久久久| 色成人在线视频| 中文字幕一区二区三区在线不卡 | 欧美一区二区日韩| 亚洲一二三四久久| 一本色道**综合亚洲精品蜜桃冫 |