为什么数码管不显示

LED1EQU30H;初始化定义LED2EQU31HLED3EQU32H;存放三个数码管的段码ADCEQU35H;存放转换后的数据STBITP3.2OEBITP3.0EO... LED1 EQU 30H ;初始化定义
LED2 EQU 31H
LED3 EQU 32H ;存放三个数码管的段码
ADC EQU 35H ;存放转换后的数据
ST BIT P3.2
OE BIT P3.0
EOC BIT P3.1 ;定义ADC0809的功能控制引脚
ORG 0000H
LJMP MAIN ;跳转到主程序执行
ORG 0030H
MAIN: MOV LED1,#00H
MOV LED2,#00H
MOV LED3,#00H ;寄存器初始化
CLR P3.4
SETB P3.5
CLR P3.6 ;选择ADC0809的通道2
WAIT: CLR ST
SETB ST
CLR ST ;在脉冲下降沿启动转换
JNB EOC,$ ;等待转换结束
SETB OE ;允许输出信号
MOV ADC,P1 ;暂存A/D转换结果
CLR OE ;关闭输出
MOV A,ADC ;将转换结果放入A中,准备个位数据转换
MOV B,#50 ;变换个位调整值50送B
DIV AB
MOV LED1,A ;将变换后的个位值送显示缓冲区LED1
MOV A,B ;将变换结果的余数放入A中,准备十分位变换
MOV B,#5 ;变换十分位调整值5送B
DIV AB
MOV LED2,A ;将变换后的十分位值送LED2
MOV LED3,B ;最后的余数作百分位值送LED3
LCALL DISP ;调用显示程序
AJMP WAIT
DISP:MOV R1,#LED1 ; 显示子程序
CJNE @R1,#5,GO ;@R1=5V?是往下执行,否,则到GO
MOV LED2,#0H ;是5V,即最高值,将小数的十分位清零
MOV LED3,#0H ;将小数的百分位清零
GO:MOV R2,#3 ;显示位数赋初值,用到3位数码管
MOV R3,#0FDH ;扫描初值送R3
DISP1:MOV P2,#0FFH ;关闭显示,目的防止乱码
MOV A,@R1 ;显示值送A
MOV DPTR,#TAB ;送表首地址给DPTR
MOVC A,@A+DPTR ;查表取段码
CJNE R2,#3,GO1 ;判断是否个位数码管?否则跳到GO1
ORL A,#80H ;将整数的数码管显示小数点
GO1:MOV P0,A ;送段码给P0口
MOV A,R3
MOV P2,A ;送位码给P2口
LCALL DELAY ;调用延时
MOV R3,A
RL A ;改变位码
MOV R3,A
INC R1 ;改变段码
DJNZ R2,DISP1 ;三位是否显示完?否则调到DISP1
RET
DELAY:MOV R6,#10 ;延时5S程序:
D1:MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TAB: DB 3FH, 06H,5BH,4FH,66H;共阴极数码管显示0-4 ;显示数据表:
DB 6DH,7DH,07H,7FH,6FH;显示5-9
END
不知道程序哪里出了问题 望大家帮帮忙
展开
 我来答
百度网友7247a56
2014-03-13 · TA获得超过4616个赞
知道大有可为答主
回答量:1422
采纳率:92%
帮助的人:490万
展开全部
WAIT: CLR ST
SETB ST
CLR ST ;在脉冲下降沿启动转换
JNB EOC,$ ;等待转换结束【问题在这里,如果eoc没有变化,则单片机在这里死循环了,也就不会往下执行了,显示程序也就无法被调用了。所以显示程序你最好在中断中调用,或者在中断中做标志,主程序中查询是否调用,还可以限制等待eoc变化的时间,超出限制事件后就往下执行】
SETB OE ;允许输出信号
MOV ADC,P1 ;暂存A/D转换结果
CLR OE ;关闭输出
MOV A,ADC ;将转换结果放入A中,准备个位数据转换
MOV B,#50 ;变换个位调整值50送B
DIV AB
MOV LED1,A ;将变换后的个位值送显示缓冲区LED1
MOV A,B ;将变换结果的余数放入A中,准备十分位变换
MOV B,#5 ;变换十分位调整值5送B
DIV AB
MOV LED2,A ;将变换后的十分位值送LED2
MOV LED3,B ;最后的余数作百分位值送LED3
LCALL DISP ;调用显示程序
AJMP WAIT
追问
要怎么改啊
卯灵祈冰彦
2019-11-06 · TA获得超过3640个赞
知道大有可为答主
回答量:3092
采纳率:31%
帮助的人:160万
展开全部
(1)你的程序写得没有什么问题,数码管可以点亮.我的可以点亮,你的点不亮,说明你的硬件有问题
(2)你的延时程序delay();有点过长了.形成不了动态显示.如果你本意是动态显示.最好把250的值改为2~~4内为好.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式