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

📄 tiaoshi6

📁 步进电机控制程序:该控制软件所要实现的功能是通过控制压电陶瓷自动寻找两极间最佳放电间隙
💻
字号:
KeyValue          EQU   30H                                   ;显示键值存储变量
DisplayCode       EQU   31H                                   ;显示码存贮变量
ROW               EQU   32H                                   ;行代码存贮变量
Column            EQU   33H                                   ;列代码存贮变量
ScanCount         EQU   34H                                   ;扫描圈数存贮变量
ScanCode          EQU   35H                                   ;扫描码存贮变量
DisplayBuffer     EQU   36H                                   ;以此开始的连续四个单元用以存放显示码
KeyvaluBuffer     EQU   40H                                   ;以此开始的连续四个单元用以存放键值
QIANWEI           EQU   44H                                   ;显示数值千位存贮变量
BAIWEI            EQU   45H                                   ;显示数值百位存贮变量
SHIWEI            EQU   46H                                   ;显示数值十位存贮变量
GEWEI             EQU   47H                                   ;显示数值个位存贮变量
LSCOUNT           EQU   48H                                   ;步进电机左转点动计数
RSCOUNT           EQU   49H                                   ;步进电机右转点动计数


                  ORG    0
                  SJMP   Start

Start:
                  MOV    SP,#5FH                               ;初始化程序
                  MOV    DisplayCode,#00H                      ;设定初始不显示
                  MOV    LSCOUNT,#00H
                  MOV    RSCOUNT,#00H
                  MOV    ScanCode,#0EFH                        ;设定扫描顺序
                  MOV    ScanCount,#5
                  MOV    P2,#00H
                  MOV    R2,#00H
                  MOV    R3,#19H
                  MOV    R6,#19H
                  MOV    R1,#4                                 ;显示码缓存区清零
                  MOV    R0,#DisplayBuffer
DisplayLoop:
                  MOV    @R0,#00H
                  INC    R0
                  DJNZ   R1,DisplayLoop
                  MOV    R1,#4                                ;键值缓存区清零
                  MOV    R0,#KeyvaluBuffer
Keyvaluloop:
                  MOV    @R0,#00H
                  INC    R0
                  DJNZ   R1,Keyvaluloop

Main:                                                         ;扫描程序开始,采用逐行查询扫描的方式
                  MOV    A,ScanCode
                  RR     A
                  ORL    A,#0F0H
                  MOV    ScanCode,A
                  MOV    P2,#00H
                  MOV    P3,A
                  MOV    A,P3
                  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    P2,@R0
                  MOV    A,ScanCode
                  RLC    A
                  MOV    ScanCode,A
                  MOV    P3,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
DELSHOW:
                  MOV   @R0,#00H
                  INC   R0
                  DJNZ  R1,DELSHOW
                  MOV   R0,#KeyvaluBuffer
                  MOV   R1,#4
DELKEY:                                                       ;清除键值缓存区内数据
                  MOV   @R0,#00H
                  INC   R0
                  DJNZ  R1,DELKEY
                  AJMP  NotKey

HaveKey:

                  AJMP   FindKeyValue
LOOP:             MOV    A,KeyValue
                  AJMP   Decode

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

PET:              INC    R2                                 ;小数点显示
                  CJNE   R2,#2,NotKey
                  MOV    A,DisplayCode
                  ADD    A,#80H
                  MOV    DisplayBuffer+3,A
                  AJMP   NotKey
  DIANDONG:       JNB P1.4,PANDIN1
                  JNB P1.5,PANDIN2
                  JNB P1.6,PANDIN1
                  JNB P1.7,PANDIN2
                  AJMP DIANDONG
   PANDIN1:       INC RSCOUNT
                  AJMP RIGHTTURN
   PANDIN2:       INC LSCOUNT
                  AJMP LEFTTURN
MOTORCICLE:
                  MOV TMOD ,#00000001B
LEFTTURN:         MOV QIANWEI,KeyvaluBuffer                ;电机1左转驱动程序
                  MOV BAIWEI,KeyvaluBuffer+1
                  MOV SHIWEI,KeyvaluBuffer+2
                  MOV GEWEI,KeyvaluBuffer+3
                  MOV TH0,#0FFH
                  MOV TL0,#0A0H
                  SETB TR0
PULSE1:           MOV A,GEWEI
                  JZ  TELI4
                  JNB TF0,$
                  CLR TF0
                  CPL P1.0
                  MOV TH0,#0FFH
                  MOV TL0,#0A0H
                  DEC GEWEI
                  AJMP PULSE1
TELI4:            MOV GEWEI,#9
                  MOV A,SHIWEI
                  JZ  TELI1
                  DEC SHIWEI
                  AJMP PULSE1
TELI1:            MOV SHIWEI,#9
                  MOV A,BAIWEI
                  JZ  TELI2
                  DEC BAIWEI
                  AJMP PULSE1
TELI2:            MOV BAIWEI,#9
                  MOV A,QIANWEI
                  JNZ  FENXI1
                  MOV A,LSCOUNT
                  CJNE A,#00H, Notkey
                  AJMP RIGHTTURN                  
FENXI1:           DEC QIANWEI
                  AJMP PULSE1
                  CLR TR0
                  MOV A,LSCOUNT
                  CJNE A,#00H,Notkey

                  NOP
                  NOP
                  NOP

RIGHTTURN:        CPL P1.1                                 ;电机1右转驱动程序
                  MOV QIANWEI,KeyvaluBuffer
                  MOV BAIWEI,KeyvaluBuffer+1
                  MOV SHIWEI,KeyvaluBuffer+2
                  MOV GEWEI,KeyvaluBuffer+3
                  MOV TH0,#0FFH
                  MOV TL0,#0A0H
                  SETB TR0
PULSE2:           MOV A,GEWEI
                  JZ  COMU1
                  JNB TF0,$
                  CLR TF0
                  CPL P1.0
                  MOV TH0,#0FFH
                  MOV TL0,#0A0H
                  DEC GEWEI
                  AJMP PULSE2
COMU1:            MOV GEWEI,#9
                  MOV A,SHIWEI
                  JZ  COMU2
                  DEC SHIWEI
                  AJMP PULSE2
COMU2:            MOV SHIWEI,#9
                  MOV A,BAIWEI
                  JZ  COMU3
                  DEC BAIWEI
                  AJMP PULSE2
COMU3:            MOV BAIWEI,#9
                  MOV A,QIANWEI
                  JNZ  FENXI2
                  MOV A,RSCOUNT
                  CJNE A,#00H,Notkey
                  AJMP COMU4
FENXI2:           DEC QIANWEI
                  AJMP PULSE2
                  CPL P1.1
                  CLR TR0
                  MOV A,RSCOUNT
                  CJNE A,#00H,Notkey
COMU4:            AJMP MOTORCICLE

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 + -