|
没事看网上有氩弧焊机脉冲控制器自己做了一个,用单面PCB加跳线,感光法做的PCB板,双面板业余条件过孔太难搞了,用了2个4位共阳极数码管,一个显示高电平时间ms,一个显示低电平时间ms,没有搞储存几组数据,为了操作简单只储存上一次的设置,5个按键,一个储存键,另外4个调整脉冲高电平时间,与低电平时间,STC89C51控制
制作出来的实物图如下:
描述
测波形
试焊
Altium Designer画的PCB图在最后:(51hei附件中可下载工程文件)
单片机源程序如下:- /*********************************************************************************
- * 【编写时间】: 2021年3月12日
- * 【作 者】: 程云海
- * 【版 本】: 1.0
- * 【外部晶振】: 12mhz
- * 【主控芯片】: STC89C52RC
- * 【编译环境】: Keil μVisio4
- * 【程序功能】: 脉冲输出控制
- * 【使用说明】: 1.使用数码管显示控制氩弧焊机脉冲输出
- /*------------------------------------------------
- 主函数
- ------------------------------------------------*/
- void main (void)
- { a=byte_read(0x2000)*100+byte_read(0x2001);//程序开始时读取EEPROM中数据
- b=byte_read(0x2002)*100+byte_read(0x2003);//程序开始时读取EEPROM中数据
- //SectorErase(0x2000);//擦除扇区
- //byte_write(0x2000,a);//重新写入数据
- t0_init(); //定时1ms一个中断
-
- while (1) //主循环
- { smgxshi( a, b); //数码管显示函数
- anjian(); //按键调整函数
- chucun(); //储存函数
- shuchmch(); //输出脉冲函数
-
- }
- }
- void smgxshi(uint a,uint b)//数码管显示函数
- { uint c1; uchar c2;
- a1=a/1000;
- c1=a%1000;
- a2=c1/100;
- c2=c1%100;
- a3=c2/10;
- a4=c2%10;
- b1=b/1000;
- c1=b%1000;
- b2=c1/100;
- c2=c1%100;
- b3=c2/10;
- b4=c2%10;
-
-
- D=d[a1];
- W=0x7f;
- DelayMs(1);
- D=0xff;
- DelayMs(1);
- D=d[a2];
- W=0xbf;
- DelayMs(1);
- D=0xff;
- DelayMs(1);
- D=d[a3];
- W=0xdf;
- DelayMs(1);
- D=0xff;
- DelayMs(1);
- D=d[a4];
- W=0xef;
- DelayMs(1);
- D=0xff;
- DelayMs(1);
- D=d[b1];
- W=0xf7;
- DelayMs(1);
- D=0xff;
- DelayMs(1);
- D=d[b2];
- W=0xfb;
- DelayMs(1);
- D=0xff;
- DelayMs(1);
- D=d[b3];
- W=0xfd;
- DelayMs(1);
- D=0xff;
- DelayMs(1);
- D=d[b4];
- W=0xfe;
- DelayMs(1);
- D=0xff;
- DelayMs(1); }
-
- void anjian(void) //按键调整函数
- { if(an1==0) // 按键1是否按下
- {smgxshi(a,b); //数码管显示函数延时
- if(an1==0) // 按键1是否按下
- smgxshi(a, b); //数码管显示函数延时
- while(!an1) //按键有没有松开
- {smgxshi( a, b); //数码管显示函数延时
- a++;
- if(a==1001)
- a=0;
- smgxshi( a, b); //数码管显示函数延时
- } }
-
- if(an2==0) // 按键1是否按下
- {smgxshi(a,b); //数码管显示函数延时
- if(an2==0) // 按键1是否按下
- smgxshi(a, b); //数码管显示函数延时
- while(!an2) //按键有没有松开
- {smgxshi( a, b); //数码管显示函数延时
- a--;
- if(a==-1)
- a=1000;
- smgxshi( a, b); //数码管显示函数延时
- } }
-
- if(an3==0) // 按键1是否按下
- {smgxshi(a,b); //数码管显示函数延时
- if(an3==0) // 按键1是否按下
- smgxshi(a, b); //数码管显示函数延时
- while(!an3) //按键有没有松开
- {smgxshi( a, b); //数码管显示函数延时
- b++;
- if(b==5001)
- b=0;
- smgxshi( a, b); //数码管显示函数延时
- } }
-
- if(an4==0) // 按键1是否按下
- {smgxshi(a,b); //数码管显示函数延时
- if(an4==0) // 按键1是否按下
- smgxshi(a, b); //数码管显示函数延时
- while(!an4) //按键有没有松开
- {smgxshi( a, b); //数码管显示函数延时
- b--;
- if(b==-1)
- b=5000;
- smgxshi( a, b); //数码管显示函数延时
- } }
- }
- void shuchmch(void) //输出脉冲函数
- { if(ru==0) // 按键1是否按下
- {smgxshi(a,b); //数码管显示函数延时
- if(ru==0) // 按键1是否按下
- smgxshi(a, b); //数码管显示函数延时
- TR0=1; //启动定时器0
- while(!ru) //按键有没有松开
- smgxshi( a, b); //数码管显示函数延时
- chu=1;
- aa=0;
- TR0=0; //关闭定时器0
- smgxshi( a, b); //数码管显示函数延时
- }
- }
-
- void chucun(void) //储存函数
- { if(an5==0) // 按键1是否按下
- {smgxshi( a, b); //数码管显示函数延时
- if(an5==0) // 按键1是否按下
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
|
评分
-
查看全部评分
|