眠空 发表于 2020-4-6 23:22:44

求助51单片机三键信息输入实验

题目要求:本实验的内容是设计三键信息输入系统,实现多参数的输入控制。对多参数输入,可用一个按键进行参数的选择,每按一次,更改一次参数,循环选择;当按另一个按键时,对参数进行增量操作,达到一定值回自动回零;第三个按键每按一次执行减一操作。但是我一直实现不了增量操作到8的时候回零,程序中的MOV P2,#0FFH(在下面的代码里我用红色标出了)好像一直没有起作用,有没有人可以帮忙解答下{:9_241:}修改了一天代码哭了。

org   0100h
      
Start:      MOV P2,#0FFH
      MOV P3, #0FEH
      MOV 20H,#0FFH;置位 初始值为1
      
      MOV 30H, 00
      MOV 31H, #0FFH
      
      MOV 32H, 00
      MOV 33H, #0FFH
      
      MOV 34H, 00
      MOV 35H, #0FFH
      
      MOV 36H, 00
      MOV 37H, #0FFH
      
      MOV R0, #030H
               
      SETB OLDSEL
      SETB OLDINC
      SETB OLDDEC
      
      MOV R6, #0FEH
      MOV R7, #00H
   
   STARTKEY:    MOV P1,#0FFH    ;
            JBNEWSEL, CSELKEY    ;
      JNBOLDSEL, CSELKEY    ;
      

      
    PSELKEY:    CLROLDSEL      ;
      SETB C
      MOVA, R6
      RLCA   
      MOVP3, A      ;
      MOVR6, A
      INCR7
      MOVA, R7
      ANLA, #04H
      JZ   CPVALUE      ;
      MOVR6, #0FEH      ;
      MOVP3, R6      ;
      MOVR7, #00H      ;
      
   CPVALUE:      MOV A, R0
            ADD A, R7
      ADD A, R7
      
      INC A
      MOV R1, A
      MOV A, @R1
      MOV P2,A
         
    CSELKEY:    MOVC, NEWSEL    ;
                MOVOLDSEL,C      ;
      
    INCKEY:    JBNEWINC, CINCKEY
      JNB OLDINC, CINCKEY
      
      MOV A, R0;R0 #030H
      ADD A, R7
      ADD A, R7
      
      MOV R1, A
      
      MOV A, @R1
      INC A
      ANL A, #08H
      JZ Q2
      JNZ Q1
    Q1: MOV P2,#0FFH

         JMP DECKEY
      
    Q2:    MOV A,@R1
               
      INC R1
      MOV A, @R1
      
      CLR C
      RLC A
      MOV P2,A
      MOV @R1,A
   
   
      CINCKEY:   
               
                MOV C, NEWINC
                MOV OLDINC, C

      
       DECKEY: JB NEWDEC,CDECKEY
         JNB OLDDEC,CDECKEY
         MOV A,R0
         ADD A,R7
         ADD A,R7
         
         MOV R1,A
         MOV A,@R1
      
         DEC A
         JZ CDECKEY
         MOV @R1,A
         
         INC R1
         MOV A,@R1
         
         SETB C
         RRC A
         MOV P2,A
         MOV @R1,A
      
   CDECKEY:
         MOV C,NEWDEC
         MOV OLDDEC,C
         
          JMPSTARTKEY    ;
          END


编程鱼C 发表于 2020-4-7 09:27:11

没有看懂?

眠空 发表于 2020-4-7 11:15:16

编程鱼C 发表于 2020-4-7 09:27
没有看懂?

就是我没办法做到增量操作到八之后自动清零,这段代码我自己改的也有点懵。。

你们叫我春哥吧 发表于 2020-4-11 18:40:10

我可以用C给你写这个程序,汇编虽然学过,但是忘得差不多了。写起来也费劲

眠空 发表于 2020-4-12 15:34:44

你们叫我春哥吧 发表于 2020-4-11 18:40
我可以用C给你写这个程序,汇编虽然学过,但是忘得差不多了。写起来也费劲

{:9_228:}

你们叫我春哥吧 发表于 2020-4-12 15:40:51

眠空 发表于 2020-4-12 15:34


按你的要求应该是控制3个数码管的显示。你这么多灯是要怎么整?

眠空 发表于 2020-4-16 17:16:09

你们叫我春哥吧 发表于 2020-4-12 15:40
按你的要求应该是控制3个数码管的显示。你这么多灯是要怎么整?

唔,可能没有放完全:
由于本实验的任务可知,实验装置以单片机为核心,需要两个输入端口分别联接按钮用于输入控制;需要12个输出端口分别驱动一个LED灯,用于简易的状态显示,其中4个端口分别指示一个参数;8个端口组成一个9级状态显示条,显示参数的值。控制软件应需要首先检测并确定当前活动参数,点亮对应的状态灯;其次如检测到参数改变按键按下,则对当前活动参数执行增一操作,并将结果以二进制数方式显示出来。因此,控制软件所需要执行的操作就是循环检测两个按键的状态,如果发现按键从开到闭合的变化,就执行相应的更改当前参数,或使当前参数值加一的操作。
考虑到应用兼容性,拟以P1.2、P1.1,P1.0两个端口作为输入口,其中P1.2用于参数选择,P1.1用于参数值加1输入,P1.0用来进行参数减少。这两个端口通过按钮接地。按钮处于常开状态,闭合时提供信息输入。
P3口的P3.3~P3.0用于显示参数选择结果,每个端口对应一个参数,亮灯表示当前操作的参数,故4个端口灯同时只能有且只有一个灯亮。P2口的8个I/O口作为本系统的参数值输出口,表示当前活动参数的参数值。这个8个I/O口分别联接一个由NPN三极管驱动的LED灯,作参数和参数值显示器。参数值共9级,灯全灭,从右向左,亮1只灯,2只灯直至8个灯全亮。由于LED灯在I/O端口低电平时亮,因此在由参数值驱动端口灯时应先取反,使亮灯状态与1对应,符合使用习惯。

眠空 发表于 2020-4-16 17:17:47

你们叫我春哥吧 发表于 2020-4-12 15:40
按你的要求应该是控制3个数码管的显示。你这么多灯是要怎么整?

但是我一直没有办法做到八个灯全亮后,再按一次清零灯灭掉。明明我写了MOV P2,#0FFH。这几天没上论坛没看见回复{:9_221:}

你们叫我春哥吧 发表于 2020-4-17 12:19:56

眠空 发表于 2020-4-16 17:17
但是我一直没有办法做到八个灯全亮后,再按一次清零灯灭掉。明明我写了MOV P2,#0FFH。这几天没上论坛没看 ...

我QQ844854451 你加我
页: [1]
查看完整版本: 求助51单片机三键信息输入实验