在keil软件里边怎么编写对数函数

在keil软件里边怎么编写对数函数,第1张

1建议建立数据表,查表方式。
2C语言编程博大精深,初学者直接用库函数即可,但占用ROM资源大,运行速度慢;
3对于高手或者要求高的应用,需要结合数值计算方法以及单片机的硬件指令编程,提高运行效率。比如简单的正弦波发生器查表显然是最快的方法,执行速度高于math函数100~10000倍;
再比如一个整数(XXXXXXXX小数点在中间)的倒数运算,一般采用泰勒展开式运算,速度亦远高于浮点函数运算。
4高速运算用于实时控制、视频音频编解码等,通常有专业人员编程,普通程序员会调用即可。

串口通信,是肯定不能直接用浮点型数据赋值通信的。如果照你要求保留一位有效数字,个人建议用以下方式通信:
1、将待发送数据乘10再强制转换为整数,如53x10=53,然后转换为字符串pSFrame[6]="5" ; pSFrame[7]="3" ; 就可以发送了。当然接收方接收到数据后需要除以10,才能得到正确数据。
2、按以上相同理论,其实只要你与接收方协定好通信协议,有正确而统一的编码、解码方式就可以,你这边不一定需要按具体数值发送。
3、浮点型数据的二进制表示方法:>你的这个工程量比较大,而且要硬件配合,我只能给你一部分代码。下面是延时和数码管显示的部分程序,可供你参考。
void Delay_100us() //100us延时
{
unsigned char i;
for(i=0;i<100;i++)
_nop_();
}
void Delay_10ms() //10ms延时
{
unsigned char i;
for(i=0;i<100;i++)
Delay_100us();
if(endkey==1) //
yanshi=0;
}
void Delay_1s() //1s延时
{
unsigned char i;
for(i=0;i<100;i++)
Delay_10ms();
}
void on_driver()
{
if(yanshi!=0)
cy1=0; //cy1为0时表示继电器加电。
else
cy1=1; //cy1为1时表示继电器不加电。
}
void init_smg2()//初始化子程序,确定数字对应的点阵。
{
unsigned char i;
//以下为共阴极数码管各数字对应的显示值。
//a为最低位,小数点为最高位。
gongyinji[0]=0x3f;
gongyinji[1]=0x06;
gongyinji[2]=0x5b;
gongyinji[3]=0x4f;
gongyinji[4]=0x66;
gongyinji[5]=0x6d;
gongyinji[6]=0x7d;
gongyinji[7]=0x07;
gongyinji[8]=0x7f;
gongyinji[9]=0x6f;
for(i=0;i<10;i++)
gongyangji[i]=0xff-gongyinji[i];
}
void clr_smg()
{
unsigned char i;
for(i=0;i<2;i++)
smgdly[i]=gongyangji[0];
SmgDisplay(); //输出到P1和P2口。
}
void SmgDisplay()
{
//输出到P1和P2口。
P1=smgdly[0];
P2=smgdly[1];
}
void transform_smg()//xssj表示显示的数据;char xssj
//将要显示的数据转化成点阵。
{
unsigned char i;
for(i=0;i<2;i++)
{
smgdly[i]=gongyangji[xssj[i]];
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10538664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存