门关键词: 霍尼韦尔微动开关 海尔电视机电路图 vc组件 其他有机介质薄膜电容器 盛旺汽车零部件 欧姆龙继电器价格 施耐德按钮开关
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
电子元器件搜索:
维库电子市场网是知名的电子元器件交易网站,为电子生产企业提供IC库存和技术资料查询服务。
有请高手:89C2051单片机,三个开关如何控制好这四路LED...
新闻出处:综合电子论坛 发布时间: 2007-09-04
boya355 发布于 2007-9-3 0:20:33
表情有请高手:89C2051单片机,三个开关如何控制好这四路LED的三段功能呢

我现在使用为89C2051         要求:利用它的K1(P3.5), K2(P3.4), K3(P3.3)三个键控制P4\P5\P6\P7三的端口的输出灯.          四灯的功能 :第一段为四灯连亮;第二段为四灯同亮;第三段短为四灯轮流闪, K1控制第一段;K2控制第二段;K3控制第三段.              以下是我自编的,只能实现第一段,且开了, 同一个开关 又关不了.                 我想实现K1能开关第一段, K2能开关第二段,K3能开关第三段,   我使用了JNB \JB  等    其他的语句我很难用到,  是不是这样的程序一定要使用C语言,  可我不会呀,  一定要用到吗,   烦请汇编的高手指点  ! 谢谢

  org

     ajmp start
start:mov p1,#0ffh
       mov p3,#0ffh

LOOP:  JNB  P3.5,J1
       JMP LOOP
       JNB P3.4,J2
       JMP LOOP
       JNB P3.3,L3
       JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
       SETB P3.4
       SETB P3.3
       JMP LOOP
J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
       SETB P3.5
       SETB P3.3
       JMP LOOP
J3:    JMP L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
       SETB P3.5
       SETB P3.4
       JMP LOOP


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH
       CLR P1.4
       mov  30h,#255
       CALL DELAY
       CLR P1.4
       CLR P1.5
       mov 30H,#255
       CALL DELAY
       CLR P1.4
       CLR P1.5
       CLR P1.6
       MOV  30H,#255
       CALL DELAY
       CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       MOV 30H,#255
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV 30H,#255
       CALL DELAY
       JNB P3.5,LOOP
       JMP L1
;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:    CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       MOV 30H,#255
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV  30H,#255
       CALL  DELAY
       JMP L2

;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      MOV 30H,#255
      call delay
      setb p1.7
      MOV 30H,#255
      call delay

      clr p1.6
      MOV 30H,#255
      call delay
      setb p1.6
      MOV 30H,#255
      call delay

      clr p1.5
      MOV 30H,#255
      call delay
      setb p1.5
      MOV 30H,#255
      call delay

      clr p1.4
      MOV 30H,#255
      call delay
      setb p1.4
      MOV 30H,#255
      call delay
      JMP L3
delay:
     mov r6,30h
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
end

       以上的程序未能实现我的需要.没有达到想要的功能!   其实要求的功能就是:一个开关控制一段功能,三个不同的开关控制各自的三个功能程序.  为何汇编语言很难编出呢!?望哪为高人指教!



「该帖子被 boya355 在 2007-9-3 22:01:20 编辑过」
poweryes 发布于 2007-9-3 6:33:45
表情说的是???有点看不明白的
elale 发布于 2007-9-3 16:12:14
表情对汇编不熟,看你程序的意思是输入高电平是转移,你开始就全部给高电平啦,肯定只能实现第一段啦。
boya355 发布于 2007-9-3 21:53:46
表情以上的程序未能实现我的需要.没有达到想要的功能!   其实要求的功能就是:一个开关控制一段功能,三个不同的开关控制各自的三个功能程序.  为何汇编语言很难编出呢!?望哪为高人指教!
boya355 发布于 2007-9-3 22:07:00
表情以下是引用 poweryes 在(2007-9-3 6:33:45)的发言
说的是???有点看不明白的

以上的解释  可以明白吗:也就是想利用一个开关控制一段子程序, 三个开关想独自控制三个各自的子程序, 且不要相互干扰! 谢谢 指教!
boya355 发布于 2007-9-3 22:09:39
表情以下是引用 elale 在(2007-9-3 16:12:14)的发言
对汇编不熟,看你程序的意思是输入高电平是转移,你开始就全部给高电平啦,肯定只能实现第一段啦。

谢谢 你的关注, 对于不用汇编, 可以使用C语言的  如何能实现我的要求呢?
xjlfh 发布于 2007-9-3 22:37:38
表情org    000H

     ajmp start

  
start:mov p1,#0ffh
       mov p3,#0ffh

LOOP:  JNB  P3.5,J1
       JMP LOOP
       JNB P3.4,J2
       JMP LOOP
       JNB P3.3,L3      L3=J3   ?是不是错了
       JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
       SETB P3.4
       SETB P3.3
       JMP LOOP
J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
       SETB P3.5
       SETB P3.3
       JMP LOOP
J3:    JMP L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
       SETB P3.5
       SETB P3.4
       JMP LOOP


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH
       CLR P1.4
       mov  30h,#255     ????????罗嗦    

       CALL DELAY
       CLR P1.4          ????多余
       CLR P1.5
       mov 30H,#255      ????????罗嗦
       CALL DELAY
       CLR P1.4          ?????多余
       CLR P1.5          ??????多余
       CLR P1.6
       MOV  30H,#255      ????????罗嗦
       CALL DELAY
       CLR P1.4        ??????多余
       CLR P1.5        ??????多余
       CLR P1.6        ??????多余
       CLR P1.7
       MOV 30H,#255     ????????罗嗦
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV 30H,#255      ????????罗嗦
       CALL DELAY
       JNB P3.5,LOOP
       JMP L1
;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:    CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       MOV 30H,#255     ????????罗嗦
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV  30H,#255     ????????罗嗦
       CALL  DELAY
       JMP L2

;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      MOV 30H,#255     ????????罗嗦
      call delay
      setb p1.7
      MOV 30H,#255      ????????罗嗦
      call delay

      clr p1.6
      MOV 30H,#255       ????????罗嗦
      call delay
      setb p1.6
      MOV 30H,#255       ????????罗嗦
      call delay

      clr p1.5
      MOV 30H,#255       ????????罗嗦
      call delay
      setb p1.5
      MOV 30H,#255       ????????罗嗦
      call delay

      clr p1.4
      MOV 30H,#255       ????????罗嗦
      call delay
      setb p1.4
      MOV 30H,#255        ????????罗嗦
      call delay
      JMP L3
delay:
     mov r6,30h         MOV  R6,#255
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
end

写的太乱了,看着头晕,好好再改一下吧!


boya355 发布于 2007-9-4 0:04:38
表情以下是引用 xjlfh 在(2007-9-3 22:37:38)的发言
   K1 BIT P3.5    K2 BIT P3.4    K3 BIT P3.3    org    0    ajmp LOOP

LOOP:  JNB  K1,J1
LOOP1: JNB K2,J2
            JNB K3,J3      
            JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
       SETB K2
       SETB K3
       JMP LOOP
J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
       SETB  K1
       SETB  K3
       JMP LOOP
J3:    JMP  L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
       SETB  K1
       SETB  K2
       JMP LOOP


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH
        CLR P1.4

       CALL DELAY
       CLR P1.4      
       CLR P1.5
      CALL DELAY
       CLR P1.4        
       CLR P1.5      
       CLR P1.6
       CALL DELAY
       CLR P1.4      
       CLR P1.5    
       CLR P1.6        

      CLR P1.7
      CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
      CALL DELAY
       JNB K1,LOOP1

       JMP L1 ;在这里,我就无法出来了,其他的L2 L3也就无法运行了 ,救救我出来吧?
;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:    CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
      CALL  DELAY
       JMP L2

;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      call delay
      setb P1.7
      call delay

      clr p1.6
      call delay
      setb p1.6
      call delay

      clr p1.
      call delay
      setb p1.5
      call delay

      clr p1.4
      call delay
      setb p1.4
     call delay
      JMP L3
delay:
     mov r6,#255
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
    end

写的太乱了,看着头晕,好好再改一下

谢谢 你的关注!现在改了, 明白我的意思吧(我是初学 见笑了!), 

   我的想法是  利用一个开关能独立控制相对应的一个程序, 同一个开关可开也可关该程序(这样的各自程序可能不能叫子程序吧,因为它是没有返回的, 只能是那个对应的K键 可以停止或打开),


xjlfh 发布于 2007-9-4 11:07:37
表情以下是引用 boya355 在(2007-9-4 0:04:38)的发言
以下是引用 xjlfh 在(2007-9-3 22:37:38)的发言
   K1 BIT P3.5    K2 BIT P3.4    K3 BIT P3.3    org    000H    ajmp LOOPORG   0030H

LOOP:  JNB  K1,J1
            JNB K2,J2
            JNB K3,J3      
            JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
     ;  SETB K2                   多余
     ;  SETB K3                   多余

     ;  JMP LOOP                 多余

J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
      ; SETB  K1                    多余

      ; SETB  K3                     多余

      ; JMP LOOP                   多余

J3:    JMP  L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
     ;  SETB  K1                      多余

     ;  SETB  K2                      多余

      ; JMP LOOP                     多余


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH               ;可以不要,上电后本来就是置高位
        CLR P1.4

       CALL DELAY
      ; CLR P1.4             多余,置位后若没有别的命令去改变它的状态,则会一直保持最后一个命令
赋 予它的状态,以下同理。


       CLR P1.5
      CALL DELAY
     ;  CLR P1.4         多余

     ;  CLR P1.5       多余
       CLR P1.6
       CALL DELAY
      ; CLR P1.4      多余

      ; CLR P1.5    多余

     ;  CLR P1.6        多余

      CLR P1.7
      CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
      CALL DELAY
      

      JNB  k1,J1
       JNB k2,J2  
       JNB k3,j3
       JMP L1 ;若要用K1直接控制,就JMP LOOP,若要在目前程序运行中由K1、K2、K3状态控制跳转,就JMP L1

;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:  MOV P1,#0FH               用它更简单

  ;CLR P1.4
       ;CLR P1.5
      ; CLR P1.6
      ; CLR P1.7
       CALL DELAY

MOV P1,#0FFH                    用它更简单
      ; SETB P1.4
      ; SETB P1.5
      ; SETB P1.6
       ;SETB P1.7
      CALL  DELAY

JNB  k1,J1
       JNB k2,J2  
       JNB k3,j3
       JMP L2 ;若要用K2直接控制,就JMP LOOP,若要在目前程序运行中由K1、K2、K3状态控制跳转,就JMP L2

      ;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      call delay
      setb P1.7
      call delay

      clr p1.6
      call delay
      setb p1.6
      call delay

      clr p1.
      call delay
      setb p1.5
      call delay

      clr p1.4
      call delay
      setb p1.4
     call delay

JNB  k1,J1
       JNB k2,J2  
       JNB k3,j3
       JMP L3 ;若要用K3直接控制,就JMP LOOP,若要在目前程序运行中由K1、K2、K3状态控制跳转,就JMP L3
    

delay:
     mov r6,#255
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
    end




boya355 发布于 2007-9-4 21:41:48
表情

真的感谢您_xjlfh!让你这么改,效果忽然出现,这就是我想要的.

   不过我改进这个程序和要求,可能还有难题!望能一如既往的关注  谢谢了


boya355 发布于 2007-9-3 0:20:33
表情有请高手:89C2051单片机,三个开关如何控制好这四路LED的三段功能呢

我现在使用为89C2051         要求:利用它的K1(P3.5), K2(P3.4), K3(P3.3)三个键控制P4\P5\P6\P7三的端口的输出灯.          四灯的功能 :第一段为四灯连亮;第二段为四灯同亮;第三段短为四灯轮流闪, K1控制第一段;K2控制第二段;K3控制第三段.              以下是我自编的,只能实现第一段,且开了, 同一个开关 又关不了.                 我想实现K1能开关第一段, K2能开关第二段,K3能开关第三段,   我使用了JNB \JB  等    其他的语句我很难用到,  是不是这样的程序一定要使用C语言,  可我不会呀,  一定要用到吗,   烦请汇编的高手指点  ! 谢谢

  org

     ajmp start
start:mov p1,#0ffh
       mov p3,#0ffh

LOOP:  JNB  P3.5,J1
       JMP LOOP
       JNB P3.4,J2
       JMP LOOP
       JNB P3.3,L3
       JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
       SETB P3.4
       SETB P3.3
       JMP LOOP
J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
       SETB P3.5
       SETB P3.3
       JMP LOOP
J3:    JMP L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
       SETB P3.5
       SETB P3.4
       JMP LOOP


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH
       CLR P1.4
       mov  30h,#255
       CALL DELAY
       CLR P1.4
       CLR P1.5
       mov 30H,#255
       CALL DELAY
       CLR P1.4
       CLR P1.5
       CLR P1.6
       MOV  30H,#255
       CALL DELAY
       CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       MOV 30H,#255
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV 30H,#255
       CALL DELAY
       JNB P3.5,LOOP
       JMP L1
;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:    CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       MOV 30H,#255
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV  30H,#255
       CALL  DELAY
       JMP L2

;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      MOV 30H,#255
      call delay
      setb p1.7
      MOV 30H,#255
      call delay

      clr p1.6
      MOV 30H,#255
      call delay
      setb p1.6
      MOV 30H,#255
      call delay

      clr p1.5
      MOV 30H,#255
      call delay
      setb p1.5
      MOV 30H,#255
      call delay

      clr p1.4
      MOV 30H,#255
      call delay
      setb p1.4
      MOV 30H,#255
      call delay
      JMP L3
delay:
     mov r6,30h
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
end

       以上的程序未能实现我的需要.没有达到想要的功能!   其实要求的功能就是:一个开关控制一段功能,三个不同的开关控制各自的三个功能程序.  为何汇编语言很难编出呢!?望哪为高人指教!



「该帖子被 boya355 在 2007-9-3 22:01:20 编辑过」
poweryes 发布于 2007-9-3 6:33:45
表情说的是???有点看不明白的
elale 发布于 2007-9-3 16:12:14
表情对汇编不熟,看你程序的意思是输入高电平是转移,你开始就全部给高电平啦,肯定只能实现第一段啦。
boya355 发布于 2007-9-3 21:53:46
表情以上的程序未能实现我的需要.没有达到想要的功能!   其实要求的功能就是:一个开关控制一段功能,三个不同的开关控制各自的三个功能程序.  为何汇编语言很难编出呢!?望哪为高人指教!
boya355 发布于 2007-9-3 22:07:00
表情以下是引用 poweryes 在(2007-9-3 6:33:45)的发言
说的是???有点看不明白的

以上的解释  可以明白吗:也就是想利用一个开关控制一段子程序, 三个开关想独自控制三个各自的子程序, 且不要相互干扰! 谢谢 指教!
boya355 发布于 2007-9-3 22:09:39
表情以下是引用 elale 在(2007-9-3 16:12:14)的发言
对汇编不熟,看你程序的意思是输入高电平是转移,你开始就全部给高电平啦,肯定只能实现第一段啦。

谢谢 你的关注, 对于不用汇编, 可以使用C语言的  如何能实现我的要求呢?
xjlfh 发布于 2007-9-3 22:37:38
表情org    000H

     ajmp start

  
start:mov p1,#0ffh
       mov p3,#0ffh

LOOP:  JNB  P3.5,J1
       JMP LOOP
       JNB P3.4,J2
       JMP LOOP
       JNB P3.3,L3      L3=J3   ?是不是错了
       JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
       SETB P3.4
       SETB P3.3
       JMP LOOP
J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
       SETB P3.5
       SETB P3.3
       JMP LOOP
J3:    JMP L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
       SETB P3.5
       SETB P3.4
       JMP LOOP


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH
       CLR P1.4
       mov  30h,#255     ????????罗嗦    

       CALL DELAY
       CLR P1.4          ????多余
       CLR P1.5
       mov 30H,#255      ????????罗嗦
       CALL DELAY
       CLR P1.4          ?????多余
       CLR P1.5          ??????多余
       CLR P1.6
       MOV  30H,#255      ????????罗嗦
       CALL DELAY
       CLR P1.4        ??????多余
       CLR P1.5        ??????多余
       CLR P1.6        ??????多余
       CLR P1.7
       MOV 30H,#255     ????????罗嗦
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV 30H,#255      ????????罗嗦
       CALL DELAY
       JNB P3.5,LOOP
       JMP L1
;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:    CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       MOV 30H,#255     ????????罗嗦
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
       MOV  30H,#255     ????????罗嗦
       CALL  DELAY
       JMP L2

;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      MOV 30H,#255     ????????罗嗦
      call delay
      setb p1.7
      MOV 30H,#255      ????????罗嗦
      call delay

      clr p1.6
      MOV 30H,#255       ????????罗嗦
      call delay
      setb p1.6
      MOV 30H,#255       ????????罗嗦
      call delay

      clr p1.5
      MOV 30H,#255       ????????罗嗦
      call delay
      setb p1.5
      MOV 30H,#255       ????????罗嗦
      call delay

      clr p1.4
      MOV 30H,#255       ????????罗嗦
      call delay
      setb p1.4
      MOV 30H,#255        ????????罗嗦
      call delay
      JMP L3
delay:
     mov r6,30h         MOV  R6,#255
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
end

写的太乱了,看着头晕,好好再改一下吧!


boya355 发布于 2007-9-4 0:04:38
表情以下是引用 xjlfh 在(2007-9-3 22:37:38)的发言
   K1 BIT P3.5    K2 BIT P3.4    K3 BIT P3.3    org    0    ajmp LOOP

LOOP:  JNB  K1,J1
LOOP1: JNB K2,J2
            JNB K3,J3      
            JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
       SETB K2
       SETB K3
       JMP LOOP
J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
       SETB  K1
       SETB  K3
       JMP LOOP
J3:    JMP  L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
       SETB  K1
       SETB  K2
       JMP LOOP


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH
        CLR P1.4

       CALL DELAY
       CLR P1.4      
       CLR P1.5
      CALL DELAY
       CLR P1.4        
       CLR P1.5      
       CLR P1.6
       CALL DELAY
       CLR P1.4      
       CLR P1.5    
       CLR P1.6        

      CLR P1.7
      CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
      CALL DELAY
       JNB K1,LOOP1

       JMP L1 ;在这里,我就无法出来了,其他的L2 L3也就无法运行了 ,救救我出来吧?
;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:    CLR P1.4
       CLR P1.5
       CLR P1.6
       CLR P1.7
       CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
      CALL  DELAY
       JMP L2

;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      call delay
      setb P1.7
      call delay

      clr p1.6
      call delay
      setb p1.6
      call delay

      clr p1.
      call delay
      setb p1.5
      call delay

      clr p1.4
      call delay
      setb p1.4
     call delay
      JMP L3
delay:
     mov r6,#255
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
    end

写的太乱了,看着头晕,好好再改一下

谢谢 你的关注!现在改了, 明白我的意思吧(我是初学 见笑了!), 

   我的想法是  利用一个开关能独立控制相对应的一个程序, 同一个开关可开也可关该程序(这样的各自程序可能不能叫子程序吧,因为它是没有返回的, 只能是那个对应的K键 可以停止或打开),


xjlfh 发布于 2007-9-4 11:07:37
表情以下是引用 boya355 在(2007-9-4 0:04:38)的发言
以下是引用 xjlfh 在(2007-9-3 22:37:38)的发言
   K1 BIT P3.5    K2 BIT P3.4    K3 BIT P3.3    org    000H    ajmp LOOPORG   0030H

LOOP:  JNB  K1,J1
            JNB K2,J2
            JNB K3,J3      
            JMP LOOP
J1:    JMP L1      ;转到P3.5(K1)控制的四灯连亮子程序
     ;  SETB K2                   多余
     ;  SETB K3                   多余

     ;  JMP LOOP                 多余

J2:    JMP L2     ;转到P3.4(K2)控制的四灯同闪子程序
      ; SETB  K1                    多余

      ; SETB  K3                     多余

      ; JMP LOOP                   多余

J3:    JMP  L3    ;转到P3.3(K3)控制的四灯轮流闪子程序
     ;  SETB  K1                      多余

     ;  SETB  K2                      多余

      ; JMP LOOP                     多余


;四灯连亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L1:    MOV P1,#0FFH               ;可以不要,上电后本来就是置高位
        CLR P1.4

       CALL DELAY
      ; CLR P1.4             多余,置位后若没有别的命令去改变它的状态,则会一直保持最后一个命令
赋 予它的状态,以下同理。


       CLR P1.5
      CALL DELAY
     ;  CLR P1.4         多余

     ;  CLR P1.5       多余
       CLR P1.6
       CALL DELAY
      ; CLR P1.4      多余

      ; CLR P1.5    多余

     ;  CLR P1.6        多余

      CLR P1.7
      CALL DELAY
       SETB P1.4
       SETB P1.5
       SETB P1.6
       SETB P1.7
      CALL DELAY
      

      JNB  k1,J1
       JNB k2,J2  
       JNB k3,j3
       JMP L1 ;若要用K1直接控制,就JMP LOOP,若要在目前程序运行中由K1、K2、K3状态控制跳转,就JMP L1

;四灯同时亮;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L2:  MOV P1,#0FH               用它更简单

  ;CLR P1.4
       ;CLR P1.5
      ; CLR P1.6
      ; CLR P1.7
       CALL DELAY

MOV P1,#0FFH                    用它更简单
      ; SETB P1.4
      ; SETB P1.5
      ; SETB P1.6
       ;SETB P1.7
      CALL  DELAY

JNB  k1,J1
       JNB k2,J2  
       JNB k3,j3
       JMP L2 ;若要用K2直接控制,就JMP LOOP,若要在目前程序运行中由K1、K2、K3状态控制跳转,就JMP L2

      ;四灯轮流闪;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L3 :  clr p1.7
      call delay
      setb P1.7
      call delay

      clr p1.6
      call delay
      setb p1.6
      call delay

      clr p1.
      call delay
      setb p1.5
      call delay

      clr p1.4
      call delay
      setb p1.4
     call delay

JNB  k1,J1
       JNB k2,J2  
       JNB k3,j3
       JMP L3 ;若要用K3直接控制,就JMP LOOP,若要在目前程序运行中由K1、K2、K3状态控制跳转,就JMP L3
    

delay:
     mov r6,#255
d2:  mov r7,#255
    djnz r7,$
    djnz r6,d2
    ret
    end




boya355 发布于 2007-9-4 21:41:48
表情

真的感谢您_xjlfh!让你这么改,效果忽然出现,这就是我想要的.

   不过我改进这个程序和要求,可能还有难题!望能一如既往的关注  谢谢了


关闭】 【打印
 
相关专题
 
友情链接:
© 2007 电子元件网 网站地图