①如果 fun.h 文件 已經(jīng)正確聲明了,那么main.c 只要 include "fun.h"就可以使用 fun.c 函數(shù)了。只怕是,fun.h 只有 聲明,而沒有 正確聲明。正確的 聲明,需要 條件編譯 聲明是 函數(shù)聲明 還是 外部函數(shù)聲明。
創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為梅江企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站制作,梅江網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
② fun.c 中可能有多個函數(shù),而 main.c 并不需要 調(diào)用,如果 這些函數(shù) 在 程序過程沒有調(diào)用,那么 編譯器將放棄 該函數(shù)編譯,同時 發(fā)出 “未使用函數(shù)”警告,就不會 寫進 單片機了。
在單片機c語言中直接調(diào)用庫函數(shù)即可,具體如下:
#includeintrins.h // 聲明了void?_nop_(void);
_nop_(); // 產(chǎn)生一條NOP指令。
該函數(shù)的作用:對于延時很短的,要求在us級的,采用“_nop_”函數(shù),這個函數(shù)相當匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對于12M晶振,延時1uS。
單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。相當于一個微型的計算機,和計算機相比,單片機只缺少了I/O設(shè)備。概括的講:一塊芯片就成了一臺計算機。它的體積小、質(zhì)量輕、價格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時,學(xué)習(xí)使用單片機是了解計算機原理與結(jié)構(gòu)的最佳選擇。
單片機的使用領(lǐng)域已十分廣泛,如智能儀表、實時工控、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等。各種產(chǎn)品一旦用上了單片機,就能起到使產(chǎn)品升級換代的功效,常在產(chǎn)品名稱前冠以形容詞——“智能型”,如智能型洗衣機等。
1、可以放參數(shù),因為void Delay(unsigned char x) ? ? //x為形參
例如:
a=3000*b/a;
Delay(a); ? ? ? ?//帶參數(shù)a到x,調(diào)用延時
2、delay函數(shù)是一般自己定義的一個延時函數(shù)。
C語言定義延時函數(shù)主要通過無意義指令的執(zhí)行來達到延時的目的。下面給出一個經(jīng)典的延時函數(shù)。
// 定義一個延時xms毫秒的延時函數(shù)
void?delay(unsigned?int?xms)??//?xms代表需要延時的毫秒數(shù)
{
unsigned?int?x,y;
for(x=xms;x0;x--)
for(y=110;y0;y--);
}
使用#include調(diào)用庫函數(shù)。
C51語言的編譯器中包含有豐富的庫函數(shù),使用庫函數(shù)可以大大簡化用戶程序設(shè)計的工作量,提高編程效率。每個庫函數(shù)都在相應(yīng)的頭文件中給出了函數(shù)原型聲明,在使用時,必須在源程序的開始處使用預(yù)處理命令#include將有關(guān)的頭文件包含進來。
C51庫函數(shù)中類型的選擇考慮到了8051單片機的結(jié)構(gòu)特性,用戶在自己的應(yīng)用程序中應(yīng)盡可能地使用最小的數(shù)據(jù)類型,以最大限度地發(fā)揮8051單片機的性能,同時可減少應(yīng)用程序的代碼長度。
單片機c語言編程是基于C語言的單片機編程。單片機的C語言采用C51編譯器(簡稱C51)。由C51產(chǎn)生的目標代碼短,運行速度高,存儲空間小,符合C語言的ANSI標準,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言PL/M51語言目標代碼混合使用。51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設(shè)計語言,其代碼率高,數(shù)據(jù)類型及運算符豐富,并具有良好的程序結(jié)構(gòu),適用于各種應(yīng)用的程序設(shè)計,是使用較廣的單片機編程語言。
這程序是不對的,num這個參數(shù)會出現(xiàn)問題,不可能兼顧兩個數(shù)碼管的數(shù)據(jù)。
#includecnm.h
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0};
sbit key1=P3^2;
sbit key2=P3^3;
sbit a=P1^7;
sbit b=P1^6;
sbit c=P1^5;
sbit d=P1^4;
uint num1,num2;
void delay(){
uint z;
z=5000;
while (z--);
}
uint key_scan(key)
{
uint num;
num=0;
if(key==0){
delay();
if (key==0){
num=1;
}
}
return(num);
}
void main()
{
num1=0;
num2=0;
while(1)
{
while(key_scan(key1)) //這里不懂?。?!
{a=0 ;
num1++;
num1%=10;
P2=table[num1];
delay();
}
while(key_scan(key2)) //這里不懂?。?!
{ b=0;
num2++;
num2%=10;
P2=table[num];
delay();
}
}
a.c //源文件
int max(int x,int y)
{
int temp;
if(xy)
{
temp=x;
}
else
{
temp=y;
}
}
a.h
#ifndef A_H
#define A_H
int max(int x,int y);
#endif
main.c
#include"a.h"
void main()
{
int max(7,8);
}
大概就是這樣
大概就是這樣