硬件资源的介绍
  三种使用方式
  At24c02的使用
  DS18b20的使用
  DS18b20液晶显示
  1602液晶的使用
  单个数码管的显示实验
  4个数码管的显示实验
  继电器的使用
  发光二极管的使用
  蜂鸣器的实验
  红外线解码(PWM制式)
  成品发售形式
  配套产品
实验工具>>实验板>>红外线解码(PWM制式)

一、 实验目的:
1、 看懂电路原理图,明白1602的编程方式。
2、 看懂参考程序,学会通过接收红外线信号进行解码。
二、 实验设备:
51通用实验板一个,51仿真器,1602液晶屏一个,12V电源一个,遥控器一个,红外线接收头一个。
三、 实验电路原理图:

四、 实验内容:
通过接收红外线信号进行解码。然后在1602液晶屏进行显示数据,也就是红外线的数据,最终来确定,红外线遥控器的每一个键的代码。按实物图的形式把实验设备连接在一起


五、 参考程序:

;*******************************************************
;-define 监时数据定义
TMP_H EQU 30H
TMP_L EQU 31H
TMP_DAT EQU 32H
;------------------------------------
org 00h
JMP MAIN
ORG 30H
MAIN:
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH

LCALL LCDINT

MOV DPTR, #WORD1;显示第一行数据
MOV R2,#80H ;1000 0000 DDRAM地址设置为00h
LCALL WRC
MOV R4,#16
LCALL WRN
START:
JB P2.7,START ;等待遥控信号出现
CLR P1.0
SB:
MOV R4,#8 ;8毫秒为高电平错误
SBA:
MOV R5,#250
SBB:
JB P2.7,SXB1
DJNZ R5,SBB
DJNZ R4,SBA
MOV R4,#2
JMP SBC
SXB1:
MOV R5,#5
SXB2: ;去掉20US的尖峰干扰信号
JNB P2.7,SBB
DJNZ R5,SXB2
JMP START
SBC:

MOV R5,#250
SB1:
JB P2.7,SB2 ;2MS内不为高电平错误(监测9MS的低电平引导码)
DJNZ R5,SB1
DJNZ R4,SBC
JMP START
SB2: ;去掉20US的尖峰干扰信号

MOV R5,#5
SB2_A:
JNB P2.7,SB1
DJNZ R5,SB2_A
MOV R4,#3
SB2_1:

MOV R5,#250
SB3: ;监测4.5MS高电平,如3MS内出现低电平错误
JNB P2.7,SXC
DJNZ R5,SB3
DJNZ R4,SB2_1
MOV R4,#2
JMP SB3_1
SXC: ;去掉20US的尖峰干扰信号

MOV R5,#5
SXC1:
JB P2.7,SB3
DJNZ R5,SXC1
JMP START
SB3_1: ;监测4.5MS高电平,如5MS内不为低电平错误

MOV R5,#250
SB3_2:
JNB P2.7,SB4
DJNZ R5,SB3_2
DJNZ R4,SB3_1
JMP START
SB4: ;去掉20US的尖峰干扰信号

MOV R5,#5
SB4_1:
JB P2.7,SB3_2
DJNZ R5,SB4_1
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#4
PP: MOV R3,#8
JJJJ:
MOV R5,#250
HW_J2: ;1MS内不为低电平错误
JB P2.7,HW_J3
DJNZ R5,HW_J2
JMP START
HW_J3:

LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P2.7 ;将P2.7引脚此时的电平状态0或1存入C中
JNC HW_U ;如果为0就跳转到HW_U
MOV R5,#250
HW_J4:
JNB P2.7,HW_U
NOP
DJNZ R5,HW_J4
JMP START
HW_U: MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1中
DJNZ R3,JJJJ ;接收地址码的高8位
INC R1 ;对R1中的值加1,换成下一个RAM
DJNZ R2,PP ;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
;以下对代码是否正确和定义进行和显示识别
;--------------------------
CALL DODAT
CPL P1.0 ;进行显示指示
JMP START

;----------------------------
;延时子程序1
;-----------------------------
YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
;----------------------------
;延时子程序2
;-----------------------------
YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
;----------------------------
;延时子程序3
;-----------------------------
YS3: MOV R4,#2 ;延时程序3,精确延时1000微秒
D3: MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
;----------------------------
;延时子程序2
;-----------------------------
TAB_REM: ;遥控的键值
DB 00H
DB 10H,03H,01H,06H,09H,1DH,1FH,0DH,19H
DB 11H,15H,17H,12H,16H,4CH,40H,48H,04H
;----------------------------
;延时子程序2
;-----------------------------
delay: mov r3,#40 ;步进电机的转速20ms
m3: mov r2,#248
djnz r2,$
djnz r3,m3
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;液晶初始化
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCDINT: MOV R2,#38H ;0011 1000功能设置:采用8位数据总线,采用双行显示,采用5X7点陈
LCALL WRC ;写入指令
ACALL DELAY ;延时程序
MOV R2,#0CH ;0000 1100光标/显示移位:1为显示移位,0为光标移位
ACALL WRC
ACALL DELAY
MOV R2,#06H ;0000 0110输入模式:1为AC增量模式,0为AC自减模式,显示整体不移动
ACALL WRC
ACALL DELAY
MOV R2,#01H ;清屏
LCALL WRC
ACALL DELAY
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;写入控制指令,数据放在R2中
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRC:
ACALL BUSY
CLR P2.0
CLR P2.1
CLR P2.2
MOV A,R2
MOV P0,A
NOP
SETB P2.2;E使用信号
NOP
CLR P2.2;E使用能下降沿触发
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;忙闲测试
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BUSY:
CLR P2.0;RS=0读寄存器 读BF
SETB P2.1; R/W 1为读,0为写
NOP
SETB P2.2;E
NOP
MOV A,P0;读取P0口
JB ACC.7,BUSY
CLR P2.2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;写入数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRD:
ACALL BUSY
SETB P2.0
CLR P2.1
CLR P2.2
MOV A,R2
MOV P0,A
NOP
SETB P2.2
NOP
CLR P2.2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;写入N个数据,R2为要显示的数据,R4为显示个数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRN:
CLR A
MOVC A,@A+DPTR
INC DPTR
MOV R2,A
LCALL WRD
DJNZ R4,WRN
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;获取红外线的数理进行处理 20H,21H,22H 23H,24H,25H 26H,27H,28H 29H,2AH,2BH 2CH,2DH,2EH,2EH
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DODAT:
CPL P1.0

MOV A,1AH
CALL CMPDAT
MOV 20H,TMP_H
MOV 21H,TMP_L
MOV 22H,#20H

MOV A,1BH
CALL CMPDAT
MOV 23H,TMP_H
MOV 24H,TMP_L
MOV 25H,#20H

MOV A,1CH
CALL CMPDAT
MOV 26H,TMP_H
MOV 27H,TMP_L
MOV 28H,#20H

MOV A,1DH
CALL CMPDAT
MOV 29H,TMP_H
MOV 2AH,TMP_L
MOV 2BH,#20H

MOV 2CH,#20H
MOV 2DH,#20H
MOV 2EH,#20H
MOV 2FH,#20H

;-------------------

;MOV DPTR, #WORD1;显示第一行数据
MOV R2,#80H ;1000 0000 DDRAM地址设置为00h
LCALL WRC

;LCALL WRN
MOV R4,#16
MOV R1,#20H
WRN_DAT:
;CLR A
;MOVC A,@A+DPTR
;INC DPTR
MOV A,@R1
MOV R2,A
LCALL WRD
INC R1
DJNZ R4,WRN_DAT
RET

;-------------------------------------
;数据处理
;-------------------------------------
CMPDAT: ;TMP_H,TMP_L,TMP_DAT
MOV TMP_DAT,A
ANL A,#0FH
CJNE A,#0AH,DAT1
DAT1: JC DAT2
SUBB A,#9
ADD A,#40H
MOV TMP_L,A
JMP DATH
DAT2:
ADD A,#30H
MOV TMP_L,A
JMP DATH
;------------------
DATH: MOV A,TMP_DAT
SWAP A

ANL A,#0FH
CJNE A,#0AH,DAT3
DAT3: JC DAT4
SUBB A,#9
ADD A,#40H
MOV TMP_H,A
JMP EXT_DAT
DAT4:
ADD A,#30H
MOV TMP_H,A

EXT_DAT:
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;每行要显示的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;------
WORD1: DB 20H,20H,20H,30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,20H,20H,20H
WORD2: DB 20H,4FH,55H,52H,20H,55H,4EH,49H,56H,45H,52H,53H,49H,54H,59H,20H

end


                 回到顶部
                     51单片机实验网   津ICP备05003923
               关于我们  | 下载说明  |  联系站长  | 本站声明