找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3062|回復(fù): 9
收起左側(cè)

請(qǐng)問(wèn)自己寫(xiě)的C語(yǔ)言頭文件里要把相應(yīng)的.c文件中所有的函數(shù)和變量都包括嗎?

  [復(fù)制鏈接]
ID:796670 發(fā)表于 2020-12-2 09:28 | 顯示全部樓層 |閱讀模式
比如說(shuō)這是我寫(xiě)的LCD.c文件:
#include<reg52.h>
#include<intrins.h>
#include "LCD.h"
#define uchar unsigned char
#define uint  unsigned int
#define IODATA  P0
sbit E=P2^2;    //1602使能引腳
sbit RW=P2^1;    //1602讀寫(xiě)引腳   
sbit RS=P2^0;    //1602數(shù)據(jù)/命令選擇引腳
uchar strwind[];
void delay(uint ms)  
{
uint i,j;
        for(i=ms;i>0;i--);
        
         for(j=120;j>0;j--);
}

void wcmd(uchar del)//寫(xiě)命令函數(shù)
{
  RS=0;//命令選擇端
        delay(10);
        RW=0;//寫(xiě)命令
        delay(10);
        IODATA=del;  //把命令字寫(xiě)入
        delay(10);
        E=1;//使能
        delay(10);
        E=0;
}

void lcd1602_writedata(uchar dat)//寫(xiě)數(shù)據(jù)函數(shù)
{
  delay(10);
        RS=1;//數(shù)據(jù)選擇端
        delay(10);
        RW=0;//寫(xiě)命令
        delay(10);
        IODATA=dat;  //把要顯示的數(shù)據(jù)寫(xiě)入
        delay(10);
        E=1;
        delay(10);
        E=0;
}

void lcd1602_init()//LCD初始化
{
wcmd(0x38);
wcmd(0x0C);
wcmd(0x06);
wcmd(0x01);
}

void lcd1602_show(uchar a)
{
        uchar m=0;
        lcd1602_init();
        delay(1000);
        wcmd(a);
        delay(1000);
        for(m=0;m<4;m++)
        {
        lcd1602_writedata(strwind[m]);
  }
}

由于我要在其他的.c文件里用到LCD.c里的函數(shù)和變量,所以寫(xiě)了一個(gè)相應(yīng)的頭文件:LCD.h
如下:
#ifndef _LCD_H
#define _LCD_H
#define uchar unsigned char
#define uint  unsigned int
void delay(uint ms);
void lcd1602_init();
void wcmd(uchar del);
void lcd1602_writedata(uchar dat);
void lcd1602_show(uchar a);
extern uchar strwind[];
#endif


請(qǐng)問(wèn)這樣寫(xiě)對(duì)嗎?是需要把LCD.C里的函數(shù)和變量都包括嗎?
回復(fù)

使用道具 舉報(bào)

ID:414556 發(fā)表于 2020-12-2 11:57 | 顯示全部樓層
你可以把定義放在H文件中所有的C調(diào)用,或在主程序定義,在其他C文件引用定義

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:293933 發(fā)表于 2020-12-2 12:15 | 顯示全部樓層
所有的宏定義,函數(shù)名放里面就可以了,變量數(shù)組不用.

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2020-12-2 13:35 | 顯示全部樓層
可以放入,也可以不放入,主要看你的程序組織結(jié)構(gòu),作為頭文件,只是預(yù)處理的一種,只要符合要求,預(yù)處理都可以進(jìn)行。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2020-12-2 16:00 | 顯示全部樓層
需要被其他C文件調(diào)用的才放

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:813329 發(fā)表于 2020-12-2 16:25 | 顯示全部樓層
可以把所有的函數(shù)和變量都包括進(jìn)去,也可以只包括要被其他文件調(diào)用的函數(shù)和變量。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:406879 發(fā)表于 2020-12-7 16:57 | 顯示全部樓層
我曾經(jīng)看過(guò)把程序直接寫(xiě).h文件里的。。。。。沒(méi)有.c文件。。。
回復(fù)

使用道具 舉報(bào)

ID:856365 發(fā)表于 2020-12-7 21:33 | 顯示全部樓層
不需要都放在里面,主要就是放一些宏定義,以及會(huì)被其他.c文件調(diào)用的變量
回復(fù)

使用道具 舉報(bào)

ID:170498 發(fā)表于 2020-12-8 13:05 | 顯示全部樓層
以在下拙見(jiàn):

1.函數(shù)和全局變量:
如果函數(shù)僅僅在本文件使用,像void wcmd(uchar del)這個(gè)函數(shù),一般來(lái)說(shuō)不會(huì)被在其它文件(如:main.c)調(diào)用,可以不用在頭文件聲明,寫(xiě)在調(diào)用他的函數(shù)前面就行了。
不過(guò)按照規(guī)范,本文件的函數(shù)前面定義和聲明的時(shí)候應(yīng)該加上 static 這個(gè)關(guān)鍵字,static void wcmd(uchar del),表明這個(gè)是本文件的函數(shù),不允許其它文件調(diào)用,并在lcd.c的前面聲明,不在頭文件聲明。
變量跟函數(shù)是同一個(gè)道理,就看是本文件使用還是整個(gè)工程使用,如果是僅僅在本文件調(diào)用,那么定義的時(shí)候:static char name; 如果其它也要調(diào)用,就把static去掉,在其它文件上要調(diào)用的話,在調(diào)用的文件上聲明 extern char name; 。

2.宏定義:
如果宏需要被其它文件使用,就在源文件(.c文件)定義,否則就在頭文件定義。

3. "#define uchar unsigned char" 這一段建議改成 "typedef char uchar;",建議查一下 #define 和typedef def 的區(qū)別。
回復(fù)

使用道具 舉報(bào)

ID:517466 發(fā)表于 2020-12-8 19:53 | 顯示全部樓層
做過(guò)其他軟件嗎?比如java。當(dāng)某個(gè)函數(shù)需要被外部程序使用的時(shí)候,如果想暴露給外部程序,需要使用public聲明。同樣的,c程序中,如果外部程序使用這個(gè)程序中的某個(gè)函數(shù),他得知道去哪里找。所以設(shè)置了頭文件。相當(dāng)于告訴外部程序需要的函數(shù)在哪里。不被外部程序調(diào)用的函數(shù),可以不放在頭文件中。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表