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

📄 1

📁 RM51单片机实验板配套实验例程库
💻
字号:
;                 *************************************
;                 *        (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 + -