找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10751|回复: 17
打印 上一主题 下一主题
收起左侧

微信扫码单片机自动定时开关制作 附源程序

  [复制链接]
跳转到指定楼层
楼主
闲来无事,用单片机DIY了个扫码自动充电系统,单片机程序,控制端软件都是亲自编写,本人半桶水,希望能跟各位大神一起学习讨论!!!
说明:本程序无需公众号,系统分为两部分,服务端跟单片机程序端,服务端程序为监测跟控制开关服务端,可在内网电脑也可在服务器上同WX一起开启。使用步骤:1.登录WX,并打开WX支付窗口,调整窗口适合大小,最小化!2.把配套单片机程序下载到单片机,并连接好继电器模块,WIFI 模块,WFFI模块登录设置好服务器端IP,端口,接通电源。3.服务端填好端口,填写好免费KEY,点击启动服务,如果提示框里有IP上线,表示与单片机连接成功,可以手动控制也可扫码控制了。4.WX二维码设置:打开WX二维码收款,设置固定金额,收钱备注里填写开关代码,保存二维码,用户扫码支付就可以自动打开6小时后自动关闭,可以控制10路开关!如还不明白或需要修改程序请联系QQ:214909754




适用于个人测试使用小范围的WX自动收款控制设备,扫码洗衣机,扫码充电器,扫码电吹风等等,本人已经使用了两个多月了,比较稳定没出现过什么问题!


单片机程序51hei下载: 单片机程控开关.7z (742.02 KB, 下载次数: 158)

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏15 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2020-7-31 00:33 | 只看该作者
能分享下源码吗?
回复

使用道具 举报

板凳
ID:809724 发表于 2020-7-31 12:36 | 只看该作者

源码已经上传,自己下载
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. uchar dat;

  4. sbit LED =P1^0;
  5. sbit JDQA=P0^0;
  6. sbit JDQ1=P2^0;
  7. sbit JDQ2=P2^1;
  8. sbit JDQ3=P2^2;
  9. sbit JDQ4=P2^3;
  10. sbit JDQ5=P2^4;
  11. sbit JDQ6=P2^5;
  12. sbit JDQ7=P2^6;
  13. sbit JDQ8=P2^7;
  14. sbit JDQ9=P0^7;
  15. sbit JDQ10=P0^6;
  16. bit Time_1S;
  17. bit RX_OK;
  18. bit TX_Busy;
  19. unsigned char Time_Tick;
  20. unsigned char RX_Buf[3];
  21. unsigned char RX_Index;
  22. unsigned int  RelayTime[10];
  23. unsigned int  RelayTiOK[10];

  24. void t0isy() interrupt 1 using 1    //该中断实现LED闪烁,周期为30*2=60毫秒{   
  25.         {
  26.         TH0=(65536-50000)/256;   
  27.         TL0=(65536-5000)%256;   
  28.         Time_Tick++;
  29.         RelayTiOK[0]++;
  30.         RelayTiOK[1]++;
  31.     RelayTiOK[2]++;
  32.         RelayTiOK[3]++;
  33.         RelayTiOK[4]++;
  34.         RelayTiOK[5]++;
  35.     RelayTiOK[6]++;
  36.         RelayTiOK[7]++;
  37.         RelayTiOK[8]++;
  38.         RelayTiOK[9]++;
  39.     if(Time_Tick >= 15)
  40.         {
  41.         Time_Tick = 0;
  42.         Time_1S = 1;
  43.         LED= ~LED;
  44.        
  45.         }
  46.         if(RelayTiOK[0] >= 1578)
  47.         {
  48.         RelayTiOK[0]=0;
  49.         RelayTime[0]--;
  50.         }       
  51.         if(RelayTime[0] ==0)
  52.         {         
  53.     RelayTime[0]=0;
  54.         JDQ1 = 1;
  55.     }
  56.        
  57.     if(RelayTiOK[1] >= 1578)
  58.         {
  59.         RelayTiOK[1]=0;
  60.         RelayTime[1]--;
  61.         }       
  62.         if(RelayTime[1] ==0)
  63.         {
  64.     RelayTime[1]=0;
  65.         JDQ2 = 1;
  66.     }
  67.         if(RelayTiOK[2] >= 1578)
  68.         {
  69.         RelayTiOK[2]=0;
  70.         RelayTime[2]--;
  71.         }       
  72.         if(RelayTime[2] ==0)
  73.         {
  74.         RelayTime[2]=0;
  75.         JDQ3 = 1;
  76.     }
  77.         if(RelayTiOK[3] >= 1578)
  78.         {
  79.         RelayTiOK[3]=0;
  80.         RelayTime[3]--;
  81.         }       
  82.         if(RelayTime[3] ==0)
  83.         {
  84.         RelayTime[3]=0;
  85.         JDQ4 = 1;
  86.     }
  87.         if(RelayTiOK[4] >= 1578)
  88.         {
  89.         RelayTiOK[4]=0;
  90.         RelayTime[4]--;
  91.         }       
  92.         if(RelayTime[4] ==0)
  93.         {
  94.                  
  95.     RelayTime[4]=0;
  96.         JDQ5 = 1;
  97.     }
  98.         if(RelayTiOK[5] >= 1578)
  99.         {
  100.         RelayTiOK[5]=0;
  101.         RelayTime[5]--;
  102.         }       
  103.         if(RelayTime[5] ==0)
  104.         {
  105.                  
  106.     RelayTime[5]=0;
  107.         JDQ6 = 1;
  108.     }
  109.         if(RelayTiOK[6] >= 1578)
  110.         {
  111.         RelayTiOK[6]=0;
  112.         RelayTime[6]--;
  113.         }       
  114.         if(RelayTime[6] ==0)
  115.         {
  116.                  
  117.     RelayTime[6]=0;
  118.         JDQ7 = 1;
  119.     }
  120.         if(RelayTiOK[7] >= 1578)
  121.         {
  122.         RelayTiOK[7]=0;
  123.         RelayTime[7]--;
  124.         }       
  125.         if(RelayTime[7] ==0)
  126.         {
  127.     RelayTime[7]=0;
  128.         JDQ8 = 1;
  129.     }
  130.          if(RelayTiOK[8] >= 1578)
  131.         {
  132.         RelayTiOK[8]=0;
  133.         RelayTime[8]--;
  134.         }       
  135.         if(RelayTime[8] ==0)
  136.         {
  137.         RelayTime[8]=0;
  138.         JDQ9 = 1;
  139.     }
  140.            if(RelayTiOK[9] >= 1578)
  141.         {
  142.         RelayTiOK[9]=0;
  143.         RelayTime[9]--;
  144.         }       
  145.         if(RelayTime[9] ==0)
  146.         {
  147.         RelayTime[9]=0;
  148.         JDQ10 = 1;
  149.     }
  150. }  
  151. /*************************************************

  152. 函数:uart_tx_string

  153. 功能:串口发送一个字符串

  154. 出口:void

  155. 入口:字符串数组

  156. *************************************************/
  157. void ser_isr() interrupt 4 using 2    //该中断接收PC数据并返回。
  158. {      
  159.         unsigned char temp;

  160.         if(RI)   
  161.         {   
  162.                 RI=0;  
  163.                 temp = SBUF;
  164.                 SBUF = temp;
  165.                 RX_Buf[RX_Index] = temp;
  166.                 RX_Index++;
  167.         if(RX_Index >= 3)
  168.                 {
  169.                 RX_Index = 0;
  170.                 temp=0;
  171.                        
  172.         if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'J'))
  173.                 {       
  174.                 JDQA = 1;
  175.                 RX_OK = 1;
  176.                 }
  177.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'J'))
  178.                 {       
  179.                 JDQA = 0;
  180.                 RX_OK = 1;
  181.                 }
  182.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'A'))
  183.                 {       
  184.                 JDQ1 = 0;
  185.                 RelayTime[0] =420;// * 60 * 20;
  186.                 RX_OK = 1;
  187.                 }
  188.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'A'))
  189.                 {         
  190.                 JDQ1 = 1;
  191.                 RelayTime[0] = 0;                                                                                                               
  192.                 }
  193.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'B'))
  194.                 {
  195.                                 JDQ2 = 0;
  196.                                 RelayTime[1] = 420;
  197.                                 RX_OK = 1;
  198.                 }
  199.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'B'))
  200.                 {         
  201.                             JDQ2 = 1;
  202.                                 RelayTime[1] = 0;
  203.                 }
  204.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'C'))
  205.                 {
  206.                                 JDQ3 = 0;
  207.                                 RelayTime[2] = 420;
  208.                                 RX_OK = 1;
  209.                 }
  210.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'C'))
  211.                 {         
  212.                             JDQ3 = 1;
  213.                                 RelayTime[2] = 0;
  214.                 }
  215.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'D'))
  216.                 {
  217.                                 JDQ4 = 0;
  218.                                 RelayTime[3] = 420;
  219.                                 RX_OK = 1;
  220.                 }
  221.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'D'))
  222.                 {         
  223.                             JDQ4 = 1;
  224.                                 RelayTime[3] = 0;
  225.                 }
  226.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'E'))
  227.                 {
  228.                                 JDQ5 = 0;
  229.                                 RelayTime[4] = 420;
  230.                                 RX_OK = 1;
  231.                 }
  232.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'E'))
  233.                 {         
  234.                             JDQ5 = 1;
  235.                                 RelayTime[4] = 0;
  236.             }
  237.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'F'))
  238.                 {
  239.                                 JDQ6 = 0;
  240.                                 RelayTime[5] = 420;
  241.                                 RX_OK = 1;
  242.                 }
  243.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'F'))
  244.             {         
  245.                             JDQ6 = 1;
  246.                                 RelayTime[5] = 0;
  247.                 }
  248.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'L'))
  249.                 {
  250.                                 JDQ7 = 0;
  251.                                 RelayTime[6] = 420;
  252.                                 RX_OK = 1;
  253.                 }
  254.                 if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'L'))
  255.                 {         
  256.                             JDQ7 = 1;
  257.                                 RelayTime[6] = 0;
  258.                 }
  259.                 if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'H'))
  260.             {
  261.                                 JDQ8 = 0;
  262.                                 RelayTime[7] = 420;
  263.                                 RX_OK = 1;
  264.                 }
  265.                          if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'H'))
  266.                 {         
  267.                             JDQ8 = 1;
  268.                                 RelayTime[7] = 0;
  269.                 }
  270.                   if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'T'))
  271.             {
  272.                                 JDQ9 = 0;
  273.                                 RelayTime[8] = 420;
  274.                                 RX_OK = 1;
  275.                 }
  276.                          if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'T'))
  277.                 {         
  278.                             JDQ9 = 1;
  279.                                 RelayTime[8] = 0;
  280.                 }
  281.                  if((RX_Buf[0] == 'P')&&(RX_Buf[1] == 'K')&&(RX_Buf[2] == 'Y'))
  282.             {
  283.                                 JDQ10 = 0;
  284.                                 RelayTime[9] = 420;
  285.                                 RX_OK = 1;
  286.                 }
  287.                          if((RX_Buf[0] == 'Q')&&(RX_Buf[1] == 'G')&&(RX_Buf[2] == 'Y'))
  288.                 {         
  289.                             JDQ10 = 1;
  290.                                 RelayTime[9] = 0;
  291.                 }
  292.                         RX_Buf[0] = 0;
  293.             RX_Buf[1] = 0;
  294.                         }
  295.                         }
  296.                 if(TI)
  297.                 {
  298.                 TI = 0;
  299.                 TX_Busy = 0;
  300.             }


  301. }
  302. void Uart_SendByte(unsigned char dat)
  303. {
  304.          TX_Busy = 1;
  305.          SBUF = dat;
  306.          while(TX_Busy);
  307. }

  308. void Uart_SendString(unsigned char *s)
  309. {
  310.         while(*s != '\0')
  311.         {
  312.                 Uart_SendByte(*s++);
  313.         }
  314. }

  315. void main(void)
  316. {   
  317.         JDQA = 1;
  318.         JDQ1 = 1;
  319.         JDQ2 = 1;
  320.         JDQ3 = 1;
  321.         JDQ4 = 1;
  322.         JDQ5 = 1;
  323.         JDQ6 = 1;
  324.         JDQ7 = 1;
  325.         JDQ8 = 1;
  326.         JDQ9 = 1;
  327.         JDQ10 = 1;
  328.         TMOD=0x21;  
  329.         TH0=(65536-50000)/256;   
  330.         TL0=(65536-5000)%256;  
  331.         SCON=0x50;  
  332.         TH1=TL1=0xfd;    //波特率9600   
  333.         TR0=1;   
  334.         TR1=1;   
  335.         ET0=1;   
  336.         ES=1;   
  337.         EA=1;
  338.         RX_OK = 0;
  339.         RelayTime[0] = 0;
  340.         RelayTime[1] = 0;
  341.         RelayTime[2] = 0;
  342.         RelayTime[3] = 0;
  343.         RelayTime[4] = 0;
  344.         RelayTime[5] = 0;
  345.         RelayTime[6] = 0;
  346.         RelayTime[7] = 0;
  347.         RelayTime[8] = 0;
  348.         RelayTime[9] = 0;
  349.     RelayTiOK[0] = 0;
  350.         RelayTiOK[1] = 0;
  351.     RelayTiOK[2] = 0;
  352.         RelayTiOK[3] = 0;
  353.         RelayTiOK[4] = 0;
  354.         RelayTiOK[5] = 0;
  355.     RelayTiOK[6] = 0;
  356.         RelayTiOK[7] = 0;
  357.         RelayTiOK[8] = 0;
  358.         RelayTiOK[9] = 0;
  359.         while(1)
  360.         {
  361.                 if((RX_OK == 0)&&(Time_1S == 1))
  362.                 {
  363.                  Uart_SendString("VAT");
  364.                  Time_1S = 0;
  365.                  }
  366.                  }
  367. }
复制代码

回复

使用道具 举报

地板
ID:56960 发表于 2020-8-3 10:44 | 只看该作者
可以做个自动售卖机了!
回复

使用道具 举报

5#
ID:809724 发表于 2020-8-3 22:58 | 只看该作者
沧海一粒 发表于 2020-8-3 10:44
可以做个自动售卖机了!

小型的售卖还可以,如果做专用的这样就不可靠了,因为程序是监控微信的页面,检测到有订单代码就会打开相应的继电器,这样虽然可以用但感觉不是很稳妥,希望能有更好的方法!
回复

使用道具 举报

6#
ID:690363 发表于 2020-8-5 10:28 | 只看该作者
尝尝鲜,学习一下,谢谢分享
回复

使用道具 举报

7#
ID:46999 发表于 2020-8-7 09:08 | 只看该作者
服务器端的WIFI程序才是核心
回复

使用道具 举报

8#
ID:259648 发表于 2020-8-7 10:15 | 只看该作者
没太懂这个过程,服务端如何实现的??  还有就是这个是需要手机和电脑联合工作??
回复

使用道具 举报

9#
ID:149799 发表于 2020-8-10 11:51 | 只看该作者
还是不明白它的工作原理,好奇。
回复

使用道具 举报

10#
ID:19998 发表于 2020-8-10 13:59 | 只看该作者
学习一下,已下载
回复

使用道具 举报

11#
ID:809724 发表于 2020-8-13 22:04 | 只看该作者
温存723 发表于 2020-8-7 10:15
没太懂这个过程,服务端如何实现的??  还有就是这个是需要手机和电脑联合工作??

服务端我是用一台小电脑或者电脑棒能安装windows系统的就可以,在电脑上面安装好微信PC端并且登录上打开支付窗口,打开服务端填写好端口启动就OK啦
回复

使用道具 举报

12#
ID:809724 发表于 2020-8-13 22:06 | 只看该作者
维超 发表于 2020-8-7 09:08
服务器端的WIFI程序才是核心

WIFI 没有程序,直接购买一个WIFI 模块就搞定了,串口通信,模块里面有介绍的!
回复

使用道具 举报

13#
ID:704585 发表于 2020-8-19 10:02 | 只看该作者
有意思,学习一下。
回复

使用道具 举报

14#
ID:448843 发表于 2020-8-20 22:00 来自手机 | 只看该作者
这个应该是通过小主机控制的吧,wifi模块和主机是在同一个局域网,主机收到付款信息后发送数据给wifi模块,wifi模块再发送数据给单片机,单片机再驱动继电器。所以核心技术应该在小主机上的软件上吧
回复

使用道具 举报

15#
ID:240034 发表于 2020-8-22 08:41 | 只看该作者
关键还是服务端控制
回复

使用道具 举报

16#
ID:313857 发表于 2023-3-4 09:34 | 只看该作者
请问,KEY哪里填写。。
回复

使用道具 举报

17#
ID:71233 发表于 2023-3-5 10:35 | 只看该作者
楼主技术高超!我还是不懂得其中的道理。
回复

使用道具 举报

18#
ID:803963 发表于 2023-6-19 20:43 | 只看该作者
后台谁做的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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