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

📄 fase.asm

📁 自己编写的一个单片机控制红外发送与接收的红外发射源程序,同时自己也做了一个板实验,是成功的哦
💻 ASM
字号:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP DS0

ORG 0030H

MAIN:
	MOV 	TMOD,#11H
	CLR 	30H					//30H位用于控制定时器的计时回转,可以用TF1
	CLR 	40H					//40H位用于发送0判断位
	SETB 	P2.7				//P2.7用于控制红外发射管的发射
	LCALL 	DELAY
	LCALL	DELAY
	SETB 	ET0
	SETB 	ET1
	SETB 	EA
	MOV 	R3,#4				//R3是行扫描移位次数
	MOV 	SP,#60H				//设置栈的初值
	MOV 	P1,#0F0H			//键扫描初值
	MOV 	A,P1	
	CJNE	A,#0F0H,DELAY1		//判断有没有键值过来
	LJMP 	MAIN				//循环判断


DELAY1:						  //下面延时约1ms   (50*2+2)*10
	MOV 	R0,#10
L1:
	MOV 	R1,#50
L2:
	DJNZ	R1,L2
	DJNZ 	R0,L1
	MOV 	A,P1
	CJNE 	A,#0F0H,GETKEY0	   //如果1ms后判断有键值,则跳到GETKEY里面取出键值
	LJMP 	MAIN


GETKEY0:
	MOV 	A,#0FEH
	MOV 	P1,A
	MOV 	A,P1
	CJNE	A,#0EEH,KEY1	   
	MOV 	20H,#0			   //如果扫描结果为0EEH则把0放到20H寄存器里面发射
	LJMP 	SEND
KEY1:						//有错,不能超过8个
	CJNE 	A,#0DEH,KEY2
	MOV 	20H,#1
	LJMP 	SEND
KEY2:
	CJNE 	A,#0BEH,KEY3
	MOV 	20H,#2
	LJMP 	SEND
KEY3:
	CJNE 	A,#07EH,GETKEY1
	MOV 	20H,#3
	LJMP 	SEND
GETKEY1:
	MOV 	A,#0FDH
	MOV 	P1,A
	MOV 	A,P1
	CJNE 	A,#0EDH,KEY5
	MOV 	20H,#4
	LJMP 	SEND
KEY5:
	CJNE 	A,#0DDH,KEY6
	MOV 	20H,#5
	LJMP 	SEND
KEY6:
	CJNE 	A,#0BDH,KEY7
	MOV 	20H,#6
	LJMP 	SEND
KEY7:
	CJNE 	A,#07DH,GETKEY2
	MOV 	20H,#7
	LJMP 	SEND
GETKEY2:
	MOV 	A,#0FBH
	MOV 	P1,A
	MOV 	A,P1
	CJNE 	A,#0EBH,KEY9
	MOV 	20H,#8
	LJMP 	SEND
KEY9:
	CJNE 	A,#0DBH,KEY10
	MOV 	20H,#9
	LJMP 	SEND
KEY10:
	CJNE 	A,#0BBH,KEY11
	MOV 	20H,#10
	LJMP 	SEND
KEY11:
	CJNE 	A,#07BH,GETKEY3
	MOV 	20H,#11
	LJMP 	SEND
GETKEY3:
	MOV 	A,#0F7H
	MOV 	P1,A
	MOV 	A,P1
	CJNE 	A,#0E7H,KEY13
	MOV 	20H,#12
	LJMP 	SEND
KEY13:
	CJNE 	A,#0D7H,KEY14
	MOV 	20H,#13
	LJMP 	SEND
KEY14:
	CJNE 	A,#0B7H,KEY15
	MOV 	20H,#14
	LJMP 	SEND
KEY15:
	CJNE 	A,#077H,KEY16			//只能前127后128,不能跳得太长
	MOV 	20H,#15
	LJMP 	SEND
KEY16:
	LJMP 	MAIN



SEND: 

	MOV 	P3,20H

	MOV 	TH0,#0DAH			//9ms起始码,
	MOV 	TL0,#0E3H
	CLR 	P2.7
	SETB 	TR0
	JNB 	30H,$
	CLR 	TR0
	CLR 	30H
	MOV 	TH0,#0ECH			//5ms结果码。
	MOV 	TL0,#077H
	SETB 	TR0
	JNB 	30H,$
	CLR 	TR0
	CLR 	30H
	JB		07H,K7			//发送第七位
	LCALL	SEND0
	LJMP 	BIT6
K7:
	LCALL 	SEND1
BIT6:
	JB		06H,K6
	LCALL	SEND0
	LJMP 	BIT5
K6:	LCALL	SEND1
BIT5:
	JB		05H,K5
	LCALL	SEND0
	LJMP 	BIT4
K5:	LCALL	SEND1
BIT4:
	JB		04H,K4
	LCALL	SEND0
	LJMP 	BIT3
K4:	LCALL	SEND1
BIT3:
	JB		03H,K3
	LCALL	SEND0
	LJMP 	BIT2
K3:	LCALL	SEND1
BIT2:
	JB		02H,K2
	LCALL	SEND0
	LJMP 	BIT1
K2:	LCALL	SEND1
BIT1:
	JB		01H,K1
	LCALL	SEND0
	LJMP 	BIT0
K1:	LCALL	SEND1
BIT0:
	JB		00H,K0
	LCALL	SEND0
	LCALL	DELAY
	LJMP 	MAIN
K0:	LCALL	SEND1
	LCALL	DELAY
	LJMP 	MAIN


	
		
SEND1:
	MOV 	TH0,#0FEH			//低电平0.5ms
	MOV 	TL0,#00BH
	SETB 	TR0
	JNB 	30H,$
	CLR 	TR0
	CLR 	30H
	MOV 	TH0,#0F4H			//高电平3ms
	MOV		TL0,#047H
	SETB 	TR0
	JNB 	30H,$
	CLR 	TR0
	CLR 	30H
	RET
SEND0:
	MOV 	TH0,#0FEH			 //低电平0.5ms
	MOV 	TL0,#00BH
	SETB 	TR0
	JNB 	30H,$
	CLR 	TR0
	CLR 	30H
	MOV 	TH0,#0FCH			  //高电平1ms
	MOV 	TL0,#017H
	SETB 	TR0
	JNB 	30H,$
	CLR 	TR0
	CLR 	30H
	RET


DS0:
	SETB 	30H
	CPL 	P2.7
	RETI

DELAY:
	MOV		R3,#0FFH
DEL2:
	MOV		R4,#8H
DEL1:
	DJNZ	R4,DEL1
	DJNZ	R3,DEL2
	RET
	

	END

⌨️ 快捷键说明

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