w88522 发表于 2023-1-15 20:56

求懂单片机的大佬给分析一下按键显示和实际不同步问题

没事在家自学单片机,视频里老师讲了定时器调节频率输出,我自己试着加上数码管显示按键挡位,最高总共可以显示254个挡位,调到最高再减上十几档,再加到最高时就会多出几个档,可以显示出255、256、257..... ,按键减减再加加,这个显示的最高值的数值就会一直加,可是程序明明只是设置了254个挡位。求大佬帮忙看看怎么回事?谢谢大家了!救救这孩子吧,可怜的孩子看了一天了,没看明白怎么回事,身边也没有人可以问问指点一下!同时提前祝大家新年快乐!{:1_893:}

ORG 00H
AJMP ZHU
ORG 0BH
AJMP JISUAN
ORG 50H
;---------------------------
ZHU:MOV P0,0FFH;数码管显示
    MOV P2,00H;数码管扫描
   
    MOV R4,#05H
    MOV R5,#03H
    MOV R6,#02H
    SETB P3.0
    SETB P3.1
    MOV SP,#100D
    MOV TMOD,#00000001B
    MOV TL0,#LOW(65536-20000)
    MOV TH0,#HIGH(65536-20000)
    SETB EA
    SETB ET0
    MOV R2,#20D
    MOV R1,#20D;频率调节变量
    SETB TR0
;-------按键扫描--------------------
ZHUAN:LCALL XIANSHI
      JNB P3.0,JIA
      JNB P3.1,JIAN
      AJMP ZHUAN
;-------按键防抖---------------------
JIA:LCALL XIANSHI;延时
    JNB P3.0,JIAZ
    AJMP ZHUAN
JIAN:LCALL XIANSHI;延时
    JNB P3.1,JIANZ
    AJMP ZHUAN
;-----按键加----------------------
JIAZ:CJNE R1,#01D,JJ
   AJMP DD
JJ:DEC R1
   INC R4
   CJNE R4,#10D,DD
   MOV R4,#0D
J5:INC R5
   CJNE R5,#10D,DD
MOV R5,#0D
J6:INC R6
;-----
DD:JNB P3.0,DD
   LCALL XIANSHI;延时
   JNB P3.0,DD
   AJMP ZHUAN
;------按键减-------------------
JIANZ:CJNE R1,#255D,SS
    AJMP DD1
SS:INC R1

   DEC R4
   CJNE R4,#255D,DD1
   MOV R4,#10D
   DEC R5
   CJNE R5,#255D,DD1
   MOV R5,#10D
   DEC R6

;-----
DD1:JNB P3.1,DD1
    LCALL XIANSHI;延时
    JNB P3.1,DD1
   AJMP ZHUAN
;------显示-------------------------
XIANSHI:MOV R0,#00H
      MOV P2,R0
      INC R0

      MOV DPTR,#SHUJUBIAO
      MOV A,R6
      MOVC A,@A+DPTR
      MOV P0,A
      LCALL YAN      
   
      
      MOV P2,R0
      INC R0

      MOV DPTR,#SHUJUBIAO
      MOV A,R5
      MOVC A,@A+DPTR
      MOV P0,A
      LCALL YAN
      
      MOV P2,R0
      
      MOV DPTR,#SHUJUBIAO
      MOV A,R4
      MOVC A,@A+DPTR
      MOV P0,A
      LCALL YAN      
   RET   
;-----中断程序--------------------
JISUAN:PUSH ACC
    MOV TL0,#LOW(65536-20000)
    MOV TH0,#HIGH(65536-20000)
      DJNZ R2,FAN
   MOV A,R1
   MOV R2,A
   CPL P1.0
FAN:POP ACC
    RETI
;------延时-------------------
YAN:MOV R3,#255D
    DJNZ R3,$
RET
SHUJUBIAO:DB 3FH,6H,5BH,4FH,66H
          DB 6DH,7DH,07H,7FH,6FH
END

xouou 发表于 2023-1-15 23:52

把教材扔了, 新手不适合学汇编

QZMASE 发表于 2023-1-16 08:14

c还看得懂一点,汇编就完全看不懂了

wgz001 发表于 2023-1-16 08:24

用C语言吧,汇编太难了

信仰☆默殇 发表于 2023-1-16 09:58

虽然我看不懂汇编,但是可以写个超过254复位到254的代码。
你可以试试出现这个现象后,挡位能不能回到0,我不知道你的显示部分怎么写的,是读取当前挡位变量显示还是根据按键次数显示

jkj 发表于 2023-1-16 10:25

大概看了一下,好像是 数码管分别按照R6/R5/R4显示3位数字,程序里对R6/R5/R4分别检查值255。
应该是用一个寄存器分别按百位、十位、个位显示,程序里只需要检查这一个寄存器值范围。

如果用3个寄存器显示3位数字,那应该3个寄存器每个分别对应百位、十位、个位,而不是每个寄存器范围值都是到255。

djdgf4 发表于 2023-1-16 12:50

不如把c代码也贴出来

nohao8024 发表于 2023-1-16 14:15

怀念啊,这汇编

nohao8024 发表于 2023-1-16 14:16

别学汇编了,对工作没啥帮助,C,c++,Python都挺好

w88522 发表于 2023-1-16 23:29

信仰☆默殇 发表于 2023-1-16 09:58
虽然我看不懂汇编,但是可以写个超过254复位到254的代码。
你可以试试出现这个现象后,挡位能不能回到0, ...

谢谢了!按键控制挡位,显示是跟着挡位变的,挡位变了显示跟着挡位变量变的,用挡位给显示做的限位。应该是同步的,现在不同步了,感觉好像按键以后只有显示在变,挡位偶尔丢步了,所以按加时会多出数值。
页: [1] 2
查看完整版本: 求懂单片机的大佬给分析一下按键显示和实际不同步问题