单片机AT89C51的一段ASM代码出现了问题 LED数码管不亮 不知道是我电路图连错了还是怎么 不显示数字
代码如下org00h;开始MOVP1,#00H;开机电压置0SETBp2.5;关掉输出,防止开机瞬间电压过高损坏用电器。SETBP3.7SETBP3.6SETBP3.5S...
代码如下
org 00h ;开始
MOV P1,#00H;开机电压置0
SETB p2.5;关掉输出,防止开机瞬间电压过高损坏用电器。
SETB P3.7
SETB P3.6
SETB P3.5
SETB P3.4
start:
V15:;1.5伏
LCALL DELAY2;防按键抖动
MOV P1,#03H;1.5V数据量
CLR P2.5;闭合继电器开关,输出电压
B1:
MOV P0,#01111001B;显示1和小数点
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#00010010B;显示5
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S1;检测是否短路,过流。
JB P3.6,T;减键
JB P3.7,V3;增键
JB P3.5,s1;关机
JMP B1
T:LJMP V12;因为程序太长,不能直接转移,所以要用长调用命令!
S1:LJMP STOP;因为程序太长,不能直接转移,所以要用长调用命令!
V3:;3伏
LCALL DELAY2
MOV P1,#1bH;3V数据量
B2:
MOV P0,#11000000B;显示0
clr P2.6
CLR P2.7
LCALL delay
MOV P0,#10110000B;显示3
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S2;检测是否短路,过流。
JB P3.5,s2;关机
JB P3.6,V15;减
JB P3.7,V42;增
JMP B2
S2:LJMP STOP
V42:;4.2伏
LCALL DELAY2
MOV P1,#2FH;4.2V数据量
B3:
MOV P0,#00011001B;显示4和小数点
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#00100100B;显示2
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S3;检测是否短路,过流。
JB P3.5,s3;关机
JB P3.6,V3;减
JB P3.7,V5;增
JMP B3
S3:LJMP STOP
V5:;5伏
LCALL DELAY2
MOV P1,#3FH;5V数据量
B4:
MOV P0,#11000000B;显示0
clr P2.6
CLR P2.7
LCALL delay
MOV P0,#10010010B;5
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S4;检测是否短路
JB P3.5,s4;关机
JB P3.6,V42;减
JB P3.7,V6;增
JMP B4
S4:LJMP STOP
V6:;6伏
LCALL DELAY2
MOV P1,#4EH;6V数据量
B5:
MOV P0,#11000000B;显示0
clr P2.6
CLR P2.7
LCALL delay
MOV P0,#10000010B;显示6
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S5;检测是否短路
JB P3.5,S5;关机
JB P3.6,V5;减
JB P3.7,V84;增
JMP B5
S5:LJMP STOP
V84:;8.4伏
LCALL DELAY2
MOV P1,#78H;8.4V数据量
B6:
MOV P0,#00000000B;显示8
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#00011001B;显示4
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,STOP;检测是否短路
JB P3.5,STOP;关机
JB P3.6,V6;减
JB P3.7,V12;增
JMP B6
V12:;12伏
LCALL DELAY2
MOV P1,#0B4H;12V数据量
B7:
MOV P0,#11111001B;显示1
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#10100100B;显示2
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,STOP;检测是否短路
JB P3.5,STOP;关机
JB P3.6,V84;减
JB P3.7,T2;增
JMP B7
T2:JMP V15
STOP:;关机
LCALL DELAY2
MOV P1,#00H;令LM317电压最低
STOP2:
SETB P2.5;关闭输出
MOV P0,#11000000B;显示O
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#10001110B;显示F
SETB P2.7
CLR P2.6
LCALL delay
JB P3.5,ST;再次开机
jb p3.6,st;再次开机
jb p3.7,st;再次开机
JMP STOP2
ST:LJMP V15
delay: MOV R2,#5;延时子程序
L1001: mov R3,#250
DJNZ R3,$
DJNZ R2, L1001
ret
DELAY2:;延时子程序
MOV R6,#3
D2:MOV R4,#200
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
djnz r6,d2
RET
end
希望大神解答 展开
org 00h ;开始
MOV P1,#00H;开机电压置0
SETB p2.5;关掉输出,防止开机瞬间电压过高损坏用电器。
SETB P3.7
SETB P3.6
SETB P3.5
SETB P3.4
start:
V15:;1.5伏
LCALL DELAY2;防按键抖动
MOV P1,#03H;1.5V数据量
CLR P2.5;闭合继电器开关,输出电压
B1:
MOV P0,#01111001B;显示1和小数点
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#00010010B;显示5
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S1;检测是否短路,过流。
JB P3.6,T;减键
JB P3.7,V3;增键
JB P3.5,s1;关机
JMP B1
T:LJMP V12;因为程序太长,不能直接转移,所以要用长调用命令!
S1:LJMP STOP;因为程序太长,不能直接转移,所以要用长调用命令!
V3:;3伏
LCALL DELAY2
MOV P1,#1bH;3V数据量
B2:
MOV P0,#11000000B;显示0
clr P2.6
CLR P2.7
LCALL delay
MOV P0,#10110000B;显示3
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S2;检测是否短路,过流。
JB P3.5,s2;关机
JB P3.6,V15;减
JB P3.7,V42;增
JMP B2
S2:LJMP STOP
V42:;4.2伏
LCALL DELAY2
MOV P1,#2FH;4.2V数据量
B3:
MOV P0,#00011001B;显示4和小数点
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#00100100B;显示2
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S3;检测是否短路,过流。
JB P3.5,s3;关机
JB P3.6,V3;减
JB P3.7,V5;增
JMP B3
S3:LJMP STOP
V5:;5伏
LCALL DELAY2
MOV P1,#3FH;5V数据量
B4:
MOV P0,#11000000B;显示0
clr P2.6
CLR P2.7
LCALL delay
MOV P0,#10010010B;5
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S4;检测是否短路
JB P3.5,s4;关机
JB P3.6,V42;减
JB P3.7,V6;增
JMP B4
S4:LJMP STOP
V6:;6伏
LCALL DELAY2
MOV P1,#4EH;6V数据量
B5:
MOV P0,#11000000B;显示0
clr P2.6
CLR P2.7
LCALL delay
MOV P0,#10000010B;显示6
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,S5;检测是否短路
JB P3.5,S5;关机
JB P3.6,V5;减
JB P3.7,V84;增
JMP B5
S5:LJMP STOP
V84:;8.4伏
LCALL DELAY2
MOV P1,#78H;8.4V数据量
B6:
MOV P0,#00000000B;显示8
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#00011001B;显示4
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,STOP;检测是否短路
JB P3.5,STOP;关机
JB P3.6,V6;减
JB P3.7,V12;增
JMP B6
V12:;12伏
LCALL DELAY2
MOV P1,#0B4H;12V数据量
B7:
MOV P0,#11111001B;显示1
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#10100100B;显示2
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,STOP;检测是否短路
JB P3.5,STOP;关机
JB P3.6,V84;减
JB P3.7,T2;增
JMP B7
T2:JMP V15
STOP:;关机
LCALL DELAY2
MOV P1,#00H;令LM317电压最低
STOP2:
SETB P2.5;关闭输出
MOV P0,#11000000B;显示O
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#10001110B;显示F
SETB P2.7
CLR P2.6
LCALL delay
JB P3.5,ST;再次开机
jb p3.6,st;再次开机
jb p3.7,st;再次开机
JMP STOP2
ST:LJMP V15
delay: MOV R2,#5;延时子程序
L1001: mov R3,#250
DJNZ R3,$
DJNZ R2, L1001
ret
DELAY2:;延时子程序
MOV R6,#3
D2:MOV R4,#200
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
djnz r6,d2
RET
end
希望大神解答 展开
5个回答
展开全部
你这个程序 数码管 应该用共阳的,能亮出来 但程序 太乱了 同时在一个数码管上显示了几个数,显示不正常,这样的电路 在仿真时还能掺和,实际电路是不行的,当然学习能仿真出来
已经是一大进步,先不要太复杂 一步一步 增加难度,这样比较 容易。
已经是一大进步,先不要太复杂 一步一步 增加难度,这样比较 容易。
追问
能给个QQ帮助一下么 有偿的 谢谢拉
追答
知道名 就是 百度 Hi
org 00h ;开始 先这部分 试试 再增加功能
MOV P1,#00H;开机电压置0
SETB p2.5;关掉输出,防止开机瞬间电压过高损坏用电器。
SETB P3.7
SETB P3.6
SETB P3.5
SETB P3.4
start:
V15:;1.5伏
LCALL DELAY2;防按键抖动
MOV P1,#03H;1.5V数据量
CLR P2.5;闭合继电器开关,输出电压
B1:
MOV P0,#01111001B;显示1和小数点
SETB P2.6
LCALL delay
CLR P2.6
MOV P0,#10010010B;显示5
SETB P2.7
LCALL delay
CLR P2.7
;JNB P2.4,S1;检测是否短路,过流。
;JB P3.6,T;减键
;JB P3.7,V3;增键
;JB P3.5,s1;关机
JMP B1
展开全部
电路连接问题.LED直接用I/O口不太合适.根据LED数码管是共阳的话把COM口接在电源端 ,共阴的化电路或比较麻烦一些,最好是共阳了.
更多追问追答
追问
55接了以后可以显示数字了 但是在不停地重复显示55 22 FF 是为什么?
追答
那说明数码管可以工作,显示乱码那与硬件关系不大了,检查代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一部分、一部分的调试,先调试显示部分。
能稳定显示之后,再把检测到的数据,送去显示。
能稳定显示之后,再把检测到的数据,送去显示。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
串联电阻就会亮了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数码管的数据改变的太快,每个要显示的数字延时太短,导致人眼不可分辨。所以你看到的是55,22,ff。如果你只显示一组数据就好了。或者每组数据延时足够长如5s。
追问
请问怎么改变呢?
追答
从这里:V3:;3伏
LCALL DELAY2
MOV P1,#1bH;3V数据量
B2:
MOV P0,#11000000B;显示0
B7:
MOV P0,#11111001B;显示1
SETB P2.6
CLR P2.7
LCALL delay
MOV P0,#10100100B;显示2
CLR P2.6
SETB P2.7
LCALL delay
JNB P2.4,STOP;检测是否短路
JB P3.5,STOP;关机
JB P3.6,V84;减
JB P3.7,T2;增
J
MP B7
T2: 到这里
在源程序中把这段注释掉就可以了。如果想要显示多组,可以自己重新写一个延时程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询