吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1139|回复: 10
收起左侧

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

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

[Asm] 纯文本查看 复制代码
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
wgz001 发表于 2023-1-16 08:24
信仰☆默殇 发表于 2023-1-16 09:58
虽然我看不懂汇编,但是可以写个超过254复位到254的代码。
你可以试试出现这个现象后,挡位能不能回到0,我不知道你的显示部分怎么写的,是读取当前挡位变量显示还是根据按键次数显示

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
w88522 + 1 + 1 谢谢@Thanks!

查看全部评分

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, ...

谢谢了!按键控制挡位,显示是跟着挡位变的,挡位变了显示跟着挡位变量变的,用挡位给显示做的限位。应该是同步的,现在不同步了,感觉好像按键以后只有显示在变,挡位偶尔丢步了,所以按加时会多出数值。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表