历史上的今天
返回首页

历史上的今天

今天是: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给数码管缓存区。


推荐阅读

史海拾趣

DeLorme公司的发展小趣事

随着公司业务的不断发展,DeLorme公司开始积极寻求市场扩张的机会。他们通过与国外知名品牌的合作,将自己的产品推向了国际市场。同时,他们还积极参与国际性的户外活动和赛事,通过这些活动提高品牌知名度和影响力。在国际市场的竞争中,DeLorme公司凭借其独特的技术优势和优质的产品质量逐渐获得了认可。

Anderson Power Products公司的发展小趣事

近年来,随着智能手机和移动互联网技术的快速发展,传统的GPS导航设备市场受到了巨大冲击。面对这一行业变革,DeLorme公司及时调整战略方向,将重心转向智能导航应用软件的开发和推广。他们通过与智能手机厂商的合作,将自己的导航软件集成到手机系统中,为用户提供更加便捷、高效的导航服务。同时,他们还积极探索新的商业模式和市场机会,为公司的未来发展奠定了坚实基础。

BALLUFF公司的发展小趣事

20世纪50年代初,BALLUFF公司与德国Heller机床制造公司建立了合作关系。根据Heller公司的要求,BALLUFF制造了新型机床电控装置所需的凸轮开关。这一合作的成功不仅让BALLUFF获得了Heller公司的信任,更让其在机床制造领域获得了重要突破。随后,Heller公司进一步委托BALLUFF开发相关产品,这使得BALLUFF在电子机械式极限开关领域取得了重要进展,为其日后的传感器业务发展开辟了新道路。

Axiohm公司的发展小趣事

Axiohm公司最初是一家小型电子元件制造商,面对激烈的市场竞争,公司创始人李先生意识到唯有技术创新才能脱颖而出。他带领团队投入大量研发资源,成功开发出一种具有高性价比的新型半导体材料。这一创新不仅降低了生产成本,还提高了产品的性能稳定性,迅速赢得了市场的青睐。随着销量的不断增长,Axiohm逐渐在电子行业中崭露头角。

Ferraz Shawmut(Mersen)公司的发展小趣事

2010年,Ferraz Shawmut正式更名为Mersen。这一更名标志着公司进入了一个新的发展阶段。Mersen继续秉承Ferraz Shawmut的技术创新和市场拓展精神,不断推出符合市场需求的新产品和技术解决方案。同时,公司也加大了对研发和创新的投入力度,以保持其在电气保护领域的领先地位。

Advanced Energy公司的发展小趣事

在电子行业快速发展的同时,AE公司也面临着来自市场竞争、技术更新等多方面的挑战。然而,AE公司凭借其敏锐的市场洞察力和强大的研发实力,成功应对了这些挑战。公司不断调整战略方向,优化产品结构,提升服务质量,以适应市场的变化。同时,AE公司也积极关注未来技术的发展趋势,加大在新兴领域的投入,为公司的未来发展奠定了坚实的基础。

以上只是AE公司在电子行业中的部分发展故事概述,每个故事都体现了AE公司在技术创新、市场拓展、合作伙伴关系等方面的努力和成就。这些故事不仅展示了AE公司的成长历程,也反映了整个电子行业的发展变迁。

问答坊 | AI 解惑

单片机的状态迁移与复位操作

作者:河北通信职业技术学院 李学海 孙群中华北电力大学 李聪聪 来自:单片机与嵌入式系统 本文以经典的80C51单片机为例,利用工作状态及其状态迁移的新概念、新观点和新方法,揭示一些单片机运作的内在规律,对于单片机学习者和应用开发者具有 ...…

查看全部问答>

关于时钟的讨论(1)

无沦是用离散逻辑、可编程逻辑,还是用全定制硅器件实现的任何数字设计,为了成功地操作,可靠的时钟是非常关键的。设计不良的时钟在极限的温度、电压或制造工艺的偏差情况下将导致错误的行为,并且调试困难、花销很大。 在设计PLD/FPGA时通常采用 ...…

查看全部问答>

高性价比NAS在智能网络视频监控中的优势

在国外,NAS设备已成为网络数据存储的首选设备,并且以年66.5%的速度递增。NAS产品已经广泛应用到教育科研、ISP/ASP、IDC、Web/E-mail服务器集群、金融/保险、电信、CAD、医药系统、印刷、网络音视频VOD点播等诸多领域。在国内,也有越来越多的企业 ...…

查看全部问答>

菜鸟求教LCD刷屏问题

各位大侠求教求教 我大四了,菜鸟一只在做综合课程设计。快要验收了。杯具。 负责的是接口,做了个鼠标和屏,想连起来的但是发现屏刷起来有问题。 那屏是640×480的,如果把像素值都存在RAM里就太大了,想单独给鼠标像素弄个模块,然后刷屏的时 ...…

查看全部问答>

求wince6.0下TCPMP播放视频的crash问题解决方法!!!

wince6.0下TCPMP播放视频的crash问题,播放音频无问题,播放视频就一定会出现。谁知道解决办法?给点提示也好,谢谢 如果有条件,一切都可以商量,QQ:597326493…

查看全部问答>

请问针对特定嵌入式处理器的linux内核及优化的内核补丁去哪里找

请问针对特定嵌入式处理器的linux内核及优化的内核补丁去哪里找…

查看全部问答>

自己做的STM32 板终于接近尾声了

拖拖拉拉了那么久春节之后就开始设计到现在两个月多了,前前后后,查了不少资料,做了方案然后又修改了好几次,找元件等等。 甚至到了入封装的时候又修改了线路,增加删减等。因为10X10的爽面板 100元嘛,所以布板后又不断的大力挤压电路,为求功 ...…

查看全部问答>

看看出色的USB接口设计 防止误操作

  由于接口卡座的设计有些隐蔽,连接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日、华北区:北京 ...…

查看全部问答>

用launchpad给外接目标板仿真

  注意事项:目标板上面的复位电容不能接,只能用二线仿真,TEST RST。 [ 本帖最后由 眼大5子 于 2012-6-11 17:28 编辑 ]…

查看全部问答>