完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
数码管介绍
显示器及其接口(本文主要针对LED显示器来介绍) 单片机系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器、TFT液晶显示器等。 LED显示器的显示结构分为:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。 LED数码管根据LED的不同接法可以分为共阴和共阳: 共阴极数码管:将8个LED的阴极接到同一管脚上(开发板使用) 共阳极数码管:将8个LED的阳极接到同一管脚上 若想在数码管中显示数字或字符,则需在数码管上点亮对应的LED。通常采用的是8段显示,正好凑成8位,也就是一个字节。 根据电路连接图数码管显示常用的16进制编码如下: 0x3f 0x06 0x5b 0x4f 0x66 0x6d 0 1 2 3 4 5 0x7d 0x07 0x7f 0x6f 0x77 0x7c 6 7 8 9 A B 0x39 0x5e 0x79 0x71 0x00 C D E F 无显示 开发板原理图 数码管是如何显示出字符的 此处就举例说明8~~以显示数字0为例: 要想显示数字0,则需对应同时点亮数码管中的a,b,c,d,e、f 这6个LED;通过开发板原理图可以看出a~dp分别对应74HC245芯片上的P00-P07这8个管脚,因此要点亮abcdef这6个LED则需将P00-P05置为高电平‘1’,而g和dp则为低电平‘0’;最后将对应的电平从P0口的高位写向低位,即从P07对应的dp开始写,并转为十六进制。应为:0011 1111–》0x3f 静态数码管 特点 每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新的字形码。 优点 占用CPU时间少、显示便于监测和控制。 缺点 硬件电路复杂、成本高。(若要用到8个静态数码管,也就是说这8个数码管都是独立的,让其实现静态显示,即要把这8个数码管各自的8段全部接入单片机来控制,显然,单片机的管脚是不够的:单片机只有32个口,而要控制这8个的话,则需8×8个IO口,就需要对单片机的IO口来进行扩展…) 数码管静态显示原理 回到开发板原理图,若只需LED1静态显示,则位选时将LED1置为低电平‘0’(因为开发板上为共阴极数码管)即P22-P24口都为‘0’–》LED1口输出‘0’(原理参见三八译码器),在段选时根据要显示的值将对应的P0口置为高/低电平即可。若只让LED4静态显示,则P24、P23、P22口分别为‘1’、‘0’、‘0’–》LED4则输出为‘0’,即位选选中LED4。 补充:P0口为漏极开路(即高阻状态,可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻或电平转换芯片),若不加上拉电阻,想对其单独输出高低电平是无法实现的。 74HC573锁存器芯片的使用 参见开发板原理图,OE为使能端,当其为低电平时,锁存器开始工作,因此在开发板中已经默认让其接地。LE为锁存端,当其为高电平时,Q0-Q7与D0-D7的状态一样,也就是说芯片内部是打通的,即Q0-Q7随着D0-D7变化而变化;为低电平时,Q0-Q7都锁存数据,无论D0-D7如何变化,Q0-Q7都保持锁存的值不变。 此处使用573来锁存和驱动,将单片机的P00-P07分别接在D0-D7,LE默认让其短接到VCC,即LE为高电平,也就是P00-P07怎么改变,则段选就怎么改变,因此可以通过P0口直接给数码管发送段选数据。 源程序–静态数码管 #include “reg52.h” typedef unsigned char u8; typedef unsigned int u16; ***it LA=P2^2; ***it LB=P2^3; ***it LC=P2^4; u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 i) { while(i--); } void main() { u16 i; LA=0; LB=0; LC=0;//LED1--》0 位选为LED1 //P0=smgduan[0];//段选 for(i=0;i《16;i++) { P0=smgduan[i]; delay(50000); } while(1); } 动态数码管 特点 将所有数码管的段选线并联在一起,由位选线来控制哪一位数码管有效。同开发板原理图中,两个四位一体的数码管,它们的段选都是并联在一起,通过单片机P0口来进行控制。而显示哪一位数码管则是通过位选(LED1…)来控制。 数码管动态显示原理 所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,让人感觉各位数码管“同时”都在显示(实际并非同时,有先后顺序,只不过间隔时间非常短,视觉感受不到)。 注:动态显示的亮度比静态显示要差一些(静态显示是直接通过单片机的IO口连到数码管的段选数据上;而动态显示是将每一个数码管的段选并联,则电流分流),故在选择限流电阻时应略小于静态显示电路中的。 74HC138芯片的使用 真值表: 三八译码器的A2为高位,对应开发板上的P24也就是C管脚。即A2 A1 A0分别代表的高/低电平(用1/0表示)的值转化为十进制(用m表示)则对应的输出就为Ym,也就对应了位选值。 源程序–动态数码管 #include “reg52.h” typedef unsigned char u8; typedef unsigned int u16; ***it LA=P2^2; ***it LB=P2^3; ***it LC=P2^4; u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 i) { while(i--); } void display() { u8 i; for(i=0;i《8;i++) { switch(i)//对应位选 点亮哪个数码管 { case 0: LA=0;LB=0;LC=0;break; case 1: LA=1;LB=0;LC=0;break; case 2: LA=0;LB=1;LC=0;break; case 3: LA=1;LB=1;LC=0;break; case 4: LA=0;LB=0;LC=1;break; case 5: LA=1;LB=0;LC=1;break; case 6: LA=0;LB=1;LC=1;break; default: LA=1;LB=1;LC=1;break; } //对应段选 显示什么值 P0=smgduan[i];//第一个数码管显示0;第二个显示1.。. delay(100);//时间越长 循环点亮越明显;时间越短 动态显示越稳定 P0=0x00;//消隐 防止上一次P0口的数据显示过快而产生重影 } } void main() { while(1) { display(); } } |
|
|
|
只有小组成员才能发言,加入小组>>
2513 浏览 0 评论
1083浏览 2评论
700浏览 1评论
452浏览 0评论
193浏览 0评论
328浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:39 , Processed in 1.092349 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号