|
沒事看網上有氬弧焊機脈沖控制器自己做了一個,用單面PCB加跳線,感光法做的PCB板,雙面板業余條件過孔太難搞了,用了2個4位共陽極數碼管,一個顯示高電平時間ms,一個顯示低電平時間ms,沒有搞儲存幾組數據,為了操作簡單只儲存上一次的設置,5個按鍵,一個儲存鍵,另外4個調整脈沖高電平時間,與低電平時間,STC89C51控制
制作出來的實物圖如下:
51hei圖片_20210323085243.jpg (78.12 KB, 下載次數: 91)
下載附件
描述
2021-3-23 09:10 上傳
描述
51hei圖片_20210323085320.jpg (148.16 KB, 下載次數: 74)
下載附件
測波形
2021-3-23 09:10 上傳
測波形
51hei圖片_20210323085302.jpg (32.89 KB, 下載次數: 69)
下載附件
試焊
2021-3-23 09:10 上傳
試焊
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黑下載附件…………
復制代碼
|
評分
-
查看全部評分
|