多位数管动态扫描protues仿真.docVIP

  • 7
  • 0
  • 约1.8万字
  • 约 6页
  • 2017-06-12 发布于河南
  • 举报
多位数管动态扫描protues仿真

实验题目:多位数码管动态扫描电路设计与调试 一、实验要求与目的 1、设计要求 8位数码管显示“8.8.8.8.8.8.8.8.”,即点亮显示器所有段,持续约500ms之后,数码管持续约1s;最后显示“HELLO—10”,保持。 2、实验目的 1、掌握数码管动态扫描显示原理及实现方法。 2、掌握动态扫描显示电路驱动程序的编写方法。 设计思路 1、在Proteus中设计仿真电路原理图。 2、在Keil C51软件中编译并调试程序,程序后缀必须是.c。调试时生成hex文件,确认 无误后将生成的hex文件添加到原理图的单片机中进行仿真。 3、观察电路仿真结果对程序进行更改直至达到预期结果 实验原理 图1 原理图 LED数码管动态显示的基本做法在于从那时起轮流选通数码管的公共端,使得各数码管轮流导通,在选通相应数码管后,即在显示字段上得到显示字形码。这种方式不但能提高数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。 动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。其接口电路是把所有显示器的8个笔画段A~DP同名端并联在一起,而每个显示器的公共极COM各自独立地受I/O线控制,CPU向字输出口送出字形码时,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。而所谓动态扫描是指采用从分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。 在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。 采用总路线驱动器74HC245提供LED数码管的段驱动,输出高电平时点亮相应段;采用集电极开路的BCD-十进制译码器/驱动器完成LED数码管位驱动,输出低电平时选通相应位。P2口每个口线输出灌电流不足以驱动一个数码管显示器的位—公共极,所以通过集电极开路的BCD—十进制译码器/驱动器7445驱动,即节约P2口线,又增加驱动能力。 四、功能概述及方案设计 系统主要组成单元 组成单元 项目 电路图 完成的功能 AT89C52 通过预置的程序控制电路的输出,即控制数码管的选通并输出驱动信号 7445 完成LED数码管位驱动,输出低电平时选通相应位 74HC245 提供LED数码管的段驱动,输出高电平时点亮相应段 RESSPACK8 限流电阻保护电路以免电流过大烧坏电路 7SEG-MPX8-CC-BLUE 译码显示 五、实验运行程序 #includeintrins.h #includeREGX52.H #define TRUE 1 #define dataPort P0 #define ledConPort P2 unsigned char code ch[8]={0x76,0x79,0x38,0x38,0x3f,0x40,0x06,0x3f}; void time(unsigned int ucMs); void main(void) { unsigned char i,counter; for(i=0;i30;i++){ for(counter=0;counter8;counter++) { ledConPort=counter; dataPort=0xff; time(5);}} ledConPort=0xff; time(2000); while(TRUE) { for(counter=0;counter8;counter++) { ledConPort=counter; dataPort=ch[counter]; time(5);}}} void delay_5us(void) { _nop_(); _nop_(); } void delay_50us(void) { unsigned char i; for(i=0;i4;i++) {delay_5us(); } } void delay_100us(void) { delay_50us(); delay_50us(); } void time(unsigned int ucMs) { unsigned char j; while(ucMs0) { for(j=0;j10;j++) delay_100us(); ucMs--; } } 六、仿真结果 七、实验心得 指导教师评语和成绩评定:

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档