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

📄 s31.asm

📁 MCS-51单片机实验 39个实用实验和源码
💻 ASM
字号:
;FOR EAT598
Z8279   EQU     0F239H  ;8279 状态/命令口地址
D8279   EQU     0F238H  ;8279 数据口地址
LEDMOD  EQU     00H     ;左边输入 八位字符显示
                        ;外部译码键扫描方式,双键互锁
LEDFEQ  EQU     2FH     ;扫描速率
LEDCLS  EQU     0C1H    ;清除显示 RAM
LEDWR0  EQU     80H     ;设定的将要写入的显示RAM地址
READKB  EQU     40H     ;读 FIFO RAM 地址 0 的命令字

        ORG     0000H
        AJMP    START
        ORG     0040H
START:
        MOV     SP,#60H
        LCALL   INIT8279        ;初始化8279
        MOV     SCON,#50H       ;串口 方式 1
        MOV     TMOD,#20H       ;T1 方式 1
        MOV     TL1,#0FDH       ;波特率 9600 的常数
        MOV     TH1,#0FDH
        SETB    TR1             ;开中断
        SETB    ET1
        SETB    EA
WAIT:
        JBC     RI,DIS_REC      ;是否接收到数据
        LCALL   GETKEY          ;读键盘
        CJNE    A,#0FFH,WAIT    ;是否有键输入
        MOV     SBUF,B          ;串口输出键盘输入的值
        NOP
SS:     JBC     TI,WAIT         ;是否发送完毕
        SJMP    SS

DIS_REC:
        MOV     A,SBUF          ;读串口接收到的数据
        CLR     C
        SUBB    A,#30H          ;以下判定输入是否在0-F
        JC     ERROR
        SUBB    A,#0AH
        JNC     DIS_REC1
        ADD     A,#0AH
        SJMP    DIS_REC2
DIS_REC1:
        SUBB    A,#7H
        JC      ERROR
        SUBB    A,#6H
        JNC     ERROR
        ADD     A,#10H
DIS_REC2:
        MOV     R4,#00H
        MOV     R5,A
        LCALL   DISLED          ;显示输入的数字(0-F)
ERROR:  AJMP    WAIT

INIT8279:                       ;8279初始化子程序
        PUSH   DPH              ;保存现场
        PUSH   DPL
        PUSH   ACC
        LCALL  DELAY            ;延时
        MOV    DPTR ,#Z8279
        MOV    A,#LEDMOD        ;置8279工作方式
        MOVX   @DPTR,A
        MOV    A,#LEDFEQ        ;置键盘扫描速率
        MOVX   @DPTR,A
        MOV    A,#LEDCLS        ;清除 LED 显示
        MOVX   @DPTR,A
        POP    ACC              ;恢复现场
        POP    DPL
        POP    DPH
        RET
;读取键盘子程序
;输入: 无   ; 输出: B: 读到的键码 A: 按键的标志
GETKEY: PUSH   DPH              ;保存现场
        PUSH   DPL
        PUSH   PSW
        MOV    DPTR,#Z8279
        MOVX   A,@DPTR          ;读8279状态
        ANL    A,#07H           ;屏蔽D7-D3
        JNZ    GETVAL           ;判断是否有键输入
        MOV    A,#0H            ;置标志(无键输入)
        SJMP   NKBHIT
GETVAL: MOV    A,#READKB        ;读 FIFO RAM 命令
        MOVX   @DPTR,A
        MOV    DPTR,#D8279
        MOVX   A,@DPTR          ;读键
        ANL    A,#0FH           ;屏蔽 SHIFT 和 CTRL 键
        MOV    DPTR,#KEYCODE    ;键码表起始地址
        MOVC   A,@A+DPTR        ;查表
        MOV    B,A              ;置返回键值
        MOV    A,#0FFH          ;置标志(有键输入)
NKBHIT: POP    PSW              ;恢复现场
        POP    DPL
        POP    DPH
        RET
;显示字符子程序
;输入: R4,位置 R5,值
DISLED:  PUSH   DPH             ;保存现场
         PUSH   DPL
         PUSH   ACC
         MOV    A,#LEDWR0       ;置显示起始地址
         ADD    A,R4            ;加位置偏移量
         MOV    DPTR,#Z8279
         MOVX   @DPTR,A         ;设定显示位置
         MOV    DPTR,#LEDSEG    ;置显示常数表起始位置
         MOV    A,R5
         MOVC   A,@A+DPTR       ;查表
         MOV    DPTR,#D8279
         MOVX   @DPTR,A         ;显示数据
         POP    ACC             ;恢复现场
         POP    DPL
         POP    DPH
         RET

DELAY:                          ;延时子程序
        PUSH    0               ;保存现场
        PUSH    1
        MOV     0,#0H
DELAY1: MOV     1,#0H
        DJNZ    1,$
        DJNZ    0,DELAY1
        POP     1               ;恢复现场
        POP     0
        RET
;LED显示常数表
LEDSEG: DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
        DB      0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.'
        DB      0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.'
        DB      6DH,02H,08H,00H,59H,0FH,76H     ;'U,-,_, ,I,O,P, '
;键盘键码表
KEYCODE:DB      30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z'
        DB      38H,39H,41H,42H,43H,44H,45H,46H ;'3,4,E,R,D,F,X,C'
        DB      47H,48H,49H,4AH,4BH,4CH,4DH,4EH ;'5,6,T,Y,G,H,V,B'
        END

⌨️ 快捷键说明

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