八段数码管的显示问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 14:37:52
我用89S51单片机设计电子时钟,在八个八段数码管显示。其它的所有功能都已经实现了,但是某些数码管的显示有问题,比如说0,它在显示的时候总是将g段显示,也就是显示成8,经过测试,数码管本身是没有问题的,问题出在我的程序,但是却找不出来,调整显示的延时也没有什么变化。下面我将主要的代码写出来,恳请高手们指点。
;********************显示时间子程序***************************
;将存放在s1_buf,s2_buf,m1_buf,m2_buf,h1_buf,h2_buf的数据显示出来
show_time:
mov p2,#0ffh
mov a,s1_buf ;显示秒的个位
lcall show_number
mov p2,#7fh
lcall delay_led ;

mov a,s2_buf ;显示秒的十位
lcall show_number
mov p2,#0bfh
lcall delay_led

mov a,#0bfh ;显示分隔符“—”
mov p0,a
mov p2,#0cfh
lcall delay_led

mov a,m1_buf ;显示分的个位
lcall show_number
mov p2,#0efh
lcall delay_led

mov a,m2_buf ;显示分的十位
lcall show_number
mov p2,#0f7h
lcall delay_led

mov a,#0bfh ;显示分隔符“—”
mov p0,a
mov p2,#0fbh
lcall delay_led

mo

我看了你的程序,由于你只给出了部分程序我不能说什么,另外估计你使用的是动态显示,低电平有效,用P2作为数码管选择信号。因为引起这个因素很多。我说几中情况,首先看一下你中断时侯有没有保护一些敏感数据,另外就是lcall delay_led 后面加 mov p2,#0ffh 看一下会不会正常

更换位时将端口清零,再加2个NOP。

看你的程序总体没什么大问题,看问题是P0。6角一直是0电平,查下单片机有没坏,要不就看是不是焊接时不小心把引脚给短接到其它地方了。如果硬件真的没问题,就重新写个程序再看看,另外看下有不是有什么地方开中断,导致冲突。

测试引脚很快的,先把该脚从电路上断开,外接一个电阻加LED,随便写个闪灯程序试下就知道了:

ORG 0000H
SJMP START

START:

CPL P0.6 ;------------

LCALL DELAY
SJMP START

;-------------
DELAY: ;高精度延时0.5s (无中断)
DEY1 DATA 1FH
DEY2 DATA 1EH
DEY3 DATA 1DH
MOV DEY1,#50 ;0.5S
DL1:
MOV DEY2,#200 ;10mS
DL2:
MOV DEY3,#184 ;50uS 18.441828M(5T)
DJNZ DEY3,$
DJNZ DEY2,DL2
DJNZ DEY1,DL1
RET
;-------------

END

还有,如果这只是你程序中的一部分的话,最好查下程序的地址空间分配,看有没有冲突。

应该是数码管放错了

换个共阳或者共阴的