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

📄 完好自适应转速的检测128_32hz—键盘——微调.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
📖 第 1 页 / 共 3 页
字号:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;双字节与单字节相乘
;;;;;;;;;;;;;;;;;;;;;;;
CPU_1:MOV B,ASESS_2
      MOV A,CASE_1
      MUL AB
      MOV CASE_3,A
      MOV CASE_4,B
      MOV A,CASE_2
      MOV B,ASESS_2
      MUL AB
      ADD A,CASE_4
      MOV CASE_4,A
RET
;;;;;;;;;;;;;;;;;;;;;;;中断1
INT_0:CLR EX0  ;关闭中断1
      CLR SIGN_5
      CLR SIGN_10
      ;MOV ASESS_4,#0AH
      ;LCALL MAIN_2  ;;???
      ;SETB SIGN_5
      CLR IE0
      SETB EX0
     

RETI
;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;
;单字节十六进制整数转换成单字节BCD码整数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HBCD: MOV B,#100
DIV AB
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
;;:::::::::::
LOOP1: CLR RS0
       CLR RS1
       CLR EA
      MOV R1,#09H
      MOV R0,#30H                                   ;关闭中断
       SETB P3.3 ;;为P3.3输入数据做准备
       LCALL WAIT                               ;延时消抖
       JB p3.3,STATION1                             ;判断是否按下键

       MOV R1,#09H
PACE5: SETB P1.2                                 ;初始化74LS164使它的Q0~Q7电位为0
       CLR P1.3
       SETB P1.3
       DJNZ R1,PACE5

      CLR A                                          ;清零的目的是用A做计数
      SETB P3.3   ;;为P3.3输入数据做准备
      CLR P1.2
      CLR P1.3
      SETB P1.3
      INC A
      JNB P3.3,LOOP2                                         ;;;;;;;;;;;;JNB P3.3,LOOP2;;;;;;;;;;;;;;;
      SETB P3.3   ;;为P3.3输入数据做准备
LOOP3:SETB P1.2
      CLR P1.3
      SETB P1.3
      INC A
      SETB P3.3   ;;为P3.3输入数据做准备
      JNB P3.3,LOOP2
      SJMP LOOP3

LOOP2:    MOV R6,A                        ;使用到R6寄存器
          XRL A,#08H   ;功能键识别区
          JZ  KEY14
          MOV A,R6
          XRL A,#01H  ;功能区键识别按下的是数字键
          JZ STATION1
          MOV A,R6
          XRL A,#02H   ;功能区键识别按下的是数字键
          JZ STATION1
         ;;;;;;;;;;;;;;;;;;;;;;;;;;;
           MOV A,R6     ;此区跳往查表区
          XRL A,#03H
          JZ  X1   ;跳往POCESS处理
           MOV A,R6
          XRL A,#04H
          JZ  X2

           MOV A,R6
          XRL A,#05H
          JZ X3
          MOV A,R6
          XRL A,#06H
          JZ X4
           MOV A,R6
          XRL A,#07H
          JZ X5

STATION1:CLR RS1
         SETB RS0
          SETB EA

          RETI         ;返回中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


      X1: SETB POINT
          CLR RS1
          SETB RS0
          SETB EA
          RETI

      X2: CLR POINT
          CLR RS1
         SETB RS0
          SETB EA
          RETI                                   ;功能键区查表
      X3:CLR RS1
         SETB RS0
         SETB EA
          RETI
      X4:CLR RS0
         SETB RS1
        SETB EA
         RETI
      X5:MOV ASESS_4,#00H
         CLR RS1
         SETB RS0
         SETB EA
         RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY14:  SETB P3.3     ;;为P3.3输入数据做准备
       JNB P3.3,KEY14 ;防止按下数据输入键不放
       ;LJMP SPEAKE   ;;;;;;////////////////////
       MOV A,R3
       XRL A,#00H  ;;;;;;;;;;;
       JZ KEY0     ;;;;;;;;;;
       MOV R3,#00H
       CLR RS1
       SETB RS0  ;;;;;;;;;;;.
       SETB EA
       RETI        ;;;;;;;;;;;

KEY0:
                      ;此区为输录数字区
        MOV R1,#09H
        SETB P1.4
        SETB P3.3

PACE1:  CLR P1.2  ;初始化74LS164使它的Q0~Q7电位为0
        CLR P1.3
        SETB P1.3
        DJNZ R1,PACE1

KEY1:   SETB P1.4  ;;为P1.4输入数据做准备
        SETB P3.3;;为P3.3输入数据做准备
        JNB P1.4,KEY2  ;判断键区
        JNB P3.3,KEY8  ;判断键区
        SJMP KEY1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY2:  LCALL WAIT   ;延时消抖
       SETB P1.4    ;为P1.4输入数据做准备
       JB P1.4,KEY1 ;;;;;;;;;;;;;;;;;;;;;;;;;;
       ;LJMP SPEAKL  ;;;;;;;;;;///////////////////////////
       MOV R1,#09H

PACE2: SETB P1.2  ;该区使74LS164使它的Q0~Q7电位为1
       CLR P1.3
       SETB P1.3
       DJNZ R1,PACE2

KEY3: CLR  A         ;数字键区扫描
      SETB P1.4
      CLR P1.2
      CLR P1.3
      SETB P1.3
      SETB P1.4   ;为P1.4输入数据做准备
      JNB P1.4,KEY17 ;跳往KEY17数字处理区(如果此时P1.4为0则A里的数为0)



      CLR A
KEY4: SETB P1.2
      CLR P1.3
      SETB P1.3
      INC  A
      SETB P1.4  ;为P1.4输入数据做准备
      JNB P1.4,KEY17 ;跳往KEY17数字处理区
      JB P1.4,KEY4

KEY17: SETB P1.4  ;为P1.4输入数据做准备
       JNB P1.4,KEY17  ;防止手按在按键未放开
       JB P1.4,KEY7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KEY8:  SETB P3.3 ;为P3.3输入数据做准备
       LCALL WAIT
       JB P3.3,KEY1 ;;;;;;;;;;;;;;;;;;;;;;;

       MOV R1,#09H

PACE3: SETB P1.2  ;该区使74LS164使它的Q0~Q7电位为1
       CLR P1.3
       SETB P1.3
       DJNZ R1,PACE3

KEY9: MOV A,#08H      ;功能键区数字键扫描
      SETB P3.3
      CLR P1.2
      CLR P1.3
      SETB P1.3
      SETB P3.3 ;为P3.3输入数据做准备
      JNB P3.3,KEY18   ;跳往KEY18按键处理区(如果此时P3.3为0则A里的数为0)

      SETB P1.2
      CLR P1.3
      SETB P1.3
      INC A
      SETB P3.3 ;为P3.3输入数据做准备
      JNB P3.3,KEY18

KEY20: SETB P1.2
       CLR P1.3
       SETB P1.3
       INC A
       SETB P3.3  ;为P3.3输入数据做准备
       JNB P3.3,SAMSUNG
       JB P3.3,KEY20

KEY21:  LJMP KEY0     ;防止按下功能键区不是数字键

KEY18: SETB P3.3  ;为P3.3输入数据做准备
       JNB P3.3,KEY18 ;防止手按在按键未放开
       JB P3.3,KEY7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SAMSUNG: SETB P3.3   ;为P3.3输入数据做准备
        JNB P3.3,SAMSUNG ;防止手按在按键未放开
        JB P3.3,SAMSUNG10

SAMSUNG10:XRL A,#0FH    ;判断停止输入数据;
          JZ  KEY13   ;判断停止输入数据;
          JNZ  KEY21    ;判断停止输入数据;

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY7:  CLR IE1    ;软件清除中断1请求标志位 (保险)

      MOV @R0,A  ;此时@R0里的数据就是所按的数字键代表的数字
      INC R0     ;使R0指向下一字节
      MOV SSL,@R0
      LCALL  LCM         ;?????调用显示
      MOV A,R0
      XRL A,#32H  ;;;??????
      JZ  KEY13
      LJMP KEY0

KEY13: CLR IE1    ;软件清除中断1请求标志位 (保险)
       MOV R1,#040H

       MOV A,R0
       MOV R2,A  ;使用到R2寄存器
KEY16: DEC R0
       MOV A,@R0 ;倒序存放数据区
       MOV @R1,A
       INC R1
       CJNE R0,#030H, KEY16
       MOV SSH,41H
       MOV SSL,40H
       LCALL LCM   ;?????调用显示
       MOV A,41H
       MOV B,#0AH
       MUL AB
       MOV B,#40H
       ADD A,B
       MOV ASESS_4,A

       CLR RS1
       SETB RS0
       SETB EA
 RETI   ;返回中断
;;;;;;;;;;;;;;;;;;;;;;;;

WAIT: MOV CHANGE_X1,#41     ;延时子程序 (10.074ms)
WAIT1: MOV CHANGE_X2,#123
WAIT2:DJNZ CHANGE_X2,WAIT2
DJNZ CHANGE_X1,WAIT1
RET


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                               ;;;
;;重新分配地址                                                                   ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HANG     EQU     76H  ;指定行的位置
LIE      EQU     77H  ;指定列的位置
DEL1     EQU     78H  ;用于延时
DEL2     EQU     79H  ;用于延时
YE       EQU     7AH  ;页地址
LIEH     EQU     7BH  ;列地址高位
LIEL     EQU     7CH  ;列地址低位
DATAPAGE EQU     7DH  ;送字数据计数
LOOPNUM  EQU  	 7EH  ;送显示列计数
CSPIN    EQU     P2.7 ;片选端
REST     EQU     P2.6 ;复位端
RSPIN    EQU     P2.5 ;命令/数据选择端
SCLPIN   EQU     P2.4 ;时钟端
SIDPIN   EQU     P2.3 ;数据输入端
SSH EQU 6BH;设定速度高位
SSL EQU 6CH;设定速度低位
SJH EQU 6DH;实际速度高位
SJL EQU 6EH;实际速度低位
TIMEH1 EQU 6FH;时间千位
TIMEH2 EQU 70H;时间百位
TIMEL1 EQU 71H;时间十位
TIMEL2 EQU 72H;时间个位
JICHUN1 EQU 73H;3个寄存地址
JICHUN2 EQU 74H
JICHUN3 EQU 75H
WEIEN_1 EQU 6AH
WEIEN_2 EQU 69H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM:
MOV A,ASESS_1
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV SJL,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV  SJH,A
;________________________
MOV A,ASESS_3
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV TIMEL2,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV TIMEL1,A

;;;;;;;;;;;;;;;;;;;;;;;;;;; 显示
;===============================================

SHUJU:
       MOV      A,TIMEL1
       LCALL    INCADDR0
       MOV      HANG,#2
       MOV      LIE,#10
       LCALL    SHANGXIABYTE
       MOV      A,TIMEL2
       LCALL    INCADDR0
       INC      LIE
       LCALL    SHANGXIABYTE

       MOV      A,SSH
       LCALL    INCADDR0
       MOV      HANG,#3
       MOV      LIE,#10
       LCALL    SHANGXIABYTE
       MOV      A,SSL
       LCALL    INCADDR0
       INC      LIE
       LCALL    SHANGXIABYTE

       MOV      A,SJH
       LCALL    INCADDR0
       MOV      HANG,#4
       MOV      LIE,#10
       LCALL    SHANGXIABYTE
       MOV      A,SJL
       LCALL    INCADDR0
       INC      LIE
       LCALL    SHANGXIABYTE
       RET

;===============================================
;初始化界面
JIEMIAN:MOV     DPTR,#TAB_C;汉字
;第一行
        MOV     HANG,#1
        MOV     LIE,#2
        LCALL   SHANGXIAONE;1

⌨️ 快捷键说明

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