在论坛看到个普通氩弧焊改冷焊机程序的帖子挺有意思的,可惜只发了代码部分。
我也有个氩弧焊机啊没法了干脆自己动手也搞了个发上来一起研究下。
先上电路图,
看看嘉立创里的效果哈哈
已经装机了,没有焊板子的图了直接上装机效果https://www.bilibili.com/video/BV1nW4y1u7tz/?spm_id_from=333.999.0.0&vd_source=319f267cc6110f5c414f91b611c5d0d8
代码因为不是KEIL的随便看看就好了,最后面会放编译完的固件的。
- #define KEY_COUNT_DESHAKING 15//按键消抖时间15MS
- #define KEY_COUNT_LONGT 1000//长按按键判断时间1000MS
- #define KEY_COUNT_DUAL 180//双击按键判断时间180MS
- #define KEY_LONG_REPEAT 2000//长按按键时响应的时间间隔2000MS
- #define TASKS_MAX 4
- #define SMG_PORT P1
- #define SMG_PORT_MODE {P1M1=0x00;P1M0=0xff;}//P1推挽输出
- #define SMG_WEI1 P3_5
- #define SMG_WEI1_OUT {P3M1&=~0x20;P3M0|=0x20;}//P3_5推挽输出
- #define SMG_WEI2 P3_1
- #define SMG_WEI2_OUT {P3M1&=~0x02;P3M0|=0x02;}//P3_1推挽输出
- #define SMG_WEI3 P3_6
- #define SMG_WEI3_OUT {P3M1&=~0x40;P3M0|=0x40;}//P3_6推挽输出
- #define smg_lx0
- #define duan_0
- #define smg_clear
- #define smg_shunum
- #define smg_displa_dian
- #define smg_update_buf
- #include <STC8HX.h>
- uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
- #include "myLib/LUNXUN.h"
- #include "shumaguan.h"
- #include "lib/eeprom.h"
- #include "myLib/EC11_51.h"//声明库头文件
- #include "xiaogju.h"
- uint8 huilingjs = 0;
- uint8 dianhanzt = 0;
- uint16 i = 0;
- uint8 shezhishijian[3]={0,0,0};
- uint8 jianhc_A1;
- void Timer0Init(void) //100微秒@24.000MHz
- {
- AUXR &= 0x7f; //定时器时钟12T模式
- TMOD &= 0xf0; //设置定时器模式
- TL0 = 0x38; //设定定时初值
- TH0 = 0xff; //设定定时初值
- }
- void T_IRQ0(void) interrupt 1 using 1{
- TaskReMarks(); //此函数在中断中调用
- }
- void renwu1() {
- //↑ ↑ ↑显示更新处理/100ms
- switch (shezhishijian[(int)(2)]) {
- case 0:
- smg_display_clear_bit(8);//数码管清指定位
- smg_display_num(1-1,shezhishijian[(int)(0)]);//数码管显示数字
- break;
- case 1:
- smg_display_clear_bit(8);//数码管清指定位
- smg_display_num(1-1,(shezhishijian[(int)(1)]<<1));//数码管显示数字
- smg_display_dian(2-1,1);//数码管指定位控制小数点
- smg_display_dian(3-1,1);//数码管指定位控制小数点
- break;
- case 2:
- smg_display_clear_bit(8);//数码管清指定位
- smg_display_update_buf(1-1,15);//数码管指定位显示字符
- smg_display_update_buf(2-1,15);//数码管指定位显示字符
- smg_display_update_buf(3-1,0);//数码管指定位显示字符
- break;
- }
- if((huilingjs != 0) && (shezhishijian[(int)(2)] != 2)){
- huilingjs--;
- if(huilingjs == 0){
- shezhishijian[(int)(2)] = 0;
- eeprom_sector_erase(0); //EEPROM擦除指定扇区
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM写数据
- }
- }
- }
- xdata tongdaoHC HC_A1 = {0,0,0,0,0,0,0};//声明A1通道全局结构体缓存
- void renwu0() {
- //↑ ↑ ↑编码器输入处理/1ms
- smg_scan_callback(10);//数码管扫描回调
- HC_A1.EC11_A_dq = P3_3;
- HC_A1.EC11_B_dq = P3_4;
- HC_A1.EC11_D_dq = P3_2;
- jianhc_A1 = Encoder_EC11_Scan(&HC_A1);
- switch ( jianhc_A1)
- {
- case 1:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] >= 12){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] - 1;
- }
- huilingjs = 30;
- }
- break;
- case 2:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] < 255){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] + 1;
- }
- huilingjs = 30;
- }
- break;
- case 3:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] >= 30){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] - 10;
- }
- huilingjs = 30;
- }
- break;
- case 4:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] < 240){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] + 10;
- }
- huilingjs = 30;
- }
- break;
- case 5:
- break;
- case 6:
- if(shezhishijian[(int)(2)] == 0){
- shezhishijian[(int)(2)] = 1;
- }
- else{
- shezhishijian[(int)(2)] = 0;
- eeprom_sector_erase(0); //EEPROM擦除指定扇区
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM写数据
- }
- huilingjs = 30;
- break;
- case 7:
- if(shezhishijian[(int)(2)] != 2){
- shezhishijian[(int)(2)] = 2;
- eeprom_sector_erase(0); //EEPROM擦除指定扇区
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM写数据
- }
- else{
- shezhishijian[(int)(2)] = 0;
- eeprom_sector_erase(0); //EEPROM擦除指定扇区
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM写数据
- }
- break;
- case 8:
- break;
- }
- WDT_CONTR = 0X38;//在溢出设定时间到前调用
- }
- void renwu2() {
- //↑ ↑ ↑点焊处理/1ms
- if(shezhishijian[(int)(2)] == 2){
- if(P5_4){
- P3_7 = 0;
- smg_display_dian(1-1,0);//数码管指定位控制小数点
- dianhanzt = 0;
- }
- else{
- P3_7 = 1;
- smg_display_dian(1-1,1);//数码管指定位控制小数点
- }
- }
- else{
- if(P5_4){
- P3_7 = 0;
- smg_display_dian(1-1,0);//数码管指定位控制小数点
- dianhanzt = 0;
- }
- else{
- switch (dianhanzt) {
- case 0:
- P3_7 = 1;
- smg_display_dian(1-1,1);//数码管指定位控制小数点
- dianhanzt = 1;
- i = 0;
- break;
- case 1:
- i++;
- if(i >= shezhishijian[(int)(0)]){
- P3_7 = 0;
- smg_display_dian(1-1,0);//数码管指定位控制小数点
- dianhanzt = 2;
- i = 0;
- }
- break;
- case 2:
- i++;
- if(i >= 1000){
- P3_7 = 1;
- smg_display_dian(1-1,1);//数码管指定位控制小数点
- dianhanzt = 3;
- i = 0;
- }
- break;
- case 3:
- i++;
- if(i >= shezhishijian[(int)(0)]){
- P3_7 = 0;
- smg_display_dian(1-1,0);//数码管指定位控制小数点
- dianhanzt = 4;
- i = 0;
- }
- break;
- case 4:
- i++;
- if(i >= (shezhishijian[(int)(1)]<<1)){
- P3_7 = 1;
- smg_display_dian(1-1,1);//数码管指定位控制小数点
- dianhanzt = 3;
- i = 0;
- }
- break;
- }
- }
- }
- }
- void setup()
- {
- P5M1|=0x10;P5M0&=~0x10;//高阻输入
- P3M1&=~0x80;P3M0|=0x80;//推挽输出
- Timer0Init();
- TR0 = 1;// 定时器0开始计时
- EA = 1; // 控制总中断
- ET0 = 1; // 控制定时器中断
- TaskComps[0].Yun = 1;
- TaskComps[0].Run = 1;
- TaskComps[0].Timer = 10;
- TaskComps[0].ItvTimer = 10;
- TaskComps[0].TaskHook = renwu0;
- TaskComps[1].Yun = 1;
- TaskComps[1].Run = 1;
- TaskComps[1].Timer = 1000;
- TaskComps[1].ItvTimer = 1000;
- TaskComps[1].TaskHook = renwu1;
- TaskComps[2].Yun = 1;
- TaskComps[2].Run = 1;
- TaskComps[2].Timer = 10;
- TaskComps[2].ItvTimer = 10;
- TaskComps[2].TaskHook = renwu2;
- smg_init();//数码管初始化
- smg_display_clear_bit(8);//数码管清指定位
- eeprom_read_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM读数据
- P3M1|=0x04;P3M0&=~0x04;//P3_2高阻输入
- P3M1|=0x10;P3M0&=~0x10;//P3_4高阻输入
- P3M1|=0x08;P3M0&=~0x08;//P3_3高阻输入
- }
- void loop()
- {
- TaskProcess();
- TaskProcess();
- TaskProcess();
- }
- void main(void)
- {
- setup();
- while(1){
- loop();
- }
- }
复制代码 完工后面上干货了。
上图8个文件下载:
氩弧焊脉冲点焊控制.rar
(474.88 KB, 下载次数: 76)
|