用的雙組開關電源啊,一組5V,一組24V,一個淘晶馳串口觸摸屏。
控制板也換了,電源也換了,伺服電機改成了步進電機。
變慢的時候速度剛好差不多正常時候的一半速度。
正常伺服電機700轉(zhuǎn)左右,變慢的時候速度350轉(zhuǎn)左右,
重新開機又正常。每天不定時發(fā)生,偶爾一天好的。
咨詢STC梁工說程序的問題,一共有四臺機器。
另外三臺正常,這一臺有問題的多了兩個繼電器。
其他程序都
/***機械手自動調(diào)試L716 CODE 3614 2021 12 25********/
/***原點進料,右移回原點 進料檢測8次消抖動 ***********/
#include <REG52.H> //開自動先頂退
#include <intrins.h> //保壓時間
#include <string.h>
#include "stdio.h"
#include <stdlib.h>
#define uint unsigned int
#define uchar unsigned char
bit Up_XData=0; //原點更新標志,X發(fā)生中斷置一,回主程序更新X軸位置
sbit Led=P5^4; //EEPROM寫指示
sbit Auto_Led=P5^5; //自動運行指示
sbit CP1=P2^6; //
sbit DIR1=P2^7; //
sbit UP=P1^0; /****頂進輸出信號****/
sbit DOWN=P1^1; /****頂退輸出信號****/
sbit Valve=P1^2; /****料閘****/
sbit OUT5=P1^3; //
sbit OUT6=P1^4; //
sbit OUT7=P1^5; //
sbit OUT8=P1^6; //
sbit OUT9=P1^7; //
sbit S1=P3^2; /***伺服電機零點賦值****/
sbit S2=P3^3; /***伺服電機右限位****/
sbit INTPUTA=P3^4; /***工位A進料檢測****/
sbit INTPUTB=P3^5; /***工位B進料檢測****/
sbit INTPUTA1=P3^6; /***工位A1空位檢測****/
sbit INTPUTB1=P3^7; /***工位B1空位檢測****/
sbit INTPUT1=P2^0; /***按鈕開自動****/
bit ZERO_FLAG; /*零點標志01*/
uchar i,k; //循環(huán)總變量i
#define CMD_IDLE 0 //空閑模式
#define CMD_READ 1 //IAP字節(jié)讀命令
#define CMD_PROGRAM 2 //IAP字節(jié)編程命令
#define CMD_ERASE 3 //IAP扇區(qū)擦除命令
#define ENABLE_IAP 0x82 //if SYSCLK<20MHz
#define IAP_ADDRESS 0x0400 //時間 EEPROM首地址
bit manu; /****手動標志位 0 1****/
bit MOTORRUN=0; //電機運行標志
bit Signauto; //*檢測接近開關自動運行標志*/
typedef unsigned char BYTE;
typedef unsigned int WORD;
uint FLAG_S;
static uint ScaleFactor; //比例系數(shù)
static uint vala; //歸零位置
static uint val0,val1,val2,val3,val4; /*0產(chǎn)量計數(shù)器1設定間距2頂進時間3頂退時間4電機速度*/
static uint val5,val7; /*5開閘時間7緩沖*/
static uint val6; //6實際位置
static uint val8; //開閘延時,推進輪子進模具
bit Receive_Flag;
uchar kcounter,kstatus; //按鍵計數(shù)標志 按鍵狀態(tài)標志
uint a[10]; //定義數(shù)組a 存儲串口數(shù)據(jù)串
/*------------------------------------------*/
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<2;j++);
}
/*------------------延時子程序------------------------*/
void delay10ms(uint x)
{
uint i, j;
for (i=0;i<x;i++)
for (j=0;j<500;j++);
}
/*------------------延時子程序------------------------*/
void delay100ms(uint x)
{
uint i, j;
for (i=0;i<x;i++)
for (j=0;j<11000;j++);
}
/*----關閉IAP----------------------------*/
void IapIdle()
{
IAP_CONTR = 0; //關閉IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除觸發(fā)寄存器
IAP_ADDRH = 0x80; //將地址設置到非IAP區(qū)域
IAP_ADDRL = 0;
}
/*-從ISP/IAP/EEPROM區(qū)域讀取一字節(jié)-*/
BYTE IapReadByte(WORD addr)
{
BYTE dat; //數(shù)據(jù)緩沖區(qū)
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_READ; //設置IAP命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_TRIG = 0x5a; //寫觸發(fā)命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發(fā)命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
dat = IAP_DATA; //讀ISP/IAP/EEPROM數(shù)據(jù)
IapIdle(); //關閉IAP功能
return dat; //返回
}
/*-寫一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域-*/
void IapProgramByte(WORD addr, BYTE dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_PROGRAM; //設置IAP命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_DATA = dat; //寫ISP/IAP/EEPROM數(shù)據(jù)
IAP_TRIG = 0x5a; //寫觸發(fā)命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發(fā)命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*---扇區(qū)擦除---------------*/
void IapEraseSector(WORD addr)
{
IAP_CONTR = ENABLE_IAP; //使能IAP val=IapReadByte(IAP_ADDRESS+1);
IAP_CMD = CMD_ERASE; //設置IAP命令
IAP_ADDRL = addr; //設置IAP低地址
IAP_ADDRH = addr >> 8; //設置IAP高地址
IAP_TRIG = 0x5a; //寫觸發(fā)命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發(fā)命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/***********************************/
void red_eeprom(void)
{
uint m,n;
m=IapReadByte(IAP_ADDRESS+0); //設定間距高八位
n=IapReadByte(IAP_ADDRESS+1); //設定間距低八位
val1=m*256+n; //設定間距
m=IapReadByte(IAP_ADDRESS+2); //電機速度高八位
n=IapReadByte(IAP_ADDRESS+3); //電機速度低八位
val4=m*256+n; //電機速度
m=IapReadByte(IAP_ADDRESS+4); //比例系數(shù)高八位
n=IapReadByte(IAP_ADDRESS+5); //比例系數(shù)低八位
ScaleFactor=m*256+n; //比例系數(shù)
m=IapReadByte(IAP_ADDRESS+6); //頂進時間高八位
n=IapReadByte(IAP_ADDRESS+7); //頂進時間低八位
val2=m*256+n; //頂進時間
m=IapReadByte(IAP_ADDRESS+8); //頂退時間高八位
n=IapReadByte(IAP_ADDRESS+9); //頂退時間低八位
val3=m*256+n; //頂退時間
m=IapReadByte(IAP_ADDRESS+10); //開閘時間高八位
n=IapReadByte(IAP_ADDRESS+11); //開閘時間低八位
val5=m*256+n; //開閘時間
m=IapReadByte(IAP_ADDRESS+12); //歸零位置高八位
n=IapReadByte(IAP_ADDRESS+13); //歸零位置低八位
vala=m*256+n;
val8=IapReadByte(IAP_ADDRESS+14); //
Led=1;
}
/*************寫參數(shù)到EEPROM*******************************/
void Write_EepromTime()
{
IapEraseSector(IAP_ADDRESS); //扇區(qū)擦除
IapProgramByte(IAP_ADDRESS+0,val1/256); /*設定間距高八位*/
IapProgramByte(IAP_ADDRESS+1,val1%256); /*設定間距低八位*/
IapProgramByte(IAP_ADDRESS+2,val4/256); /*電機速度高八位*/
IapProgramByte(IAP_ADDRESS+3,val4%256); /*電機速度低八位*/
IapProgramByte(IAP_ADDRESS+4,ScaleFactor/256);/*比例系數(shù)高八位*/
IapProgramByte(IAP_ADDRESS+5,ScaleFactor%256);/*比例系數(shù)低八位*/
IapProgramByte(IAP_ADDRESS+6,val2/256); /*頂進時間高八位*/
IapProgramByte(IAP_ADDRESS+7,val2%256); /*頂進時間低八位*/
IapProgramByte(IAP_ADDRESS+8,val3/256); /*頂退時間高八位*/
IapProgramByte(IAP_ADDRESS+9,val3%256); /*頂退時間低八位*/
IapProgramByte(IAP_ADDRESS+10,val5/256); /*開閘時間高八位*/
IapProgramByte(IAP_ADDRESS+11,val5%256); /*開閘時間低八位*/
IapProgramByte(IAP_ADDRESS+12,vala/256); /*歸零位置高八位*/
IapProgramByte(IAP_ADDRESS+13,vala%256); /*歸零位置低八位*/
IapProgramByte(IAP_ADDRESS+14,val8%256); /*開閘延時低八位*/
Led=1;
}
/*************關所有輸出*******************************/
void reset_io()
{
P1M0=0X00;
P1M1=0X00;
P2M0=0X00;
P2M1=0X00;
P3M0=0X00;
P3M1=0X00;
P5M0=0X00;
P5M1=0X00;
CP1=1; //
DIR1=1; //
UP=1; /****頂進輸出信號****/
DOWN=1; /****頂退輸出信號****/
S1=1; /***伺服電機限位*2016 5 14 5.5改1.7****/
S2=1;
INTPUT1=1; //
}
/****************按鍵計數(shù)器狀態(tài)寄存器歸零*************/
void RstKey()
{
kcounter=0; //按鍵計數(shù)器歸零
kstatus=0; //狀態(tài)寄存器歸零
}
/*****************按鍵低電平檢測函數(shù)*****************/
void LowVoltKey(void) //按鍵計數(shù)器狀態(tài)標志加一
{
kcounter++;
kstatus++;
_nop_(); //延時
}
/*****************按鍵高電平檢測函數(shù)*****************/
void HighVoltKey(void) //按鍵計數(shù)器加一 狀態(tài)標志歸零
{
kcounter++; //按鍵計數(shù)器加一
kstatus=0; //按鍵狀態(tài)標志歸零
_nop_(); //延時
}
/*------------page 0頁面顯示---------------------*/ //page0 n0設定間距 n3電機速度
void disdata_a()//
{
red_eeprom();
printf("n0.val=%d\xff\xff\xff",val1); //設定間距
printf("n0.val=%d\xff\xff\xff",val1); //設定間距
printf("n2.val=%d\xff\xff\xff",val0); //產(chǎn)量
printf("n3.val=%d\xff\xff\xff",val4); //電機速度
if(ZERO_FLAG==1)
{
val6=9999;
}
printf("n1.val=%d\xff\xff\xff",val6); //實際位置
}
/*------------page 1頁面顯示---------------------*/
void disdata_b()//
{
red_eeprom();
printf("n0.val=%d\xff\xff\xff",ScaleFactor); //比例系數(shù)
printf("n0.val=%d\xff\xff\xff",ScaleFactor); //比例系數(shù)
printf("n1.val=%d\xff\xff\xff",val2); //頂進時間
printf("n2.val=%d\xff\xff\xff",val3); //頂退時間
printf("n3.val=%d\xff\xff\xff",val5); //開閘時間
printf("n5.val=%d\xff\xff\xff",vala); //歸零位置
}
/*------------page 2頁面顯示---------------------*/
void disdata_c()//
{
printf("n1.val=%d\xff\xff\xff",val6); //實際位置
printf("n1.val=%d\xff\xff\xff",val6); //實際位置
printf("n0.val=%d\xff\xff\xff",val8); //開閘延時時間
}
/*************手動電機左移歸零****/
void Zero_Left() //
{
DOWN=0; //頂退開啟
delay100ms(val3); //頂退時間
DOWN=1; //頂退關閉
DIR1=0;
MOTORRUN=1;
while(MOTORRUN) //外部中斷關閉標志位
{
CP1=0;
delay(2);
CP1=1;
delay(2);
if(ZERO_FLAG==0)
MOTORRUN=0;
}
}
/*************手動電機右移歸零****/
void Zero_Right() //
{
DOWN=0; //頂退開啟
delay100ms(val3); //頂退時間
DOWN=1; //頂退關閉
DIR1=1;
MOTORRUN=1;
while(MOTORRUN) //回原點釋放按鍵電機停止
{
CP1=0;
delay(2); //
CP1=1;
delay(2); //
if(ZERO_FLAG==0)
MOTORRUN=0;
}
DIR1=1; //
}
/*************手動電機左移****/
void Motor_Left() //
{
DIR1=0;
MOTORRUN=1;
while(MOTORRUN)
{
for(k=0;k<ScaleFactor;k++) //運行一個比例系數(shù)周期
{
CP1=0;
delay(2);
CP1=1;
delay(2);
}
val6=val6+1;
if(val6==val1) //等于0 限位
MOTORRUN=0; //關電機循環(huán)標志
}
printf("n1.val=%d\xff\xff\xff",val6); //實際位置
OUT9=1;
}
/*************手動電機右移****************/
/*************外部中斷0使能停止***********/
void Motor_Right() //
{
DIR1=1;
while(ZERO_FLAG) //零點標志
{
CP1=0;
delay(2);
CP1=1;
delay(2);
}
val6=0;
printf("n1.val=%d\xff\xff\xff",val6); //實際位置
DIR1=1; //
OUT9=1;
}
/*----------產(chǎn)量加一-----------------*/
void totaladd( )
{
val0=val0+1;
if(val0>9999) /*大于999*/
{
val0=0; /*歸零*/
}
}
/*----------------自動運行程序----------------*/
//1:原點歸零,賦值中斷位置參數(shù),機器回A點
//2:自動,檢測A點軸承到位,未到位開氣針,關氣針
//3:移動臺板到B點,開氣針,檢測B點軸承到位,未到位開氣針,關氣針。
//4:待機 檢測兩個軸承接近開關,都失電開始第二步動作
//5:檢測B點軸承到位,未到位開氣針,關氣針。
//6:移動臺板到A點,開氣針,檢測A點軸承到位,未到位開氣針,關氣針。
//7:待機 檢測兩個軸承接近開關,都失電開始循環(huán)
void autorun()
{
DOWN=0; //頂退開啟
delay100ms(val3); //頂退時間
DOWN=1; //頂退關閉
while(manu) //自動循環(huán),檢測到手動中斷退出循環(huán)
{
Signauto=1; /*工位A進料低電平檢測無輸入為1,永久循環(huán)*/
FLAG_S=5; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
while(Signauto) /*工位一檢測標志無輸入為1,永久循環(huán)*/
{
//工位A進料檢測
Valve=0; //開氣閥
RstKey();
for(;kcounter<8;) //按鍵循環(huán)8次
{
if(!INTPUTA) //工位A進料低電平檢測
{
LowVoltKey(); //低電平檢測到物料
delay(2);
}
else if(~!INTPUTA) //工位B進料高電平檢測
{
HighVoltKey();
delay(2);
}
}
if(kstatus>=3) /*按鍵狀態(tài)標志大于等于3為有效值*/
{ //檢測到低電平,工位料滿
delay100ms(val8); //延時等輸送帶推進到位
Signauto=0; /*行程輸入信號連續(xù)檢測到3次Signauto=0退出循環(huán)*/
}
}
OUT5=0; //輸送帶反轉(zhuǎn)
delay100ms(val8); //輸送帶反轉(zhuǎn)延時
OUT5=1;
FLAG_S=6; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
Valve=1; //關氣閥
FLAG_S=1; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
//工位A進料檢測結束
Motor_Left(); //左 移 DIR1=1;
//工位B進料檢測開始
Valve=0; //開氣閥
RstKey(); //按鍵復位
Signauto=1; /*行程輸入信號檢測標志無輸入為1,永久循環(huán)*/
FLAG_S=6; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
while(Signauto) /*工位B檢測標志無輸入為1,永久循環(huán)*/
{
RstKey();
for(;kcounter<8;) //按鍵循環(huán)8次
{
if(!INTPUTB) //工位B進料低電平檢測
{
LowVoltKey(); //低電平kcounter大于5退出循環(huán)
delay(2);
}
else if(~!INTPUTB) //工位B進料高電平檢測
{
HighVoltKey();
delay(2);
}
}
if(kstatus>=3) /*按鍵狀態(tài)標志大于等于3為有效值*/
{
delay100ms(val8); //延時等輸送帶推進到位
Signauto=0; /*行程輸入信號連續(xù)檢測到3次Signauto=0退出循環(huán)*/
}
}
OUT5=0; //輸送帶反轉(zhuǎn)
delay100ms(val8); //輸送帶反轉(zhuǎn)延時
OUT5=1;
Valve=1; //關氣閥
FLAG_S=2; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
//右 移 使用外中斷
EX0=1; //開外部中斷0
ZERO_FLAG=1; //
FLAG_S=2; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
Motor_Right();
FLAG_S=3; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
delay100ms(val2); //頂出時間
UP=0; //頂出軸承
DOWN=1; //
delay100ms(val2); //頂出時間
//工位AB軸承取出檢測,都是低電平物料取出,頂退左移 常閉開關
RstKey(); //
for(;kcounter<8;) //按鍵循環(huán)8 次
{
if(!INTPUTA1&&!INTPUTB1) //工位AB頂出軸承信號檢測
{ //常閉開關
LowVoltKey();
}
else
kcounter=0; //無限循環(huán)
}
FLAG_S=4; //1 左 移 2右 移 3頂 進 4頂 退 5開 閘 6關 閘 7待 機
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
UP=1; //頂出關閉
DOWN=0; //頂退開啟
delay100ms(val3); //頂退時間
DOWN=1; //頂退關閉
totaladd();
printf("n2.val=%d\xff\xff\xff",val0/2); //產(chǎn)量
}
}
/*------------初始化串口---------------------*/
void InitUart()
{
SCON=0X50;
//8位數(shù)據(jù),可變波特率
AUXR|=0x01; //串口1選擇定時器2為波特率發(fā)生器
AUXR|=0X04; //定時器2時鐘為Fosc,即1T
T2L=0XE0; //設置定時器處置 110592》9600
T2H=0XFE; //設置定時器處置 110592》9600
AUXR|=0X10; //啟動定時器2
TI=1; //
ES=1; //
EA=1; //
}
/*×--------UART 中斷服務程序-------------------**/
/**×**把接收到的數(shù)據(jù)存進數(shù)組a[i]**i開機初始化****/
/***×*接收到觸摸屏結束碼Receive_Flag標志位置1****/
/****×主程序檢測到標志碼=1判斷指令功能***********/
void Uart() interrupt 4 using 1
{
if(RI)
{
if(SBUF==0XFA||SBUF==0XFF) //觸摸屏結束碼
{
Receive_Flag=1; //接收數(shù)據(jù)標志置一
RI=0; //
i=0; //數(shù)組計數(shù)器歸零
}
else
{
a[i]=SBUF; //數(shù)組下標位置的數(shù)據(jù)等于SBUF
RI=0; //
i++;
}
}
if(Receive_Flag==1) //關手動伺服電機工作
{
if(a[0]==0XE0) //觸摸屏放開左移右移歸零鍵
{
if(a[1]==0XA8) //
{
Receive_Flag=0; //串口中斷接收標志置零
i=0; //數(shù)組計數(shù)器歸零
MOTORRUN=0; //關伺服電機
OUT9=0; //運行標志manu 置0
}
}
else if(a[0]==0XA0&&a[1]==0X00) //觸摸屏發(fā)手動信號
{
manu=0;
}
}
}
/**************原點歸零**************************/
void exint0() interrupt 0 //INT0中斷入口
{
RstKey(); //按鍵復位
if(ZERO_FLAG==1)
{
if(!S1) //中斷入口
{
for(;kcounter<5;) //按鍵循環(huán)5次
{
if(!S1) //中斷入口低電平
{
LowVoltKey(); //按鍵低電平 計數(shù)器加一狀態(tài)標志加一
}
else if(~!S1) //中斷入口高電平
{
HighVoltKey(); //按鍵計數(shù)器加一 狀態(tài)標志歸零
}
}
if(kstatus>=3) /*按鍵狀態(tài)標志大于等于3為有效值*/
{
EX0=0; //關外部中斷0
ZERO_FLAG=0;
val6=vala; //伺服電機零點 實際位置
delay(200);
Up_XData=1; //原點更新標志
}
}
RstKey(); //按鍵復位
}
}
/*************************************************/
void main( ) /*主程序開始*/
{
reset_io();
IT0=1; //設置INT0的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
EX0=1; //使能INT0中斷
Led=0;
OUT7=0; //
delay10ms(3000); //延時(30)等觸摸屏先啟動
AUXR=0X80; //STC系列的1T 設置
TMOD=0X01;
P_SW1=0x00; //RXD/P3.0, TXD/P3.1
Receive_Flag=0;
InitUart(); //初始化串口
printf("0XFF,0XFF,0XFF");
delay10ms(30); //延時
disdata_a();
delay10ms(30); //延時
disdata_a();
i=0; //數(shù)據(jù)接收計數(shù)器等于0
OUT7=1; //
val6=9999; //未回原點,禁止自動
printf("n1.val=%d\xff\xff\xff",val6);
ZERO_FLAG=1;
while(1) //INTPUT1
{
if(Up_XData==1) //X軸原點更新標志為1,刷新X軸位置
{
Up_XData=0;
printf("n1.val=%d\xff\xff\xff",val6); //伺服電機零點 實際位置
}
/***********************************************/
if(Receive_Flag==1)
{
Receive_Flag=0; //重新接收
if(a[0]==0XE0)
{
if(a[1]==0XA1) //給單片機發(fā)頂 進信號
{
UP=0; //頂 進
}
else if(a[1]==0XA2) //給單片機發(fā)頂 退信號
{
DOWN=0;
}
else if(a[1]==0XA3) //開 閘
{
Valve=0;
}
else if(a[1]==0XA4) //關 閘
{
Valve=1;
}
else if(a[1]==0XA5) //右移
{
OUT9=0;
Motor_Right();
}
else if(a[1]==0XA6) //左移
{
OUT9=0;
Motor_Left();
}
else if(a[1]==0XA7) //關頂進頂退
{
UP=1; //頂 進
DOWN=1;
} //
else if(a[1]==0XBA) //右移歸零
{
Zero_Right();
} //
else if(a[1]==0XBB) //左移歸零
{
Zero_Left();
}
}
else if(a[0]==0XE1) //出廠數(shù)據(jù)恢復
{
if(a[1]==0XA1) //
{
delay10ms(1);
disdata_a(); //page0 n0設定間距 n3電機速度
}
else if(a[1]==0XA2) //
{
delay10ms(1);
disdata_b(); //page1 n0比例系數(shù) n1頂進時間 n2頂退時間 n3開閘時間
}
else if(a[1]==0XA3) //
{
delay10ms(1);
disdata_c(); //page2 n0 實際位置
}
}
else if(a[0]==0XC0) //
{
if(a[1]==0X01) //
{
val1=a[3]*256+a[2]; //設定間距
printf("n4.val=%d\xff\xff\xff",val1); //返回數(shù)據(jù)核對
}
else if(a[1]==0X02) //
{
val4=a[3]*256+a[2]; //電機速度
printf("n4.val=%d\xff\xff\xff",val4); //返回數(shù)據(jù)核對
}
else if(a[1]==0X03) //
{
ScaleFactor=a[3]*256+a[2]; //比例系數(shù)
printf("n4.val=%d\xff\xff\xff",ScaleFactor); //返回數(shù)據(jù)核對
}
else if(a[1]==0X04) //
{
val2=a[3]*256+a[2]; //頂進時間
printf("n4.val=%d\xff\xff\xff",val2); //返回數(shù)據(jù)核對
}
else if(a[1]==0X05) //
{
val3=a[3]*256+a[2]; //頂退時間
printf("n4.val=%d\xff\xff\xff",val3); //返回數(shù)據(jù)核對
}
else if(a[1]==0X06) //
{
val5=a[3]*256+a[2]; //頂出距離
printf("n4.val=%d\xff\xff\xff",val5); //返回數(shù)據(jù)核對
}
else if(a[1]==0X07) //
{
vala=a[3]*256+a[2]; //歸零位置
printf("n4.val=%d\xff\xff\xff",vala); //返回數(shù)據(jù)核對
}
else if(a[1]==0X08) //
{
val8=a[3]*256+a[2]; //開閘延時 觸摸屏page2
printf("n2.val=%d\xff\xff\xff",val8); //返回數(shù)據(jù)核對
}
Led=0;
Write_EepromTime();
delay10ms(500); //
}
else if(a[0]==0XB0) //手動半自動全自動
{
if(a[1]==0XA1) //手動
{
Auto_Led=1; //
manu=0; //
}
else if(a[1]==0XA2) //半自動
{
if(ZERO_FLAG==0) //
{
Auto_Led=1; //
manu=1; //
autorun(); //半自動自動運行
}
}
}
}
///////////////////////////
RstKey(); //按鍵自動
for(;kcounter<5;) //按鍵循環(huán)5次
{
if(!INTPUT1) //按鍵低電平
{
LowVoltKey(); //按鍵低電平 計數(shù)器加一狀態(tài)標志加一
}
else if(~!INTPUT1) //按鍵高電平
{
HighVoltKey(); //按鍵計數(shù)器加一 狀態(tài)標志歸零
}
}
if(kstatus>=3) /*按鍵狀態(tài)標志大于等于3為有效值*/
{
Auto_Led=0; //
manu=1; //自動循環(huán) 運行標志置1
autorun();
}
}
} //L716 CODE 3614 2021 12 25
|