用汇编语言编写开关控制LED灯

单片机用汇编语言编写 8个开关分别接P1.0-P1.7 控制输出是P0.0-P0.7LED灯 还有开关延时6S和按住一个按钮锁住其它按钮 例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入
请高人帮忙 小的我不胜感激 要告诉我按钮是低电平触发还是高电平触发 还有输出端是低电平触发还是高电平触发

延时做 nop 的多次嵌套循环,用ajump 指令和 djnz Rn 指令
关于屏蔽接收,可以用相关寄存器做 逻辑处理,或者是比较跳转处理

摁钮来说,因为是输入,在输入之前,先对接脚做输出高电平处理,然后做接收,否则可能会烧掉单片机接脚内部的fet 管

延时六秒不好控制,如果晶振频率你知道的话,多用nop指令,来缓冲循环段的长短不一问题追问

神啊。帮我写一下吧 如果行。我在追加5分我就这么多了。还帮我注释一下。不胜感激

晶振11.0592。应该是11M的

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-05
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
LOOP:
MOV A,P1 ;检测按键,高有效
JZ LOOP ;没有按键按下,循环
PUSH ACC ;有键按下,键值压栈
LOOP1:
MOV A,P1
JNZ LOOP1 ;等待按键抬起
POP ACC
MOV P0,A ;相应键的LED灯点亮,高有效
MOV R2,#100
SETB TR0
LCALL DELAY ;延时5S
SJMP LOOP
DELAY:
JBC TF0,DELAY1
SJMP DELAY
DELAY1:
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
DJNZ R2,DELAY
RET
END追问

这个直接能生成HEX文件吗。还需要改吗 输入时高电平 输出也是高吗 我是菜鸟
我试过为什么 没按按钮就亮了 按按钮不起作用了

追答

那你的硬件是不是低有效,改一下程序就可以了。

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
 MOV TMOD,#01H
 MOV TH0,#HIGH(65536-50000)
 MOV TL0,#LOW(65536-50000)
LOOP:
 MOV A,P1 ;检测按键,低有效
 CPL A 
 JZ LOOP  ;没有按键按下,循环
 PUSH ACC ;有键按下,键值压栈
LOOP1:
 MOV A,P1 
 CPL A
 JNZ LOOP1 ;等待按键抬起
 POP ACC
 MOV P0,A ;相应键的LED灯点亮,低有效
 MOV R2,#100
 SETB TR0
 LCALL DELAY ;延时5S
 SJMP LOOP
DELAY: 
 JBC TF0,DELAY1
 SJMP DELAY
DELAY1: 
 MOV TH0,#HIGH(65536-50000)
 MOV TL0,#LOW(65536-50000)
 DJNZ R2,DELAY
 RET
 END

追问

太厉害了 亲 还有一点 就是一开始全输出低电平输出 还有5S之后回到开始,全部低电平输出

本回答被提问者和网友采纳
第2个回答  2014-03-18
8个开关分别接P1.0-P1.7 控制输出是P0.0-P0.7LED灯
还有开关延时6S和按住一个按钮锁住其它按钮

例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入

--P0.0,是接的按键? 前面不是说接到 LED 的吗?
--延时 5s ?前面不是说 6s 吗?追问

6s吧。那个写错了。怎么写程序呢。最好帮写一下 P0.0-P0.7接LED的

追答

要求的太简单了,不过就是检测到按键就延时6s而已。
要求定时,却还不给出晶振频率。
程序如下:
ORG 0000H
LP: MOV A, P1 ;读按键,低电平有效
MOV P0, A ;输出,低电平发光
CPL A
JZ LP ;没有按键按下,循环
MOV R5, #200 ;延时6s(12M晶振)
MOV R6, #60
MOV R7, #248
DJNZ R7, $
DJNZ R6, $ - 4
DJNZ R5, $ - 8
SJMP LP
END