|
完整的點(diǎn)焊機(jī)控制完善論壇里不全的pcb工程程序一起附上
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
單片機(jī)源程序如下:
- /*******************************************************************************
- * *
- * 點(diǎn)焊機(jī)控制器 *
- --------------------------------------------------------------------------------
- * 結(jié)構(gòu)說明: 51單片機(jī)計(jì)時(shí)控制 *
- * 在檢測(cè)到點(diǎn)焊手柄發(fā)出的工作信號(hào)時(shí), *
- * 立即接通點(diǎn)焊機(jī)的電源,點(diǎn)焊機(jī)開始工作,設(shè)定的時(shí)間結(jié)束后切斷電源,*
- * 在設(shè)定的間隔時(shí)間內(nèi),不接收點(diǎn)焊手柄發(fā)出的工作信號(hào)。 * *
- *******************************************************************************/
- /*
- * 單片機(jī)P0^0~P0^4口分配給LCD5110使用:RET、CE、D/C、DIN、CLK(在LCD_5110.h中定義
- * P0^5 設(shè)備等待(可以工作)信號(hào)燈
- * P0^6 設(shè)備工作間隙(不接收點(diǎn)焊信號(hào))信號(hào)燈
- *
- * P1^0~P1^6 開關(guān)設(shè)置點(diǎn)焊時(shí)間(20毫秒為1單位,0~127單位)
- * P1^7 工作間隙:0=5秒,1=10秒
- *******************************************************************************/
- #include<reg51.h>
- //#include<intrins.h>
- #include"LCD_5110.h" //包含LCD顯示驅(qū)動(dòng)文件
- #define u8 unsigned char //單字節(jié)
- #define u16 unsigned int //雙字節(jié)
- #define u64 unsigned long //四字節(jié)
- #define SZP1 P1 //P1口為初始設(shè)置的數(shù)據(jù),低七位為定時(shí)數(shù)值(0-127)*20ms,
- //第八位為間隙時(shí)間,0=5秒,1=10秒
- sbit LED_work = P0^5; //設(shè)備工作信號(hào)(低電平點(diǎn)焊機(jī)接通)
- sbit LED_read = P0^6; //設(shè)備就緒信號(hào)(低電平可以工作)
- sbit work = P0^7; //點(diǎn)焊按鈕信號(hào)(低電平按下)
-
- //--定義全局變量--//
- u8 sdsj = 0; //設(shè)定的點(diǎn)焊單位
- u64 shsj = 0; //設(shè)定的點(diǎn)焊時(shí)間(雙字節(jié),以毫秒為單位)
- u8 wait = 5; //設(shè)置的間隔時(shí)間(5秒或10秒,根據(jù)P1.7確定)
-
- u8 time_work = 0; //焊接時(shí)間計(jì)時(shí)(20毫秒/單位)
- u8 time_wait = 0; //等待時(shí)間計(jì)時(shí)(單位秒)
- bit time_1s = 0; //秒信號(hào)
- bit time_20ms = 0; //20毫秒信號(hào)
- bit flag = 0; //定時(shí)工作標(biāo)志(0=待機(jī)或間隔,1=正在工作
- /*******************************************************************************
- * 函 數(shù) 名 : ReadSet
- * 函數(shù)功能 : 讀設(shè)置并顯示
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void ReadSet(void)
- {
- sdsj = SZP1; //從P1口讀入一個(gè)字節(jié)的數(shù)據(jù)
- if (sdsj>127) wait = 10; //最高位1,間隔時(shí)間=10秒
- else wait = 5;
- LCD_write_val(27,4,2,wait);//顯示設(shè)定的間隔時(shí)間
-
- sdsj = (sdsj & 0x7f) + 3; //取低7位定時(shí)值再加3(60毫秒)
- shsj = sdsj * 20; //20毫秒基本單位
- LCD_write_val(27,2,4,shsj);//顯示設(shè)定的點(diǎn)焊時(shí)間
- }
- /*******************************************************************************
- * 函 數(shù) 名 : timehand
- * 函數(shù)功能 : 20毫秒處理函數(shù),即每隔20毫秒處理一次
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void TimeHand(void)
- {
- if (flag == 0) //待機(jī)狀態(tài)
- {
- if (work == 0) //收到點(diǎn)焊按鈕信號(hào)
- {
- flag = 1; //設(shè)置工作標(biāo)志
- time_work = sdsj;//取設(shè)定時(shí)間
- LED_work = 0; //開通工作電源
- LED_read = 1; //關(guān)閉等待信號(hào)燈
- }
- else //無點(diǎn)焊按鈕信號(hào)
- {
- ReadSet(); //檢查更新設(shè)置
- }
- }
- else //工作狀態(tài)
- {
- time_work--;
- if (time_work == 0)//定時(shí)時(shí)間到
- {
- LED_work = 1; //關(guān)閉點(diǎn)焊機(jī)電源
- LED_read = 1; //取消準(zhǔn)備好信號(hào)燈
- flag = 0; //撤銷工作標(biāo)志
- time_wait = wait;//恢復(fù)間隔時(shí)間
- LCD_write_val(61,4,2,time_wait);//顯示剩余間隔時(shí)間
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) 名 :
- * 函數(shù)功能 : T0中斷服務(wù)函數(shù)
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void InterruptTimer0() interrupt 1
- {
- static u8 i = 0; //毫秒
- static u8 j = 0; //20毫秒
- TH0 = 0xFC; //重新加載初值,定時(shí)1ms
- TL0 = 0x66;
- i++;
- if (i > 19) //20毫秒計(jì)時(shí)到
- {
- i = 0;
- time_20ms = 1; //置20毫秒標(biāo)志
- j++;
- if (j > 49) //1秒
- {
- j = 0;
- time_1s = 1; //置1秒標(biāo)志
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) 名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void main(void)
- {
- //設(shè)置初始屏幕顯示
- u8 i, x ,y;
-
- LED_work = 1; //測(cè)試
- LED_read = 1;
- LCD_init(); //初始化5110屏幕
- x = 8; //顯示的起始位置
- y = 0;
- for (i = 0; i < 5; i++)//顯示“電子點(diǎn)焊機(jī)”
- {
- LCD_write_char(x,y,i);//
- x = x + 14; //下一字的顯示位置
- }
- x = 0;
- y = 2;
- LCD_write_char(x,y,3); //顯示“焊”
- x = 14;
- LCD_write_char(x,y,5); //顯示“接”
- x = 59;
- LCD_write_char(x,y,8); //顯示“毫”
- x = 72;
- LCD_write_char(x,y,9); //顯示“秒”
- x = 0;
- y = 4;
- LCD_write_char(x,y,6); //顯示“間”
- x = 14;
- LCD_write_char(x,y,7); //顯示“隔”
- x = 44;
- LCD_write_char(x,y,9); //顯示“秒”
- x = 76;
- LCD_write_ASCII(x,y,12);//顯示“s”
- ReadSet(); //讀取設(shè)定定時(shí)時(shí)間并顯示
- LCD_write_val(61,4,2,time_wait);//顯示剩余間隔時(shí)間
- LED_read = 0; //顯示準(zhǔn)備好信號(hào)燈
- TMOD = 0x01; //設(shè)置T0為模式1
- // TH0 = 0xF8; //為T0賦初值0xF8CD,定時(shí)2ms
- // TL0 = 0xCD;
- TH0 = 0xFC; //為T0賦初值0xFC67,定時(shí)1ms
- TL0 = 0x66;
- // TH0 = 0xFC;
- // TL0 = 0xC3; //為T0賦初值0xFA02,定時(shí)1ms
- ET0 = 1; //開T0中斷
- TR0 = 1; //啟動(dòng)定時(shí)器0
- EA = 1; //開總中斷
-
- while(1)
- {
- if (time_1s == 1) //每秒處理
- {
- time_1s = 0; //重置秒標(biāo)志
-
- if (time_wait > 0)
- {
- time_wait--;
- if (time_wait == 0)
- {
- LED_read = 0;//顯示就緒信號(hào)
- }
- LCD_write_val(61,4,2,time_wait);//顯示剩余間隔時(shí)間
- }
- else
- {
- if (LED_work == 1)
- {
- LED_read = ~LED_read;//等待時(shí)每秒閃一次
- }
- }
- }
-
- if (time_20ms == 1)
- {
- time_20ms = 0; //重置20毫秒標(biāo)志
- if (time_wait == 0)
- {
- TimeHand(); //調(diào)用20毫秒處理程序
- }
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
點(diǎn)焊機(jī)程序.zip
(717.83 KB, 下載次數(shù): 257)
2019-8-24 23:37 上傳
點(diǎn)擊文件名下載附件
點(diǎn)焊控制.zip
(1.33 MB, 下載次數(shù): 253)
2019-8-24 23:37 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|