本人是单片机小白,来学习的新人,还望大家多多照顾噢
前段时间去大姐夫家玩,发现大姐夫有很多lsuc这种超级电容,非常适合做储能式点焊机,而且现在点焊18650等电池也越来越多,于是便亲自操刀做一个玩玩!
设计三层电路板,模块化设计,最底层是固定超级电容的均衡电路板,中间层是mos管矩阵电路板,最上边是单片机控制电路板
下图是用TL431做的均衡充电板,LSUC超级电容耐压2.8v容量3000F,均衡起控电压2.78v 均衡电流800mA
热转印pc为了降低内阻特意买了铜排进行关键部位连均衡和mos矩阵板放在一起试一下
打孔加工
安装上一个,感觉很漂亮啊
装好的mos管矩阵电路板
组装在一起看下效果,感觉还是很漂亮的
接下来进入正题,进行时间控制板的程序设计和pcb设计
单片机源程序如下:
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;//对数据类型进行声明定义
typedef unsigned char u8;//对数据类型进行声明定义
sbit P30=P1^0; //数码管第1位
sbit P31=P1^1; //数码管第2位
sbit k1=P1^6; //将单片机的P3.2端口定义为时间加
sbit k2=P1^5; //将单片机的P3.3端口定义为时间减
sbit k3=P1^7; //将单片机的P3.4端口定义为检测点焊笔
sbit out=P1^4; //驱动脉冲输出
//数码管真值表//
u8 code LED_CODE[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //显示0~F的段码
u16 Cntms1=0,Cntms2=0,num1,num2;ke;
u8 num; //定时变量=毫秒
void Delay(unsigned long int t)
{
while(--t);
}
/*===加按键检测===*/
/*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
bit skey0(void)
{
static unsigned char a = 0;
if(k1 == 0) //如果检测到按键引脚有低电平,记数变量开始累加.
{
if(a < 50) //控制延时计数返0,因为当按键不松开时,j一直在累加
a++; //CPU每检测到一次按键引脚为低电平0,j就累加1次.
}
else //如果按键没有按下或者按下后有高电平(抖动)j清0
a = 0;
if(a == 49) //如果变量j的值累加到49,说明按键已跨过抖动区.
return 1; //返回1,说明已检测到按键有效值.
else
return 0; //返回0,说明没有检测到有效值.
}
/*===减按键检测===*/
/*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
bit skey1(void)
{
static unsigned char i = 0; //定义静态变量,用来记录延时用.
if(k2 == 0) //如果检测到按键引脚有低电平,记数变量开始累加.
{
if(i < 50) //控制延时计数返0,因为当按键不松开时,i一直在累加.
i++; //CPU每检测到一次按键引脚为低电平0,i就累加1次.
}
else //如果按键没有按下或者按下后有高电平(抖动)i清0
i = 0;
if(i == 49) //如果变量i的值累加到49,说明按键已跨过抖动区
return 1; //返回1,说明已检测到按键有效值.
else
return 0; //返回0,说明没有检测到有效值.
}
bit skey2(void)
{
static unsigned int l = 0; //定义静态变量,用来记录延时用. unsigned long int
if(k3 == 0) //如果检测到按键引脚有低电平,记数变量开始累加.
{
if(l <5000) //控制延时计数返0,因为当按键不松开时,i一直在累加
l++; //CPU每检测到一次按键引脚为低电平0,i就累加1次.
}
else //如果按键没有按下或者按下后有高电平(抖动)i清0
l = 0;
if(l == 4999) //如果变量i的值累加到4999,说明点焊笔已经做好准备,可以焊接了.
return 1; //返回1,说明已检测到按键有效值.
else
return 0; //返回0,说明没有检测到有效值.
}
/********************************
数码管动态显示程序
********************************/
void display()
{
static u8 i=0;
if(i==0)
{
P30=1;
P31=0;
P3=LED_CODE[num/10];
for(ke = 0;ke <100;ke++); //延时一段时间
P31=1;
P3=0Xff;
i=1;
}
else
{
P31=1;
P30=0;
P3=LED_CODE[num%10];
for(ke = 0;ke <100;ke++); //延时一段时间
P30=1;
P3=0Xff; //消隐
i=0;
}
}
//主函数//
void main()
{
bit m = 0,m1 = 0,m2=0; //声明一个位变量.用来存储按键状态.
unsigned char i;
out=1; //初始化输出端口
num=40;//定时变量赋初值
k1 = 1; //加按键输入端口电平置高
k2 = 1; //减按键输入端口电平置高
k3 = 1;
while(1) //主循环
{
m = skey0(); //采集加按键
m1 = skey1(); //采集减按键
m2 = skey2(); //采集按键
if(m == 1) //如果采集到加按键值.
{
if(num < 99)
num++; //计数自增
}
if(m1 == 1) //如果采集到减按键值.
{
if(num >1)
num--; //计数自减
}
if(m2 == 1)
{ for(i=0;i<2;i++) //加入 for循环,表明for循环大括号中的程序循环执行2次
{
out=0; //将P1.0口赋值 0,对外输出低电平
Delay(num*50); //调用延时程序;更改延时数字可以更改延时长度;用于改变输出脉冲时间
out=1; //将P1.0口赋值 1,对外输出高电平
Delay(3000);
}
}
display();//数码管动态显示
}
}
程序及引脚定义完,接下来设计pcb
第一次使用绿油技术
接下来下载程序,调试一下
至此大功告成
测试一下点焊效果
用力
焊的还是很牢固
感谢大家观看!
|