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); // 扫描间隙延时,时间太长会闪烁,太短会造成重影

}

}

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

    关注

    32

    文章

    1882

    浏览量

    91064

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    基于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

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

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

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

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

    数码管显示原理是什么呢

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

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

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

    数码管的分类

    数码管的分类     数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管
    发表于 11-06 11:41 7465次阅读

    34-显示小数点

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

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

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

    常用共阴极数码管型号

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

    关于看门狗定时器动态数码管显示问题

    程序把看门狗当做普通定时器使用,在看门狗中断中进行数码管扫描,另外我加入了显示的缓冲区,想在数码管显示什么数字只需要对缓冲数组中的值进行操
    发表于 04-23 11:10 1425次阅读
    关于看门狗定时器动态<b class='flag-5'>数码管</b>的<b class='flag-5'>显示</b>问题

    微雪电子8段数码管简介

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

    基于51单片机数码管显示

    它们的各个笔划,公共电极。数码管实际上是由七个发光组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示,如图所示。数码管按段数可分为七段
    发表于 11-11 19:21 18次下载
    基于51单片机<b class='flag-5'>数码管</b><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>

    数码管的工作原理、静态显示及动态显示

          数码管是一种利用LED的显示器件,普通的数码管在内部集成了八个数码管,分别组成了对应的段,由于数字只需要七个段就可以,所以有的数码管
    的头像 发表于 01-16 15:48 4.3w次阅读
    <b class='flag-5'>数码管</b>的工作原理、静态<b class='flag-5'>显示</b>及动态<b class='flag-5'>显示</b>