|
楼主 |
发表于 2021-11-5 07:52:52
|
显示全部楼层
//5.4V 1500F 电容点焊机程序
//8脚 STC15F104W 3档调时间(20ms,50ms,100ms)试验证明5ms及以上继电器才正常工作,场效应管的未试验。2021.11.5
//要求:用加速,减速,停这3个遥控器手柄里的按键来控制每次的点焊时间(硬件用场效应管或者用汽车150A的继电器作开关来控制通断)
#include<reg52.h> //代入头文件//
#include <intrins.h> // 用空操作 _nop_ 时要加这句//
#define ulong unsigned long //宏定义变量类型 0----4294967295/
#define uint unsigned int //宏定义变量类型 0----65535/
#define uchar unsigned char// 宏定义变量类型 0-255/
uchar jlu; //几率-----------------=======
uint t00,b00,t01,b01; //X0输入滤波变量
uint t10,b10,t11,b11; //X1输入滤波变量
uint t20,b20,t21,b21; //X2输入滤波变量
uint b1,b2,b3,k1,k2,k3,t1,t2,t3; //标志量
uint lbcs=5; //0--65535,输入滤波常数,可以为5到10毫秒,长按用300到700毫秒,一改全改。
sfr P3M1=0xB1; //A//
sfr P3M0=0xB2; //B//P3口特殊寄存器声明 sfr P3M1=0xb1; sfr P3M0=0xb2; B可用小写b吗?
// P3M1=0x0; //C//
// P3M0=0x4; // D// 3.2脚为推挽输出,其他是准双向口,这两句放在主程序里
// 如果全是准双向口,上面ABCD4句可以不要
sbit X0=P3^3; //减速 D0 // 3个输入
sbit X1=P3^4; //停 D1
sbit X2=P3^5; //加速 D2
sbit Y0=P3^2; //1个输出
void main( )//主程序
{
TMOD=0x01; // TMOD=0x11;//设置定时器0为工作方式1//
TH0=(65536-1000)/256; //12MHZ,1MS一次中断,商//
TL0=(65536-1000)%256; //低四位装数=余数//
EA=1; //开总中断//
ET0=1; //开定时器0中断
TR0=1;//启动定时器0//397//
// X0=1;//把P3.3 复位脚 RST OUT-LOW 设置为高电平==========????????????????????????
Y0=0;//出0,停止
P3M1=0x0;// 高8位为0000 0000
P3M0=0x4; //低8位为0000 0100 3.2脚为推挽输出,7脚串联1K电阻到地,有4毫安电流。其他是准双向口串联1K电阻到地只有13微安 ( 写成 P3M1=0x00; P3M0=0x40;不行,已经验证了)。
while(1)//大循环
{
jlu=0;//几率------
//以下是你的编程区=========================================
//以下你不要编程=========================================
while(jlu<1) //几率-------
{_nop_(); _nop_(); _nop_(); }
}
}
void exter0() interrupt 1 //定时器0的中断程序//定时器1的中断程序 void exter1() interrupt 3//
{
TH0=(65536-1000)/256; //重装数12MHz 1000=1ms,如果不重装,默认数是65536,不是想要的10000//
TL0=(65536-1000)%256;
//X0滤波
if(X0==0) {t00++;t01=0;}
if(t00==lbcs){b00=1;b01=0; } //b00=1,就是按下
if(b00==1) t00=0;
if(X0==1) {t01++;t00=0;}
if(t01==lbcs){b01=1;b00=0; } //b01=1,就是松手
if(b01==1) t01=0;
//X1滤波
if(X1==0) {t10++;t11=0;}
if(t10==lbcs){b10=1;b11=0; } //b10=1,就是按下
if(b10==1) t10=0;
if(X1==1) {t11++;t10=0;}
if(t11==lbcs){b11=1;b10=0; } //b11=1,就是松手
if(b11==1) t11=0;
//X2滤波
if(X2==0) {t20++;t21=0;}
if(t20==lbcs){b20=1;b21=0; } //b20=1,就是按下
if(b20==1) t20=0;
if(X2==1) {t21++;t20=0;}
if(t21==lbcs){b21=1;b20=0; } //b21=1,就是松手
if(b21==1) t21=0;
//以下是你的编程区=======================================
if(b00==1){b1=1;k1=0;}
if(b1==1){ if(b01==1)
{
b1=0;
k1=1;
}
}
if(k1==1){ t1++;
if(t1==1000) Y0=1;
if(t1==1020) {Y0=0;
t1=0;
k1=0;
} //k1=0;
}
//X0 P3.3减速 20ms
if(b20==1){b2=1;k1=0;}
if(b2==1){ if(b21==1)
{
b2=0;
k2=1;
}
}
if(k2==1){ t2++;
if(t2==1000) Y0=1;
if(t2==1050) {Y0=0;
t2=0;
k2=0;
} //k2=0;
}
//X2 P3.5加速 50ms
if(b10==1){b3=1;k3=0;}
if(b3==1){ if(b11==1)
{
b3=0;
k3=1;
}
}
if(k3==1){ t3++;
if(t3==1000) Y0=1;
if(t3==1100) {Y0=0;
t3=0;
k3=0;
} //k3=0;
}
//X1 P3.4 停键 100ms
|
|