实验四 数码管显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四数码管显示
1. 驱动原理
数码管由7个发光二极管组成,行成一个日字形,它门可以共阴极,也可以共阳极.通过解码电路得到的数码接通相应的发光二极而形成相应的字,这就是它的工作原理.
基本的半导体数码管是由7个条状的发光二极管(LED)按图1所示排列而成的,可实现数字"0~9"及少量字符的显示。另外为了显示小数点,增加了1个点状的发光二极管,因此数码管就由8个LED组成,我们分别把这些发光二极管命名为 "a,b,c,d,e,f,g,dp",排列顺序如下图1。
图1:数码管引脚图及外形图
2. 数码管的结构及分类
特别提示:注意段码和位码的概念;会找出不同接法的段码分析方法。
数码管按各发光二极管电极的连接方式分为共阳数码管和共阴数码管两种共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。共阴数码管内部连接如图3所示。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阳数码管内部连接如图2所示。
图2:共阳数码管内部连接图图3:共阴数码管内部连接图
二、多位数码管的驱动方法
A.静态法
静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器
进行驱动,增加了硬件电路的复杂性。送数后可保持。
B.动态扫描法
动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
注意:需要不停送数。
实验任务一:静态扫描显示
在数码管上循环显示0000至9999。
打开锁存器74HC573锁存端,使数码管和P0口直通,向P0口送段码,打开数码管位选。
注意:若P0口只需要用数码管功能,则锁存器573可以为直通方式若P0口需要数码管和其它器件复用,则需要用上573的锁存功能
(1)硬件的连接图
(2)实验目的:
●学会对数码管静态显示操作
(3)实验步骤
●分析设计内容,设计软硬件设计方法
●编写C语言代码
●编译代码
●下载可执行文件
●硬件调试
●观察现象
(4)程序源码:
/***********************头文件*********************/
#include"regx52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //0~9共阴显示子码sbit LOCK=P1^0; //定义锁存端
sbit D1=P1^1; //数码管位选第一位
sbit D2=P1^2; //数码管位选第二位
sbit D3=P1^3; //数码管位选第三位
sbit D4=P1^4; //数码管位选第四位
/*******************毫秒级延时函数 *****************/
void delayms(uint ms)
{
uchar b;
while(ms--)
{
for(b=0;b<125;b++);
}
}
/***********************主函数*****************/
void main()
{
uint i;
LOCK=1; //高电平通,低电平锁
//此程序因为不复用端口,所以让它全通D1=0; //依次打开全部数码管位选
D2=0;
D3=0;
D4=0;
while(1)
{
for(i=0;i<9;i++)
{
P0=dispcode[i]; //向P0口送段码
delayms(1000); //延时1S
}
}
}
(6)现象
数码管循环显示0000~9999。
(7)扩展任务
设计0~9自减器用数码管静态显示。
实验任务二:动态扫描显示
分别在各位上,显示7、6、5、4四个数,然后依次关闭显示,如此反复。(1)硬件的连接图
(2)实验目的:学会对数码管的基本操作