用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;
[*]}
代码:
学习了,我也想做一个这个,淘宝上的都是改电阻,想弄成按键的,这下有参考的了,赞一个!{:4_165:} 学习了! 太厉害了,严重支持一下{:5_332:}
页:
[1]