微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机数码管显示(数字分离)

51单片机数码管显示(数字分离)

时间:10-02 整理:3721RD 点击:
数字分离 比如把123456这个整数进行分离,方便按位显示在数码管上
思路:1、把这个数对10取模   123456%10  结果是 6    就把第一位分离出来了
      2、把这个数除10后再进行对10取模  123456/10 结果12345 再12345%10 结果是5  就把第二位分离出来了
      3、进行这样的循环 这个数是6位就循环6次,把结果存放在一组变量中,这样就把这个数的各位都进行分离出来了
      4、数字首位为0,数码管不显示0,数字当中或末尾是0则显示0
程序
      5、经过循环语句后,就把数字每位的数据储存在了数字显示缓存数字Ledbuff[]中了
void ShowNumber(unsigned long num)  //显示数字函数,参数是1个长整形的数字num
{
        signed char i;              //定义变量i用于循环数的位数
        unsigned char buf[6];       //定义一个数组用于保存分离出来各位的数据
        for(i=0; i<6; i++)
        {
                buf[i] = num % 10;   
                num = num / 10;
        }                            //上面2个语句就是循环6次,把1个6位数进行按位分离后存放在数组buf中
        for(i=5; i>=1; i--)         //进行首位是零,不显示
        {
                if(buf[i] == 0)     //如果首位是零,则把数码管显示缓存数据为0XFF,由于是共阳极数码管,如果数据是0xff 则数码管不显示
                {
                        LedBuff[i] = 0xFF;
                }
                else               //如果首位不是零,则跳出循环
                        break;
        }
       
        for(; i>=0; i--)           //i继承了上面语句的数值,把该位的数字通过Ledchar[buf[i]]数组,进行转换为该数字的显示数据并赋值给数码管显示缓存
        {
                LedBuff[i] = LedChar[buf[i]];       
        }
}
unsigned char code LedChar[]={          //0-F在数码管上显示的数据表用数组存放
        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, 0xFF
        };

num1=123456/100000;
num2=123456%100000/10000;
num3=123456%100000%10000/1000;
num4=123456%100000%10000%1000/100;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top