Ⅰ 单片机数码管小数点闪烁
假设4个数码管,每个亮2ms,一轮扫描共亮8ms,我们可以让其以120次为周期(0.96s),扫描前60次小数点亮,后60次小数点不亮,这样小数点就 以大约1HZ的速度闪烁。
例如,小数点在第二位,数码管七段码table[]中不含小数点
显示部分如下
if(a<60)
{dataport=(table[a1]);
sm1=0; Delay1ms(2);sm1=1;
dataport=(table[a2])|0x80;//第二位多个小数点
sm2=0; Delay1ms(2);sm2=1;
dataport=(table[a3]);
sm3=0; Delay1ms(2);sm3=1;
dataport=(table[a4]);
sm4=0; Delay1ms(2);sm4=1;
ia++;
}
else {dataport=(table[a1]);
sm1=0; Delay1ms(2);sm1=1;
dataport=(table[a2]); //第二位无小数点
sm2=0; Delay1ms(2);sm2=1;
dataport=(table[a3]);
sm3=0; Delay1ms(2);sm3=1;
dataport=(table[a4]);
sm4=0; Delay1ms(2);sm4=1;
ia++;
}
if(a==120) a=0;//120次后重新归零
Ⅱ 单片机进栈为什么是小数
常用的波特率有误差的,用小数表示更准确减少误差。
单机片进栈显示小数后期可四舍五入转换成整数,浮点运算有精度问题。小数在单片机中有一个单独的分类,我们称之为浮点型数据。之所以说是浮点型,是因为在小数的显示过程中,小数点会出现在不同的位置,小数表示用起来也很方便。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
Ⅲ 关于C51单片机的小数点四舍五入处理
将你需保留的那一位的低一位加5之后舍掉即可
单片机内一般采用整数计算,如果要保留两位小数,需将原数据扩大100倍,小数点该向左移2位
18754/100=187·54 但单片机只能算整数,因此结果只能是187
因此计算时我们我们将被除数扩大100倍 相当于小数点向右移2位,1875400/ 100=18754
然后我们将计算结果的小数点再向左移回来2 位,即变成了 187.54 这就是定点小数的算法
如果18754/100我们只保留一位小数
我们可以这样处理 (18754*100+500)=1875900
1875900/100=18759
小数点左移2位,结果187.59 最后一位不考虑取187.5
但如果18755/100我们只保留一位小数
(18755*100+500)=1876000
1876000/100=18760
小数点左移2位,结果187.60 最后一位不考虑取187.6
看到了吧,4舍去了 5就入上去了
所以要保留三位小数,需将原来数据扩大1000倍,再除1000
所以要保留4位小数,需将原来数据扩大10000倍,再除10000
.......
扩大100倍或1000倍操作要放在除法之前,因除法才会导致小数丢失
需4舍5 入,将要保留的那一位数的低一位加5即可
当然这是低级算法,用C语言编程直接可以用浮点数,结果输出 时会自动四舍5 入
你所要做的是将浮点数转换为字符(用sprint函数)并控制输出数据的位数,格式控制类似于printf函数
Ⅳ 关于单片机程序中小数点的的问题
这个要看单片机的平台以及关于舍入/进位的相关定义。
一般来说都是舍入为6。
Ⅳ 单片机C语言显示小数
给你个流程思路吧。ad采集电压信号,转换的数据是根据参考电压比较得到的。如果你的参考电压是5V,用的是12位AD,现在转换的结果为0x00ff,那么当前的电压就是0xo0ff*5000/4096
(mv)=311mv=0.311V,
至于怎么显示,那要看你的数码管位数以及要显示的数据范围。
可以用定小数点显示,也可以用动态小数点显示。思路都是把当前小数换成需要的整数,保留固定的有效数字。然后去显示小数点。思路就是这样。希望能帮到你。
Ⅵ 单片机AD数据处理怎么精确到小数点后几位
不要用浮点运算,计算出一个系数后直接用整型运算,这样比较省时间。在计算时先乘后除,精度不够最好乘一个系数再除。比如把1V乘以1000变成1000mV,但是注意不要溢出,也就是运算过程中数据长度和精度权衡一下。最后只需在显示时做一些处理就行了
比如说5V参考电压,10位AD,读AD转换值为m,则所测电压为X=5m/1024V,处理时可以这样:X=m*(5000/1024)=m*(625/128)(mV),如果以V为单位显示,那显示的时候再加一个小数点就行了。如果不需要显示,在以后的运算中根据精度需要做适当的变换就可以了
Ⅶ 51单片机怎么从键盘输入小数点啊
你的问题实质上是如何输入小数。将键盘上某个键定义为小数点,如果检测到这个键被按下,那么后面按的数字键都看成小数就可以了。如,定义星号是小数点,那么按下星号后,再按下2时,就乘以0.1,再按下4时,就乘以0.01,两个数加起来就是0.24了
Ⅷ 单片机8位数码管怎么让其中一个带小数点12.345678
你这应该是一个循环程序,循环变量是 i ,来完成8位数码管显示的吧?Display_data[i+1] ,这应该是段码表数组吧?
数码管是共阳还是共阴的,加小数点的方法是不同的。
如下图是共阳的
程序
m=_crol_(m,1);
P2=m;
if(i==1)
P0=Display_data[i+1]+0x80;//加小数点
else
P0=Display_data[i+1];
delayms(2);
Ⅸ 单片机数码管小数点闪烁
可以用定时器或者延时程序来设置。
其实数码管的小数点就是一个LED灯。
因为数码管是共阳极的,所以只要在数码管H引脚(即对应小数点的那个引脚)用单片机给它一个低电平,就能让小数点亮了。
首先让小数点亮起来,然后可以用延时1秒的程序或者定时器定时1秒后,让小数点灭,之后再延时1秒,或者定时1秒,让小数点亮,这样循环起来,就OK了