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

📄 signal_jj_xz.asm

📁 通信基带信号发生器的设计
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 ;-----------键盘扫描相关-----------
        KEYH  EQU 30H          ;待扫描行线
        KEYL  EQU 31H          ;待扫描列线
        KEYZ  EQU 32H          ;按键值
        KEYN  EQU 33H          ;指示待扫描行
       ;---------LCD显示地址相关----------
        COUNT EQU 34H          ;存字符显示个数
       COUNT1 EQU 35H          ;存输入数据位数
       COUNT2 EQU 36H          ;存送给LCD显示数字位数,等于COUNT1

        AD2   EQU 37H          ;据状态在串口通信中取数地址
        AD4   EQU 38H          ;据状态对应相应存按键值地址(对其进行16进制转换)
       ;------------16to10转换用到----------------
        M3    EQU 3AH          ;存积的四个字节空间
        M2    EQU 3BH
        M1    EQU 3CH
        M0    EQU 3DH
        Z1    EQU 4EH          ;存每次乘积的进位
        Z2    EQU 3FH
        Z3    EQU 40H
       ;--------10to16转化暂存区2f-28-------------
        FIRADD    EQU    2FH
       ;-----------除法用到的单元-----------------
        DIVDLL    EQU    41H        ;定义被除数单元
        DIVDLH    EQU    42H
        DIVDHL    EQU    43H
        DIVDHH    EQU    44H
        DIVDL     EQU    45H        ;定义除数单元
        DIVDH     EQU    46H
        TEMPL     EQU    47H        ;定义余数单元
        TEMPH     EQU    48H
       ;-----------存按键值----------------
        FRE   EQU 48H          ;频率48H-4FH      8位
        FREZ  EQU 50H          ;调制频率50H-54H  5位
       ;--------------位选-----------------
        EN    EQU P3.6         ;并行送数据用到
        TXD   EQU P3.7
        RS    EQU P3.0         ;LCD控制位
        RW    EQU P3.1
        E     EQU P3.2
;==================================================================
;**************************主函数开始******************************
        ORG 0000H
        SJMP START
        ORG 0040H
START:  MOV SP,#60H           ;主程序入口
        LCALL INIT            ;调用LCM初始化
        LCALL WEL_XS          ;显示欢迎界面

        MOV COUNT1,#0CH       ;给发送空间赋标志值以及初值(每次发4个字节)
NEXT1:  MOV R0,#80H
        MOV @R0,#0
        INC R0
        DJNZ COUNT1,NEXT1
        MOV R0,#80H
        MOV @R0,#0E7H
        MOV R0,#85H
        MOV @R0,#0E6H
        MOV R0,#8AH
        MOV @R0,#0E4H

NEXT2:  MOV P1,#0F0H          ;有键按下清出欢迎界面
        MOV A,P1
        ORL A,#0FH
        CPL A
        JNZ NEXT3
        SJMP NEXT2
NEXT3:  LCALL CLEAR_P
;*******************以下输入频率\模式************************
MAIN:   LCALL KEY
        MOV A,KEYZ
        CJNE A,#0BH,MAIN_1
        AJMP MS_IN
MAIN_1: CJNE A,#0CH,MAIN_2
        AJMP FRE_IN
MAIN_2: CJNE A,#0DH,MAIN_3
        AJMP FREZ_IN
MAIN_3: CJNE A,#0EH,MAIN_4
        AJMP JIA_IN
MAIN_4: CJNE A,#0FH,MAIN
        AJMP JIAN_IN
;----------------------------------------------------------------
MS_IN:  ACALL MS_1
        AJMP MAIN

MS_1:   MOV A,#80H             ;在该行从新显示'MOD?'
        LCALL SEND_I
        MOV DPTR,#TAB_MS
        MOV COUNT,#4
        LCALL QUWRD
        MOV  A,#0EH            ;开光标
        LCALL SEND_I
MS2:    LCALL KEY
        MOV A,KEYZ
        CLR C
        SUBB A,#5              ;是否为有效模式键(0-5)
        JNC MS2
MS3:    MOV A,#0CH             ;关光标
        LCALL SEND_I
        MOV R0,#81H            ;将模式值存入发送空间
        MOV @R0,KEYZ
        MOV COUNT,#10H

        CJNE @R0,#00H,MS4
        MOV DPTR,#TAB_SIN
        SJMP MS9
MS4:    CJNE @R0,#01H,MS5
        MOV DPTR,#TAB_AM       ;在AM、FM下只占6位显示
        MOV COUNT,#6H
        SJMP MS9
MS5:    CJNE @R0,#02H,MS6
        MOV DPTR,#TAB_FM
        MOV COUNT,#6H
        SJMP MS9
MS6:    CJNE @R0,#03H,MS7
        MOV DPTR,#TAB_ASK
        SJMP MS9
MS7:    CJNE @R0,#04H,MS8
        MOV DPTR,#TAB_FSK
        SJMP MS9
MS8:    MOV DPTR,#TAB_PSK

MS9:    MOV A,#80H
        ACALL SEND_I
        ACALL QUWRD
        MOV AD2,#80H
        LCALL TRAN
        RET
;----------------------------------------------------------------
FRE_IN: ACALL FRE_1
        AJMP MAIN

FRE_1:  MOV AD4,#48H
        MOV COUNT1,#0

        MOV A,#0C0H            ;在该行从新显示'FRE:'
        LCALL SEND_I
        MOV COUNT,#10H
        MOV DPTR,#TAB_FRE
        LCALL QUWRD
        MOV A,#0C4H
        LCALL SEND_I
        LCALL DATAIN

FRE_2:  MOV AD4,#48H
        MOV COUNT2,COUNT1
        LCALL ZHUANHUAN
        MOV AD2,#86H
        LCALL CHUNSHU
        MOV AD2,#85H
        LCALL TRAN
        RET
;----------------------------------------------------------------
FREZ_IN:ACALL FREZ_1
        AJMP MAIN

FREZ_1: MOV AD4,#50H
        MOV COUNT1,#0

        MOV A,#85H             ;在该行从新显示'FRE:'
        LCALL SEND_I
        MOV COUNT,#0AH
        MOV DPTR,#TAB_FREZ
        LCALL QUWRD
        MOV A,#8AH
        LCALL SEND_I
        LCALL DATAIN

FREZ_2: MOV AD4,#50H
        MOV COUNT2,COUNT1
        LCALL ZHUANHUAN
        MOV AD2,#8BH
        LCALL CHUNSHU
        MOV AD2,#8AH
        LCALL TRAN
        RET
;----------------------------------------------------------------
JIA_IN: MOV R0,#86H
JIA_1:  MOV A,@R0
        CLR C
        ADD A,#1
        MOV @R0,A
        JNC JIA_2
        INC R0
        SJMP JIA_1

JIA_2:  MOV R0,#86H            ;对加1的数据进行10进制转换
        MOV DIVDLL,@R0
        INC R0
        MOV DIVDLH,@R0
        INC R0
        MOV DIVDHL,@R0
        INC R0
        MOV DIVDHH,@R0
        CALL TO16_10
        MOV R5,#8              ;将转换的数据存入48-4F中
        MOV R1,#4FH
        MOV R0,#FIRADD
JIALOOP:MOV A,@R0
        MOV @R1,A
        DEC R1
        DEC R0
        DJNZ R5,JIALOOP

        MOV A,#0C0H
        LCALL SEND_I
        MOV DPTR,#TAB_FRE
        MOV COUNT,#10H
        LCALL QUWRD
        MOV A,#0C4H
        LCALL SEND_I
        MOV COUNT1,#8
        MOV AD4,#48H           ;送10进制数据显示
        LCALL QUSHU
        MOV AD2,#85H
        LCALL TRAN
        AJMP MAIN

;----------------------------------------------------------------
JIAN_IN:MOV R0,#86H
JIAN_1: MOV A,@R0
        CLR C
        SUBB A,#1
        MOV @R0,A
        JNC JIAN_2
        INC R0
        SJMP JIAN_1

JIAN_2: MOV R0,#86H            ;对加1的数据进行10进制转换
        MOV DIVDLL,@R0
        INC R0
        MOV DIVDLH,@R0
        INC R0
        MOV DIVDHL,@R0
        INC R0
        MOV DIVDHH,@R0
        CALL TO16_10
        MOV R5,#8              ;将转换的数据存入48-4F中
        MOV R1,#4FH
        MOV R0,#FIRADD
JIANLOOP:MOV A,@R0
         MOV @R1,A
         DEC R1
         DEC R0
         DJNZ R5,JIANLOOP

        MOV A,#0C0H
        LCALL SEND_I
        MOV DPTR,#TAB_FRE
        MOV COUNT,#10H
        LCALL QUWRD
        MOV A,#0C4H
        LCALL SEND_I
        MOV COUNT1,#8
        MOV AD4,#48H           ;送10进制数据显示
        LCALL QUSHU
        MOV AD2,#85H
        LCALL TRAN

        AJMP MAIN

;========================================================================
;***************************数据输入程序*********************************
DATAIN:MOV A,#0EH           ;开光标
       LCALL SEND_I
DATA3: LCALL KEY
       MOV A,KEYZ
       CJNE A,#0AH,DATA1    ;是否为确认键
       MOV A,COUNT1
       CJNE A,#0,DATA2      ;按下的为确认键,且已经输入数字则退出
       SJMP DATA3
DATA1: CLR C
       SUBB A,#0AH
       JNC DATA3
       MOV R1,AD4
       MOV @R1,KEYZ
       MOV A,KEYZ
       ADD A,#30H
       LCALL SEND_D
       INC COUNT1
       INC AD4
       SJMP DATA3
DATA2: MOV A,#0CH           ;关光标
       LCALL SEND_I
       RET
;*********************16进制 to 10进制***************************
TO16_10:

⌨️ 快捷键说明

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