电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>51单片机数码管动态扫描驱动的设计资料下载

51单片机数码管动态扫描驱动的设计资料下载

2021-04-25 | pdf | 186.84KB | 次下载 | 免费

资料介绍

数码管由于发光亮度强,指示效果好,非常适合于电梯楼层等数值显示应用中。对于一位数码管,可以采用静态显示,但实际应用中都是需要显示多位数值,数码管模块也只能动态显示,因此笔者在这里简单分析一下数码管动态扫描驱动的实现。1. 数码管原理概述数码管由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。数码管根据内部接法又可分成共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管(如下图SM*10501),共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管如下图(SM*20501)。以共阳数码管为例,要想显示数字2,需把A、B、G、E、D段点亮,即公共端接上正电源,ABGED段阴极拉低,其余段拉高即可显示数字2。2. 硬件设计笔者此处以四位一体共阳数码管显示为例讲解其大概的硬件设计。微控制器的IO口均不能流过过大的电流LED点亮时有约10ms的电流,因此数码管的段码输出不要直接接单片机IO口,应先经过一个缓冲器74HC573。单片机IO口只需很小的电流控制74HC573即可间接的控制数码管段的显示,而74HC573输出也能负载约10ms的电流。设置数码管段的驱动电流为ID=15ma,这个电流点亮度好,并且有一定的裕度,即使电源输出电压偏高也不会烧毁LED,限流电阻值R = (VCC- VCE– VOL– VLED) / IDVCC为5v供电,VCE为三极管C、E间饱和电压,估为0.2v, VOL为74hc573输出低电平时电压,不同灌电流,此值不一样,估为0.2v,具体查看规格书,VLED为红光驱动电压,估为1.7v,根据上式可算出限流电阻为R = 200R。数码管需接收逐个扫描信号,扫描到相应数码管时,对应的段码数据有效,即显示这个数码管的数值。笔者采用三线八线译码器74HC138来产生对应的扫描线信号。当各个段码均点亮时,电流约15max8=90ma流过数码管公共端,74HC138无法直接驱动这个电流,需加三极管驱动,由于74HC138输出低电平有效,此处只有PNP三极管适合作为驱动。三极管基极电流设为2ma即可让三极管饱和,最大驱动电流远大于90ma。基极偏置电阻阻值Rb=(VCC- VEB– VOL) / IBVCC为5v供电,VEB为三极管E、B间的导通电压0.7v,VOL为74hc138输出低电平时电压,可根据规格书估为0.3v,故Rb= 2k即可。图2-1 四位一体数码管原理图3. 驱动实现数码管段码接P0口,位码接P2口第0~2位。对于LED显示器都是有一个刷新频率的,同样对于数码码动态扫描也需要一个扫描频率。扫描频率下限为50HZ,低于一定的扫描频率,显示会闪烁。频率过高,则亮度较差且占用cpu资源。一般整个数码管扫描一遍时间为约10ms较合适(即扫描频率100HZ),我们用的是四位数码管,每个数码管点亮时间为2ms,扫描一遍时间为8ms。为保证这个刷新频率,通过是通过定时器来周期性进行数码管刷新。笔者在此以四位一体数码管实现秒表计数显示为例来作代码开发。数码管动态显示功能实现模块文件DigitalTubeTable.c内容如下:#include “reg52.h”#include“DigitalTube.h”// 数值相对应的段码,共阳极static unsigned char codeDigitalTubeTable[12]= { // 共阳LED段码表0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90, 0xff, 0xbf//“0” “1” “2” “3” “4” “5” “6” “7” “8” “9” “不亮” “-”};// 每个数码管需一个字节的内存保存对应数码管数据staTIc unsigned charFrameBuffer[DigitalTubeNumber];unsigned char*DigitalTube_GetBuffer(){return FrameBuffer;}void DigitalTube_Scan(){staTIc unsigned char Select = 0; // 记录扫描的选择线unsigned char Code;// 从对应选择线中找到显存数据,并得到相应的段码Code = DigitalTubeTable[FrameBuffer[Select]];// 段码实际输出到数码管接口DigitalTube_Data(Code);// 位选实际输出到数码管接口DigitalTube_Select(Select);Select++; // 进入到下一位选扫描if (Select 》= DigitalTubeNumber) {Select = 0; // 所有数码管已扫描,从第一个数码管再次开始扫描}}我们在数码管模块头文件DigitalTube.h中实现模块的接口访问宏实现,使之方便移植及修改接口配置。模块头文件同时也引出模块的接口函数,void DigitalTube_Scan(void)为数码管刷新函数,需周期性调用刷新数码管显示。unsigned char *DigitalTube_GetBuffer(void)用来获得数码管显存,从而更新数码管显存数据。其内容如下:#ifndef __DigitalTube_H__#define __DigitalTube_H__#ifdef __cplusplusextern “C” {#endif// 数码管模块中的个数,最大为8#define DigitalTubeNumber 4// 输出数码管位选#defineDigitalTube_Select(Select) {P2 = (P2&0xf8) + (Select);}// 输出数码管段码#define DigitalTube_Data(Dat) {P0 =(Dat);}// 数码管刷新函数,必须保证以一定周期调用刷新void DigitalTube_Scan(void);// 获得数码管显存,以作显示的数据更新unsigned char*DigitalTube_GetBuffer(void);#ifdef __cplusplus}#endif#endif /*__DigitalTube_H__*/外部模块通过引入数码管的模块头文件DigitalTube.h来实现调用数码管驱动函数,简单测试调用(秒表数码管显示计数)实现如下:#include“reg52.h”#include“DigitalTube.h”// 以定时器时间为计时标准,记录时间间隔staTIc volaTIle unsignedint SystemTick = 0;// 定时器2ms中断处理进行数码管刷新void T0_Interrupt()interrupt 1{TH0 = (65536-2000) / 256;TL0 = (65536-2000) % 256;SystemTick++; // 记录时间间隔DigitalTube_Scan(); //刷新数码管}void T0_Init(){TMOD = 0x01; // 定时器0工作方式1// 2ms计时中断(12M)TH0 = (65536-2000) / 256;TL0 = (65536-2000) % 256;ET0 = 1; // 定时器T0中断允许EA = 1; // 总中断允许}void main(){unsigned char *pBuffer;unsigned char i;// 定时器初始化T0_Init();// 获得数码管显存,以作更新数据显示pBuffer = DigitalTube_GetBuffer();// 数据管显存初始化显示0for (i=0; ipBuffer[i] = 0;}// 开启定时器进行计时以及数码管刷新TR0 = 1;while(1) {
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费