0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数码管神奇的小数点显示程序详解

2oON_changxuemc 2017-12-12 09:46 次阅读

数码管的小数点单独有一位来控制,这就是物理世界和数字世界的神奇之处,数码管用来显示数字和字母的led段有7个,再加上小数点共8个,正好对应一个字节的位数,这样使用单片机的一个口正好可以全部操作,比如显示2.,只需将数字2对应的二进制数第1位改为1即可,在实际中,我们将要带点显示的数字和0x80相或就可以,其原理如下:

共阴极(1亮0灭): DP G F E D C B A

0 1 0 1 1 0 1 1 = 0x5B

1 0 0 0 0 0 0 0 = 0x80

两组二进制数进行或运算后结果为:

1 1 0 1 1 0 1 1 = 0xDB

可以发现,进行或运算后,原来显示数字2的部分(绿色码)不变,但原来控制点显示的部分(红色)为1,正好达到了不影响数字又能点亮点的效果。下面的代码,实现了显示0-999缩小10倍的显示效果。

#include

sbit LATCH1=P2^2;//段锁存

sbit LATCH2=P2^3;//位锁存

unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

unsigned char TempData[8]; //存储显示值的全局变量

void Delay(unsigned int t); //函数声明

void Display(unsigned char FirstBit,unsigned char Num);

main()

{

unsigned int num;

unsigned int j;

while(1)

{

j++;

if(j==200) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化

{

j=0;

num++;

if(num==1000)//用于显示0~999

num=0;

}

TempData[0]=DuanMa[num/100];//分解显示信息 123/100=1

TempData[1]=DuanMa[(num%100)/10]|0x80; //23/10=2. 倒数第2位加点,实现数字缩小10倍

TempData[2]=DuanMa[(num%100)%10]; //23%10=3

Display(2,3);

}

}

void Delay(unsigned int t)

{

while(--t);

}

/*------------------------------------------------

显示函数,用于动态扫描数码管

输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

如输入0表示从第一个显示。

Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void Display(unsigned char FirstBit,unsigned char Num)

{

unsigned char i;

for(i=0;i{

P1=0; //清空数据,防止有交替重影

LATCH1=1; //段锁存

LATCH1=0;

P1=WeiMa[i+FirstBit]; //取位码

LATCH2=1; //位锁存

LATCH2=0;

P1=TempData[i]; //取显示数据,段码

LATCH1=1; //段锁存

LATCH1=0;

Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数码管
    +关注

    关注

    31

    文章

    1826

    浏览量

    89938

原文标题:单片机怎么显示小数点?数码管小数点显示程序

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    小数点位数

    `图中滑动杆右边的显示框里显示的数的小数点位数怎么改啊?,比如我想把它设成只有一位小数的。`
    发表于 03-25 16:18

    如何给秒表第二位加上小数点

    怎么给秒表第二位加上小数点?我只会数码管一加就全都有小数点
    发表于 08-18 21:21

    单色数码管的驱动方式是什么?

    数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极单元,也就是多一
    发表于 09-17 09:01

    51单片机之数码管静态显示 精选资料下载

    在对单片机编程以实现数码管静态显示数字之前,我们先来了解一下数码管的结构以及一些常识,对于数码管,有称八段数码管的,也有称七段
    发表于 07-13 09:31

    基于stm32f1xx的四位数码管小数显示实验

    主体2.1实现单个任意数字的显示2.1.1定义数字表以及数码管段选表2.1.2 消影2.1.3 主体代码如下2.2 数据处理2.2.1 记录小数点位置2.2.2浮点数变为整数,并限制为四位2.2.3 整数变为整数型数组2.2.4
    发表于 07-21 08:13

    数码管显示原理是什么

    原理都是一样的,都是靠点亮内部的发光二极来发光,下面就来我们讲解一个数码管是如何亮起来的。数码管内部电路如下图所示,从图(a)可看出,一位数码管的引脚是10个,
    发表于 12-08 07:47

    共阴数码管与共阳数码管小数点段码是怎样的

    数码管主要分为哪几种呢?有何区别?共阴数码管与共阳数码管小数点段码是怎样的?
    发表于 01-21 07:43

    如何实现带小数点数码管显示

    如何实现带小数点数码管显示
    发表于 02-15 06:01

    数码管显示原理是什么呢

    3.1 数码管显示原理这便是数码管的图片,叫做四位数码管,当然也有双位,单位数码管,也还有不带小数点
    发表于 02-22 06:45

    【每周一练】盘古1K开发板+动态数码管+小数点显示

    7段数码管显示小数点没有用上。我简单地修改了一下程序,可以让其中一个数码管显示
    发表于 12-09 20:30

    34-显示小数点

    34-显示小数点----------51单片机源程序 用keil直接打开
    发表于 06-16 15:38 11次下载

    如何利用单片机数码管程序模拟是时钟显示时间?

    数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段
    发表于 11-17 11:18 1.5w次阅读

    常用共阴极数码管型号

    数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点
    发表于 01-28 10:25 3.4w次阅读
    常用共阴极<b class='flag-5'>数码管</b>型号

    微雪电子8段数码管简介

    8段数码管模块 4位8段数码管模块 带小数点 用于数值显示 时间显示等等 提供测试程序(A
    的头像 发表于 12-30 09:03 1598次阅读
    微雪电子8段<b class='flag-5'>数码管</b>简介

    小数点数码管显示

    小数点数码管显示数码管的示意图如上,通过点亮a-g七个led来拼成对应的数字或字符,数码管有共阳极(底电平亮)和共阴极(高电平亮),以上图的数字2为例:共阳极(0亮1灭): D
    发表于 12-16 16:59 10次下载
    带<b class='flag-5'>小数点数码管</b>的<b class='flag-5'>显示</b>