?? bo hao.asm
字號:
;*******************************************************************
;* *
;* ME500單片機(jī)開發(fā)系統(tǒng)演示程序 - 電話撥號器 *
;* *
;* LCD1602顯示 *
;* *
;* *
;* 版本: V1.0 (2006/11/20) *
;* 作者: gguoqing (Email: gguoqing@willar.com) *
;* 網(wǎng)站: www.willar.com(偉納電子) www.mcusj.com(偉納單片機(jī)世界) *
;* 郵箱: support@willar.com *
;* *
;*【版權(quán)】Copyright(C)偉納電子 www.willar.com All Rights Reserved *
;*【聲明】此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! *
;* *
;*******************************************************************
; 采用MT8880雙音頻芯片
; 單片機(jī)的 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 ;按鍵計數(shù)單元
;**********************************************************
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 ;有鍵按下轉(zhuǎn)LOOP1
JMP S_LOOP
S_LOOP1:
ACALL KEY_IN ;調(diào)矩陣鍵盤程序
ACALL BEEP_BL ;調(diào)蜂鳴器程序
MOV A,R3 ;鍵值入A
CJNE A,#0FH,S_LOOP2 ;是否為發(fā)送鍵
JMP S_DTMF ;調(diào)撥號程序
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 ;對按鍵的次數(shù),進(jìn)行計數(shù)
JMP S_LOOP
;----------------------------------------------------
;發(fā)送DTMF信號
;-----------------------------------------------------
S_DTMF:
CALL SET_LCD2 ;第二行顯示信息
MOV R5,#30
CLR TEL ;摘機(jī)
LOP0: CALL DELAY50MS ;延時等待撥號音出現(xiàn)
DJNZ R5,LOP0
ACALL MT_INIT ;MT8880初始化
ACALL MT_TRAN ;MT8880撥號
MOV R5,#240
LOP1: CALL DELAY50MS
DJNZ R5,LOP1
SETB TEL ;掛機(jī)
MOV R5,#4
LOP2: CALL DELAY50MS
DJNZ R5,LOP2
LJMP MAIN
;-------------------------------------------------------------
;MT8880 初始化
;RS=1,RW=0,寫狀態(tài)寄存器
;-------------------------------------------------------------
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 發(fā)碼程序
;RS=1,RW=0,寫狀態(tài)寄存器
;RS=1,RW=1,讀狀態(tài)寄存器
;RS=0,RW=0,寫發(fā)送寄存器
;**********************************************************
MT_TRAN:
MOV R0,#40H ;發(fā)送數(shù)據(jù)存放起始單元
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 ;寫發(fā)送寄存器
CLR MT_RW
CLR MT_CK
LOOP2:
MOV A,@R0
ANL A,#0FH
MOV P1,A ;發(fā)送數(shù)據(jù)
LCALL W_CP
CALL DELAY50MS ;延時50MS
LOOP3:
;LCALL R_STATUS ;讀 8880 狀態(tài)寄存器
;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
;-------------------------------------------------------
;讀狀態(tài)寄存器
;RS=1,RW=1,讀狀態(tài)寄存器。
;-------------------------------------------------------
R_STATUS:
MOV A,#0FFH
MOV P1,A
SETB MT_RS ;讀狀態(tài)寄存器
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
;--------------------------------------------------------
;設(shè)置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 初始化子程序
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -