打印

关于程序的问题请教各位大侠

[复制链接]
1946|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jy1984|  楼主 | 2007-5-28 23:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, hm, LED, ck, top
我是单片机初学者,现在想用单片实现一个功能:
输入单片机的为高电平。P3.6为触发检测
1。第一次按下开关A时,P1.0输出低电平。第一次按下A时,P1.0输出为高电平
2。第一次按下开关B时,P1.1输出低电平。第一次按下B时,P1.1输出为高电平
要求,P1.0和P1.1的输出结果不互冲突,既当P1.0为高电平时,按B时P1.0的状态不变,只有再次按A时P1.0才为低电平。
我是用汇编编的,
;----------------------------------------------------
         D0   EQU   P2.0      ;接收板数据口 0
         D1   EQU   P2.1      ;接收板数据口 1
         D2   EQU   P2.2      ;接收板数据口 2
         D3   EQU   P2.3      ;接收板数据口 3
         VT   EQU   P3.6      ;解码有效输出端
;----------------------------------------------------
        
;----------------------------------------------------
         CK1   EQU   01H      ;遥控器按键 1(A)比较码
         CK2   EQU   02H      ;遥控器按键 2(B)比较码
         CK3   EQU   04H      ;遥控器按键 3(C)比较码
         CK4   EQU   08H      ;遥控器按键 4(D)比较码
;----------------------------------------------------
         ORG  0000H
         JMP  MAIN
         
;----------------------------------------------------
MAIN:
        MOV  SP,#30H
        MOV  P2,#0FH         ;置P2.0-P2.3为输入状态
        MOV  20H,#00H
       

LOOP1:  JNB  VT,LOOP1        ;CTV=1,表示有键按下
        MOV  A,P2            ;读P2口状态
        ANL  A,#0FH          ;取低4位
        CALL  OPERAT         ;功能执行程序
        JMP  LOOP1
;-----------------------------------------------------
OPERAT:                      
        CJNE  A,#CK1,OP1     ;是否是第一个键按下
        CPL   20h.0
        JNB   20h.0,OP0
        MOV   A,P1
        ANL   A,#0FEH
        MOV   P1,A           ;P00 LED 亮
       
        RET

 OP0:   MOV   A,P1
        ORL   A,#01H
        MOV   P1,A           ;P00 LED 灭
       
        RET
       
 OP1:   CJNE  A,#CK2,OP3     ;是否是第二个键按下
        CPL   20H.1
        JNB   20H.1,OP2
        MOV   A,P1
        ANL   A,#0FDH
        MOV   P1,A           ;P01 LED 亮
       
        RET
    
 OP2:   MOV   A,P1
        ORL   A,#02H
        MOV   P1,A           ;P01 LED 灭
        
        RET
    
 OP3:   CJNE  A,#CK3,OP5     ;是否是第三个键按下
        CPL   20H.2
        JNB   20H.2,OP4
        MOV   A,P1
        ANL   A,#0FBH
        MOV   P1,A           ;P02 LED 亮
      
        RET
    
 OP4:   MOV   A,P1
        ORL   A,#04H
        MOV   P1,A           ;P02 LED 灭
      
        RET

 OP5:   CJNE  A,#CK4,OP7     ;是否是第四个键按下
        CPL   20H.3
        JNB   20H.3,OP6
        MOV   A,P1
        ANL   A,#0F7H
        MOV   P1,A           ;P03 LED  亮
       
        RET

 OP6:   MOV   A,P1
        ORL   A,#08H
        MOV   P1,A           ;P03 LED  灭
        
        RET
;-------------------------------------------------------------------------------

        END
现在出现的是不能两个同时输出,请各位指点一下,谢谢了

相关帖子

沙发
conwh| | 2007-5-28 23:50 | 只看该作者

你的表述有问题

程序里的问题就多一点:
1)没有去抖,容易产生误操作
2)没有确定释放按键的,容易产生数次按键的现象
============
建议使用时钟扫描

使用特权

评论回复
板凳
jy1984|  楼主 | 2007-5-29 08:40 | 只看该作者

关于程序的问题请教各位大侠

我是个初学者,还有好多不懂的,请大学指点一下该怎么改动呢

使用特权

评论回复
地板
conwh| | 2007-5-29 09:12 | 只看该作者

给个简单点的,缺点就是实时性不是太强,一般可满足

KEY-1:
        JB    KEY.1,            KEY-1-NO-1-ELSE
        LCALL    DELAY
        JB    KEY.1,            KEY-1-NO-1-ELSE
        JB    KEY.1.FLAG,        KEY-1-NO-1-END
        CPL    LED.1
        SETB    KEY.1.FLAG
KEY-1-NO-1-ELSE:
        CLR    KEY.1.FLAG
KEY-1-NO-1-END:
这是一个的按键,其他的雷同

使用特权

评论回复
5
jy1984|  楼主 | 2007-5-29 09:25 | 只看该作者

关于程序的问题请教各位大侠

谢谢指点,能不能跟我说一下程序的算法呀,能么个思路。

使用特权

评论回复
6
gyt| | 2007-5-29 10:24 | 只看该作者

conwh是位热心人

conwh已经说得够清楚了。不妨自己动动脑筋思考一下:)

使用特权

评论回复
7
conwh| | 2007-5-29 10:45 | 只看该作者

呵呵,帮帮小DD啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

91

帖子

0

粉丝