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

📄 bo hao.asm

📁 用89S52作的远程序电话拨号系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*******************************************************************
;*                                                                 *
;* ME500单片机开发系统演示程序 - 电话拨号器                        *
;*                                                                 *
;* LCD1602显示                                                     *
;*                                                                 *
;*                                                                 *
;* 版本: V1.0 (2006/11/20)                                        *
;* 作者: gguoqing (Email: gguoqing@willar.com)                    *
;* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界) *
;* 邮箱: support@willar.com                                       *
;*                                                                 *
;*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       *
;*                                                                 *
;*******************************************************************

; 采用MT8880双音频芯片
; 单片机的 P1.0-P1.3 分别接入MT8880的 D0-D3;
; 使用矩阵键盘输入电话号码,按"F"健开始拨号。

;**********************************************************
         MT_RS  EQU  P2.3
         MT_RW  EQU  P2.4
         MT_CS  EQU  P2.5
         MT_CK  EQU  P2.6
         TEL    EQU  P2.7

         K1  BIT  P1.4

         LCD_RS  EQU  P2.0     ;LCD控制端口
         LCD_RW  EQU  P2.1
         LCD_EN  EQU  P2.2
         LCD_X   EQU  27H      ;LCD 地址变量
         BEEP  BIT  P3.7

         KEY_COUN   EQU  4FH   ;按键计数单元

;**********************************************************

         ORG   0000H
         AJMP  MAIN
         ORG   0030H

;**********************************************************
MAIN:
        MOV  SP,#60H
        MOV  P1,#0FFH
        MOV  P0,#0FFH
        MOV  P2,#0FFH
        MOV  P3,#0FFH

        CALL  INIT_LCD        ;初始化LCD
        CALL  SET_LCD1        ;第一行显示信息
        CALL  SET_LCD2        ;第二行显示信息

        MOV  R0,#40H
        MOV  A,#00H
        MOV  KEY_COUN,A
CLR1:
        MOV  @R0,A            ;清零
        INC  R0
        CJNE  R0,#50H,CLR1

;==========================================================
;输入号码子程序
;==========================================================
TEL_IN:
        MOV  R0,#40H
        MOV  LCD_X,#4
S_LOOP:
        MOV  P1,#0F0H          ;判是否有按键按下
        MOV  A,P1
        CJNE  A,#0F0H,S_LOOP1  ;有键按下转LOOP1
        JMP   S_LOOP
S_LOOP1:
        ACALL   KEY_IN         ;调矩阵键盘程序
        ACALL   BEEP_BL        ;调蜂鸣器程序

        MOV  A,R3              ;键值入A
        CJNE  A,#0FH,S_LOOP2   ;是否为发送键
        JMP  S_DTMF           ;调拨号程序
S_LOOP2:
        CJNE  A,#00H,S_LOOP3   ;是否为"0"键
        MOV  A,#0AH
S_LOOP3:
        MOV  @R0,A             ;键值送寄存器保存
        ACALL  CONV1           ;显示键值
        INC  LCD_X
        INC  R0
        INC  KEY_COUN          ;对按键的次数,进行计数
        JMP  S_LOOP

;----------------------------------------------------
;发送DTMF信号
;-----------------------------------------------------
S_DTMF:
        CALL  SET_LCD2       ;第二行显示信息
        MOV  R5,#30
        CLR  TEL             ;摘机
LOP0:   CALL  DELAY50MS      ;延时等待拨号音出现
        DJNZ  R5,LOP0

        ACALL  MT_INIT        ;MT8880初始化
        ACALL  MT_TRAN        ;MT8880拨号

        MOV  R5,#240
LOP1:   CALL  DELAY50MS
        DJNZ  R5,LOP1
        SETB  TEL           ;挂机

        MOV  R5,#4
LOP2:   CALL  DELAY50MS
        DJNZ  R5,LOP2
        LJMP  MAIN
;-------------------------------------------------------------
;MT8880 初始化
;RS=1,RW=0,写状态寄存器
;-------------------------------------------------------------
MT_INIT:
        MOV    A,#10H
        CLR    MT_CS
        NOP
        NOP
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV    P1,A            ;写 8880CRA,CRA=0000.
        LCALL  W_CP

        MOV    P1,A            ;写 8880CRA,CRA=0000.
        LCALL  W_CP

        MOV    A,#18H
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV    P1,A            ;写 8880CRA,CRA=1000,允许选择CRB.
        LCALL  W_CP

        MOV    A,#10H
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV    P1,A            ;写 8880CRB,CRB=0000
        LCALL  W_CP
        RET
;**********************************************************
;MT8880   发码程序

;RS=1,RW=0,写状态寄存器
;RS=1,RW=1,读状态寄存器
;RS=0,RW=0,写发送寄存器
;**********************************************************
MT_TRAN:
        MOV  R0,#40H      ;发送数据存放起始单元
        MOV  R1,KEY_COUN
        MOV  LCD_X,#4
LOOP4:
        MOV  A,#1DH       ;写8880CRA,CRA=1101.
        CLR    MT_CS
        NOP
        NOP
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV  P1,A
        LCALL  W_CP

        MOV  A,#10H
        SETB   MT_RS
        CLR    MT_RW
        CLR    MT_CK
        MOV  P1,A         ;写 8880CRB,CRB=0000.
        LCALL  W_CP       ;8880模式2为TONE,DTMF,IRQ,BURST

        CLR  MT_RS        ;写发送寄存器
        CLR  MT_RW
        CLR  MT_CK
LOOP2:

        MOV  A,@R0
        ANL  A,#0FH
        MOV  P1,A         ;发送数据
        LCALL  W_CP
        CALL  DELAY50MS   ;延时50MS
LOOP3:
        ;LCALL  R_STATUS   ;读 8880 状态寄存器
        ;JNB  ACC.1,LOOP3
        CALL  CONV1
        CALL  DELAY50MS
        CALL  DELAY50MS
        CALL  DELAY50MS   ;延时150MS

        INC  R0
        INC  LCD_X
        DJNZ R1,LOOP2
        SETB  MT_CS
        LCALL  SET_LCD1
        RET

;-------------------------------------------------------
;读状态寄存器
;RS=1,RW=1,读状态寄存器。
;-------------------------------------------------------
R_STATUS:
         MOV  A,#0FFH
         MOV  P1,A
         SETB  MT_RS       ;读状态寄存器
         SETB  MT_RW
         SETB  MT_CK
         NOP
         NOP
         LCALL  R_CP
         RET
;-------------------------------------------------------
;写MT8880的Φ2脉冲子程序
;-------------------------------------------------------
W_CP:
         SETB  MT_CK
         NOP
         NOP
         NOP
         NOP
         CLR   MT_CK
         RET
;-------------------------------------------------------
;读MT8880的Φ2脉冲子程序
;-------------------------------------------------------
R_CP:

         SETB  MT_CK
         NOP
         NOP
         MOV   A,P1
         NOP
         NOP
         CLR   MT_CK
         RET

;--------------------------------------------------------
;设置LCD初始化显示
;--------------------------------------------------------
SET_LCD1:
          MOV  DPTR,#LMESS1   ;指针指到显示信息1
          MOV  A,#1           ;显示在第一行
          CALL  LCD_PRINT
          RET
SET_LCD2:
          MOV  DPTR,#LMESS2   ;指针指到显示信息2
          MOV  A,#2           ;显示在第二行
          CALL  LCD_PRINT
          RET

LMESS1:
         DB  "TELEPHONE DIALER",0  ;LCD 第一行显示
LMESS2:
         DB  "TEL:            ",0  ;LCD 第二行显示

;--------------------------------------------------------
;LCD 初始化子程序

⌨️ 快捷键说明

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