学习单片机很久了,没做过像样的东西,对315M和433M无线遥控做过很多维修,也安装过一些遥控开关,更遇到过配遥控的客户无数,研究了配遥控器的方法。
用单片机STC15W204S软件解码密码,同步头长度,做过两个版本的线路板,第一版这里不介绍了,这里说一下第二版,看图
图上说的清楚,接收模块供电是单独滤波后的,防止干扰单片机,信号输出经一集成块放大(贴片5脚的那个),隔离单片机与接收模块干扰,是远距离解码的关键。
上原理图和PBC图,省的你们楼层问我要,呵呵!!
这是焊接好的线路板,这里没用时钟,所以没焊接DS3231,
显示屏是0.91寸的OLED屏,这玩意老贵了,用一个心疼半天。
写入程序,开机喽!!!!只看屏幕,不算丑,
解码一个遥控试试,4M是单片机震荡频率,烧写时需手动填写,选项里没有4M
顺便说明一下意思啊,图片介绍更清楚:
多解码几个不同震荡电阻试试看效果:
发射按键就是P3.3脚,这里没法演示发射,需要视频才能演示,我不会发链接
发射也是很精准的,接收设备很灵敏解码,第一版不介绍就是因为发射不精准
设备解码很不灵,用的发射模块是1000米的,这3.7V供电肯定达不到这距离,
要9V-12V才能600米左右,天线和障碍物因素众多,没详细实验距离
接收普通遥控信号最远30米,接收远距离遥控100米成功解码,
谢谢大家的阅读,此板已在某条鱼出售
程序只起到抛砖引玉的功能,不能全部分享给大家,有人收获多,有人收获不到,
下面是发射程序和显示程序,汇编写的大家轻喷!!!!!
- ;=============================按键发射接收到的编码==================================
- TTTT:
- CLR LED_F ;发射指示灯
- MOV R3,#8 ;每字节调用8次
- TTT_1:
- mov 20h,24h
- mov 21h,25h
- mov 22h,26h
- MOV R0,#20H
- TTT_2:
- LCALL FASE_T0
- TTT_3:
- CLR C
- MOV A,@R0
- RLC A
- MOV @R0,A
- JC TTT_4
- LCALL FASE_0 ;输出0码
- JMP TTT_5
- TTT_4:
- LCALL FASE_1 ;输出1码
- TTT_5:
- DJNZ R3,TTT_3 ;一字节是否发完
- MOV R3,#8
- INC R0
- CJNE R0,#23H,TTT_3 ;3字节是否发完
- MOV R3,#8 ;每字节调用8次
- MOV R0,#20H
- JNB K1,TTT_1
- CLR FAST
- SETB LED_F
- RET
- ;-------------同步码----------------
- FASE_T0:
- SETB FAST
- LCALL DEL_FS
- MOV R5,#31
- FASE_T1:
- CLR FAST
- LCALL DEL_FS
- DJNZ R5,FASE_T1
- RET
- ;--------------0码-----------------
- FASE_0: SETB FAST
- LCALL DEL_FS
- MOV R5,#3
- FASE_01:CLR FAST
- LCALL DEL_FS
- DJNZ R5,FASE_01
- RET
- ;--------------1码-----------------
- FASE_1: MOV R5,#3 ;
- FASE_11:SETB FAST
- LCALL DEL_FS
- DJNZ R5,FASE_11
- CLR FAST
- LCALL DEL_FS
- RET
- ;-----------数据解码显示-----------------20H/21H/22H/2FH------
- ;显示0/F/D/1
- DISP_JMB:
- MOV R0, #20H ;原数据地址
- MOV R1, #40H
- MOV R7, #0 ;左移次数计数
- MOV 2FH,#0 ;该位可以位操作(位操作地址是7FH--78H)
- DISP_JM:
- MOV A,@R0
- CLR C
- RLC A ;C→A0 A7→C 数据存入C
- MOV 79H,C ;移入2FH单元A1位
- CLR C
- RLC A ;C→A0 A7→C 数据存入C
- MOV 78H,C ;移入2FH单元A0位
- MOV @R0,A ;暂存@R0
- MOV A,2FH
- JNZ DISP_0F
- MOV @R1,#0 ;------00--0解码显示
- JMP DISP_01DF
- DISP_0F:
- CJNE A,#01,DISP_0D
- MOV @R1,#15 ;--------01--F解码显示
- JMP DISP_01DF
- DISP_0D:
- CJNE A,#02,DISP_0H
- MOV @R1,#13 ;--------10--D解码显示
- JMP DISP_01DF
- DISP_0H:
- CJNE A,#03,DISP_01DF
- MOV @R1,#1 ;--------11--1解码显示
- JMP DISP_01DF
- DISP_01DF:
- MOV 2FH,#0
- INC R1
- INC R7
- CJNE R7,#4,DISP_JM ;是否移动了4次,够4次说明一字节输出完成
- MOV R7,#0 ;左移次数清零
- INC R0
- CJNE R0,#23H,DISP_JM;3字节是否调取完成
- MOV 4CH,#36
- MOV 4DH,#36
- MOV 4EH,#4
- MOV 4FH,#22
- DISP_EN:
- RET
- ;===========================第一排显示=====================================
- DISP_A:
- MOV R0,#40H
- MOV DIZHI_X,#00H ;列地址 1
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#08H ;列地址 2
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#10H ;列地址 3
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#18H ;列地址 4
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#20H ;列地址 5
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#28H ;列地址 6
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#30H ;列地址 7
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#38H ;列地址 8
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#40H ;列地址 9
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#48H ;列地址 10
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#50H ;列地址 11
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#58H ;列地址 12
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#60H ;列地址 13
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#68H ;列地址 14
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#70H ;列地址 15
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#78H ;列地址 16
- LCALL DISP_B0
- RET
- ;=========================第二排显示程序==============================
- DISP_B:
- MOV R0,#40H
- MOV DIZHI_X,#00H ;设置列地址 1
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#08H ;列地址 2
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#10H ;列地址 3
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#18H ;列地址 4
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#20H ;列地址 5
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#28H ;列地址 6
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#30H ;列地址 7
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#38H ;列地址 8
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#40H ;列地址 9
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#48H ;列地址 10
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#50H ;列地址 11
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#58H ;列地址 12
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#60H ;列地址 13
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#68H ;列地址 14
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#70H ;列地址 15
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#78H ;列地址 16
- LCALL DISP_B2
- RET
- ;--数值第一排8*16显示子程序---------
- DISP_B0:
- MOV DIZHI_Y,#0B0H ;设置页起始地址(B0-B7)(第一排)
- LCALL TBT_0 ;根据值取表
- LCALL XIE_MLING ;写页地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ ;
- INC DIZHI_Y ;8*16下半部分页地址加1
- LCALL XIE_MLING;写页地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ
- RET
- ;--数值第二排8*16显示子程序---------
- DISP_B2:
- MOV DIZHI_Y,#0B2H ;设置页起始地址(B0-B7)(第2排)
- LCALL TBT_0 ;根据值取表
- LCALL XIE_MLING ;写页地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ ;
- INC DIZHI_Y ;8*16下半部分页地址加1
- LCALL XIE_MLING;写页地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ
- RET
- ;=========================数据区清零程序======================================
- QLCX:
- MOV A,#0 ;清零程序
- MOV R6,#40H
- MOV R0,#20H
- QQQQ:
- MOV @R0,A
- INC R0
- DJNZ R6,QQQQ
- RET
- ;============================初始化0.91寸OLED=================================
- RESET:
- MOV R7,#0AEH ;关闭显示
- LCALL COMMAND
- MOV R7,#20H ;设置模式命令
- LCALL COMMAND
- MOV R7,#10H ;00水平地址,01垂直地址,10页地址
- LCALL COMMAND
- MOV R7,#0B0H ;设置页起始地址(B0-B7)
- LCALL COMMAND
- MOV R7,#0C8H ;设置COM输出扫描方向(C8从上到下,C0反向)
- LCALL COMMAND
- MOV R7,#00H ;设置低列地址
- LCALL COMMAND
- MOV R7,#10H ;设置高列地址
- LCALL COMMAND
- MOV R7,#40H ;设置起始行地址
- LCALL COMMAND
- MOV R7,#81H ;设置对比度
- LCALL COMMAND
- MOV R7,#200 ;对比度值(00-255)
- LCALL COMMAND
- MOV R7,#0A1H ;设置egment re-map 0 to 127
- LCALL COMMAND
- MOV R7,#0A6H ;正常显示(A6正常,A7反相显示)
- LCALL COMMAND
- MOV R7,#0A8H ;设置驱动路数
- LCALL COMMAND
- MOV R7,#31 ;路数(0-63)
- LCALL COMMAND
- MOV R7,#0A5H ;
- LCALL COMMAND
- MOV R7,#0A4H ;全部显示开启
- LCALL COMMAND
- MOV R7,#0D3H ;设置显示偏移
- LCALL COMMAND
- MOV R7,#0 ;偏移量
- LCALL COMMAND
- MOV R7,#0D5H ;设置震荡频率
- LCALL COMMAND
- MOV R7,#0F0H ;
- LCALL COMMAND
- MOV R7,#0D9H ;设置充电周期
- LCALL COMMAND
- MOV R7,#22H ;
- LCALL COMMAND
- MOV R7,#0DAH ;引脚硬件配置
- LCALL COMMAND
- MOV R7,#02H ;
- LCALL COMMAND
- MOV R7,#0DBH ;设置电压倍率
- LCALL COMMAND
- MOV R7,#20H ;
- LCALL COMMAND
- MOV R7,#8DH ;设置
- LCALL COMMAND
- MOV R7,#14H
- LCALL COMMAND
- MOV R7,#0AFH ;打开显示
- LCALL COMMAND
- RET
- ;====================清屏程序=================================
- QPCX:
- MOV R7,#00H ;00水平地址,01垂直地址,10页地址
- LCALL COMMAND
- MOV R6,#0
- MOV R4,#252
- MOV R7,#0B0H ;设置页起始地址(B0-B7)
- LCALL COMMAND
- MOV R7,#00H ;设置低列地址
- LCALL COMMAND
- MOV R7,#10H ;设置高列地址
- LCALL COMMAND
- MAH:
- MOV A,20h
- MOV R7,A
- LCALL COMDADA
- INC R6
- CJNE R6,#0,MAH
- INC R4
- CJNE R4,#0,MAH
- RET
- ;==================================================================
- ;--------写命令程序----------
- COMMAND:
- MOV R3,#3
- COMMAND_1:
- DEC R3 ;######防止出现程序检测不到I2C出现死循环
- lcall start ;启动总线
- mov a,#78h ;地址写入
- lcall send
- lcall ack
- MOV A, R3
- JZ COMMAND_EN
- jc command_1
- mov a,#00h
- lcall send
- lcall ack
- mov a,R7
- lcall send
- lcall ack
- lcall stop
- COMMAND_EN:
- ret
- ;--------写数据程序----------
- COMDADA:
- MOV R3,#3
- COMDADA_1:
- DEC R3 ;######防止出现程序检测不到I2C出现死循环
- lcall start ;启动总线
- mov a,#78h
- lcall send
- lcall ack
- MOV A, R3
- JZ COMDADA_EN
- jc comdada_1
- mov a,#40h
- lcall send
- lcall ack
- mov a,R7
- lcall send
- lcall ack
- lcall stop
- COMDADA_EN:
- ret
- ;------写页、列地址命令-----------
- XIE_MLING:
- MOV R7,DIZHI_Y ;设置页起始地址(B0-B7)
- LCALL COMMAND
- MOV A,DIZHI_X
- ANL A,#0FH ;
- MOV R7,A ;设置低列地址
- LCALL COMMAND
- MOV A,DIZHI_X
- SWAP A
- ANL A,#0FH ;
- ORL A,#10H
- MOV R7,A ;设置高列地址
- LCALL COMMAND
- RET
- ;--------写一字节数据--------------
- MAK_XZJ:
- CLR A
- MOVC A,@A+DPTR
- MOV R7,A
- LCALL COMDADA
- INC DPTR
- DJNZ R6,MAK_XZJ
- RET
- ;============================IIC总线程序=================================
- ;-------总线启动程序---------
- start:
- setb scl
- setb sda
- nop
- nop
- clr sda
- nop
- nop
- clr scl
- ret
- ;-------总线停止程序---------
- stop:
- clr sda
- nop
- nop
- setb scl
- nop
- nop
- setb sda
- ret
- ;-----------应答----------
- ack:
- setb sda
- nop
- nop
- setb scl
- jb sda, ack_0
- clr c
- sjmp ack_1
- ack_0:
- setb c
- ack_1:
- nop
- nop
- clr scl
- ret
- ;--------------发送8位数据---------
- send:
- mov b, #08h
- send_1:
- rlc a
- mov sda, c
- setb scl
- nop
- nop
- clr scl
- djnz b, send_1
- ret
- ;--------------接收8位数据-----------
- receive:
- mov b, #08h
- clr a
- setb sda
- receive_1:
- setb scl
- nop
- nop
- mov c,sda
- rlc a
- clr scl
- djnz b, receive_1
- ret
- ;----------10MS--------------
- DELAY10ms:
- MOV 6EH, #100
- DLY5: MOV 6FH, #100
- DJNZ 6FH, $
- DJNZ 6EH, DLY5
- RET
复制代码
|