标题:
51单片机求助
[打印本页]
作者:
sjztjk
时间:
2013-8-17 14:38
标题:
51单片机求助
本帖最后由 sjztjk 于 2013-8-17 15:20 编辑
最近做了个小程序试验,结果不成功,求高手指点,谢谢!不成功现象为:按下S1时D1与D2同时亮,按下S2时D1与D2同时灭!
程序如下:
ORG 0 ;程序从0地址开始
START: MOV P2,#0FFH ;将P2口设计为输入功能,即P2口全部为11111111高电平
;按键检测程序=============================================================
LOOP: JNB P2.0,ON ;检测P2.0口,若P2.0为低电平(S1按下),则跳至ON处执行
JNB P2.1,OFF ;检测P2.1口,若P2.1为低电平(S2按下),则跳至OFF处执行
JNB P2.2,OFF2 ;检测P2.2口,若P2.2为低电平(S3按下),则跳至OFF2处执行
JMP LOOP ;跳至LOOP处形成一个循环
;开灯子程序===============================================================
ON: CLR P0.0 ;使P0.0清零,D1亮
CALL DELAY ;调用延时子程序
CLR P0.1 ;使P0.1清零,D2亮
ON1: JB P2.0,LOOP ;检测P2.0口,若P2.0为高电平(S1放开),则跳至LOOP处执行
JMP ON1 ;否则跳至ON1形成一个小循环
;关灯子程序===============================================================
OFF: SETB P0.0 ;使P0.0置位,即设定为1,D1灭
CALL DELAY ;调用延时子程序
SETB P0.1 ;使P0.1置位,即设定为1,D2灭
CLR P0.2 ;使P0.2清零,D3亮
OFF1: JB P2.1,LOOP ;检测P2.1口,若P2.1为高电平(S2放开),则跳至LOOP处执行
JMP OFF1 ;否则跳至OFF1形成一个循环
OFF2: SETB P0.2 ;使P0.2置位,即设定为1,D3灭
END ;程序结束
;1秒延时子程序(12MHz晶振)
DELAY: MOV R1,#50
DEL0: MOV R2,#91
DEL1: MOV R3,#100
DJNZ R3,$
DJNZ R2,DEL1
DJNZ R1,DEL0
RET
END
yawihe.JPG
(103.99 KB, 下载次数: 152)
下载附件
2013-8-17 15:20 上传
作者:
青苹果
时间:
2013-8-18 14:53
1、你可以把延时程序加长,这样就不会同时亮灭
2、程序最后面,如果你不想按键再次有效,可以写成JMP $,而不是直接END;如果希望按键再次有效,可以像前面两个按键那样,加个小循环判断,,,
作者:
livingliving
时间:
2015-4-10 09:15
虽然不懂,但还是要顶,毕竟每一位老手都是从新手蜕变而来的,赞一个。。。。。。
作者:
mm494408445
时间:
2015-11-1 12:48
顶上去,代码问题一定可以解决
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1