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

发布者:Changsheng520最新更新时间: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

关键字:单片机试验  数码管 引用地址:单片机试验四:认识数码管

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

推荐阅读最新更新时间:2024-03-16 15:12

PIC单片机对LED数码管矩阵键盘显示的设计
#include #include “。./head/config.h” __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//对熔丝位进行设置 单片机LED共阳极段码表(带小数点) 0~9 const char table1[]={0X0A,0XFA,0X8C,0XA8,0X78,0X29,0X09,0XBA,0X08,0X28,0x18,0x49,0x0f,0xc8,0x0d,0x1d}; 数码管位码表 const char table[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned int result = 0,lastresult = 0;
[单片机]
PIC<font color='red'>单片机</font>对LED<font color='red'>数码管</font>矩阵键盘显示的设计
C51单片机学习笔记(五)——数码管的静态显示和动态显示
1.数码管的显示原理 数码管有一位和多位一体两类,它是由8个LED(a,b,c,d,e,f,g,dp)排列组成,任意一个LED叫作一个“段”。通过给a,b,c,d,e,f,g,dp各个脚加上不同的控制电压可以使不同的LED导通发亮,从而显示0~9各个数字和ABCDEF各个字母。 由于8个LED共有16个引脚,为了减少引脚,形成了共阳极和共阴极两种数码管,如下图,如果是共阴极,点亮方法就是公共脚加低电平,引出脚加高电平,如果是共阳极,公共脚加高电平,引出脚加低电平即可。(我的数码管是共阳极,所以下面我就使用共阳极进行说明) 2.数码管的静态显示 所谓静态显示,就是数码管的笔画点亮后,这些笔画就一直处于点亮状态,而不是处于周期
[单片机]
C51<font color='red'>单片机</font>学习笔记(五)——<font color='red'>数码管</font>的静态显示和动态显示
通过位带地址操作GPIO在数码管显示数字(STM32_05)
一、什么是位带操作 位带操作简单讲就是将一个对二进制位的操作映射到一个32位的地址上,通过给这个地址置0或1来给这个二进制位置0或1。 二、CM3的位带操作 在CM3支持的位段中,有两个区中实现了位段。 其中一个是 SRAM 区的最低 1MB 范围,0x20000000‐0x200FFFFF(SRAM 区中的最低 1MB); 第二个则是片内外设区的最低 1MB范围,0x40000000‐0x400FFFFF(片上外设区中的最低 1MB)。 从上图可以看出,SRAM中地址为0x20000000单元的32位Bit可以分别被映射到0x22000000-0x2200008F的128字节的地址范围中,即0x2000
[单片机]
通过位带地址操作GPIO在<font color='red'>数码管</font>显示数字(STM32_05)
数码管显示驱动和键盘扫描控制器CH451及其应用
摘要:介绍一种新型的键盘显示驱动芯片CH451的性能特点和工作原理,给出了CH451键盘显示驱动芯片与MCS-51单片机的接口方法与相应的软件驱动程序。 关键词:键盘显示控制;单片机;CH451 单片机在开发过程中,常常会因为资源不足而不得不大量扩展接口芯片以满足应用系统的需要,其中原因之一是人机界面中的键盘显示占用了系统太多资源,从而造成系统庞大,同时降低了系统的可靠性。在单片机应用系统中,键盘显示通常可采用以下几种方式: (1)采用并行接口的键盘显示专用芯片8279。但8279所需外围元件多(显示驱动、译码等)、占用电路板面积大、综合成本高,在中小系统中常常大材小用; (2)采用通用并行I/O芯片扩展(如用8155等
[单片机]
51单片机做的数码管电子日历
电路图 及仿真文件下载: http://www.51hei.com/bbs/dpj-20404-1.html 下面是程序 源码 : #include reg52.h #define uchar unsigned char #define uint unsigned int sbit db=P2^7; char i,sec,min,h,date,month,year,flag; uchar j,k,m,n,o,p; sbit dula=P2^0; sbit wela1=P2^1; sbit wela2=P2^2; sbit key_ch=P3^5; sbit key_add=P3^6; sbit key_minus
[单片机]
51<font color='red'>单片机</font>做的<font color='red'>数码管</font>电子日历
动态扫描方法和定时器1在数码管的前三位显示出秒表
/* 用动态扫描方法和定时器1在数码管的前三位显示出秒表 */ #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char uint closedu,closewe; uchar code wetable ={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; uchar code dutable ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}
[单片机]
51单片机超声波测距数码管显示
超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,最近比赛写的我使用的是慧净开发板,共阴数码管 //超声波模块程序 //作者 : Z H //时间 2015/11/29 //Trig = P2^0 //Echo = P3^2 #include reg52.h #define uchar unsigned char #define uint unsigned int unsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的码
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved