历史上的今天
今天是:2025年08月21日(星期四)
2021年08月21日 | 51单片机-数码管显示函数
2021-08-21 来源:eefocus
1.代码选择
有时我们需要6个数码管显示我们想要看到的数字,比如计算结果呈现在数码管上,然而当要显示的数为“520”时又不想前面的3个数码管亮(也就是高位为0不显示),我们把这部分功能代码封装为带参数的函数,传入的参数就是要显示的数值。参数定义的是unsigned long类型,也就是支持0~4294967296的数值(2的32次方等于4294967296)。
示例1:
void ShowNumber(u32 num)
{
LedBuff[0]=LedChar[num%10];
LedBuff[1]=LedChar[(num/10)%10];
LedBuff[2]=LedChar[(num/100)%10];
LedBuff[3]=LedChar[(num/1000)%10];
LedBuff[4]=LedChar[(num/10000)%10];
LedBuff[5]=LedChar[(num/100000)%10];
if(num<100000)LedBuff[5] = 0xFF;
if(num<10000) LedBuff[4] = 0xFF;
if(num<1000) LedBuff[3] = 0xFF;
if(num<100) LedBuff[2] = 0xFF;
if(num<10) LedBuff[1] = 0xFF;
}
示例2:
void ShowNumber(u32 num)
{
u32 i;
u8 x=5;//每次被调用都会从5开始
for(i=100000;i>0;i/=10)
{
if(num else LedBuff[x]=LedChar[(num/i)%10];
x--;
}
}
这两段代码都能实现我们想要的功能,示例1可读性强,让人一看就明白了代码的作用。而示例2书写量少,比较简洁,但在阅读理解上需要我们转一下弯,笔者测试了这两段代码的执行时间,发现示例1比示例2快5ms左右,这种情况下毫无疑问我们肯定是选择示例1暂时作为实用代码。
可是在后期的教程中用到定时器中断来扫描数码管显示时,示例1的代码效果不尽人意,关于漏洞在哪大家后面可以尝试自己寻找。
在使用示例2时虽然显示效果比示例1的好,但是费时长,所以这两段代码都不是实用型代码。
2.代码参考
参考了宋老师的这部分代码以及测试结果都非常高效,所以我们选择这部分代码作为实用型代码。
void ShowNumber(u32 num)
{
char i;//取值范围-128~127
u8 buf[6];
for (i=0; i<6; i++) //把长整型数转换为6位十进制的数组
{
buf[i] = num % 10;
num = num / 10; //舍掉个位数,重新装载
}
for (i=5; i>=1; i--) //从最高位起,遇到0填充不显示的代码,遇到非0则退出循环
{
if (buf[i] == 0)
LedBuff[i] = 0xFF;
else
break;
}
for ( ; i>=0; i--) //剩余低位都如实转换为数码管显示字符
{
LedBuff[i] = LedChar[buf[i]];
}
}
这部分代码我们来举个例子理解,假如传入的参数为125,第一个for循环就是实现以下功能
buf[5]=0; buf[4]=0; buf[3]=0; buf[2]=1; buf[1]=2; buf[0]=5;
第二个for循环i等于2之后就退出了循环,第三个for循环i是等于2,然后填充好要显示的1,2,5给数码管缓存区。
上一篇:51单片机-模块初始化
下一篇:51单片机-多文件编程首次测试
史海拾趣
|
作者:河北通信职业技术学院 李学海 孙群中华北电力大学 李聪聪 来自:单片机与嵌入式系统 本文以经典的80C51单片机为例,利用工作状态及其状态迁移的新概念、新观点和新方法,揭示一些单片机运作的内在规律,对于单片机学习者和应用开发者具有 ...… 查看全部问答> |
|
无沦是用离散逻辑、可编程逻辑,还是用全定制硅器件实现的任何数字设计,为了成功地操作,可靠的时钟是非常关键的。设计不良的时钟在极限的温度、电压或制造工艺的偏差情况下将导致错误的行为,并且调试困难、花销很大。 在设计PLD/FPGA时通常采用 ...… 查看全部问答> |
|
在国外,NAS设备已成为网络数据存储的首选设备,并且以年66.5%的速度递增。NAS产品已经广泛应用到教育科研、ISP/ASP、IDC、Web/E-mail服务器集群、金融/保险、电信、CAD、医药系统、印刷、网络音视频VOD点播等诸多领域。在国内,也有越来越多的企业 ...… 查看全部问答> |
|
各位大侠求教求教 我大四了,菜鸟一只在做综合课程设计。快要验收了。杯具。 负责的是接口,做了个鼠标和屏,想连起来的但是发现屏刷起来有问题。 那屏是640×480的,如果把像素值都存在RAM里就太大了,想单独给鼠标像素弄个模块,然后刷屏的时 ...… 查看全部问答> |
|
求wince6.0下TCPMP播放视频的crash问题解决方法!!! wince6.0下TCPMP播放视频的crash问题,播放音频无问题,播放视频就一定会出现。谁知道解决办法?给点提示也好,谢谢 如果有条件,一切都可以商量,QQ:597326493… 查看全部问答> |
|
拖拖拉拉了那么久春节之后就开始设计到现在两个月多了,前前后后,查了不少资料,做了方案然后又修改了好几次,找元件等等。 甚至到了入封装的时候又修改了线路,增加删减等。因为10X10的爽面板 100元嘛,所以布板后又不断的大力挤压电路,为求功 ...… 查看全部问答> |
|
由于接口卡座的设计有些隐蔽,连接USB端口是一件相对麻烦的事情,特别对USB接口位于主机箱后方的用户来说更是如此。既然这样,我们何不重新设计USB的接口,使其变得更直观呢? 来自韩国的设计者Lim Jae Min在遇到这样的问题后,设计出 ...… 查看全部问答> |
|
TI Serial MCU全国研讨会 参会iPod Touch d Touch 4代抽奖 由德州仪器和新晔电子举办的MCU技术研讨会将于2012年5月-6月在全国12个城市举办,具体安排如下,诚邀您的光临。华南区:珠海5月11日、东莞5月16日、广州5月18日、福州5月22日华东区:上海6月4日、杭州6月5日、南京6月6日、武汉6月8日、华北区:北京 ...… 查看全部问答> |
|
注意事项:目标板上面的复位电容不能接,只能用二线仿真,TEST RST。 [ 本帖最后由 眼大5子 于 2012-6-11 17:28 编辑 ]… 查看全部问答> |




