Dotcpp  >  编程教程  >  数码管  >  数码管小数点

数码管小数点

点击打开在线编译器,边学边练

1.显示小数点

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

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

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

用二进制表示

        0111 1111

&  

        1100 0000

=

        0100 0000

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

数码管4

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

 

2.代码

#include <reg52.h> 
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);”。


本文固定URL:https://www.dotcpp.com/course/197

上一课:

高位不显示0

下一课:

分钟秒表

单片机教程
第一章 单片机入门
第二章 LED及入门
第三章 蜂鸣器
第四章 数码管
第五章 独立按键
第六章 多文件编程
第七章 外部中断
第八章 定时器
第九章 舵机与超声波模块
第十章 串口通信
第十一章 1602液晶屏
第十二章 IIC通信
第十三章 红外遥控与温度传感器
第十四章 AD与DA
第十五章 混合例程
第十六章 完结
Dotcpp在线编译      (登录可减少运行等待时间)