求助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
没有看懂?
就是我没办法做到增量操作到八之后自动清零,这段代码我自己改的也有点懵。。 我可以用C给你写这个程序,汇编虽然学过,但是忘得差不多了。写起来也费劲 你们叫我春哥吧 发表于 2020-4-11 18:40
我可以用C给你写这个程序,汇编虽然学过,但是忘得差不多了。写起来也费劲
{:9_228:} 眠空 发表于 2020-4-12 15:34
按你的要求应该是控制3个数码管的显示。你这么多灯是要怎么整? 你们叫我春哥吧 发表于 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-12 15:40
按你的要求应该是控制3个数码管的显示。你这么多灯是要怎么整?
但是我一直没有办法做到八个灯全亮后,再按一次清零灯灭掉。明明我写了MOV P2,#0FFH。这几天没上论坛没看见回复{:9_221:} 眠空 发表于 2020-4-16 17:17
但是我一直没有办法做到八个灯全亮后,再按一次清零灯灭掉。明明我写了MOV P2,#0FFH。这几天没上论坛没看 ...
我QQ844854451 你加我
页:
[1]