百桃园 发表于 2024-3-28 14:05:45

用stc8g1k08单片机低成本qc快充充电宝给路由器供电 含原理图PCB源码

         
          设目的是为了在断电的时候能利用带qc快充功能的充电宝直接给路由器供电,
   相比于一般的5v-12v升压的方案,效率更高且输出功率更大。为了能够方便的调节
   输出电压为路由器常用的5v,9v或12v,使用了一颗stc8g1k08-8pin的单片机。

          PCB大小只有10.5x25mm,小巧精致。
          附件里包含原理图,PCB和单片机的源码。原理图和pcb是AD的,源码是keil4的。
          欢迎大家一起交流。




   成品图如下:







原理图和PCB图如下:(附件中可下载工程文件)






单片机部分源程序如下:


[*]#include "STC8Gxx.h"
[*]
[*]#define MAX_OUT 2 //2:12v,3:20v
[*]
[*]void Delay1500ms();                //@11.0592MHz
[*]void Delay50ms();                //@11.0592MHz
[*]void OUT_5V();
[*]void OUT_9V();
[*]void OUT_12V();
[*]void OUT_20V();
[*]
[*]sbit DNL0=P5^5;
[*]sbit DPH0=P3^1;
[*]sbit DPL0=P3^2;
[*]sbit KEY=P3^0;
[*]sbit LED=P5^4;
[*]unsigned char OUT_STATE=0;      //0:5V,1:9V,2:12V,3:20V
[*]
[*]int main()
[*]{
[*]//      Delay1500ms();
[*]      P5M0|=0x30;                //P54,P55 OUT_PP
[*]      P5M1&=~0x30;
[*]      P3M0&=~0x06;      //P31,P32 INPUT
[*]      P3M1|=0x06;
[*]      P3M0&=~0x01;      //P30 Normal
[*]      P3M1&=~0x01;
[*]
[*]      P_SW2|=0x80;         //P31,P32 PUSH_UP DIS
[*]      P3PU&=~0x06;
[*]      P_SW2&=~0x80;
[*]
[*]      DNL0=0;
[*]
[*]      Delay1500ms();
[*]
[*]      OUT_5V();
[*]
[*]      while(1)
[*]      {
[*]                if(KEY==0)
[*]                {
[*]                        Delay50ms();
[*]                        while(KEY==0);
[*]                        Delay50ms();
[*]                        OUT_STATE++;
[*]                }
[*]                else continue;
[*]                if(OUT_STATE>MAX_OUT) OUT_STATE=0;
[*]
[*]                if(OUT_STATE==0) OUT_5V();
[*]                else if(OUT_STATE==1) OUT_9V();
[*]                else if(OUT_STATE==2) OUT_12V();
[*]                else OUT_20V();
[*]
[*]                Delay1500ms();
[*]      }
[*]
[*]}
[*]
[*]void Delay50ms()                //@11.0592MHz
[*]{
[*]      unsigned char i, j, k;
[*]
[*]      i = 3;
[*]      j = 207;
[*]      k = 28;
[*]      do
[*]      {
[*]                do
[*]                {
[*]                        while (--k);
[*]                } while (--j);
[*]      } while (--i);
[*]}
[*]
[*]void Delay1500ms()                //@11.0592MHz
[*]{
[*]      unsigned char i, j, k;
[*]
[*]      i = 85;
[*]      j = 40;
[*]      k = 170;
[*]      do
[*]      {
[*]                do
[*]                {
[*]                        while (--k);
[*]                } while (--j);
[*]      } while (--i);
[*]}
[*]
[*]void OUT_5V()
[*]{
[*]      LED=1;
[*]
[*]      P5M0|=0x30;                //P54,P55 OUT_PP
[*]      P5M1&=~0x30;
[*]      P3M0&=~0x06;      //P31,P32 INPUT
[*]      P3M1|=0x06;
[*]      P3M0&=~0x01;      //P30 Normal
[*]      P3M1&=~0x01;
[*]
[*]      P_SW2|=0x80;         //P31,P32 PUSH_UP DIS
[*]      P3PU&=~0x06;
[*]      P_SW2&=~0x80;
[*]
[*]      DNL0=0;
[*]}
[*]
[*]void OUT_9V()
[*]{
[*]      P5M0|=0x30;                //P54,P55 OUT_PP
[*]      P5M1&=~0x30;
[*]      P3M0|=0x06;                  //P31,P32 OUT_PP
[*]      P3M1&=~0x06;
[*]
[*]      P_SW2|=0x80;         //P31,P32 PUSH_UP EN
[*]      P3PU|=0x06;
[*]      P_SW2&=~0x80;
[*]
[*]      DNL0=1;
[*]      DPH0=1;
[*]      DPL0=0;
[*]      LED=1;
[*]}
[*]
[*]void OUT_12V()
[*]{
[*]      P5M0|=0x30;                //P54,P55 OUT_PP
[*]      P5M1&=~0x30;
[*]      P3M0|=0x06;                  //P31,P32 OUT_PP
[*]      P3M1&=~0x06;
[*]
[*]      P_SW2|=0x80;         //P31,P32 PUSH_UP EN
[*]      P3PU|=0x06;
[*]      P_SW2&=~0x80;
[*]
[*]      DNL0=0;
[*]      DPH0=1;
[*]      DPL0=0;
[*]      LED=0;
[*]}
[*]
[*]void OUT_20V()
[*]{
[*]      P5M0|=0x30;                //P54,P55 OUT_PP
[*]      P5M1&=~0x30;
[*]      P3M0|=0x06;                  //P31,P32 OUT_PP
[*]      P3M1&=~0x06;
[*]
[*]      P_SW2|=0x80;         //P31,P32 PUSH_UP EN
[*]      P3PU|=0x06;
[*]      P_SW2&=~0x80;
[*]
[*]      DNL0=1;
[*]      DPH0=1;
[*]      DPL0=1;
[*]      LED=0;
[*]}




代码:

zs784245578 发表于 2024-8-10 11:37:12

学习了,我也想做一个这个,淘宝上的都是改电阻,想弄成按键的,这下有参考的了,赞一个!{:4_165:}

SXD 发表于 2024-8-18 21:07:48

学习了!

liulei 发表于 2024-8-21 15:57:32

太厉害了,严重支持一下{:5_332:}
页: [1]
查看完整版本: 用stc8g1k08单片机低成本qc快充充电宝给路由器供电 含原理图PCB源码