STC89C52控制MAX7219驱动数码管无法正常显示

做毕业设计,卡住了,两个礼拜了还解决不了,救救我啊。用max7219驱动3个七端数码管,上电全显示8.程序在Proteus中仿真时正常,用示波器检测,7219输出到数码管... 做毕业设计,卡住了,两个礼拜了还解决不了,救救我啊。用max7219驱动3个七端数码管,上电全显示8. 程序在Proteus中仿真时正常,用示波器检测,7219输出到数码管的DIG0.1.2公共端均有电平变化,制的板应该没有问题,查过2遍,板也做了2块了。求各位高手帮忙解决问题。Protel图和汇编程序如下:

;单片机与HD7279接口定义
CLK EQU P1.0
DIN EQU P1.1
LOAD EQU P1.2

ORG 0000H
LJMP DISP
ORG 0090H ;
;7219初始化
DISP:
MOV A,#09H ;置译码器方式寄存器地址
MOV R7,#0FFH ;选择译码方式
LCALL MAX7219 ;写入

MOV A,#0AH ;置亮度寄存器地址
MOV R7,#05H ;选择占空比
LCALL MAX7219 ;写入

MOV A,#0BH ;置MAX7219显示扫描位数寄存器地址
MOV R7,#02H ;选择3位显示方式
LCALL MAX7219 ;写入

MOV A,#0CH ;置关闭显示寄存器地址
MOV R7,#01H ;选择进入正常工作,00H表示关闭
LCALL MAX7219 ;写入

;显示数据
MOV 30H,#05H ;显示520
MOV 31H,#02H
MOV 32H,#00H

MAIN: MOV R0,#30H

CLR P1.2 ;
MOV R1,#01H ;指向第0位LED
MOV R3,#03H ;显示器个数
LOOP: MOV A,@R0 ;取显示缓冲区数据
MOV R7,A ;显示2
MOV A,R1 ;LED显示的位地址给A
LCALL MAX7219 ;
INC R0 ;指向下一个显示数据
INC R1 ;指向下一位LED
DJNZ R3,LOOP ;
SJMP MAIN

;MAX7219子程序
MAX7219:
CLR P1.2 ;将LOAD信号拉低
LCALL XH1 ;一位字节送入7219
MOV A,R7 ;
LCALL XH1 ;
NOP
NOP
SETB P1.2 ;产生LOAD上升沿,锁存数据
RET

XH1: MOV R2,#08H ;总共有8位,移8次
NEXT: CLR P1.0 ;将CLK拉低
RLC A ;A中值左移入进位累加器C中
MOV P1.1,C ;给DIN口
NOP
SETB P1.0 ;CLK上升沿,移入数据
NOP
DJNZ R2,NEXT ;没完成则继续
RET

SHORT_DELAY:
MOV 10H,#40 ;10ms
DEL1: MOV 11H,#125
DEL2: DJNZ 11H,DEL2 ;125*2us=0.25ms
DJNZ 10H,DEL1 ;0.25ms*40=10ms
RET

END
展开
 我来答
zyj1739
2010-12-02 · TA获得超过140个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:191万
展开全部
如果在仿真是正确的话,会怀疑板子线路,程序是不会跑错的,在锁存数据时加一段延时吧。让数据稳定。

参考资料: MS

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式