
七段数码管程序设计
七段数码管程序设计

单片机控制LED数码管的显示5.35.3.1LED数码管显示原理bg公共端aev共阴极的数码管体体体体体体体体10aoao,com阴极必须接地bobo才有可能显示数字cOCO9dodo共阳极的数码管,eoeoCCcom阳极必须接高电fofo平才能显示数字。dgogodpdpodpo23415思考为什么?dpcd公共端e公共端(b)共阳极(a)共阴极(c)外形及引脚
2 5.3 单片机控制LED数码管的显示 5.3.1 LED数码管显示原理 共阴极的数码管 ,com阴极必须接地 才有可能显示数字。 共阳极的数码管, com阳极必须接高电 平才能显示数字。 思考为什么?

为使LED数码管显示不同字符,要把某些段点亮,就要为数码管各段提供一字节的二进制码,即字型码(也称段码)。习惯上以“a”段对应字型码字节的最低位。各字符段码见表5-1。表5-1LED数码管的字型码显示显示共阴极共阳极共阴极共阳极字符字符字型码字型码字型码字型码0c3FHCOH39HC6H1d06HF9H5EHA1H2E5BHA4H79H86H3F4FHBOH71H8EH4P66H99H73H8CH5U6DH92H3EHC1H6T7DH82H31HCEH707HF8H6EH91Hy8H7FH80H76H89H9L6FH90H38HC7H“灭”A77H88HO0HFFHb...7CH83H.3
为使LED数码管显示不同字符,要把某些段点亮,就要为数码管各 段提供一字节的二进制码,即字型码(也称段码)。习惯上以“a”段 对应字型码字节的最低位。各字符段码见表5-1。 3

如要在数码管显示某学符,只需将该学符学型码加到各段上即可。例如某存储单元中的数为“02H”,想在共阴极数码管上显示“2”,需要把“2”的字型码“5BH”’加到数码管各段。将欲显示字符的字型码作成一个表(数组),根据显示字符从表中查找到相应字型码,然后把该字型码输出数码管各个段上,同时数码管的公共端接地,此时在数码管上显示字符“2”。下面介绍单片机如何控制LED数码管显示字符
4 如要在数码管显示某字符,只需将该字符字型码加到各段上即可。 例如某存储单元中的数为“02H”,想在共阴极数码管上显示“2”,需 要把“2”的字型码“5BH”加到数码管各段。将欲显示字符的字型码作成一 个表(数组),根据显示字符从表中查找到相应字型码,然后把该字型码输 出数码管各个段上,同时数码管的公共端接地,此时在数码管上显示字符 “2”。 下面介绍单片机如何控制LED数码管显示字符

【例5-5】利用单片机控制一个8段LED数码管先循环显示单个偶数:0、2、4、6、8,再显示单个奇数:1、3、5、7、9,如此反复循环显示。本例原理电路及仿真结果,见图5-6。参考程序如下:
5 【例5-5】利用单片机控制一个8段LED数码管先循环显示单个偶数:0、2、 4、6、8,再显示单个奇数:1、3、5、7、9,如此反复循环显示。 本例原理电路及仿真结果,见图5-6。 参考程序如下:

银GNDC2U1560R119¥3922pFXTAL1PO.OIADO838PO.1/AD1X1¥37口PO.21AD2361812MHzXTAL2PO.3/AD335C1PO.4IAD434PO.51AD533PO.6/AD6329R7.560RSTPO.71AD722pF36888868P2.0/A84VocP2.11A9R9P2.2/A10福PSEN.P2.3/A11.创会220P2.4/A1231P2.5/A13P2.6/A14P2.7iA15RRRRRP1.0P3.0/RXD10uFP1.1P3.1/TXDR88#8P3.2ANTO110kP3.3ANT1VcoP3.4/TOP3.5/T1P3.6RP1.7P3.7RDAT89C51图5-6控制数码管循环显示单个数字的电路及仿真6
6 图5-6 控制数码管循环显示单个数字的电路及仿真

#include#defineucharunsignedchar#define uint unsigned int#defineoutPouchar codeseg[j={0x3f,0x5b,0x66,0x7d,0x7f0x06,0x4f,0x6d,0x07,0x6f);Ⅱ共阴极段码表voiddelay1000ms();void main(void)tuchari;while(1)Kout=seg[i];delay1000ms();i++;IⅡ如段码为6f,表明一个循环显示已结束if(seg[i]==0x6f)i=0;77
#include #define uchar unsigned char #define uint unsigned int #define out P0 uchar code seg[]={0x3f,0x5b,0x66,0x7d,0x7f,0x06,0x4f,0x6d,0x07,0x6f}; //共阴极段码表 void delay1000ms(); void main(void) { uchar i; while(1) { out=seg[i]; delay1000ms(); i++; if(seg[i]==0x6f)i=0; // 如段码为6f,表明一个循环显示已结束 } } 7

voidDelay1oms(uintk)I/@12.000MHztunsignedchari,j;for(;k>o;k--)(i= 117;j=184;do(while (--j);} while (--i);17说明:语句if(seg[i]==0x6f)i=0;含义:如果欲送出的数组元素为0x6f(数字“9”段码0x6f,即结束码),表明一个循环显示已结束,则i=0,则重新开始循环显示,从段码数组表的第一个8
void Delay10ms(uint k) //@12.000MHz { unsigned char i, j; for(;k>0;k-) { i = 117; j = 184; do { while (-j); } while (-i); } } 说明:语句if(seg[i]==0x6f)i=0; 含义:如果欲送出的数组元素 为0x6f(数字“9”段码0x6f,即结束码),表明一个循环显示已结 束,则i=0,则重新开始循环显示,从段码数组表的第一个 8

元素seg[0],即段码0xc0(数字o)重新开始显示。5. 3. 2LED数码管的静态显示与动态显示两种显示方式:静态显示和动态显示。1.静态显示方式无论多少位LED数码管,都同时处于显示状态。多位LED数码管工作于静态显示方式时,各位共阴极(或共阳极全接在一起并接地(或接+5V);每位数码管段码线(a~dp)分别与一个8位I/O口锁存器输出相连。如果送往各个LED数码管所显示字符的段码一经确定,则相应/O口锁存器9
9 元素seg[0],即段码0xc0(数字0)重新开始显示。 5.3.2 LED数码管的静态显示与动态显示 两种显示方式:静态显示和动态显示。 1. 静态显示方式 无论多少位LED数码管,都同时处于显示状态。 多位LED数码管工作于静态显示方式时,各位共阴极(或共阳极) 连接在一起并接地(或接+5V);每位数码管段码线(a~dp)分别 与一个8位I/O口锁存器输出相连。如果送往各个LED数码管所显示字 符的段码一经确定,则相应I/O口锁存器

锁存的段码输出将维持不变,直到送入下一个显示字符段码。静态显示方式显示无闪烁,亮度较高,软件控制较易。图5-7为4位LED数码管静态显示电路,各数码管可独立显示,只要向控制各位I/O口锁存器送相应显示段码,该位就能保持相应的显示字符。这样在同一时间,每一位显示的字符可各不相同。静态显示方式占用1/0口端口线较多。图5-7电路,要占用4个8位1/0口(或锁存器)。如数码管数目增多,则需增加I/O口数目。10
锁存的段码输出将维持不变,直到送入下一个显示字符段码。静态 显示方式显示无闪烁,亮度较高,软件控制较易。 图5-7为4位LED数码管静态显示电路,各数码管可独立显示, 只要向控制各位I/O口锁存器送相应显示段码,该位就能保持相应的 显示字符。 这样在同一时间,每一位显示的字符可各不相同。静态显示方 式占用I/O口端口线较多。图5-7电路,要占用4个8位I/O口(或锁存 器)。如数码管数目增多,则需增加I/O口数目。 10