为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

AVR事无巨细系列八,数码管闪亮

2010-12-07 8页 pdf 331KB 6阅读

用户头像

is_188950

暂无简介

举报
AVR事无巨细系列八,数码管闪亮 事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com 事无巨细,数码管闪亮 仍然是深夜,仍然精力充沛,遂来写写数码管的显示。篇幅也许会很长,各位看客最 好端杯茶慢慢消遣。 言归正传,我们先看看什么是数码管(图片来自网络): 上图就是各种长相各种样子...
AVR事无巨细系列八,数码管闪亮
事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com 事无巨细,数码管闪亮 仍然是深夜,仍然精力充沛,遂来写写数码管的显示。篇幅也许会很长,各位看客最 好端杯茶慢慢消遣。 言归正传,我们先看看什么是数码管(图片来自网络): 上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。 简单讲讲它的构造:一般数码管都称为“X 位 X 段数码管”:比如一位八段数码管、两 位八段数码管、四位八段数码管等。“位”即是指这排数码管共有几位(即有几个“8.”), “段”则是指每一位数码管由几段组成,很容易数出来,是八段(小数点也算一段)如上图 左下则是一位八段数码管,而最上边的就是四位八段数码管了。应该很容易理解。而这些“段”, 其实是一个个长条形状的发光二极管(LED),所以数码管点亮的时候,本质上就是这八个发 光二极管的某几个在被点亮,就组成了我们需要的字符。 我们来看看它的工作原理,如下图(来自 google,鄙视百度充满广告的搜索结果) Bb s . Ce p a r k. co m 事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com 上图展出了常用的两种数码管的引脚排列和内部结构。总所周知,点亮发光二极管就是 要给予它足够大的正向压降。所以点亮数码管其实也就是给它内部相应的发光二极管正向压 降。如上图左(一共 a、b、c、d、e、f、g、DP 八段),如果要显示“1”则要点亮 b、c 两 段 LED;显示“A”则点亮 a、b、c、e、f、g 这六段 LED;我们还知道,既然 LED 加载的是 正向压降,它的两端电压必然会有高低之分:如果八段 LED电压高的一端为公共端,我们称 之为共阳极数码管(如上图中);如果八段 LED 电压低的一段为公共端,则称之为共阴极数 码管(上图右)。所以,要点亮共阳极数码管,则要在公共端给予高于非公共端的电平;反 之点亮共阴极数码管,则要在非公共端给予较高电平。 一般共阳极数码管更为常用,为什么呢?这是因为数码管的非公共端往往接在 IC 芯片 的 IO上,而 IC芯片的驱动能力往往是比较小的,如果采用共阴极数码管,它的驱动端在非 公共端,就有可能受限于 IC 芯片输出电流不够而显示昏暗(比如 51 单片机),要外加上拉 电阻或者是三极管加大驱动能力。所以使用共阳数码管的好处是:将驱动数码管的工作交到 公共端(一般接驱动电源),加大驱动电源的功率自然要比加大 IC 芯片 IO 口的驱动电流简 单许多。另一方面,这样也能减轻 MCU的负担。 现在来看我们 CEPARK板子上用来驱动数码管的一种芯片:74HC595。 先了解两个简单的概念,我尽量用易懂的白话阐述: 串行口:既传输数据只用两个 IO,输出 IO和输入 IO,通过时钟的配合一次只做一位数 据的传输,比如传输一个字符类型的八位数据,就要八次时钟配合八次传输。 并行口:相比于串行口,并行口一次可以传输多位数据(8位、16 位甚至 32位),但是 要占用大量 IO 口(也是 8 个、16 个、或者 32 个 IO),原理与串行口类似:数据在数个 IO 上有效后,一次时钟配合传输这数位数据。 明显,串行口节省 IO,但是传输速度慢。并行口速度快,但是占用大量 IO。那到底哪 种更被广泛使用呢?对,串行口。传输速度取决于 CPU 的主频,传输位数取决于 IO 口的个 数。相比于主频来说,MCU的 IO要宝贵的多,当今时代,CPU的主频符合摩尔定理增长定理: 即每十八个月就可以大幅增长。但是因为制造技术的限制,IO 数就远远没有这么快的增长 了。 现在来看 74HC595,双列直插封装(DIP),是一种移位寄存器内部带有移位存储器和数 据存储器,数据存储器的数据直接展现在它的输出 IO 上。它最主要的功能,就是将串行数 据输出转变为并行数据输出,达到一种扩展 IO的功能。见下图(来自官方 PDF): Bb s . Ce p a r k. co m 事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com 上图展示了 74HC595的管脚,其中 14脚,串行数据输入脚 1~7,15脚刚好是八位的并行输出口 13脚,输出使能端,高电平有效,即该引脚给予高电平是,74HC595 才能输出数据 12 脚,存储时钟,在每个上升沿,将移位寄存器的数据存储至存储寄存器,即将 74HC595 的数据刷新输出。 11脚,移位时钟,也是在每个上升沿,将 14脚即串行数据输入脚的数据移至移位寄存 器。注意首先写入数据的最高位。 9脚,串行输出脚,注意该脚的数据是从移位寄存器的最高位移过来的。一般用于两级 74HC595的级联,CEPARK AVR的板子便是如此。 现在阐述一下 74HC595的工作过程:通过移位时钟的配合,将串行输入口的数据逐位移 进移位寄存器。移位完成之后,通过存储时钟将移位寄存器的数据移至存储寄存器,此时输 出 IO 对外显示相应电平。特别说明 9 脚(SQH),该脚的数据是从 7 脚(QH)移上来的,即 进行八次移位后,数据在第九次移位第一次来到 9 脚。理解这点,才能理解 CEPARK AVR 的 工作原理。 好,现在我们可以看看 CEPARK AVR的数码管显示模块的原理图: Bb s . Ce p a r k. co m 事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com 很明显,论坛的板子用的是四位八段共阳极数码管。其中 9~12 脚分别为四位数码管各 自的公共端,要点亮某一位,就要给 9~12这四个脚的某一位高电平(共阳),1~8脚给相应 的低电平。图中的电阻为 470欧限流电阻,计算方法请参看《事无巨细,流水灯简入》一文。 下面是两片 74HC595级联,其中比较关键的几点: 1.注意看他们的 11脚和 12脚共用了 AVR单片机的 PB7和 PB4,即共用了移位时钟和存储 时钟,表示他们对数据的操作是同时进行的。 2.两片 74HC595的 9脚相连,表示要将上级 74HC595的串行数据再以串行的方式传输到下 级。但是不是直接传输,而是通过上级 74HC595 的移位寄存器。即如果要将数据写至下级 74HC595,则必须先把数据依次移到上级的 9脚,再配合时钟一位一位写入。(上级和下级以 数据流先后为准,此原理图数据先到达左边的 74HC595,遂其为上级) 这个显示模块的工作原理并不复杂,上级 74HC595提供段选信号,下级 74HC595提供位 Bb s . Ce p a r k. co m 事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com 选信号。首先配合移位时钟先将八位位选信号(注意,一定是位选信号,因为先写入的数据 最终会存储在下级 74HC595 中!!!)写入上级 74HC595,然后通过 16 次移位将其移植下级 74HC595;再将八位段选信号写入上级 74HC595。完成之后给存储时钟上升沿,一次刷新两 级 74HC595的 IO电平状态。数码管即显示相应信息了。 这样的设计方法,会给程序的编写带来难度,电路连线更复杂,稍带电路成本增加。 但其好处足以掩盖上述缺点: 1.只用 3个 MUC的 IO就可以驱动 8位数码管,极大节省了 IO。(本应占用 16个 IO) 2.两级 74HC595 级联,时钟线共用使得段选和位选信号同时得到刷新,避免了因为分 步刷新而引起的数码管短暂乱码的现象。(这个读者要细细体会,我接触过的大部分的板子 是做不到这点的) PS:在此多说一句,评判一个电子产品,质量,工作稳定性和成本,永远都是三个最重 要的要素,特别的这是个追求高效率,对价格敏感的时代。所以孰重孰轻,笔者相信读者经 过权衡,心中自然明了。 现在来看这次实验的源程序,功能是在八位数码管上从左到右依次显示“12345678” 八个数字。 #include #include #define uint unsigned int #define uchar unsigned char unsigned char const LedData[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管端选数组,静态 unsigned char const LedPos[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //数码管位选数组,静态 uchar n,m=0xfe; void HC595send(uchar x); Bb s . Ce p a r k. co m 事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com void init(void); void HC595shift(void); void HC595store(void); void display(uchar pos,uchar dat); //以上为各个函数声明, 详细功 见下 int main(void) { init(); while(1) { for(n=1;n<9;n++) //循环显示,八次 { display(n-1,n); //显示函数调用 HC595store(); } } } void init(void) //IO 初始化函数 { DDRB=0xff;//B 口全部输出 PORTB=0x00;//B 口全部低电平 } void HC595send(uchar x) //HC595 字节写入函数 { uchar n,temp; for(n=0;n<8;n++) { Bb s . Ce p a r k. co m 事无巨细,AVR学习系列 BBS.CEAPRK.COM 发布 作者:LOSINGAMONG 数码管闪亮 E-mail:Losingamong@qq.com temp=x&0x80; if(temp!=0) { PORTB|=(1<总结
如下: 某位置 1:PORTX|=(1<
/
本文档为【AVR事无巨细系列八,数码管闪亮】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索