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

📄 语音静态显示led104.asm

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

 ORG 0013H ;中断1的调用
;;;;;;;;;INC R2
LJMP LOOP1

         ORG 050H
MAIN:    ;;;;;;;;;;;;;;;;;;;;MOV R2,#00H  ;R2作中断计数器
         MOV R4,#64 ;全显测灯
 DIR:    SETB P1.0
         CLR P1.1   ;全显测
         SETB P1.1
         DJNZ R4,DIR
         MOV R3,#00H   ;R3作为位选择计数器
         MOV R5,#00H
         MOV 2FH,#00H ;;;;;;;;;;;///////////


 START1:       ;;;;;;;;;;;;;;MOV R2,#00H  ;R2作中断计数器
START:

               MOV R1,#09H
               MOV R0,#30H
               ;;;;;;;;;;;;;;;MOV R2,#00H  ;R2作中断计数器
PACE:          CLR P1.2  ;初始化74LS164使它的Q0~Q7电位为0
               CLR P1.3
               SETB P1.3
               DJNZ R1,PACE
               CLR RS1 ;选择工作寄存器组
               CLR RS0
               SETB IT1 ;设置为中断1为跳沿触发
               SETB EA  ;打开总中断开关
               SETB EX1 ;打开中断1
               CLR  EX0
               CLR  ET0
               CLR  ET1
               MOV SP,#60H
               MOV R1,#09H
               MOV R0,#30H
               SJMP START
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP1: CLR EA                                   ;关闭中断
       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
      ;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
         ;;;;;;;;;;;;;;; ;MOV A,R2   ;判断停止输入数据;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;; ;XRL A,#02H
          ;;;;;;;;;;;;;;XRL A,#01H
         ;;;;;;;;;;; ;;JZ KEY
         ;; ;;;;;;;;;;;;;;;;;;JZ  STATION  ;判断停止输入数据

STATION1:         RETI         ;返回中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


      X1: LCALL SPEAKL  ;;;//////////////////
          CJNE R3,#00H,WINDOWS

          LCALL SAMSUNG1
          RETI
      X2: LCALL SPEAKL  ;;;;//////////////////
          CJNE R3,#00H,WINDOWS1
          LCALL SAMSUNG2
          RETI                                   ;功能键区查表
      X3: LCALL SPEAKL  ;;;;;;;//////////////
          INC R3
          LCALL SAMSUNG3
          RETI
      X4:LCALL SPEAKL   ;;;;;;;;;;//////////////
          LCALL SAMSUNG4
           RETI
      X5: LCALL SPEAKL   ;;;;;;;;;;;////////////////
          LCALL SAMSUNG5
          RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WINDOWS:LJMP JUAN
        RETI
WINDOWS1:LJMP BOOK
         RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;STATION: LJMP KEY13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY14:  SETB P3.3     ;;为P3.3输入数据做准备
       JNB P3.3,KEY14 ;防止按下数据输入键不放
       LCALL SPEAKE   ;;;;;;////////////////////
       MOV A,R3
       XRL A,#00H  ;;;;;;;;;;;
       JZ KEY0     ;;;;;;;;;;
       MOV R3,#00H  ;;;;;;;;;;;
       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 ;;;;;;;;;;;;;;;;;;;;;;;;;;
       ;;;;;;LCALL 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指向下一字节
      LCALL LIGHT ;调用显示
      MOV A,R0
      XRL A,#38H
      JZ  KEY13
      LCALL SPEAKL ;;;;;;;;;;/////////////////
      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


       RETI   ;返回中断
;;;;;;;;;;;KEY11:
       ;;;;;;;;RETI   ;返回中断

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIGHT: MOV R1,#040H  ;输入数据显示子程序
       MOV A,R0
       MOV R6,A        ;使用到R6寄存器
LIGHT2:MOV @R1,#00001010B
       INC R1
       CJNE R1,#048H,LIGHT2
       MOV R1,#040H
LIGHT1: DEC R0
       MOV A,@R0 ;倒序存放数据
       MOV @R1,A
       INC R1
       CJNE R0,#030H, LIGHT1
       MOV A,R6
       MOV R0,A

       LCALL LED


RET


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED:  MOV R1,#40H   ;串显示数据传送子程序
      MOV R5,#08H
LED1:MOV DPTR,#044CH
     MOV A,@R1
     MOVC A,@A+DPTR
     MOV R4,#08H
LED2: RLC A
      MOV P1.0,C
      CLR P1.1
      SETB P1.1
      DJNZ R4,LED2
      INC R1
      DJNZ R5,LED1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WAIT: MOV R7,#142     ;延时子程序 (35.074ms)
WAIT1: MOV R6,#122
WAIT2:DJNZ R6,WAIT2
DJNZ R7,WAIT1
RET

ORG 044CH
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H  ;0--9的七段码(共阴) 和消影
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SAMSUNG1: SETB P3.3
          JNB P3.3,SAMSUNG1 ;防止按下数据输入键不放
          MOV A,R2 ;此时R2保存上次输入数据的的下一个地址
          MOV R0,A
WEI:DEC R0
    INC @R0

⌨️ 快捷键说明

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