找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3920|回复: 5
收起左侧

315M无线遥控单片机软件解码

[复制链接]
ID:72088 发表于 2021-9-3 20:54 | 显示全部楼层 |阅读模式
学习单片机很久了,没做过像样的东西,对315M和433M无线遥控做过很多维修,也安装过一些遥控开关,更遇到过配遥控的客户无数,研究了配遥控器的方法。

用单片机STC15W204S软件解码密码,同步头长度,做过两个版本的线路板,第一版这里不介绍了,这里说一下第二版,看图
1.jpg

图上说的清楚,接收模块供电是单独滤波后的,防止干扰单片机,信号输出经一集成块放大(贴片5脚的那个),隔离单片机与接收模块干扰,是远距离解码的关键。
上原理图和PBC图,省的你们楼层问我要,呵呵!!
10.png 11.png

这是焊接好的线路板,这里没用时钟,所以没焊接DS3231,
2.jpg 3.jpg

显示屏是0.91寸的OLED屏,这玩意老贵了,用一个心疼半天。
4.jpg

写入程序,开机喽!!!!只看屏幕,不算丑,
5.jpg

解码一个遥控试试,4M是单片机震荡频率,烧写时需手动填写,选项里没有4M
顺便说明一下意思啊,图片介绍更清楚:
6.jpg

多解码几个不同震荡电阻试试看效果:
7.jpg 8.jpg

9.jpg

发射按键就是P3.3脚,这里没法演示发射,需要视频才能演示,我不会发链接
发射也是很精准的,接收设备很灵敏解码,第一版不介绍就是因为发射不精准
设备解码很不灵,用的发射模块是1000米的,这3.7V供电肯定达不到这距离,
要9V-12V才能600米左右,天线和障碍物因素众多,没详细实验距离
接收普通遥控信号最远30米,接收远距离遥控100米成功解码,
谢谢大家的阅读,此板已在某条鱼出售

程序只起到抛砖引玉的功能,不能全部分享给大家,有人收获多,有人收获不到,


下面是发射程序和显示程序,汇编写的大家轻喷!!!!!
  1. ;=============================按键发射接收到的编码==================================
  2. TTTT:
  3.         CLR LED_F        ;发射指示灯
  4.         MOV R3,#8        ;每字节调用8次
  5. TTT_1:
  6.         mov 20h,24h
  7.         mov 21h,25h
  8.         mov 22h,26h
  9.         MOV R0,#20H
  10. TTT_2:
  11.         LCALL FASE_T0
  12. TTT_3:
  13.         CLR C
  14.         MOV A,@R0
  15.         RLC A               
  16.         MOV @R0,A
  17.         JC TTT_4        
  18.         LCALL FASE_0        ;输出0码               
  19.         JMP TTT_5
  20. TTT_4:
  21.         LCALL FASE_1        ;输出1码
  22. TTT_5:
  23.         DJNZ R3,TTT_3        ;一字节是否发完
  24.         MOV R3,#8
  25.         INC R0
  26.         CJNE R0,#23H,TTT_3        ;3字节是否发完
  27.         MOV R3,#8        ;每字节调用8次
  28.         MOV R0,#20H

  29.         JNB K1,TTT_1
  30.         CLR FAST
  31.         SETB LED_F
  32.         RET
  33. ;-------------同步码----------------
  34. FASE_T0:
  35.         SETB FAST
  36.         LCALL DEL_FS
  37.         MOV R5,#31
  38. FASE_T1:
  39.         CLR FAST
  40.         LCALL DEL_FS
  41.         DJNZ R5,FASE_T1
  42.         RET
  43. ;--------------0码-----------------
  44. FASE_0:        SETB FAST
  45.         LCALL DEL_FS
  46.         MOV R5,#3
  47. FASE_01:CLR FAST
  48.         LCALL DEL_FS
  49.         DJNZ R5,FASE_01
  50.         RET
  51. ;--------------1码-----------------
  52. FASE_1:        MOV R5,#3        ;
  53. FASE_11:SETB FAST
  54.         LCALL DEL_FS
  55.         DJNZ R5,FASE_11
  56.         CLR FAST
  57.         LCALL DEL_FS
  58.         RET



  59. ;-----------数据解码显示-----------------20H/21H/22H/2FH------
  60. ;显示0/F/D/1
  61. DISP_JMB:
  62.         MOV R0, #20H        ;原数据地址
  63.         MOV R1, #40H
  64.         MOV R7, #0                ;左移次数计数
  65.         MOV 2FH,#0                ;该位可以位操作(位操作地址是7FH--78H)
  66. DISP_JM:
  67.         MOV A,@R0
  68.         CLR C
  69.         RLC A        ;C→A0  A7→C  数据存入C
  70.         MOV 79H,C        ;移入2FH单元A1位
  71.         CLR C
  72.         RLC A        ;C→A0  A7→C  数据存入C
  73.         MOV 78H,C        ;移入2FH单元A0位
  74.         MOV @R0,A        ;暂存@R0
  75.         MOV A,2FH        
  76.         JNZ        DISP_0F
  77.         MOV @R1,#0          ;------00--0解码显示
  78.         JMP DISP_01DF
  79. DISP_0F:
  80.         CJNE A,#01,DISP_0D
  81.         MOV @R1,#15        ;--------01--F解码显示
  82.         JMP DISP_01DF        
  83. DISP_0D:
  84.         CJNE A,#02,DISP_0H
  85.         MOV @R1,#13        ;--------10--D解码显示
  86.         JMP DISP_01DF
  87. DISP_0H:
  88.         CJNE A,#03,DISP_01DF
  89.         MOV @R1,#1        ;--------11--1解码显示
  90.         JMP DISP_01DF
  91. DISP_01DF:
  92.         MOV 2FH,#0
  93.         INC R1
  94.         INC R7
  95.         CJNE R7,#4,DISP_JM        ;是否移动了4次,够4次说明一字节输出完成
  96.         MOV R7,#0        ;左移次数清零
  97.         INC R0
  98.         CJNE R0,#23H,DISP_JM;3字节是否调取完成
  99.         MOV 4CH,#36
  100.         MOV 4DH,#36
  101.         MOV 4EH,#4
  102.         MOV 4FH,#22
  103. DISP_EN:
  104.         RET

  105. ;===========================第一排显示=====================================
  106. DISP_A:
  107.         MOV R0,#40H
  108.          MOV DIZHI_X,#00H ;列地址 1
  109.         LCALL DISP_B0
  110.         INC R0
  111.         MOV DIZHI_X,#08H ;列地址 2
  112.         LCALL DISP_B0
  113.         INC R0
  114.         MOV DIZHI_X,#10H ;列地址 3
  115.         LCALL DISP_B0
  116.         INC R0
  117.         MOV DIZHI_X,#18H ;列地址 4
  118.         LCALL DISP_B0
  119.         INC R0
  120.         MOV DIZHI_X,#20H ;列地址 5
  121.         LCALL DISP_B0
  122.         INC R0
  123.         MOV DIZHI_X,#28H ;列地址 6
  124.         LCALL DISP_B0
  125.         INC R0
  126.         MOV DIZHI_X,#30H ;列地址 7
  127.         LCALL DISP_B0
  128.         INC R0
  129.         MOV DIZHI_X,#38H ;列地址 8
  130.         LCALL DISP_B0
  131.         INC R0
  132.         MOV DIZHI_X,#40H ;列地址 9
  133.         LCALL DISP_B0
  134.         INC R0
  135.         MOV DIZHI_X,#48H ;列地址 10
  136.         LCALL DISP_B0
  137.         INC R0
  138.         MOV DIZHI_X,#50H ;列地址 11
  139.         LCALL DISP_B0
  140.         INC R0
  141.         MOV DIZHI_X,#58H ;列地址 12
  142.         LCALL DISP_B0
  143.         INC R0
  144.         MOV DIZHI_X,#60H ;列地址 13
  145.         LCALL DISP_B0
  146.         INC R0
  147.         MOV DIZHI_X,#68H ;列地址 14
  148.         LCALL DISP_B0
  149.         INC R0
  150.         MOV DIZHI_X,#70H ;列地址 15
  151.         LCALL DISP_B0
  152.         INC R0
  153.         MOV DIZHI_X,#78H ;列地址 16
  154.         LCALL DISP_B0
  155.         RET
  156. ;=========================第二排显示程序==============================
  157. DISP_B:
  158.         MOV R0,#40H
  159.          MOV DIZHI_X,#00H ;设置列地址 1
  160.         LCALL DISP_B2
  161.         INC R0
  162.         MOV DIZHI_X,#08H ;列地址 2
  163.         LCALL DISP_B2
  164.         INC R0
  165.         MOV DIZHI_X,#10H ;列地址 3
  166.         LCALL DISP_B2
  167.         INC R0
  168.         MOV DIZHI_X,#18H ;列地址 4
  169.         LCALL DISP_B2
  170.         INC R0
  171.         MOV DIZHI_X,#20H ;列地址 5
  172.         LCALL DISP_B2
  173.         INC R0
  174.         MOV DIZHI_X,#28H ;列地址 6
  175.         LCALL DISP_B2
  176.         INC R0
  177.         MOV DIZHI_X,#30H ;列地址 7
  178.         LCALL DISP_B2
  179.         INC R0
  180.         MOV DIZHI_X,#38H ;列地址 8
  181.         LCALL DISP_B2
  182.         INC R0
  183.         MOV DIZHI_X,#40H ;列地址 9
  184.         LCALL DISP_B2
  185.         INC R0
  186.         MOV DIZHI_X,#48H ;列地址 10
  187.         LCALL DISP_B2
  188.         INC R0
  189.         MOV DIZHI_X,#50H ;列地址 11
  190.         LCALL DISP_B2        
  191.         INC R0
  192.         MOV DIZHI_X,#58H ;列地址 12
  193.         LCALL DISP_B2
  194.         INC R0
  195.         MOV DIZHI_X,#60H ;列地址 13
  196.         LCALL DISP_B2
  197.         INC R0
  198.         MOV DIZHI_X,#68H ;列地址 14
  199.         LCALL DISP_B2
  200.         INC R0
  201.         MOV DIZHI_X,#70H ;列地址 15
  202.         LCALL DISP_B2
  203.         INC R0
  204.         MOV DIZHI_X,#78H ;列地址 16
  205.         LCALL DISP_B2
  206.         RET
  207. ;--数值第一排8*16显示子程序---------
  208. DISP_B0:
  209.           MOV DIZHI_Y,#0B0H ;设置页起始地址(B0-B7)(第一排)
  210.           LCALL TBT_0                ;根据值取表
  211.         LCALL XIE_MLING        ;写页地址和列地址
  212.          MOV R6,#8
  213.         LCALL MAK_XZJ  ;
  214.         INC DIZHI_Y                ;8*16下半部分页地址加1
  215.         LCALL XIE_MLING;写页地址和列地址
  216.         MOV R6,#8
  217.         LCALL MAK_XZJ
  218.         RET
  219. ;--数值第二排8*16显示子程序---------
  220. DISP_B2:
  221.           MOV DIZHI_Y,#0B2H ;设置页起始地址(B0-B7)(第2排)
  222.           LCALL TBT_0        ;根据值取表
  223.         LCALL XIE_MLING        ;写页地址和列地址
  224.          MOV R6,#8
  225.         LCALL MAK_XZJ  ;
  226.         INC DIZHI_Y                ;8*16下半部分页地址加1
  227.         LCALL XIE_MLING;写页地址和列地址
  228.         MOV R6,#8
  229.         LCALL MAK_XZJ
  230.         RET
  231. ;=========================数据区清零程序======================================
  232. QLCX:
  233.         MOV A,#0        ;清零程序
  234.         MOV R6,#40H
  235.         MOV R0,#20H
  236. QQQQ:
  237.         MOV @R0,A
  238.         INC R0
  239.         DJNZ R6,QQQQ
  240.         RET
  241. ;============================初始化0.91寸OLED=================================
  242. RESET:
  243.         MOV R7,#0AEH        ;关闭显示
  244.         LCALL COMMAND
  245.         MOV R7,#20H                ;设置模式命令
  246.         LCALL COMMAND
  247.         MOV R7,#10H                ;00水平地址,01垂直地址,10页地址
  248.         LCALL COMMAND
  249.         MOV R7,#0B0H        ;设置页起始地址(B0-B7)
  250.         LCALL COMMAND
  251.         MOV R7,#0C8H        ;设置COM输出扫描方向(C8从上到下,C0反向)
  252.         LCALL COMMAND
  253.         MOV R7,#00H                ;设置低列地址
  254.         LCALL COMMAND
  255.         MOV R7,#10H                ;设置高列地址
  256.         LCALL COMMAND
  257.         MOV R7,#40H                ;设置起始行地址
  258.         LCALL COMMAND
  259.         MOV R7,#81H                ;设置对比度
  260.         LCALL COMMAND
  261.         MOV R7,#200                ;对比度值(00-255)
  262.         LCALL COMMAND
  263.         MOV R7,#0A1H        ;设置egment re-map 0 to 127
  264.         LCALL COMMAND
  265.         MOV R7,#0A6H        ;正常显示(A6正常,A7反相显示)
  266.         LCALL COMMAND
  267.         MOV R7,#0A8H        ;设置驱动路数
  268.         LCALL COMMAND
  269.         MOV R7,#31                ;路数(0-63)
  270.         LCALL COMMAND
  271.          MOV R7,#0A5H        ;
  272.         LCALL COMMAND
  273.         MOV R7,#0A4H        ;全部显示开启
  274.         LCALL COMMAND
  275.         MOV R7,#0D3H        ;设置显示偏移
  276.         LCALL COMMAND
  277.         MOV R7,#0                ;偏移量
  278.         LCALL COMMAND
  279.         MOV R7,#0D5H        ;设置震荡频率
  280.         LCALL COMMAND
  281.         MOV R7,#0F0H        ;
  282.         LCALL COMMAND
  283.         MOV R7,#0D9H        ;设置充电周期
  284.         LCALL COMMAND
  285.         MOV R7,#22H                ;
  286.         LCALL COMMAND
  287.         MOV R7,#0DAH        ;引脚硬件配置
  288.         LCALL COMMAND
  289.         MOV R7,#02H                ;
  290.         LCALL COMMAND
  291.         MOV R7,#0DBH        ;设置电压倍率
  292.         LCALL COMMAND
  293.          MOV R7,#20H                ;
  294.         LCALL COMMAND
  295.         MOV R7,#8DH                ;设置
  296.         LCALL COMMAND
  297.         MOV R7,#14H               
  298.         LCALL COMMAND
  299.         MOV R7,#0AFH        ;打开显示
  300.         LCALL COMMAND
  301.         RET



  302. ;====================清屏程序=================================
  303. QPCX:
  304.         MOV R7,#00H                ;00水平地址,01垂直地址,10页地址
  305.         LCALL COMMAND
  306.            MOV R6,#0
  307.            MOV R4,#252
  308.         MOV R7,#0B0H        ;设置页起始地址(B0-B7)
  309.         LCALL COMMAND
  310.         MOV R7,#00H        ;设置低列地址
  311.            LCALL COMMAND
  312.         MOV R7,#10H        ;设置高列地址
  313.         LCALL COMMAND
  314. MAH:
  315.         MOV A,20h
  316.         MOV R7,A
  317.         LCALL COMDADA
  318.         INC R6                          
  319.         CJNE R6,#0,MAH
  320.         INC R4
  321.         CJNE R4,#0,MAH
  322.         RET        


  323. ;==================================================================
  324. ;--------写命令程序----------
  325. COMMAND:
  326.           MOV R3,#3
  327. COMMAND_1:
  328.         DEC R3          ;######防止出现程序检测不到I2C出现死循环
  329.         lcall start                ;启动总线        
  330.         mov a,#78h           ;地址写入
  331.         lcall send
  332.         lcall ack
  333.         MOV A, R3
  334.         JZ COMMAND_EN
  335.         jc         command_1


  336.         mov a,#00h
  337.         lcall send
  338.         lcall ack


  339.         mov a,R7
  340.         lcall send
  341.         lcall ack
  342.          lcall stop
  343. COMMAND_EN:
  344.         ret
  345. ;--------写数据程序----------
  346. COMDADA:
  347.         MOV R3,#3
  348. COMDADA_1:
  349.         DEC R3                 ;######防止出现程序检测不到I2C出现死循环
  350.         lcall start                ;启动总线        
  351.         mov a,#78h
  352.         lcall send
  353.         lcall ack
  354.         MOV A, R3
  355.         JZ COMDADA_EN
  356.         jc         comdada_1


  357.         mov a,#40h
  358.         lcall send
  359.         lcall ack
  360.         mov a,R7
  361.         lcall send
  362.         lcall ack
  363.          lcall stop
  364. COMDADA_EN:
  365.         ret
  366. ;------写页、列地址命令-----------
  367. XIE_MLING:
  368.         MOV R7,DIZHI_Y        ;设置页起始地址(B0-B7)
  369.         LCALL COMMAND
  370.         MOV A,DIZHI_X
  371.         ANL A,#0FH        ;
  372.         MOV R7,A        ;设置低列地址
  373.         LCALL COMMAND
  374.         MOV A,DIZHI_X
  375.         SWAP A
  376.         ANL A,#0FH        ;
  377.         ORL A,#10H
  378.          MOV R7,A        ;设置高列地址
  379.         LCALL COMMAND
  380.         RET
  381. ;--------写一字节数据--------------
  382. MAK_XZJ:
  383.         CLR A
  384.         MOVC A,@A+DPTR               
  385.         MOV R7,A
  386.         LCALL COMDADA
  387.         INC DPTR                          
  388.         DJNZ R6,MAK_XZJ
  389.         RET
  390. ;============================IIC总线程序=================================
  391. ;-------总线启动程序---------
  392. start:
  393.         setb         scl
  394.         setb         sda
  395.         nop
  396.         nop
  397.         clr         sda
  398.         nop
  399.         nop
  400.         clr         scl
  401.         ret
  402. ;-------总线停止程序---------
  403. stop:
  404.         clr         sda
  405.         nop
  406.         nop
  407.         setb         scl
  408.         nop
  409.         nop
  410.         setb         sda
  411.         ret
  412. ;-----------应答----------
  413. ack:
  414.         setb         sda
  415.         nop
  416.         nop
  417.         setb         scl
  418.         jb         sda,        ack_0
  419.         clr         c
  420.         sjmp         ack_1
  421. ack_0:
  422.         setb         c
  423. ack_1:
  424.         nop
  425.         nop
  426.         clr         scl
  427.         ret
  428. ;--------------发送8位数据---------
  429. send:
  430.         mov         b,        #08h
  431. send_1:
  432.         rlc         a
  433.         mov         sda,        c
  434.         setb         scl
  435.         nop
  436.         nop
  437.         clr         scl
  438.         djnz         b,        send_1
  439.         ret
  440. ;--------------接收8位数据-----------
  441. receive:
  442.         mov         b,        #08h
  443.         clr         a
  444.         setb         sda
  445. receive_1:
  446.         setb         scl
  447.         nop
  448.         nop
  449.         mov         c,sda
  450.         rlc         a
  451.         clr         scl
  452.         djnz         b,        receive_1
  453.         ret
  454. ;----------10MS--------------
  455. DELAY10ms:
  456.           MOV  6EH, #100
  457. DLY5: MOV  6FH, #100
  458.       DJNZ 6FH, $
  459.       DJNZ 6EH, DLY5
  460.       RET
复制代码


评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1041599 发表于 2022-8-8 07:42 | 显示全部楼层
感谢楼主分享,那个74AHC1具体型号是? 具体如何起到抗干扰的作用?
回复

使用道具 举报

ID:72088 发表于 2022-8-11 15:52 | 显示全部楼层
月亮小小鸟 发表于 2022-8-8 07:42
感谢楼主分享,那个74AHC1具体型号是? 具体如何起到抗干扰的作用?

缓冲隔离作用,
回复

使用道具 举报

ID:68189 发表于 2022-8-11 17:29 | 显示全部楼层
74AHC1 是反相器(施密特)? ArSnag_20220811172405.png

回复

使用道具 举报

ID:1034262 发表于 2022-8-12 14:29 | 显示全部楼层
315M和433M通信,自己定义编码的话,我都用曼彻斯特编码,这是归0码,很合适做无线编码。
回复

使用道具 举报

ID:1041599 发表于 2022-8-14 05:11 | 显示全部楼层
74AHC1G125  这个型号适用不?

74ahc1g125.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表