单片机编程怎么用到proteus?基于proteus的51单片机开发实例
单片机编程怎么用到proteus?基于proteus的51单片机开发实例通俗的说,数码管是LED数码管的简称,从称呼上就可以看出数码管与LED的关系,数码管显示数字的原理与用火柴棒拼写数字很相似,用多个发光二极管也可以拼成各种数字符号,只不过数码管里面的LED不是圆圆的小点形状,而是长条状的。图2 一位数码管实物图数码管的实质是一组发光二极管LED的组合,所以其驱动电路和LED的驱动电路原理是一样的,区别只是LED数量的多少。因为数码管包含多个LED,所以51单片机驱动数码管电路要用到多个I/O端口,电路会复杂一些,因为用到了更多的I/O口,程序的编写也会复杂一些。本实例中我们用到的基础知识主要是数码管的结构和原理,以及单片机如何控制I/O端口实现数字的显示。一位数码管的实物如图如图2所示。
1. 基于proteus的51单片机开发实例(8)--一位数码管显示前面的实例中我们已经多次使用发光二极管LED作为单片机输出控制的演示器件,LED作为简单的指示,尤其是刚开始学习单片机的初学者来说,是能够很方便的指示电路和程序运行是否正确的最直观的演示器件,但是LED只能有点亮和熄灭两种状态,不能够指示更多状态了,如果我们想要使用51单片机做一个秒表,需要显示“1,2,3......”这些数字,该怎么办呢?本实例中,我们就来学习一下可以显示数字的数码管的电路和编程实现。
1.1. 实验目的
本实例的电路图如图1所示。
图1 一位数码管显示电路
本实例中,我们将要实现使一位数码管显示0~9的数字。了解数码管的特性和原理,掌握数码管驱动电路的设计以及程序编写。
1.2. 设计思路
数码管的实质是一组发光二极管LED的组合,所以其驱动电路和LED的驱动电路原理是一样的,区别只是LED数量的多少。因为数码管包含多个LED,所以51单片机驱动数码管电路要用到多个I/O端口,电路会复杂一些,因为用到了更多的I/O口,程序的编写也会复杂一些。
1.3. 基础知识
本实例中我们用到的基础知识主要是数码管的结构和原理,以及单片机如何控制I/O端口实现数字的显示。
1.3.1. 数码管的原理
一位数码管的实物如图如图2所示。
图2 一位数码管实物图
通俗的说,数码管是LED数码管的简称,从称呼上就可以看出数码管与LED的关系,数码管显示数字的原理与用火柴棒拼写数字很相似,用多个发光二极管也可以拼成各种数字符号,只不过数码管里面的LED不是圆圆的小点形状,而是长条状的。
图3所示是LED数码管的结构。
图3 数码管的结构
从数码管的结构可以很清晰的看出,数码管就是由LED组成的,从最简单的分析来看,如果想要组成一个数字,最少需要7个长条状的LED,如果再加上小数点,则需要8个LED,只不过小数点所用的LED不能是长条状的,而是点状的。所以叫做8段(不带小数点的则是7段)LED数码管,当然也有14段数码管、16段数码管,如图4、图5所示,其原理与8段数码管一样,只不过将数字段分得更细,以便能显示更多的字符。
图4 14段数码管
图5 16段数码管
从8段数码管的结构图可以看出,当数码管内部的发光二极管被点亮时,对应的那个段就会发光,所以可以根据数码管需要显示的数字或者字符推导出需要外加在数码管引脚上的电平组合,这个过程也被称为对数码管进行字形编码。
为了对字形编码方便,一般对数码管的每段LED都编了一个序号,就如图中的a b c,d e f g dp(dp表示小数点对应的那一段数码管)。并且对这些段进行了顺序组合,如图6所示。例如想要显示数字3,那么需要点亮的数码管的电平组合就是:a b g c d。从图6中可以查得显示3的编码.
注意编码还有共阳和共阴的区别,那么什么是共阳,什么是共阴呢?从图6、图7可以看出,共阳极数码管指的是数码管内部的LED的阳极全部连接在一起(简称公共端或com端),而共阴极数码管则是指数码管内部的LED的阴极连接在一起。这样将LED的阳极或者用阴极连接在一起的好处是节省了很多控制管脚,我们想象一下,如果数码管内部的LED的正极和负极分别都使用不同的引脚,那么一个8段数码管就需要引出16个引脚,而采用公共端的方式,则仅需要9个引脚,一下子减少了7个引出脚,这样不但能够有效减少数码管的体积,还能减少成本。
图6 数码管的共阳极和共阴极的区别
图7 数码管共阳极和共阴极示意图
1.4. 电路设计
本例采用共阳极数码管,电路图如图1所示。在学习LED的驱动电路时我们已经说过,单片机端口的驱动能力有限,所以我们前面的LED驱动电路都是演示性质的,不适合使用在实际电路中,而本例中,单片机要驱动数码管,相当于要一下子驱动8个LED,那么肯定不能使用我们之前的LED驱动电路了,这里我们使用三极管进行数码管驱动电路的设计,三极管的导通状态受到单片机P2.0口的控制,当P2.0输出低电平时,三极管导通,数码管的共阳极接到电源正极,,这时只要连接数码管各字段的单片机管脚P0.0~P0.7中任一位输出低电平,则电流即从电源正极经过三极管,相应的数码管的段流到单片机相应管脚里。从而点亮那一段数码管。
下面以数字6为例,来说明如何让共阳极数码管显示数字。要显示数字“6”,需要点亮数码管的相应字段是a c d e f g。则首先要让数码管的公共端(共阳极端)加电,即使P2.0输出低电平,三极管导通,这样所有段的共阳极都已接通电源,那么接下来就是让字段a c d e f g的负极接低电平,从而使它们导通,点亮,这就需要让连接这些字段所对应的单片机端口输出低电平。如果将8段数码管的8个字段依次连接到单片机P0端口的P0.0~P0.7,则显示数字6时,需要P0.0,P0.2,P0.3,P04,P0.5,P0.6输出低电平。
图8 数码管的段码表
1.5. 程序设计
本例实现的功能是让单片机控制数码管循环显示0~9的数字。
#include <AT89X52.h> //
unsigned char code DispTab[10] = {0xc0 0xf9 0xa4 0xb0 0x99 0x92 0x82 0xf8 0x80 0x90};
void Delay(void);
void main(void)
{
unsigned char i;
P2 = 0xfe;
while(1)
{
for(i = 0;i < 10;i )
{
P0 = DispTab[i];
Delay();
}
}
}
要编程实现程序控制数码管显示数字,首先要控制数码管的公共端,其次要控制数码管的段码端,结合上面图中共阳极数码管的段码表,即可编出合适的程序。
1.6. 实例仿真
编写完程序后,在keil环境下编译,生成hex文件,然后将该文件装载到proteus环境下的仿真电路的单片机中,点击开始仿真,就可观察到程序的执行结果。
1.7. 总结
通过本实例,我们一是学习了单片机驱动数码管的电路设计,也就是驱动较大电路器件的电路设计,第二学习数码管的显示原理,并且知道了数码管的共阳极和共阴极的区别,第三学习了根据数码管的数字编码表来编写数码管显示数字的程序。