#include stdlib.h
成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站建設、成都網(wǎng)站設計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元龍湖做網(wǎng)站,已為上家服務,為龍湖各地企業(yè)和個人服務,聯(lián)系電話:028-86922220
srand(dat); //初始化隨機種子,使用該函數(shù)需要上面的頭文件。如果不要這個,每次開機,對應的隨機數(shù)都是相同的. dat 也是需要是個隨機數(shù),一般可以用掉電存儲的方式來讀取。
dat = rand() ;
怎么用?
直接調(diào)用就行了啊
這幾個內(nèi)部函數(shù)實際上就是匯編指令,為了能在C中方便調(diào)用才做個函數(shù)
比如
_nop_();
NOP
bit _testbit_(bit);
i=_testbit_(j);
SETB C
JBC 0x20.1,L
CLR C
L:
MOV 0x20.0,C
使用#include調(diào)用庫函數(shù)。
C51語言的編譯器中包含有豐富的庫函數(shù),使用庫函數(shù)可以大大簡化用戶程序設計的工作量,提高編程效率。每個庫函數(shù)都在相應的頭文件中給出了函數(shù)原型聲明,在使用時,必須在源程序的開始處使用預處理命令#include將有關的頭文件包含進來。
C51庫函數(shù)中類型的選擇考慮到了8051單片機的結(jié)構(gòu)特性,用戶在自己的應用程序中應盡可能地使用最小的數(shù)據(jù)類型,以最大限度地發(fā)揮8051單片機的性能,同時可減少應用程序的代碼長度。
單片機c語言編程是基于C語言的單片機編程。單片機的C語言采用C51編譯器(簡稱C51)。由C51產(chǎn)生的目標代碼短,運行速度高,存儲空間小,符合C語言的ANSI標準,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言PL/M51語言目標代碼混合使用。51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設計語言,其代碼率高,數(shù)據(jù)類型及運算符豐富,并具有良好的程序結(jié)構(gòu),適用于各種應用的程序設計,是使用較廣的單片機編程語言。
在你原來的函數(shù)基礎上,加上三個參數(shù),分別是:
1 要操作的PORT口
2 要進行的操作
3 要操作的引腳
當然,如果你的目標很明確,可以把以上三個參數(shù)裁剪掉一些,利于系統(tǒng)的效率提高.
下面是我寫的示例程序,你可能參考一下:
#includereg52.h
#define Pin0 0x01
#define Pin1 0x02
#define Pin2 0x04
#define Pin3 0x08
#define Pin4 0x10
#define Pin5 0x20
#define Pin6 0x40
#define Pin7 0x80
#define OPT_CPL 0x00 //----取反某位操作
#define OPT_CLR 0x01 //----清零某位操作
#define OPT_SET 0x02 //----置一某位操作
void Operate(
/*這里寫你原來的參數(shù),*/
unsigned char Port_Num,
unsigned char Opr_Style,
unsigned char Pins
)
{
//----如果在單片機PORT口范圍之內(nèi),剛讀取當前PORT口的狀
//----如果不在范圍之內(nèi),死循環(huán)
//----注意,為了效率起見,這個部分可以根據(jù)實際應用進行裁剪
if(Port_Num == 0)
{
Port_Num = P0;
}
else if(Port_Num == 1)
{
Port_Num = P1;
}
else if(Port_Num == 2)
{
Port_Num = P2;
}
else if(Port_Num == 3)
{
Port_Num = P3;
}
else
{
while(1);
}
//----如果是取反相應位,進行異或操作
//----如果清零相應位,則位與操作
//----如果置位相應位,則位或操作
//----如果都不在范圍之內(nèi),則死循環(huán)
//----這段代碼也根據(jù)實際情況裁剪
if(Opr_Style == OPT_CPL)
{
Port_Num ^= Pins;
}
else if(Opr_Style == OPT_CLR)
{
Port_Num = ~Pins;
}
else if(Opr_Style == OPT_SET)
{
Port_Num |= Pins;
}
else
{
while(1);
}
//----如果在單片機PORT口范圍之內(nèi),剛讀取當前PORT口的狀
//----如果不在范圍之內(nèi),死循環(huán)
//----注意,為了效率起見,這個部分可以根據(jù)實際應用進行裁剪
if(Port_Num == 0)
{
P0 = Port_Num;
}
else if(Port_Num == 1)
{
P1 = Port_Num;
}
else if(Port_Num == 2)
{
P2 = Port_Num;
}
else if(Port_Num == 3)
{
P3 = Port_Num;
}
else
{
while(1);
}
//----以上的內(nèi)容,可根據(jù)實際情況進行裁剪,以實現(xiàn)程序最優(yōu)化
//----添加你的功能的其他代碼---------------
}
void main(void)
{
//----使用示例:函數(shù)功能的同時,置位P2口的P2.0,P2.5,P2.7
Operate(/*這里寫你原來的參數(shù)*/2,OPT_SET,(Pin0|Pin5|Pin7));
//----使用示例:函數(shù)功能的同時,清零P1口的P1.2,P1.5,P2.6
Operate(/*這里寫你原來的參數(shù)*/1,OPT_CLR,(Pin2|Pin5|Pin6));
}
定義一個延時xms毫秒的延時函數(shù)
void delay(unsigned int xms) // xms代表需要延時的毫秒數(shù)
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延時值-1.75)*12/Ms-15]/4
擴展資料
1、在C51中進行精確的延時子程序設計時,盡量不要或少在延時子程序中定義局部變量,所有的延時子程序中變量通過有參函數(shù)傳遞。
2、在延時子程序設計時,采用do…while,結(jié)構(gòu)做循環(huán)體要比for結(jié)構(gòu)做循環(huán)體好。
3、在延時子程序設計時,要進行循環(huán)體嵌套時,采用先內(nèi)循環(huán),再減減比先減減,再內(nèi)循環(huán)要好。
你好,比較方便的實現(xiàn)方式是在函數(shù)的外部申請數(shù)組;在調(diào)用函數(shù)的時候傳入數(shù)組的地址進行操作。如果一定要在子函數(shù)內(nèi)部申請空間并返回地址,那么需要在子函數(shù)內(nèi)部動態(tài)申請內(nèi)存空間。具體的方法一般是使用標準庫中的malloc函數(shù)。對于c51函數(shù)庫,參考這個鏈接: