C51是基于標(biāo)準(zhǔn)的C語言擴(kuò)展而來的,所以,標(biāo)準(zhǔn)C語言能做的東西,C51也可以。
專注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)達(dá)茂旗免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
平方運(yùn)算,自不必說,就是兩個(gè)數(shù)相乘:
例如:float a,b,c; c = a*b;
開方,則需要用到庫函數(shù):
標(biāo)準(zhǔn)c語言里用的是 sqrt()函數(shù),這個(gè)函數(shù)包含在math.h文件中。
所以:
#include math.h
c = sqrt(a);
就可以了
在你原來的函數(shù)基礎(chǔ)上,加上三個(gè)參數(shù),分別是:
1 要操作的PORT口
2 要進(jìn)行的操作
3 要操作的引腳
當(dāng)然,如果你的目標(biāo)很明確,可以把以上三個(gè)參數(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
)
{
//----如果在單片機(jī)PORT口范圍之內(nèi),剛讀取當(dāng)前PORT口的狀
//----如果不在范圍之內(nèi),死循環(huán)
//----注意,為了效率起見,這個(gè)部分可以根據(jù)實(shí)際應(yīng)用進(jìn)行裁剪
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);
}
//----如果是取反相應(yīng)位,進(jìn)行異或操作
//----如果清零相應(yīng)位,則位與操作
//----如果置位相應(yīng)位,則位或操作
//----如果都不在范圍之內(nèi),則死循環(huán)
//----這段代碼也根據(jù)實(shí)際情況裁剪
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);
}
//----如果在單片機(jī)PORT口范圍之內(nèi),剛讀取當(dāng)前PORT口的狀
//----如果不在范圍之內(nèi),死循環(huán)
//----注意,為了效率起見,這個(gè)部分可以根據(jù)實(shí)際應(yīng)用進(jìn)行裁剪
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ù)實(shí)際情況進(jìn)行裁剪,以實(shí)現(xiàn)程序最優(yōu)化
//----添加你的功能的其他代碼---------------
}
void main(void)
{
//----使用示例:函數(shù)功能的同時(shí),置位P2口的P2.0,P2.5,P2.7
Operate(/*這里寫你原來的參數(shù)*/2,OPT_SET,(Pin0|Pin5|Pin7));
//----使用示例:函數(shù)功能的同時(shí),清零P1口的P1.2,P1.5,P2.6
Operate(/*這里寫你原來的參數(shù)*/1,OPT_CLR,(Pin2|Pin5|Pin6));
}
extern void _nop_ (void); //空操作,相當(dāng)于8051的NOP指令
extern bit _testbit_ (bit); //測試并清零位,相當(dāng)于8051的JBC指令
extern unsigned char _cror_ (unsigned char, unsigned char); //字符循環(huán)右移
extern unsigned int _iror_ (unsigned int, unsigned char); //整數(shù)循環(huán)右移
extern unsigned long _lror_ (unsigned long, unsigned char); //長整數(shù)循環(huán)右移
extern unsigned char _crol_ (unsigned char, unsigned char); //字符循環(huán)左移
extern unsigned int _irol_ (unsigned int, unsigned char); //整數(shù)循環(huán)左移
extern unsigned long _lrol_ (unsigned long, unsigned char); //長整數(shù)循環(huán)左移
extern unsigned char _chkfloat_(float); //測試并返回源點(diǎn)數(shù)狀態(tài)
看你的要求~~