本站是用的共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。原理示意图:
从上图可以看出,要是数码管显示数字,有两个条件:1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。这样才能显示的。
一般刚接触数码显示的网友搞不清字段和编码的关系,其实要看硬件的电路的组成的,本站的实验板上的数码显示是用P0口驱动的,原理图可以参阅实验板的网页,其计算的方法如下,供网友参考:
例:如要显示“0”,则要 a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段不亮;这样只要向P0口送出相应的代码即可,编码方法如下表:
dp | g | f | e | d | c | b | a | 显示的字符 | 编码 |
P0.7 | P0.6 | P0.5 | P0.4 | P0.3 | P0.2 | P0.1 | P0.0 | ||
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | C0H |
1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | F3H |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 2 | A4H |
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3 | B0H |
1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 4 | 99H |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 5 | 92H |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 6 | 82H |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 7 | F8H |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 80H |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 9 | 90H |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | A | 88H |
1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | F | 8EH |
程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的电源控制即可显示相应的字符;实验板载程序如下供参考:
ORG 0000H
ajmp start
org0030h
start: mov sp,#60h;
mov P0,#0A4H;//将数字2的编码送P0口
CLR P2.0;//打开第一位数码管的显示电源
ACALL D1MS;//调用延时1MS子程序
SETB P2.0;//显示1MS后关第一位数码管显示
MOV P0,#0B0H;//数字3的编码
CLR P2.1;//打开第二位数码管的显示电源
ACALL D1MS;//调用延时1MS子程序
SETB P2.1;//显示1MS后关第二位数码管显示
MOV P0,#99H;//数字4的编码
CLR P2.2;//打开第三位数码管的显示电源
ACALL D1MS;//调用延时1MS子程序
SETB P2.2;//显示1MS后关第三位数码管显示
MOV P0,#92H;//数字5的编码
CLR P2.3;//打开第四位数码管的显示电源
ACALL D1MS;//调用延时1MS子程序
SETB P2.3;//显示1MS后关第四位数码管显示
AJMP start;//返回从第一位显示循环
//1MS延时子程序1MS延时(按12MHZ算)
D1MS: MOV R7,#80
DJNZ R7,$
RET
END ;