📄 1
字号:
; *************************************
; * (TX.ASM) *
; * 遥控发送控制器 *
; * 2005.7.18 *
; *************************************
;
;伪定义
KEY0 EQU P2.6 ;
KEY1 EQU P2.7 ;
KEY2 EQU P3.5
KEY3 EQU P3.4
KEY4 EQU P3.3 ;
REMOTEOUT EQU P3.2 ;
;*************************************************
LAMPBLAK EQU P1.4 ;背光灯控制,=0时开,=1时关.
CS EQU P1.5 ;液晶使能,=1操作,=0禁止.
SID EQU P1.6 ;液晶串行数据输入口
SCLK EQU P1.7 ;液晶串行操作时钟口
;************程序入口***********
;*************************************
;* *
;* 主程序和中断程序入口 *
;* *
;*************************************
ORG 0000H ;程序执行开始地址
AJMP START ;跳至START执行
ORG 0003H ;外中断0中断入口地址
RETI ;中断返回(不开中断)
ORG 000BH ;定时器T0中断入口地址
RETI ;中断返回(不开中断)
ORG 0013H ;外中断1中断入口地址
RETI ;中断返回(不开中断)
ORG 001BH ;定时器T1中断入口地址
LJMP INTT1 ;跳至INTT1中断服务程序
ORG 0023H ;串行口中断入口地址
RETI ;中断返回(不开中断)
ORG 002BH ;定时器T2中断入口地址
RETI ;中断返回(不开中断)
;
;*************************************
;* *
;* 初 始 化 程 序 *
;* *
;*************************************
CLEARMEMIO:
SETB REMOTEOUT ;关遥控输出
CLEARMEM:
MOV IE,#00H ;关所有中断
MOV IP,#01H ;设优先级
MOV TMOD,#22H ;8位自动重装初值模式
MOV TH1,#0F3H ;定时为13微秒初值
MOV TL1,#0F3H ;
SETB EA ;开总中断允许
RET ;返回
;
;
;
;
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
START: MOV SP,#60H ;设堆栈基址为70H
CLR CS ;液晶操
LCALL SETUP ;LCD初始化
LCALL LOGON ;开机显示画面
LCALL CLEARMEMIO ;调用初始化子程序
;
MAIN: LCALL KEYWORK ;主体程序。调用查键子程序
LJMP MAIN ;转MAIN循环
NOP ;PC值出错处理
NOP
NOP
LJMP START ;重新初始化
;
;*************************************
;* *
;* T1中断服务程序 *
;* *
;*************************************
INTT1: CPL REMOTEOUT ;40kHZ红外线遥控信号产生
RETI ;中断返回
;
;
;*************************************
;* *
;* 键盘工作子程序(4 * 8 阵列) *
;* 出口为各键工作程序入口 *
;*************************************
KEYWORK: JNB KEY0,K0
JNB KEY1,K1
JNB KEY2,K2
JNB KEY3,K3
JNB KEY4,K4
KEYOUT: RET ;没有键按下返回
;**************************************************************
K0: LCALL DL10MS ;延时去抖动
JNB KEY0,K0
LJMP KEYFUN00
K1: LCALL DL10MS ;延时去抖动
JNB KEY0,K1
LJMP KEYFUN01
K2: LCALL DL10MS ;延时去抖动
JNB KEY0,K2
LJMP KEYFUN02
K3: LCALL DL10MS ;延时去抖动
JNB KEY0,K3
LJMP KEYFUN03
K4: LCALL DL10MS ;延时去抖动
JNB KEY0,K4
LJMP KEYFUN04
;****************************************************
KEYFUN00: MOV A,#02H ;发2个脉冲
LJMP REMOTE ;转发送程序
RET
;
KEYFUN01: MOV A,#03H ;发3个脉冲
LJMP REMOTE ;转发送程序
RET
;
KEYFUN02: MOV A,#04H ;发4个脉冲
LJMP REMOTE ;转发送程序
RET
;
KEYFUN03: MOV A,#05H ;发5个脉冲
LJMP REMOTE ;转发送程序
RET
;
KEYFUN04: MOV A,#06H ;发6个脉冲
LJMP REMOTE ;转发送程序
RET
;
;*************************************
;* *
;* 编 码 发 射 程 序 *
;* *
;*************************************
;
REMOTE: MOV R1,A ;装入发射脉冲个数
LJMP OUT3 ;转第一个码发射处理
OUT: MOV R0,#55H ;1MS宽低电平发射控制数据
OUT1: SETB ET1 ;开T1中断
SETB TR1 ;开启定时器T1
NOP ;延时
NOP
NOP
NOP
NOP
DJNZ R0,OUT1 ;时间不到转OUT1再循环
MOV R0,#32H ;1MS高电平间隙控制数据
OUT2: CLR TR1 ;关定时器T1
CLR ET1 ;关T1中断
SETB REMOTEOUT ;关脉冲输出
NOP ;空操作延时
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R0,OUT2 ;时间不到转OUT2再循环
DJNZ R1,OUT ;脉冲未发完,转OUT再循环发射
LCALL DL500MS ;
RET ;
OUT3: MOV R0,#0FFH ;装发谢3MS宽控制数据
LJMP OUT1 ;转OUT1
;
;*************************************
;* *
;* 延时513 us *
;* *
;*************************************
;
;513微秒延时程序
DELAY513: MOV R2,#0FFH
DELAY11: DJNZ R2,DELAY11
RET
;
;
;
;*************************************
;* *
;* 延时10ms *
;* *
;*************************************
;
;10毫秒延时程序
DL10MS: MOV R3,#14H
DL10MS1: LCALL DELAY513
DJNZ R3,DL10MS1
RET
;500毫秒延时程序
DL500MS: MOV R4,#32H
DL500MS1: LCALL DL10MS
DJNZ R4,DL500MS1
RET
;
;**********以下液晶开机显示程序**************
;
;***************开机显示画面***********************
LOGON: MOV A,#80H ;第一行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE ;WORD 16*16点阵TEST
LCALL WRITE_HZ
MOV A,#90H ;第二行左第一个字开始
LCALL WRITE_COM
MOV DPTR,#CHINESE1 ;WORD 16*16点阵TEST
LCALL WRITE_HZ
CLR LAMPBLAK ;开背光灯
LCALL DELAY5S ;显示5秒
SETB LAMPBLAK ;关背光灯
RET
;**********初始化程序*************
SETUP:
MOV A,#01H ;CLEAR DISPLAY
LCALL WRITE_COM
MOV A,#00110000B ;FUNCTION SETTING
LCALL WRITE_COM
MOV A,#00000010B ;DDRAM SET TO '00H'
LCALL WRITE_COM
MOV A,#00000100B ;
LCALL WRITE_COM
MOV A,#00001100B ;DISPLAY ON
LCALL WRITE_COM
MOV A,#00000001B ;CLEARING SCREEN
LCALL WRITE_COM
MOV A,#10000000B ;SET DDRAM ADDRESS
LCALL WRITE_COM
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
RET
;************串行命令写入子程序****************
;写入命令字在A中
WRITE_COM:
LCALL DELAY1 ;
SETB CS
PUSH ACC
MOV R0,#8
MOV A,#11111000B
COMM1:
CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM1
POP ACC
MOV R5,A
ANL A,#0F0H
MOV R0,#8
COMM2: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM2
MOV A,R5
SWAP A
ANL A,#0F0H
MOV R0,#8
COMM3: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM3
CLR CS
RET
;
;***********串行数据写入子程序****************
;写入数据字在A中
WRITE_DAT:
LCALL DELAY1
SETB CS
PUSH ACC
MOV R0,#8
MOV A,#11111010B
DATA1: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA1
POP ACC
MOV R5,A
ANL A,#0F0H
MOV R0,#8
DATA2: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA2
MOV A,R5
SWAP A
ANL A,#0F0H
MOV R0,#8
DATA3: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA3
CLR CS
RET
;
;**************延时子程序**********************
;0.544ms
DELAY1:
MOV R7,#010H
D11: MOV R6,#010H
DJNZ R6,$
DJNZ R7,D11
RET
;0.13s
DELAY:
MOV R1,#00H
D2: MOV R2,#00H
DJNZ R2,$
DJNZ R1,D2
RET
;5.2s
DELAY5S:MOV R3,#28H
DE5S: LCALL DELAY
DJNZ R3,DE5S
RET
;
;************16*8点阵字写入子程序共16个******************
WRITE_ASCII:
MOV R4,#16
DDDD: CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
DJNZ R4,DDDD
RET
;************16*8点阵字写入子程序共7个******************
WRITE_ASCII7:
MOV R4,#7
DDDD7: MOV A,@R0
LCALL WRITE_DAT
INC R0
DJNZ R4,DDDD7
RET
;************16*16点阵汉字写入子程序共7个***********
WRITE_HZ: ;WRITE 7 CHINESE TO LCD
MOV R4,#7
DD: CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
DJNZ R4,DD
RET
;************16*16点阵汉字写入子程序共2个***********
WRITE_HZ2: ;WRITE 8 CHINESE TO LCD
MOV R4,#2
DD4: CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
DJNZ R4,DD4
RET
;
;*****************************16*8点阵的字符代码表**********************************
TABLE1: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH,20H
; 0 1 2 3 4 5 6 7 8 9 : ; < = > "不显"
;**********************************自造字符地址表***********************************
;
;******************"这里是16*16点阵的汉字代码表"************************************
CHINESE: DW 0DBA0H,0D5E3H,0BDADH,0BAA3H,0D1F3H,0D1A7H,0D4BAH,0DBA0H;—浙江海洋学院—
CHINESE1: DB "遥控发送控制器 ";单片机实验—
;;;;;;;;;;;;;;;;;;;;;;
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -