找回密码
 立即注册

QQ登录

只需一步,快速开始

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

制作个有反充功能的点焊机 单片机仿真演示程序!

[复制链接]
跳转到指定楼层
楼主
本帖最后由 qq88046220 于 2022-2-6 22:55 编辑

现在不能出门,做个多功能的点焊机+升压反充+汽车启动点焊时间根据大家用的单片机自行调试,充电可以自行用ADC检测开关EN脚也可以根据法拉电容容量改一下时间!仿真演示只写了一个延时程序!代码虽然有点乱,学习过程中至少实现了所需要的功能!自己过年学习了51黑论坛的各种帖子纯手工码的!
S1升压充电键,EN升压模块开关。 点焊机 反充启动器.zip (50.15 KB, 下载次数: 13)
S2放电并开启OUT,
S3没用NC,
S4脉冲时间调整,
S5点焊触发。
对于LED可以用P0=0xff;表示,代码会更短,只是那样跟我一样的小白可能就看不懂了!


单片机功能演示程序如下:
#include<reg52.h>
#include <intrins.h>

sbit S1=P3^7;   
sbit S2=P3^6;
sbit S3=P3^5;
sbit S4=P3^4;
sbit S5=P1^7;

sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;

sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;

sbit OUT=P1^5;
sbit EN=P1^6;
unsigned char XX;
unsigned int OO=0;
void dianhan();

void delay(xms)
{
unsigned char i,j;
        while(xms--)
        {
        i=12;j=169;
                do
                {
                while(--j);
                }while(--i);
        }
}

void dianhan()//S4选择脉冲时间
{
if(S4==0)
        {
                                delay(10);
                                if(S4==0)
                                 LED6=0;
                                        {
                                        OO++;
                                        if(OO==8)
                                        OO=0;
                                        }
        while(!S4);
                                       
        }
                                 if(OO==0)  
          {
                                        XX=0;LED1=1;LED2=1;LED3=1;LED4=1;
          }
        if(OO==1)  
          {
                                        XX=1;LED1=1;LED2=1;LED3=1;LED4=0;
          }
                                if(OO==2)  
          {
                                        XX=2;LED1=1;LED2=1;LED3=0;LED4=1;
          }       
                                if(OO==3)  
          {
                                        XX=5;LED1=1;LED2=0;LED3=1;LED4=1;
          }       
                                if(OO==4)  
          {
                                        XX=10;LED1=0;LED2=1;LED3=1;LED4=1;
          }       
                                if(OO==5)  
          {
                                        XX=20;LED1=0;LED2=1;LED3=1;LED4=0;
          }       
                                if(OO==6)  
          {
                                        XX=30;LED1=0;LED2=1;LED3=0;LED4=0;
          }                       
                                if(OO==7)  
          {
                                        XX=50;LED1=0;LED2=0;LED3=0;LED4=0;
          }                                                      
}

void main(void)
{
          while(1)
     {
                         dianhan();//PUL
       if(S1==0)  //S1充电
                         {
                                 delay(10);
                                 if(S1==0)
            {
              EN=0;LED7=0;LED6=1;
                                                        LED1=0;LED2=1;LED3=1;LED4=1;delay(500)EN=1;LED7=1;
            }
                                        }
                         if(S2==0)//S2放电
                         {
                                 delay(10);
                                 if(S2==0)
            {
                                                        OUT=0;LED5=0;LED6=1;
                                                        LED1=0;LED2=0;LED3=0;LED4=0;delay(500);OUT=1;LED5=1;
            }
                                        }
                                 if(S5==0)//点焊触发
                         {
                                 delay(1);
                                 if(S5==1)
            {
              OUT=0;delay(1*XX);OUT=1;delay(10);//双脉冲输出
        OUT=0;delay(1*XX);OUT=1;
            }
                                        }
                 }
   }








15W408.jpg (449.27 KB, 下载次数: 111)

电路图

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

使用道具 举报

沙发
ID:857072 发表于 2022-1-20 23:37 来自手机 | 只看该作者
看到大堆的Delay_ms(9000);Delay_ms(2000);这要是能跑才怪了。
回复

使用道具 举报

板凳
ID:23606 发表于 2022-1-21 06:20 | 只看该作者
死循环的现象指的是哪些?
回复

使用道具 举报

地板
ID:844772 发表于 2022-1-21 08:35 | 只看该作者
unsigned int mosi=3;//计数变量 把3改成0.
回复

使用道具 举报

5#
ID:213173 发表于 2022-1-21 09:25 | 只看该作者
楼主这代码实在是不......。既然选定用STC15W408AS,建议增加点元件,用数码管显示电池电压、设置脉冲宽度。以便监测电池电量,任意选择点焊时长。并把调节数据保存在EEPROM中。
回复

使用道具 举报

6#
ID:161164 发表于 2022-1-21 13:19 | 只看该作者
if(mosi==3)          //点焊模式
/**********************************************************/
        if(MODE==0)
        {
                Delay_ms(10);
                if(MODE==0)
                {
                mosi++;
                if(mosi==4)//<<<<<<<<<<<<<<<<<<改为4
                mosi=0;
        }
回复

使用道具 举报

7#
ID:216120 发表于 2022-2-7 20:03 | 只看该作者
glinfei 发表于 2022-1-21 08:35
unsigned int mosi=3;//计数变量 把3改成0.

这个操作是正确的!改后就OK了!
回复

使用道具 举报

8#
ID:216120 发表于 2022-2-7 20:05 | 只看该作者
wulin 发表于 2022-1-21 09:25
楼主这代码实在是不......。既然选定用STC15W408AS,建议增加点元件,用数码管显示电池电压、设置脉冲宽度 ...

参考了你的方法,申明了一个变量,设置变量值就实现了,多谢!
回复

使用道具 举报

9#
ID:216120 发表于 2022-2-18 22:20 | 只看该作者
这前是这样写的LED流水:
                        LED1=1;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=0;delay(50);
                        LED1=1;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=0;delay(50);
                        LED1=1;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=0;delay(50);
                        LED1=1;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=0;delay(50);

找了个方法可以这样写:

void CHG_LED()       //LED子程序
{
        char aa;     //变量aa
                for(aa = 0; aa <= 10; aa ++)   //运行10次
                        {
                        LED1=1;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=1;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=1;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=1;delay(200);
                        LED1=0;LED2=0;LED3=0;LED4=0;delay(50);       
                        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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