找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2965|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机学习笔记(1)-数字分离

[复制链接]
跳转到指定楼层
楼主
ID:80436 发表于 2015-5-20 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数字分离 比如把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
        };


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表