创意小发明:使用51系列单片机的DIY点焊机控制项目(程序+原理图) |
您所在的位置:网站首页 › 超级电容自制点焊机控制板电路图 › 创意小发明:使用51系列单片机的DIY点焊机控制项目(程序+原理图) |
各位早上好,最近一段时间全市不好的消息,南方的洪水已经超过了98年是史上最厉害的洪水,但愿灾难赶紧过去 最近做了一个用单片机的点焊机控制装置,使用的是89C51单片机、LCD5110显示屏和微型继电器,通过检测按钮信号,精确控制点焊机变压器的导通时间和两次焊接的间隔时间。变压器导通时间从40毫秒到2600毫秒之间,按20毫秒为一档连续可调,两次焊接的间隔时间则为5秒和10秒两档,这两个参数均通过7+1位拨码开关由用户根据需要动态设置,设置结果即时显示在屏幕上。参见下图:
P10~P16 开关设置点焊时间(20毫秒为1单位,0~127单位) P1^7 工作间隙:0=5秒,1=10秒 *******************************************************************************/#include //#include #include"LCD_5110.h" //包含LCD显示驱动文件 #define u8 unsigned char //单字节 #define u16 unsigned int //双字节 #define u64 unsigned long //四字节 #define SZP1 P1 //P1口为初始设置的数据,低七位为定时数值(0-127)*20ms, //第八位为间隙时间,0=5秒,1=10秒 sbit LED_work = P0^5; //设备工作信号(低电平点焊机接通) sbit LED_read = P0^6; //设备就绪信号(低电平可以工作) sbit work = P0^7; //点焊按钮信号(低电平按下) //–定义全局变量–// u8 sdsj = 0; //设定的点焊单位 u64 shsj = 0; //设定的点焊时间(双字节,以毫秒为单位) u8 wait = 5; //设置的间隔时间(5秒或10秒,根据P1.7确定) u8 time_work = 0; //焊接时间计时(20毫秒/单位) u8 time_wait = 0; //等待时间计时(单位秒) bit time_1s = 0; //秒信号 bit time_20ms = 0; //20毫秒信号 bit flag = 0; //定时工作标志(0=待机或间隔,1=正在工作 /******************************************************************************* 函 数 名 : ReadSet 函数功能 : 读设置并显示 输 入 : 无 输 出 : 无 *******************************************************************************/ void ReadSet(void) { sdsj = SZP1; //从P1口读入一个字节的数据 if (sdsj>127) wait = 10; //最高位1,间隔时间=10秒 else wait = 5; LCD_write_val(27,4,2,wait);//显示设定的间隔时间 sdsj = (sdsj & 0x7f) + 3; //取低7位定时值再加3(60毫秒) shsj = sdsj * 20; //20毫秒基本单位 LCD_write_val(27,2,4,shsj);//显示设定的点焊时间 } /******************************************************************************* 函 数 名 : timehand函数功能 : 20毫秒处理函数,即每隔20毫秒处理一次输 入 : 无输 出 : 无 *******************************************************************************/ void TimeHand(void) { if (flag == 0) //待机状态 { if (work == 0) //收到点焊按钮信号 { flag = 1; //设置工作标志 time_work = sdsj;//取设定时间 LED_work = 0; //开通工作电源 LED_read = 1; //关闭等待信号灯 } else //无点焊按钮信号 { ReadSet(); //检查更新设置 } } else //工作状态 { time_work–; if (time_work == 0)//定时时间到 { LED_work = 1; //关闭点焊机电源 LED_read = 1; //取消准备好信号灯 flag = 0; //撤销工作标志 time_wait = wait;//恢复间隔时间 LCD_write_val(61,4,2,time_wait);//显示剩余间隔时间 } } }/******************************************************************************* 函 数 名 : 函数功能 : T0中断服务函数 输 入 : 无 输 出 : 无 *******************************************************************************/ void InterruptTimer0() interrupt 1 { static u8 i = 0; //毫秒 static u8 j = 0; //20毫秒 TH0 = 0xFC; //重新加载初值,定时1ms TL0 = 0x66; i++; if (i > 19) //20毫秒计时到 { i = 0; time_20ms = 1; //置20毫秒标志 j++; if (j > 49) //1秒 { j = 0; time_1s = 1; //置1秒标志 } } } /******************************************************************************* 函 数 名 : main 函数功能 : 主函数 输 入 : 无 输 出 : 无 *******************************************************************************/ void main(void) { //设置初始屏幕显示 u8 i, x ,y; LED_work = 1; //测试 LED_read = 1; LCD_init(); //初始化5110屏幕 x = 8; //显示的起始位置 y = 0; for (i = 0; i < 5; i++)//显示“电子点焊机” { 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(); //读取设定定时时间并显示 LCD_write_val(61,4,2,time_wait);//显示剩余间隔时间 LED_read = 0; //显示准备好信号灯 TMOD = 0x01; //设置T0为模式1 // TH0 = 0xF8; //为T0赋初值0xF8CD,定时2ms // TL0 = 0xCD; TH0 = 0xFC; //为T0赋初值0xFC67,定时1ms TL0 = 0x66; // TH0 = 0xFC; // TL0 = 0xC3; //为T0赋初值0xFA02,定时1ms ET0 = 1; //开T0中断 TR0 = 1; //启动定时器0 EA = 1; //开总中断 while(1) { if (time_1s == 1) //每秒处理 { time_1s = 0; //重置秒标志 if (time_wait > 0) { time_wait–; if (time_wait == 0) { LED_read = 0;//显示就绪信号 } LCD_write_val(61,4,2,time_wait);//显示剩余间隔时间 } else { if (LED_work == 1) { LED_read = ~LED_read;//等待时每秒闪一次 } } } if (time_20ms == 1) { time_20ms = 0; //重置20毫秒标志 if (time_wait == 0) { TimeHand(); //调用20毫秒处理程序 } } } } 鉴于篇幅有限,只能写以上部分代码 最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步, 如果需要完整代码或设计文件,请加QQ分享群,本博客所有代码开源下载,或私信我,看到后会第一时间回复。 谢谢! 祝大家早日成为单片机大神! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |