200 likes | 356 Views
任务 3. 数码管显示系统设计. 任务内容. 1 、数码管使用概述 2 、共阳极多位数码管控制系统设计 3 、能自动统计按键次数的显示系统设计. 2 、共阳极多位数码管控制系统设计. 任务:用 ATmega16 点亮 4 个共阳极的数码 管,并同时显示 0~9 十个数字。 目标: 进一步熟悉 ATmega16 的开发环境; 掌握数码管的编码方法; 掌握数码管的动态驱动方法; 掌握动态扫描的原理。. 2.1 、动态扫描原理.
E N D
任务3 数码管显示系统设计
任务内容 1、数码管使用概述 2、共阳极多位数码管控制系统设计 3、能自动统计按键次数的显示系统设计
2、共阳极多位数码管控制系统设计 任务:用ATmega16点亮4个共阳极的数码 管,并同时显示0~9十个数字。 目标: 进一步熟悉ATmega16的开发环境; 掌握数码管的编码方法; 掌握数码管的动态驱动方法; 掌握动态扫描的原理。
2.1、动态扫描原理 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a、b、c、d、e、f,、g、dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
动态扫描原理图说明: 1)、a,b,c,d,e,f,g,dp是数码管的公共数据线; 2)、1VCC,2VCC,3VCC,4VCC为数码管内部8个LED的阳极公共端,在动态驱动中,这些管脚也作为每个数码管的选通线,专业术语也叫位选通线。 3)、通过分时选通每一位数码管,实现动态扫描,利用人眼的视觉暂留特性,实现数码管稳定的显示。
电路说明 • PORTA为数据接口; • PORTB的PB0~PB3为位选控制线; • R1~R4为限流电阻; • 图中数码管为共阳极数码管; • 其中的一段电路示意图如下: • 如果要点亮LED,ATmega16的PORTA和PORTB应该输出怎样的电平呢?
2.4、软件设计 2.4.1 静态显示 先用静态显示,验证电路是否能正常工作。 主要程序如下: DDRA = 0xFF; PORTA = 0xf9; DDRB = 0xFF; PORTB = 0x01 ;
先用静态显示,改变行选通线,观察显示结果。先用静态显示,改变行选通线,观察显示结果。 主要程序如下: DDRA = 0xFF; PORTA = 0xf9; DDRB = 0xFF; PORTB = 0x02 ;
先用静态显示,改变行选通线,观察显示结果。先用静态显示,改变行选通线,观察显示结果。 主要程序如下: DDRA = 0xFF; PORTA = 0xf9; DDRB = 0xFF; PORTB = 0x04 ;
先用静态显示,改变行选通线,观察显示结果。先用静态显示,改变行选通线,观察显示结果。 主要程序如下: DDRA = 0xFF; PORTA = 0xf9; DDRB = 0xFF; PORTB = 0x08 ;
通过改变行选通线的方法,我们看到,随着行线的改变,显示内容从左到右移动;通过改变行选通线的方法,我们看到,随着行线的改变,显示内容从左到右移动; • 每次只能点亮显示一个数码管; • 可以想象,如果用程序控制以很快的速度完成由左到右四个数码管的扫描显示,我们就可以看到4个数码管被同时点亮; • 动态扫描原理。
2.4.2 动态显示 通过静态显示的验证,电路可以正常工作,下面就是如何实现4个数码管的稳定动态显示了。 实现方法: 1)显示间隔延时 方法: 显示1 延时 显示2 延时 显示3 延时 显示4 延时 显示1 如此循环。 实现: 编写实现上述循环的程序,即可实现4个数码管的动态显示。 主要参数:延时时间。整个扫描周期达到50HZ即可实现无闪烁的稳定显示。
延时时间计算方法:以50HZ扫描周期为例 T= 1/50 =20毫秒 间隔时间t=20/4=5毫秒 主要功能函数:5毫秒的延时函数 显示函数; 程序的设计基于内部晶振:1Mhz
2)、主要子程序 延时程序: void Delay_xms(unsignedint xms){unsignedint x,y;for(x=0;x<xms;x++)for(y=0;y<1000;y++) ;} 参数:xms 以毫秒为单位的延时入口参数。
显示程序: void Display(unsignedchar dis_dat,unsignedchar dis_bit){ PORTA = dis_dat; PORTB = 1<<dis_bit;} 参数:dis_dat 与dis_bit对应的位的显示数据 dis_bit显示数码管位选参数(0~3)对应千、百、 十、个共4位。
开始 3)、主程序设计 void main(void){ unsignedchar i=0,disp; DDRA = 0xFF; PORTA = 0x00; DDRB = 0xFF; PORTB = 0x00; while(1) { disp=~digital_code[i]; Display(disp,i); Delay_xms(1); i++;if(i==4) i=0; }} 端口初始化 显示扫描 延时 i=4 ? i=0
2.5总结 • 数码管动态驱动原理; • 系统设计方法 静态验证电路,动态编写应用程序; • 动态扫描方法:时间延时方法 • 其他方法??(定时扫描)