⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tiaoshi2.asm

📁 步进电机控制程序:该控制软件所要实现的功能是通过控制压电陶瓷自动寻找两极间最佳放电间隙
💻 ASM
字号:
KeyValue          EQU   30H
DisplayCode       EQU   31H
ROW               EQU   32H
Column            EQU   33H
ScanCount         EQU   34H
ScanCode          EQU   35H
DisplayBuffer     EQU   36H

                  ORG    0
                  SJMP   Start

Start:
                  MOV    SP,#5FH                               ;初始化程序
                  MOV    DisplayCode,#00H                      ;设定初始不显示
                  MOV    ScanCode,#0EFH                        ;设定扫描顺序
                  MOV    ScanCount,#5
                  MOV    P3,#00H
                  MOV    R2,#00H
                  MOV    R3,#19H
                  MOV    R6,#19H
                  MOV    R1,#4                                ;缓存区清零
                  MOV    R0,#DisplayBuffer
 RegistLoop:
                  MOV    @R0,#00H
                  INC    R0
                  DJNZ   R1,RegistLoop
 Main:                                                        ;扫描程序开始,采用逐行查询扫描的方式

              MOV    A,ScanCode
              RR     A
              ORL    A,#0F0H
              MOV    ScanCode,A
              MOV    P3,#00H
              MOV    P1,A
              MOV    A,P1
              MOV    R5,A
              XRL    A,ScanCode
              JZ     NotKey                                   ;若未检测到按键按下,则继续扫描下一行
              AJMP    HaveKey                                 ;若检测到按键按下,则跳至相应程序执行
  NotKey:

                DJNZ   ScanCount,KELO                         ;记录扫描圈数,一轮扫描完成后重新置入初值
                MOV    ScanCount,#5
                MOV    ScanCode,#0EFH


     KELO:         PUSH  ScanCode                             ;将主程序当前扫描行代码压入堆栈

     DECI:        MOV    R0,#35H                              ;循环显示缓存区内的数值
                  MOV    R4,#04H
                  MOV    ScanCode,#0FFH
                  CLR    C
     LIU:         INC    R0
                  MOV    P3,@R0

                  MOV    A,ScanCode
                  RLC    A
                  MOV    ScanCode,A
                  MOV    P1,A
                  AJMP   Delay1
        PEN:      DJNZ   R4,LIU

        FIJ:      DJNZ   R3,DECI
                  MOV    R3,#19H
                  DJNZ   R6,FIJ
                  MOV    R6,#19H

                  POP    ScanCode                           ;释放主程序当前扫描行代码
                  AJMP   Main                               ;跳至主程序继续执行扫描

   CLEA:                                                    ;清除现有显示数据,为下一次的显示做准备
               MOV  R2,#00H
               MOV  R0,#DisplayBuffer
               MOV  R1,#4
    DEL:
               MOV    @R0,#00H
               INC    R0
               DJNZ   R1,Del
               AJMP   NotKey

HaveKey:

                  AJMP   FindKeyValue
 LOOP:            MOV    A,KeyValue
                  AJMP   Decode

 SHOW:
                  MOV    A,DisplayCode
                  XRL    A,#77H
                  JZ     NotKey
                  MOV    A,DisplayCode
                  XRL    A,#7CH
                  JZ     CLEA
                  MOV    DisplayBuffer,DisplayBuffer+1
                  MOV    DisplayBuffer+1,DisplayBuffer+2
                  MOV    DisplayBuffer+2,DisplayBuffer+3
                  MOV    DisplayBuffer+3,DisplayCode

   PET:           INC    R2                                 ;小数点显示
                  CJNE   R2,#2,NotKey
                  MOV    A,DisplayCode
                  ADD    A,#80H
                  MOV    DisplayBuffer+3,A
                  AJMP   NotKey

 FindKeyValue:                                              ;计算扫描到的按键键值
                  MOV     A,R5

 FindRow:
                   SWAP    A
                   ANL     A,#0FH
                   MOV     Row,#0
 NextRow:
                   RRC     A
                   JNC     FindColumn
                   INC     Row
                   JMP     NextRow
FindColumn:
                   MOV     A,R5
                   ANL     A,#0FH
                   MOV     Column,#0
NextColumn:
                   RRC     A
                   JNC     CalculateKeyValue
                   INC     Column
                   JMP     NextColumn
CalculateKeyValue:
                  MOV     A,Column
                  MOV     B,#4
                  MUL     AB
                  ADD     A,Row
                  MOV     KeyValue,A
                  AJMP    LOOP
Decode:                                                       ;将计算出的键值进行译码
                  MOV     DPTR,#DisplayCodeTable
                  MOVC    A,@A+DPTR
                  MOV     DisplayCode,A
                  AJMP    SHOW
DisplayCodeTable:
                  DB      3FH                        ; 显示数字“0”
                  DB      06H                        ; 显示数字“1”
                  DB      5BH                        ; 显示数字“2”
                  DB      4FH                        ; 显示数字“3”
                  DB      66H                        ; 显示数字“4”
                  DB      6DH                        ; 显示数字“5”
                  DB      7DH                        ; 显示数字“6”
                  DB      07H                        ; 显示数字“7”
                  DB      7FH                        ; 显示数字“8”
                  DB      6FH                        ; 显示数字“9” 
                  DB      77H
                  DB      7CH
                  DB      39H
                  DB      5EH
                  DB      79H
                  DB      71H
                  DB      00H

Delay1:
                 MOV     R7,#2
                 DJNZ    R7,$
                 AJMP    PEN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -