51单片机-数码管小数点

发布者:AngelicJourney最新更新时间:2021-08-18 来源: eefocus关键字:51单片机  数码管  小数点 手机看文章 扫描二维码
随时随地手机看文章

1.显示小数点

我们可能忽略了数码管上还有一段发光二极管,这个在它的右下角,平时我们点亮这个小点是用来表示数字的小数点。要想让这个小数点即使显示的数字一直变但它还是保持常亮状态有什么办法吗。


我们不可能为每一个数字再弄一个带小数点的真值表数组,这样太麻烦了,熟悉C语言知识的话,我们用另一种方法。


大家要明白这个知识点:(0x7F)&(0xC0)=0x40

用二进制表示

        0111 1111

&  

        1100 0000

=

        0100 0000

01000000(0x40)就是使数码管显示0的同时还显示小数点了

4.png

所以不管是0xC0还是要显示其他数字,我们只要“0x7F & LedBuff[x]”就能保持住小数点常亮了。


2.代码


#include  

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

 

unsigned char code LedChar[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管状态值初始化

unsigned char LedBuff[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//数码管显示缓存区

 

void delay_ms(unsigned int x)

{

    unsigned int i,j;

    if(x==1000)

    {

        for(i=0;i<19601;i++)//延时1s

        {

            for(j=5;j>0;j--);

        }

    }

    else while(x--)for(j=115;j>0;j--);

}

 

void main()

{  

    unsigned char Second=0;

    ADDR3 = 1;//使能三八译码器

    ENLED = 0;// 

     

    ADDR2 = 0;//*************************

    ADDR1 = 0;//三八译码器的IO0输出低电平

    ADDR0 = 0;//*************************

     

    while(1)

    { 

        LedBuff[0]=LedChar[Second];

        P0=0x7F & LedBuff[0];

        Second++;

        if(Second>=10)Second=0;

        delay_ms(1000);

    } 

}


因为代码功能只是显示一个数码管,所以不需要快速切换三八译码器的其他IOx输出低电平,也就可以用“delay_ms(1000);”。

关键字:51单片机  数码管  小数点 引用地址:51单片机-数码管小数点

上一篇:51单片机-高位不显示0
下一篇:51单片机-分钟秒表

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多开源项目推荐
换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved