1.动态数码管原理:
先上个原理图:
数码管其实就是多个led组成的(小数点也是一个),如上图,一个8加上小数点就是一个数码管,一共八个led,上图是八个数码管。
数码管按接法不同可分为共阴极和共阳极数码管。字面意思,共阴极就一个数码管的八段led阴极连一起,共阳极就一个数码管的八段led阳极阳极连一起。
声明一下,我的数码管是共阴极的。
下面是两张静态数码管(我觉得动态数码管就是把下面两张图片里GND和VCC去掉而接到其他管口上):
共阴:
共阳:
右上角是5v,即VCC高电压
只要控制a~g,dp的电压就可以控制led亮暗。
而动态数码管不同,如第一张图有八个数码管,如果都像静态数码管一样则需8×8=64个管口控制,所以动态数码管利用动态扫描原理来达到不同数码管亮不同数字(或字母:A,b,C,d,E,F)的目的。
动态扫描,看字面意思,扫描,是一个数码管一个数码管亮的且每次只亮一个,但因为人眼有视觉暂留,所以只要通过适当延时使亮的那段时间足够短以至于下一个数码管亮时上个数码管在我们眼中还是亮的就可以达到我们的目的——它们一起亮。
这样我们就可以用八个管口控制哪个数码管亮,用八个管口控制该数码管亮哪几段led,总共用了16个大大减少所需管口数。再加上38译码器,3通道输入,8通道输出,只需3+8=11个管口便可控制八个数码管。
这里有两个概念,段选和位选。
位选:“位”,顾名思义,选择哪个位置的数码管亮。
段选:“段”,选择已被选中的数码管哪几“段”led亮。
看开头给出的原理图,可知P0八个口控制段选(具体哪个口控制哪段led从图中很容易就可以看出来),先通过D74HC245是为了增加驱动,单片机电流不够数码管会很暗(有人说共阴极的电流才会不够,共阳极就可以直接驱动,我不太懂,待查)。要想知道位选由单片机哪个口控制还有一张图:
由之前已知的此芯片功能,我们可以通过控制P2^2,P2^3,P2^4口输入值来控制Y0(上横线)~Y7(上横线)哪个输出低电压,输出低电压的那个口连接的数码管就算被选中了。
想让该数码管发光,接下来段选那边肯定要输高电压了,由此确定P0口的值。
2.动态数码管编程:
#include sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned int code smgduan[16]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码管表,分别对应让数码管显示0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F;这是c语言中数组定义和初始化 void delay(unsigned int i) //自定义函数delay { while(i--); } void bigdisplay() //自定义函数bigdisplay { unsigned int i; for(i=0;i<8;i++) //c语言中for语句 { switch(i) //c语言中switch语句 ,此处为了处理亮第几个数码管问题——位选 { case 0:LSA=0,LSB=0,LSC=0;break; //i的值与哪个case后相同就执行哪条语句,再由真值表知38译码器输出状态,最后知亮第几个数码管 (编程时思维方向与此相反) case 1:LSA=1,LSB=0,LSC=0;break; case 2:LSA=0,LSB=1,LSC=0;break; case 3:LSA=1,LSB=1,LSC=0;break; case 4:LSA=0,LSB=0,LSC=1;break; case 5:LSA=1,LSB=0,LSC=1;break; case 6:LSA=0,LSB=1,LSC=1;break; case 7:LSA=1,LSB=1,LSC=1;break; } P0=smgduan[i]; //给P0赋值,值为上面smgduan数组中第i个数,注意:从0开始算;c语言中数组用法;若将这一条语句中i换成i+8最终效果图在下面。 delay(100); //调用函数delay来延时,延时不能太短也不能太久 P0=0x00; //P0全归零,不然亮第二个数码管时会有干扰,产生重影 } } void main() //主函数 { while(1) // 1一直符合循环条件,一直循环{}内语句 { bigdisplay(); //调用上面编好的函数bigdisplay,如果不自定义函数bigdisplay,也可直接在主函数main中写程序 } } 效果: 1.原来的代码: 2.将上面代码中指定的i换掉之后:记得从右往左看
上一篇:小白自学c51笔记之独立按键
下一篇:小白自学c51笔记之数码管1——D74HC245和D74HC138
推荐阅读最新更新时间:2024-11-11 11:36
推荐帖子
- PLC到底是什么呢?
- PLC到底是什么呢?PLC到底是什么呢?百度:)PLC英文全称ProgrammableLogicController,中文全称为可编程逻辑控制器,定义是:一种数字运算操作的电子系统,专为在工业环境应用而设计的。還有一種說法,電力線通信(PowerLineCommunication),信息工程學中,在傳送電力的電線上同時傳送的信息。PLC就是可编程逻辑控制器PLC就是可编程逻辑控制器
- dataidz RF/无线
- 【2024 DigiKey创意大赛】+ 用于车速估算的空速表制作
- 一、作品简介2SMPP03是一款气压计,这款气压计在外接空速管的基础上,可以作为空速计来使用。一般此类应用都会被应用在航模上,而我想到这种用法其实在汽车工业上也可以大有作为。汽车在隧道等GPS信号不佳的地方行驶时,对于里程和位置的估计,只能依靠转速表,陀螺仪,加速度计等传感器进行测量。这些传感器都有一个共同的问题,就是测不准,会受到其他因素干扰:比如里程表会受到胎压影响,惯性传感器会受到路面情况干扰等。因此需要多个传感器参与,使用不同的方法来测量,并将数据通过算法进行融合,以此减少
- 顺竿爬 DigiKey得捷技术专区
- MSP430 Main Memory Bootloader 介绍
- 在MSP430G2xx中实际上具有一个ROM版本的BSL(Bootloader),但是这个BSL仅仅支持外部MCU通过UART进行在线升级,而且而且所有的协议全部固化,无法进行修改或者更改其他接口方式进行升级操作。所以这个需要一个可以在主程序中运行的Bootloader,可以让外部MCU进行用户自定义的升级操作。同时TI也提供了一个基于MSP430G2553的参考例程,可以通过如下链接进行下载。http://software-dl.ti.com/msp430...test/in
- fish001 微控制器 MCU
- 终于可以踏上回家的行程,我兴奋啊!祝福兄弟姐妹们新年快乐!全家幸福!
- 终于可以踏上回家的行程,我兴奋啊!祝福兄弟姐妹们新年快乐!全家幸福!终于可以踏上回家的行程,我兴奋啊!祝福兄弟姐妹们新年快乐!全家幸福!我明天了。哈哈哈。还在上班,一路顺风。呵呵,回家吃多点,eeworld明年更加需要你!亢奋中!!!!!!!~~~~~~~~~~大家都回家过年了,我还要留守呢!!呵呵。。。祝大家新年快乐!!新年大展宏图啊!!!12号才回家,羡慕ing痛苦的是还要上班更痛苦的整个,放假了还要加班JFand祝福····2rd祝福大家,
- renkes 嵌入式系统
- 摄像头的寿命有多久?
- :这要看摄像头本身的电路设计而定,如有些以COMS为基础的摄像头使用上一般都比以CCD为基础的摄像头寿命要短;COMS的摄像头有些甚至使用几个月便告终正寝,而CCD摄像头若配合品质优良的供电器皆可持续通电使用几个月,甚至数年都没什么问题。 一般摄像头的工作温度为―10度~50度,所以在这个范围之外,是有可能导致摄像头故障或暂时失灵的。摄像头的寿命有多久?
- intebank 安防电子
- 采用BL8301的高性能ppfc镇流器(T8 36W)
- 500){this.resized=true;this.width=500;this.alt=\'这是一张缩略图,点击可放大。\\n按住CTRL,滚动鼠标滚轮可自由缩放\';this.style.cursor=\'hand\'}\"resized=\"true\">小弟初来乍到,特发一量产的镇流器给大虾们看看。欢迎大哥大姐、弟弟妹妹来砸砖。最好斑竹加精!!!该镇流器具有预热启动以及漏气保护、换灯自启动等功能,参数如下:PF0.9(220V的时候可以调到0.95以上)THD1
- zbz0529 电源技术
设计资源 培训 开发板 精华推荐
- LT6657BHMS8-2.5 1.5V 最小电源电压的典型应用电路
- LTC3815IUFE 1.2V/6A 2MHz 降压稳压器的典型应用电路
- 使用 ROHM Semiconductor 的 BU4922 的参考设计
- 【航顺训练营】HKF103VET6开发板+677952A
- TC212-UDS
- AD8333-EVALZ,基于 AD8333 50MHz I/Q 解调器的评估板
- 使用 MIC4575、16V - 24V 至 12V/1A 降压转换器的典型应用电路
- RD-400,使用 FAN7382 100W、CCCV、多通道 LED 电源的参考设计,适用于工业照明应用
- FEBFSL336LRN-CS04U07A-GEVB:多输出降压转换器
- Temperatur Humidity Sensor SHT21