《第16讲LED数码管的应用幻灯片资料》由会员分享,可在线阅读,更多相关《第16讲LED数码管的应用幻灯片资料(18页珍藏版)》请在金锄头文库上搜索。
1、第16讲 LED数码管与键盘的应用,16.1LED数码管结构与原理 16.2 LED数码管的显示方式 16.3共阴极LED和共阳极LED 的应用,16.1LED数码管结构与原理,在单片机应用系统中,使用的显示器主要有: LED(发光二极显示管)、 LCD液晶显示器、CRT等 LED(Light Emitting Diode,发光二极管)是单片机应用系统中常用的输出设备,LED由发光二极管构成,具有结构简单、价格便宜、配置灵活、与单片机接口方便等特点。,返回本节,16.1LED数码管结构与原理,LED数码管的结构及分类 通常使用7段LED数码管,它由7个发光二极管组成。这7个发光二极管ag呈“日
2、”字形排列,其结构及连接如右图所示。当某个发光二极管导通时,相应地点亮某一点或某一段笔画,通过发光二极管不同的亮暗组合形成不同的数字、字母及其其他符号。,返回本节,16.1LED数码管结构与原理,LED数码管的发光二极管亮暗组合实质上就是不同电平的组合,也就是为LED数码管提供不同的代码,这些代码称为字形代码。7段发光二极管加上1个小数点dp共计8段,字形代码与这8段的关系如下:,返回本节,16.1LED数码管结构与原理,返回本节,字形代码与十六进制数的对应关系如表6-1(见书P130)所示。从表中可以看出共阴极与共阳极的字形代码互为补数。,16.2 LED数码管的显示方式,在单片机应用系统中
3、一般需使多个LED数码管,多个LED数码管是由N根位选线和8XN根段选线连接在一起的,根据显示方式不同,位选线与段选线的连接方法也不相同。段选线控制字符选择,位选线控制显示位的亮或暗。 N个LED数码管的连接方式:,返回本节,16.2 LED数码管的显示方式,LED数码管显示有: 静态显示和动态显示两种方式。,返回本节,16.2 LED数码管的显示方式,静态显示就是当LED数码管要显示一个字符时,相应的发光二极管恒定地导通或截止。单片机只需将所要显示的数据送出去,直到下一次显示的数据需更新时再传送一次数据,显示数据稳定,占用CPU时间少。但是采用这种显示方式时需要一个8位输出口控制,所以占用硬
4、件多,如果单片机系统中有N个LED数码管,则需要8XN根I/O口线,所占用的I/O资源较多,需进行扩展。,返回本节,16.2 LED数码管的显示方式,动态显示就是一位一位地轮流点亮各位数码管,对每一位LED数码管来说,每隔一段时间点亮一次,即CPU需要时刻对数码管进行刷新,显示数据有闪烁感,占用CPU的时间较长。并且,数码管的点亮既与点亮时的导通电流有关,也与点亮时间、间隔时间的比例有关。调整电流和时间的参数,可实现亮度较高,较稳定的显示。若数码管的位数不大于8位时,只需要两个8位I/O口。,返回本节,16.3共阴极LED和共阳极LED 的应用,在某系统中有1位共阴极LED数码管和1位共阳极L
5、ED数码管,要求数码管1循环显示09,当按下按钮1时,数码管2显示数码管1的当时值。当按下按钮2时,清除数码管2的所显示的值。,返回本节,16.3共阴极LED和共阳极LED 的应用,返回本节,16.3共阴极LED和共阳极LED 的应用,设计分析:数码管显示字符,一般是通过调用Table字库来进行的。由于该系统中采用两种类型的数码管(共阴极和共阳极LED),因此需要调用两个不同的字库,如果使用汇编来编写此程序,则比较困难;使用C语言,相对来讲就容易,因此我们采用C语言来编写此程序。 使用C语言编写程序时,首先编写好Tab1和Tab2这两个库,其中一个为共阳极LED的段码值,另一个为共阴极LED的
6、段码值。程序使用两个外部中断INT0和INT1,其中INT0用来控制LED2显示字符与LED1显示字符相同,INT1使LED2不显示。使用单片机软件延时计数。,返回本节,16.3共阴极LED和共阳极LED 的应用,程序流程图如图:,返回本节,16.3共阴极LED和共阳极LED 的应用,C语言源程序 #include #define uint unsigned int #define uchar unsigned char uchar j; uchar t; uint n; const uchar tab1=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0
7、 x07,0 x7f,0 x6f,; const uchar tab2=0 xc0,0 xf9,0 xa4,0 xb0,0 x99, 0 x92,0 x82,0 xf8,0 x80,0 x90,; void delay(uint n) uint i; for(i=0;in;i+); for(i=0;in;i+); for(i=0;in;i+); for(i=0;in;i+); ,返回本节,16.3共阴极LED和共阳极LED 的应用,void Int0_server_(void) interrupt 0 uchar a; a=tab2j; P1=a; void Int1_server_(void) interrupt 1 P1=0 x00; void Init_Int(void) EX0=1; IT0=1; EX1=1; IT1=0; EA=1; ,返回本节,16.3共阴极LED和共阳极LED 的应用,void main(void) P1=0 x00; Init_Int(); while(1) for(j=0;j10;j+) P2=tab1j; delay(65000); ,返回本节,16.3共阴极LED和共阳极LED 的应用,返回本节,