数码管驱动与程序设计.ppt
5.4 数码管驱动与程序设计,目 录,LED数码管的内部结构,单个LED数码管,单个数码管就是用8个独立的LED发光二极管按照“日”字形排列起来的。在实际应用中,一般会将8个LED的阳极或者阴极并联在一起组成数码管。由此可见,一个数码管至少有9个引入端,其中ah被定义为段选端,并联在一起的公共端com被定义为位选 端。,8个独立的LED发光二极管,abcdefgh,COM,COM,abcdefgh,共阴:阴极并联,共阳:阳极并联,a,b,c,d,e,f,g,h,LED数码管的工作原理,abcdefgh,GND,+5V,abcdefgh,共阴极数码管,共阳极数码管,笔段发光:位选端输入低电平0;段选端输入高电平1。,a,b,c,d,e,f,g,h,a,b,c,d,e,f,g,h,笔段发光:位选端输入低电平1;段选端输入高电平0。,COM,COM,10000000,10000000,通过控制笔段发光,数码管可以显示数字09,以及一些字母符号等。,单个共阳极数码管LN3161BS,Vcc,P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0,LN3161BS引脚结构图它有10个管脚,2个内部相连的com端1和6,8个位选端。LN3161BS测试电路将段选端ah连接到单片机的P0口,则通过程序即可控制笔段的亮灭。,与单片机相连,R8 1kR7 1kR6 1kR5 1kR4 1kR3 1kR2 1kR1 1k,一个数码管只能显示1位数字,如果要 显示多位数字怎么办?方法一:将多只单个数码管并接在一起。缺 点:4位并列的数码管就需要4 8=32根段 选信号,管脚过多,连线复杂。方法二:动态扫描方式进行数码管显示。优 点:不增加段选信号线,利用人眼的视觉暂 留效应,使数字轮流显示来实现。,10011001,10011001,4位动态数码管,LN3461AS四位动态共阴数码管内部结构,LN3461BS四位动态共阳数码管内部结构,段 选 端 复 用,段 选 端 复 用,采用段选端复用的方法,仅需12个 管脚。两者外型尺寸大小、管脚的排列顺 序和名称完全一样。,目 录,TinyView数码管电路组成,TinyView 数码管电路,4位共阳数码管LN3461BS,限流电阻,PNP型三极管,单片机I/O口驱动能力不够,增加三极管以提高com口的电流驱动能力,与单片机相连,目 录,笔段与数值的对应关系,a,b,c,d,e,f,g,h,+5V,hgfedcba,共阳极数码管,11111110,数码管有8个笔段,每个笔段有亮和灭两种状态,则每个数码管有28=256种显示组合,去掉“点(h)”,其余7个笔段有27=128种显示组合。,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe,11111101,11111011,11110111,11101111,11011111,10111111,01111111,假设将ah对应8位二进制数的07位:,七段共阳极数码管段码表,a,b,c,d,e,f,g,h,假设将ah对应8位二进制数的07位:,0,1,1,0,0,0,0,0,0,0 xC0,1,1,1,1,1,1,0,0,1,0 xF9,2,1,0,1,0,0,1,0,0,0 xA4,3,1,0,1,1,0,0,0,0,0 xB0,4,1,0,0,1,1,0,0,1,0 x99,实验1TinyView段码表生成,8个开关控制数码管的8个显示段,JP1与JP36的segAsegH连接,将JP36的com连接到与K9相连的JP1,位选控制开关,8个段选控制开关,当位选控制开关K9拨到位置0时,三极管导通,com1被拉到高电平,K1K8对段选端的控制才有效。假设将K1K8对应8位二进制数的07位,通过实验验证:笔段数值对应关系表和七段共阳极数码管段码表。,实验24位数码管显示1234,实验分析:只要求在4位数码管上显示1234,但并没有要求在同一时间显示数字。实现方法:每次只让一个数码管显示。将与K9相连的JP1先与JP36中的com1相连,拨动K1K8在第1个数码管上显示正确的数字;然后将K9拨到控制com2,依此类推,实现在4个数码管上分别显示1234。,实验步骤:第1个数码管显示1;第2个数码管显示2;第3个数码管显示3;第4个数码管显示4。,根据段码表,拨到显示字符“1”的位置1111 1001,与com1相连,根据段码表,拨到显示字符“2”的位置1010 0100,与com2相连,根据段码表,拨到显示字符“3”的位置1011 0000,与com3相连,根据段码表,拨到显示字符“4”的位置1001 1001,与com4相连,目 录,数码管的动态扫描显示实验电路,与P1口相连,相当于K1K8位置,分别与P3.0、P3.1、P3.2、P3.3相连,替代手动拨插连接它们的引线,动态扫描:每次只有一位数码管显示,即在实际操作过程中数字是轮流显示的,但只要轮流操作的速度达到一定的范围,人眼看到的将是整体显示的效果。,数码管的动态扫描显示程序实现,.AREAHOME(ABS,CODE).ORG 0 x0000Start:MOV P1,#0 xF9;等效:将K1K8拨到显示字符“1”的位置CLR P3.0;等效:将com1连接到K9(0电平)ACALL Delay;延时SETB P3.0;等效:拔掉com1的连接线MOV P1,#0 xA4;等效:将K1K8拨到显示字符“2”的位置CLR P3.1;等效:将com2连接到K9(0电平)ACALL Delay;延时SETB P3.1;等效:拔掉com2的连接线MOV P1,#0 xB0;等效:将K1K8拨到显示字符“3”的位置CLR P3.2;等效:将com3连接到K9(0电平)ACALL Delay;延时SETB P3.2;等效:拔掉com3的连接线MOV P1,#0 x99;等效:将K1K8拨到显示字符“4”的位置CLR P3.3;等效:将com4连接到K9(0电平)ACALL Delay;延时SETB P3.3;等效:拔掉com4的连接线SJMP Start;返回Start,循环执行程序,0 xF9:1111 1001 字符“1”的数值,将0 xF9送往P1口,即数码管的段选端segAsegH,P3.0置0,三极管Q11导通,com1被拉高,第1位数码管将显示字符“1”,延时长短:在保证数码管显示亮度的前提下尽量短,P3.0置1,三极管Q11关闭,第1位数码管的所有笔段全部熄灭,10011111,10011111,0,1,1,0,数码管的动态扫描显示实验现象,人眼看到的最终效果:,动态扫描:每次只有一位数码管显示,即在实际操作过程中数字是轮流显示的,但只要轮流操作的速度达到一定的范围,人眼看到的将是整体显示的效果。,目 录,数字符号的意义,1?,2?,对小孩而言,只有将数字字符和具体的事物联系起来,才能真正理解数字的含义,对机器而言同样如此。,数字符号只有和具体的事物联系起来才有意义,否则将什么也不是。,让单片机能够识别数字字符,在上一个实验中,显示了“1234”,但单片机并“不知道”显示的“1234”是什么意思?,如何让单片机“知道”这些数字符号呢?在数字字符和数值之间建立对应的关系。比如,数字“1”和数值“0 xF9”之间的对应关系,即数值“0 xF9”在数码管上显示的符号就是数字“1”。“段码表”既建立了数字与数值之间的这种联系。,如何用程序来实现呢?将这些无序的数据列成表格。如:对Table表格的数据,可以用指令“MOVC A,A+DPTR”查找,其所查的表地址是由“DPTR”寄存器(16位)和A寄存器(8位)相加而来,所以可以将DPTR的数值固定在Table不动,而用A寄存器做查表指针。当A 的数值为09时,其所指向的地址偏移量正好是数值所对应的数字符号。,Table:.DB 0 xC0,0 xF9,0 xA4,0 xB0,0 x99;字符:0、1、2、3、4.DB 0 x92,0 x82,0 xF8,0 x80,0 x90;字符:5、6、7、8、9,数字字符获取子程序范例,从“数字字符与数值的关系”可知,使用查表法即可找到与数字符号相对应的数值。,Get_Segment_Code:ANL A,#0 x0F;屏蔽高4位以便调出字符 MOV DPTR,#Table;DPTR取表格首地址MOVC A,A+DPTR;查表取得字符真值RETTable:.DB 0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;09字符表,(数字)字符获取子程序范例:,