单片机试验四:认识数码管

2016-09-30来源: eefocus关键字:单片机试验  数码管
玩单片机一定要玩转数码管了;上图是我们单片机试验板的四位数码管的截图照片;这个数码管怎样来显示1,2,3,4呢?别着急, 听我慢慢道来。

    数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。

    我们的试验板用的是四位8段的共阳极扫描型数码管。

    什么是共阳极呢?就是他们的公共端接正极。扫描型的意思是,几位的数码管的段选都是并联的,由他们的位选位来控制哪一位的数码管来亮。 看看上面的照片,由两个黑糊糊的三极管,来控制两边的数码管哪一边亮。

   动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

    在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

    现在大家应当明白了我们应当怎样做, 如果显示一个2字,那么呢应当是A亮B亮D亮E亮G亮F不亮C不亮。

现在在看看我们的硬件原 理:

可以看到他的COM端由四个PNP型的三极管控制,控制端分别接在P2.0, P2.1,P2.2, P2.3,字段则分别接在P0.0--0.7口。

假如我们要让左边的数码管显示一个2字

可以编以下的程序。

CLR P2.3;选中左边第一个数码管

SETB P2.0;不选右边第一个数码管

SETB P2.1;不选右边第二个数码管

SETB P2.2;不选右边第三个数码管

SETB P0.7;小数点不亮

SETB P0.5; F段不亮

SETB P0.2;C段不亮

CLR P0.6;G亮

CLR P0.4 ;E段亮

CLR P0.3 ;D段亮

CLR P0.1 ;B段亮

CLR P0.0 ;A段亮

END

运行程序可以看到他们显示的数字为2。

在这样一种情况下, 我们会发现这个程序非常麻烦。其实一排数字就是二进制的数字。 我们把他转换为16进制。 直接送到P0口就行啦。

注意:0为点亮, 1为灭 

 

显示数字 p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.0 16进制代码
0 1 1 0 0 0 0 0 0 C0H
1 1 1 1 1 1 0 0 1 F9H
2 1 0 1 0 0 0 1 0 A2H
3 1 0 1 1 0 0 0 0 B0H
4 1 0 0 1 1 0 0 1 99H
5 1 0 0 1 0 0 1 0 92H
6 1 0 0 0 0 0 1 0 82H
7 1 1 1 1 1 0 0 0 F8H
8 1 0 0 0 0 0 0 0 80H
9 1 0 0 1 0 0 0 0 90H

 

我们把他从高往低排列为二进制,例如2,就是10100010, 用计算器转换为16进制就是A2.我们在单片机里为了把16进制和10 进制有所区别, 就把16进制后面跟一个H,同时如果首位为字母的为了区别于指令, 同时前面跟一个0, 就成了0A2H了。

大家可能有一点疑问, 为啥P0.7始终为1呢。 因为它接在小数点上。我们没有用它而已。

根据上面的方法。如果我们把数码管的接线给打乱, 同样的可以分析出他的数字代码。 

现在程序就简单啦:

还是显示一个2字:

CLR P2.0;选中右边的数码管

SETB P2.1;不选左边的数码管

SETB P2.2

SETB P2.3

MOV P0,#0A2H;将10100010送P0口

END

可以看到显示的结果是一样的。

把所有的代码分析出来后以后编程序就可以直接调用啦。 我们的4个数码管的位选为P2.0 P2.1 P2.2 P2.3 这样他一共可以显示四位数字。甚至我们可以直接用它来做一个显示仪表,或者闹钟了。 

他的0,1,2,3,4,5,6,7,8,9 的代码分别为0c0h,0f9h,0a2h,0b0h,99h,92h,82h,0f8h,80h,90h

以下为我们的试验板运行现实89S52的程序

LOOP:
     MOV   P0,#0FFH ;关显示
     MOV   P2,#0FFH ;关显示
     CLR   P2.3     ;选中第一个数码管
     MOV   P0,#80H  ;数码管显示8
     LCALL DELAY    ;调用延时
     MOV   P0,#0FFH
     MOV   P2,#0FFH
     CLR   P2.2     ;选中第二个数码管
     MOV   P0,#0C0H ;数码管显示0
     LCALL DELAY
     MOV   P2,#0FFH
     MOV   P0,#0FFH
     CLR   P2.1     ;选中第三个数码管
     MOV   P0,#92H  ;数码管显示5
     LCALL DELAY
     MOV   P0,#0FFH
     MOV   P2,#0FFH
     CLR   P2.0     ;选中第四个数码管
     MOV   P0,#0F9H ;数码管显示1
     LCALL DELAY
     AJMP  LOOP     ;程序条转到第一步,反复执行
DELAY:              ;延时子程序
     MOV   R6,#250
D1:  DJNZ  R6,D1
     RET
     END

关键字:单片机试验  数码管

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016093029991.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机试验五:流水数字显示综合练习
下一篇:单片机试验三:跑马灯试验

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

单片机试验一:点亮一个发光二极管

;  第二步,在得到这两个数字后,怎样让这两个数字进入单片机的内部呢?这要借助于一个硬件工具"编程器"或者“ISP下载线”(单片机支持在线编程,可使用ISP下载线,更方便快捷)。当然, 如果您使用我们的单片机开发试验应用板, 那么编程器和试验板都有了,只需要编程序就可以了。ISP下载线和试验板下载程序接口如图2和3所示。 这里是迈出单片机编程的第一步,别看很简单可是却对于您有重要的意义,没错,您在编程序了:(     打开WAVE软件;写入程序, 我们把它的名字设为:sy1.asm ;最后把生成的sy1.hex烧入单片机试验开发板
发表于 2016-09-30
单片机试验一:点亮一个发光二极管

单片机试验二:闪烁的发光二极管

,这其实是一个中间结果,计算机中做运算和这个类似,为了要得到最终结果,往往要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中可以吗?显然不行,因为计算机要将结果写进去,而ROM是不可以写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它可以将数据写进去。   特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区。 以下是它的a51文件:我们把它的名字叫作sy2.asm LOOP: SETB P1.0 LCALL DELAY CLR P1.0 LCALL DELAY AJMP LOOP DELAY: MOV R7,#250 D1
发表于 2016-09-30

单片机试验三:跑马灯试验

前面做了二极管的点亮与熄灭和二极管闪烁试验,在这基础上再来做一个跑马灯试验。所用到的器件也是试验板上的八只二极管,要让它们一个个的轮流循环点亮,需要该变P1口的值,即先送入11111110B给P1口,让第一只二级管点亮,由于程序执行时间很短(微秒级),所以我们需要它亮一段时间,就是所说的延时;然后再送入11111101B给P1口即第二只点亮,其它都是熄灭的,延时,再让第三只点亮。就这样不断的循环,这就成 跑马灯了。程序如下: 第一种:        ORG   1000H       
发表于 2016-09-30

单片机试验五:流水数字显示综合练习

该程序运行结果为 : P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 依次点亮然后轮流点亮 ; 蜂鸣器鸣响一声; 继电器J1吸合一次; 继电器J2吸合一次; 千位数码管显示8; 百位数码管显示8; 十位数码管显示8; 个位数码管显示8,反复循环;   随时按遥控器可以终止,并将遥控解码出的数据通过RS232传出,同时也通过P1口显示出来。 注意:此程序的对遥控器的编码芯片为50462才可以。  ORG 0000H AJMP MAIN;转入主程序 ORG 0003H;外部中断P3.2脚INT0入口地址 AJMP INT;转入外部中断服务子程序(红外遥控解码
发表于 2016-09-30

单片机试验六:认识声音

;  END     这时候就可以听到小喇叭发出嘀“的尖叫声。适当的调整他的延时时间, 我们就可以让他发出DO,RUI,MI,FA SO, LA , XI,DO .的声音。 这就使单片机发声的基本原理。
发表于 2016-09-30
单片机试验六:认识声音

通过位带地址操作GPIO在数码管显示数字(STM32_05)

为0x4001080C,可以定义如下的宏:#definePAOut(n)  BIT_ADDR(0x4001080C , n)这样,如果在程序中想在GPIOA_0输出低电平,只需要如下赋值语句:PAOut(0) = 0;四、应用实例1、硬件连接:现在将STM32F103ZET6的GPIOC的0-7引脚连接到共阳数码管的a-h端。2、采用STM32F10X外设库函数,这里使用到stm32f10x_rcc.h, stm32f10x_rcc.c, stm32f10x_gpio.h, stmf10x_gpio.c,项目的创建过程请参看:https://blog.csdn.net/fanxp66/article/details
发表于 2019-05-29
通过位带地址操作GPIO在数码管显示数字(STM32_05)

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved