第三章 数码管显示原理及应用实现

  • Post author:
  • Post category:其他




3.1数码管显示原理



3.1.1内部原理基础知识

  1. -内部结构有八个发光二极管,一个8字只需要显示7段,但是有一个小数点,dp,所以有八个发光二极管。
  2. 封装十个引脚。3、8引脚是连在一起的。八个发光二极管分别与一个限流电阻串联后再并联,有一个公共端,公共端可以分为共阳或共阴极。
  3. 共阴极是一般情况下接地,然后给高电平让想让亮的字段亮起来。想让显示几,就给对应的字段高电平;共阳极需要给需要的字段低电平,注意发光二极管本身需要通过5毫安以上的电流才可以发光,且电流不得过大。但是单片机的I/O口送不了这么大的电流,所以需要驱动电路。可以用上拉电阻的方式也可以直接使用专门的驱动芯片,在开发板上使用的是74HC245(我现在的使用的开发板是普中家的),然而郭家的用的是74HC573锁存器。(在之前的文章中记过这两个对比,现在又忘记了。。。只记得驱动数码管的时候两个通用,增加i/O口的驱动能力,增大驱动电流,具体的原理上篇文章里讲了)。
  4. 当多位一体的数码管时内部的公共端是独立的,而负责显示什么数字的短线是全部连接在一起的。公共端控制哪个位亮,称为“位选线”,连接一起的叫做“段选线”。
  5. 一般单位数码管和二位数码管都有10个引脚,四位数码管有12个引脚。



3.1.2用万用表检查数码管的引脚排列

万用表调到二极管挡位后,分别接二极管的正负端可将二极管点亮,,当红端接在一,黑端分别放其他引脚去上,之后一个发光,其他不发光,说明这个是共阴的,这个发光的引脚是公共端,然后将黑表笔放在公共端,去测其他的端推测出引脚排列。当时共阳时同理。



3.2数码管动态显示



3.2.1静态显示

位选可以选哪几个数字亮,而由于段选是连在一起的所以显示的数字是相同的,这称为静态显示。

在这里插入图片描述

(这是郭天祥板子)

单片机可以控制锁存器的锁存端,从而控制锁存器的数据输出,这种分时控制的方法可以方便地控制任意数码管显示任意数字。

在这里我们先让锁存器锁存端一个高电平,当其是高电平时,Q端数据变换会跟着D端数据变化而变化(这里的Q端是11-18,D端是2-9),然后给输出端一个低电平就通,高电平就不同,因为他是共阴端。之后关闭锁存端,即给锁存端一个低电平,固定现在的数据状态。

郭天祥书籍中提到的控制方式和普中开发板略有不同,郭家用的是两个锁存器74HC573,分别来控制位选和段选;普中用74HC245来控制段选,用74HC138译码器来控制位选。

在这里插入图片描述



3.2.2 74HC138介绍

在这里插入图片描述

因为单片机的I/O口是有限的,但是出于功能的需要需要用有限的I/O口控制更多的器件,这时候就需要外围的芯片,用简单的输入逻辑来控制输出逻辑。

图中1-6是输入引脚, 其中4-6是使能引脚,6输入高电平、45输入低电平才可以使这个芯片正常工作。 否则无论输入什么输出都是高电平。这三个是使能控制端口。

三八译码器,就是把 3 种输入状态翻译成 8 种输出状态。它通过控制二极管的导通来控制数码管的使能。研究完使能引脚,接下来要研究控制逻辑。下面是真值表

在这里插入图片描述

通常采用的编码方式分为共阴和共阳数码管编码两种,根据原理图情况而定。

编码定义如下

unsigned char code table[]={0-F的编码写进去


}// 数组类型 关键字 数组名[]={}  由于51编译器通常能自动计算出元素个数,通常不注明。

与C语言数组不同的是,这里再数组类型后面多了一个关键字code,单片机C语言中定义数组时是占用内存空间的,而定义编码是直接分配到程序空间中,编译后编码占用的是程序存储空间,而非内存空间。

在这里插入图片描述

在这里插入图片描述



3.3动态显示

送数据时,先送段选数据,确定每个数码管显示什么数字,再送位选数据,在送位选数据之前,需要加上一步程序:

P0=0xff

这部程序叫做“消隐”。

这步是消除上一步P0口的段选数据,以免上一步的段选数据影响下一步的进行。



3.4 中断概念


  1. 中断

    是为使单片机具有对外部或内部随机发生的事件实时处理而设置的。中断功能的存在极大程度上提高了处理外部内部事件的能力。

  2. 51

    单片机一共有5个中断源。即有5种情况发生时,单片机会处理中断程序。52单片机有6个中断源。**
  3. 中断源向CPU提出中断请求,CPU暂时中断原来的事务A,转去处理事务B,对事务B处理完毕后,再回到原来被中断的地方,这称为

    中断返回

    。实现中断功能的部件叫做

    中断系统


  4. 中断嵌套

    :如果单片机正在处理一个中断程序,此时,又有另一个中断现象发生,单片机将会停止当前的中断程序,而转去执行新的中断程序,新中断程序处理完毕后再回到刚才停止的中断程序处继续执行,执行完这个中断后再返回主程序继续执行主程序。
  5. **中断优先级:**通过设置单片机中断优先级寄存器的设置情况,通过设置中断优先级寄存器,告诉单片机当两个中断同时出现时应先去执行哪个中断程序。若没有认为操作优先级寄存器,单片机会按照默认的一套优先级自动处理。

    定时器一般是采取中断方式来做的,单片机使用中断功能一般要设置两个与中断有关的寄存器:中断允许寄存器和中断优先级寄存器IP。
  6. 中断的开启和关闭、设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定的。
  7. 单片机在使用中断功能时,通常需要设置两个与中断有关的寄存器,中断允许寄存器IE和中断优先级寄存器IP。

    中断允许寄存器:寄存器可以进行位寻地址,对单片机寄存器的每一位进行单独操作。单片机复位时IE全部被清0.

    中断优先级寄存器IP:用来谁当各个中断源属于两级中断中的哪一级,可以进行位寻址。单片机复位被清0.



3.5 单片机定时器中断



单片机定时器系统:

  • 51单片机内部有两个16位可编程的定时器/计数器,即T0和T1。52单片机内部多了一个T2定时器。通过设置与他们相关的寄存器来选择启用定时功能和计数功能。
  • 定时器实质上是加1计数器(16位),由高八位和低八位两个寄存器组成。
  • 在这里插入图片描述

  • 计数脉冲

    :一是系统的时钟振荡器输出脉冲经12分频后送来,二是T0或T1引脚输入的外部脉冲源,每一个脉冲计数器加一,当加到计数器全为1时,再输入一个脉冲就能使计数器为0,计数器的溢出使TCON寄存器中TF0或TF1置1,向CPU发出中断请求,定时器模式表示定时时间移到,计数器模式表示计数已满。
  • 由溢出时计数器的值减去计数初值才是加1计数器的计数值。
  • 两种模式:定时器模式:加一计数器是对内部机器周期计数,计数值N乘以机器周期Tcy就是定时时间t。

    计数器模式:



定时器/计数器工作方式寄存器TMOD

  • 不能位寻址
  • 用来确定定时器的工作方式以及功能选择
  • 复位时被清0
  • 高四位用来设置定时器1,低四位用来设置定时器0
  • 一是GATE门控制位 =0是仅受TCON中TRX(X=0,1)控制;=1时还受外部中断引脚(INTO或INT1)上的电平状态共同控制
  • 二是C/T定时器模式和计数器模式选择位
  • 三是MIMO工作方式选择位 每个定时器有四种工作方式,都由其来设定。



定时器/计数器控制寄存器TCON

  • 可进行位寻址
  • 控制定时器的启、停、标志定时器溢出和中断情况。
  • 复位时被清0
  • 四个位用来定时器/计数器,四个位用来外部中断



方式1

  • 对T0来说,TL0作为低八位,TH0作为高八位。组成16位加1计数器



定时器初值的计算方式



中断服务程序的写法

void 函数名()interrupt 中断号 using 工作组 //中断函数不能返回任何值,用void。 中断函数不带任何参数,小括号为空;由于C51编译器在编译程序时会自动分配工作组,因此工作组可以省略不写。 
{
	中断服务程序内容
}
void T1_time() interrupt 3
{
	TH1=(65536-10000)/256;
	TL1=(65536-10000)%256;
}



定时器初始化程序

void Timer0Init() //定时器初始化过程
{
	TMOD=0X01;//1.确定工作方式。。选择为定时器0模式,工作方式1,仅用TR0打开启动。

	TH0=0XFC;	//2.计算初值,将初值写入。。写入TH0和TL0或TH1和TL1,给定时器赋初值,定时1ms
	TL0=0X18;	
	ET0=1;//3.中断方式时,对IE赋值,开放中断。打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//4.使TR0或TR1置位,启动,打开定时器			
}


等到复习的时候再来回答下面几个问题,看看自己是否完全理解。


1. 中断概念 结合生活事件解释

2. 中断嵌套

3. 中断优先级

4. 中断两个必用的寄存器



版权声明:本文为xiaoyixiaoyizhu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。