一、原理图
首先知道连接的引脚是最关键的,从图片可以看出来,控制显示信号的是p0~P7,这个称为段选,而上面的LED1~LED8则是控制是否显示的,称为位选。简单来说就是段选对应值,位选对应是否亮
LED1~LED8由连接到了74HC138译码器,这样就成了由P22、P23、P24三位引脚控制了,而三位正好对应8种,000对应LED1,001对应LDE2,010对应LDE3,011对应LED4,100对应LED5,101对应LED6,10对应LED7,111对应LED8。通过对P22、P23、P24的赋值从而选择对应的LED
二、两种查表方式
汇编中有两种查表方式
一种是 MOVC A,@A+PC
另一种是 MOVC A,@A+DPTR
都是寄存器间接寻址,字面意思上就是A的值叫上PC或者DPTR中的值再传回A.第一种呢,我下面的代码用的就是这种,下面会说。PC寄存器就是储存下一条指令的地址的
第二种,举个例子就明白了
首先定义一个码表
ORG 1000H
DB 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
接着把码表的位置给DPTR
MOV DPTR,#1000H
给A赋初值
MOV A,#1
MOV A,@A+DPTR
这是A的值变成了码表的0XF9,显示在共阳极数码管上就是1
三、代码编写
首先,一定一定一定要搞清楚你的数码管模块是共阳极还是共阴极。
区分方法如下:
1.发光单元连接方式不同,按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。
2.工作原理不同,共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
3.数码管公共极的连接不同,共阳数码管在应用时应将公共极COM接到+5V,共阴数码管在应用时应将公共极COM接到地线GND上。
下面代码奉上:
ORG 0000H
LJMP START
ORG 0030H
START:
MOV 20H,#2
MOV 21H,#0
MOV 22H,#2
MOV 23H,#2
MAIN:LCALL DISP
AJMP MAIN
DISP: MOV A,20H
ACALL SEG7; //查表操作
MOV P0,A
MOV p2,#00H
ACALL DLY
MOV A,21H
ACALL SEG7
MOV p0,A
MOV P2,#04H
ACALL DLY
MOV A,22H
ACALL SEG7
MOV p0,A
MOV P2,#08H
ACALL DLY
MOV A,23H
ACALL SEG7
MOV P0,A
MOV P2,#0CH
ACALL DLY
RET
DLY:MOV R7,#2
D1:MOV R6,#40
DJNZ R6,$
DJNZ R7,D1
RET
SEG7:INC A
MOVC A,@A+PC
RET
DB 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
END
在数码管上显示2022四个数字,我这个是共阴极的数码管。其中SEG7为查表操作的子程序,PC就是下面的码表。因为码表是从0开始的,因此,要取0就得是1,要取2就得是3,因此A必须要加1,因为A是偏移量。