//******************************************************************************/
//#include "REG51.h"
#define MAIN_Fosc 22118400UL //¶¨ÒåÖ÷ʱÖÓ
#include "math.h"
#include "STC15Fxxxx.H"
#include "oled.h"
#include "eeprom.h"
#include "USER.h"
//#define T1MS (65536-FOSC/12/1000)
//#define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn)
//¶þ½øÖÆ
#define _BIN(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h<<0))
#define _bin _BIN // _bin,_BIN¾ù¿É
//¶þ½øÖÆ
/************* ±¾µØ³£Á¿ÉùÃ÷ **************/
#define Baudrate1 115200UL
#define RX1_Lenth 32 //´®¿Ú½ÓÊÕ»º³å³¤¶È
#define TX1_Lenth 64
u8 TX1_Cnt; //·¢ËͼÆÊý
u8 RX1_Cnt; //½ÓÊÕ¼ÆÊý
bit B_TX1_Busy; //·¢ËÍæ±êÖ¾
u8 idata RX1_Buffer[RX1_Lenth]; //½ÓÊÕ»º³å
u8 TX_write=0;
u8 TX_read =0;
u8 idata RX1_Buffer[RX1_Lenth]; //½ÓÊÕ»º³å
u8 idata TX1_Buffer[TX1_Lenth]; //·¢ËÍ»º³å
void UART1_config(u8 brt); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
//void PrintString1(u8 *puts);
//sbit UART1_485_DE = P2^0;
int add_v;//µØÖ·
/************* **************/
u8 ir,it;
long int jint;//
long int jint2;//
long int jint1;//µ÷ÕûµçλÆ÷ÊäÈëp1.6
long int jinr;//ÍⲿµçλÆ÷ÊäÈëp1.7
int jinr1;//ÍⲿµçλÆ÷ÊäÈëp1.7
int jinr0;
long int jint3;//Ô¶³Ì¿ØÖÆ¿ª¶È
char tj_ma0=0,tj_ma1=0,tj_yc1=0,tj_yc2=0,tj_yc3=0;
long int openv;//¿ªÎ»Öµ
long int closev;//¹ØÎ»Öµ
long int j;
//long int jst1;
int i;
long int jrtem1;
u8 xdata settmp[20];
int xst,xsr;//xst1,xsr1;
signed int j1=0;
signed int j2=0;
int g1=0;
int k1=1,k2=1,k3=1,k10=1,k20=1,k30=1;
char X2B=1;
char modv=0;modv0=0;
char er1=0;
char a1=0,a2=0;
char bz_dz=0;
char bca=0;
int tm10=0;tm20=0;tm12=0;tm22=0;tm11=0;tm21=0,tm30=0,tm31=0;
char ksjv=0;ksjv2=0;ksjv11=0;ksjv12=0;
char x0=0;//³õʼλÖÃ
char x1=0;//¶¨Î»¾«¶È
char x2=0;//network
char x3=0;//¿ªÖйØ
//char x4=0;//¿ª¶È
char x5=0;//ÐÄÌø°ü¿ØÖÆ
char x6=0;//×Ô¶¯±¨ÎÄ¿ØÖÆ
char x7=0;//µØÖ·ÏÔʾ
char jva2=0;ks=0;
int jv1;
int jsv,jsv3,jsv10,jsv30;
int zjsv,zjsv3;
char zdv,zdkzv;
int i_tim;
u8 xdata settmp1[20];
unsigned long tim0=0;
unsigned int tim1=0;
char tim_bz=0;
char jxvop=1;jxvcl=1;
char lcd0=0;
char csv=0;csvbz=0;
int cstmv=0;gntm1=0;gntm2=0;
//char LCD_line0[] = "20220520001";
unsigned int IDV1=0,IDV2=0;//20220--10001
//
unsigned long L1T=0;L2T=0;L3T=0;
char l1_bz=0;l2_bz=0;l3_bz=0;
char tjdz_bz2_b=0,tjdz_bz2_b1=0;
int tjsj=0,tjsj_b=0,tjsj1=0,tjsj_b1=0;
int jdjs_v=1,jdjs_v1=1,jdjs_v10=1,jdjs_v20=1,cs1=1,cs2=1;
char kgsj_jsbz=0;
int kgcs_bz1=0,kgcs_bz2=0;
char kzmd=0;//0Ë«¶¯1µ¥¶¯
char zmbv=0;
char zmbv1=5;
char intisetv=0;//³õʼ»¯ÅжÏ
char xxba,xxbb, xxbc=3 ;
void tm0_isr() interrupt 1 using 1
{
if ( 0==KEY1 ){if (k1>0){k1=k1-1;}}else{k1=20;}
if ( 0==KEY2 ){if (k2>0){k2=k2-1;}}else{k2=20;}
if ( 0==KEY3 ){if (k3>0){k3=k3-1;}}else{k3=20;}
if ( 0==KEY1 ){if (k10>0){k10=k10-1;}}else{k10=1000;}
if ( 0==KEY2 ){if (k20>0){k20=k20-1;}}else{k20=1000;}
if ( 0==KEY3 ){if (k30>0){k30=k30-1;}}else{k30=1000;}
if (jsv10<1500) {jsv10=jsv10+1;}else{jsv10=0;jsv30=1;}//ÐÄÌø°ü¼ÆÊ±
if (jsv<1000) {jsv=jsv+1;}else{jsv=0;jsv3=1;}//ÐÄÌø°ü¼ÆÊ±
if (zjsv<(i_tim*1000)) {zjsv=zjsv+1;}else{zjsv=0;zjsv3=1;}//×Ô¶¯¿ª¹Ø
if (ksjv==1) {tm10++;}//¹ØÊ±¼ä
if (ksjv2==1) {tm20++;}//¿ªÊ±¼ä
if (ksjv11==1) {tm11++;}else{if (tm11>0){tm12=tm11;tm11=0;}}//¹ØÊ±¼ä
if (ksjv12==1) {tm21++;}else{if (tm21>0){tm22=tm21;tm21=0;}}//¿ªÊ±¼ä
if (tim1>(59999)){tim0=tim0+1;tim1=0;if (tim0%10==0 && tim1==0){tim_bz=1;}}else{tim1++;}
if (csv==1&&cstmv<(500)){cstmv++;csvbz=1;}else{csvbz=0;cstmv=0; }
//¹ýŤ±¨¾¯
if ((modv==0 || modv==1)&&X2B==0 && (Y1==0 || Y2==0))
{
if ( abs(jint-jinr)>10){gntm1++;}
if (gntm1>(tm10*10)){bz_dz=1;}
if (bz_dz==1){L1=0;L2=0;L3=0;Y3=0;Y4=0;Y5=0;}
if ( abs(jint-jinr)<10){bz_dz=0;gntm1=0;}
}
//if (abs(jint-jinr)>100){xxba=0;}
//if (abs(jint-jinr)<100){xxba=1;}
if (jxvcl==0 &&closev>(jinr+80)){xxba=0;}
if (jxvcl==0 &&closev<(jinr+80)){xxba=1;}
if (jxvop==0 &&closev<(jinr-80)){xxbb=0;}
if (jxvop==0 &&closev>(jinr-80)){xxbb=1;}
if (xxba==0 || xxbb==0)
{
if (modv==0){zmbv1=8;}
if (modv==1){zmbv1=5;}
if (zmbv<zmbv1){zmbv++;}else{zmbv=0;}
if (zmbv==0)
{
kgsj();
if (abs(jint-jinr)>50 ){jdjs_v10=jdjs_v10*3;jdjs_v20=jdjs_v20*3;jdjs_v=1;jdjs_v1=1; }
else if(abs(jint-jinr)>100 ){jdjs_v10=jdjs_v10*5;jdjs_v20=jdjs_v20*5;jdjs_v=1;jdjs_v1=1;}
else if(abs(jint-jinr)>160 ){jdjs_v10=jdjs_v10*10;jdjs_v20=jdjs_v20*10;jdjs_v=1;jdjs_v1=1;}
if (tj_ma0==1 ||tj_ma1==1||tj_yc1==1||tj_yc2==1||tj_yc3==1)
{
if (tjsj_b<=jdjs_v1){tjsj_b++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj_b=0;tjdz_bz2_b=0;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}
if (tjsj<=jdjs_v20 && tjdz_bz2_b==0){tjsj++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj=0;tjdz_bz2_b=1;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}//Y2
if (tjsj_b1<=jdjs_v){tjsj_b1++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj_b1=0;tjdz_bz2_b1=0;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}
if (tjsj1<=jdjs_v10 && tjdz_bz2_b1==0){tjsj1++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj1=0;tjdz_bz2_b1=1;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}//Y1
}
}
}
else
{
if (xxbc>0){xxbc--;tjdz_bz2_b=1;tjdz_bz2_b1=1;}else{tjdz_bz2_b=0;tjdz_bz2_b1=0;xxbc=3;}
}
}
void main(void)
{
KEY1=1;KEY2=1;KEY3=1;
Y1=1;
Y2=1;
OLED_Init(); //³õʼ»¯OLED
OLED_Clear() ;
AUXR |= 0x80; //¶¨Ê±Æ÷ʱÖÓ1Tģʽ
TMOD &= 0xF0; //ÉèÖö¨Ê±Æ÷ģʽ
TL0 = 0x9A; //ÉèÖö¨Ê±³õÖµ
TH0 = 0xA9; //ÉèÖö¨Ê±³õÖµ
TF0 = 0; //Çå³ýTF0±êÖ¾
TR0 = 1; //¶¨Ê±Æ÷0¿ªÊ¼¼ÆÊ±
ET0=1;
EA=1;
P1ASF = (1<<6) + (1<<7); //P1.6 P1.7×öADC
P1ASF=0xc0;
P1M1 = (0xc0); P1M0 = (0x00); //P1.6 P1.7ÉèÖóɸß×è
ADC_CONTR = 0xE0; //90T, ADC power on
/************* **************³õʼ»¯Êý¾Ý/
/*
openv=260;//98
closev=530;//650
jint2=395;
jint3=jint2;
modv=1;modv0=1;
g1=2;
tm10=300;
tm20=300;
x0=0;
x1=0;
add_v=0;
x5=0;
x6=0;
x7=0;
zdkzv=0;
i_tim=0;
write_cs();
*/
/************* **************/
EEPROM_read_n(0X0,settmp,21);
openv=settmp[0]*256+settmp[1];//98
closev=settmp[2]*256+settmp[3];//650
jint2=settmp[4]*256+settmp[5];
jint3=jint2;
modv=settmp[6];modv0=settmp[6];
if (modv>10){modv=0;}
g1=settmp[7];
tm10=settmp[8]*256+settmp[9];
tm20=settmp[10]*256+settmp[11];
x0=settmp[12];
x1=settmp[13];
add_v=settmp[14];
x5=settmp[15];
x6=settmp[16];
x7=settmp[17];
zdkzv=settmp[18];
i_tim=settmp[19];
EEPROM_read_n(0X200,settmp1,20);
tim0=(settmp1[1]*256+settmp1[2])*256+settmp1[0];
L1T=(settmp1[4]*256+settmp1[5])*256+settmp1[3];
L2T=(settmp1[7]*256+settmp1[8])*256+settmp1[6];
L3T=(settmp1[10]*256+settmp1[11])*256+settmp1[9];
tm22=settmp1[12]*256+settmp1[13];
tm12=settmp1[14]*256+settmp1[15];
IDV1=settmp1[16]*256+settmp1[17];
IDV2=settmp1[18]*256+settmp1[19];
intisetv=settmp1[20];
delay_ms(10);
//if (intisetv!=1){INIT_SET();}
if (g1>10){g1=0;}
if (x0>3){x0=0;}
if (x1>10){x1=1;}
j1=tm20/50;
j2=tm20/50;
//PWM
P_PWM = 0;
P3M1 &= ~(1 << 4); //P3.4 ÉèÖÃÎªÍÆÍìÊä³ö
P3M0 |= (1 << 4);
TR1 = 0; //Í£Ö¹¼ÆÊý
ET1 = 1; //ÔÊÐíÖжÏ
PT1 = 1; //¸ßÓÅÏȼ¶ÖжÏ
TMOD &= ~0x30; //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°
AUXR |= 0x40; //1T
TMOD &= ~0x40; //¶¨Ê±
INT_CLKO |= 0x02; //Êä³öʱÖÓ
TH1 = 0;
TL1 = 0;
TR1 = 1; //¿ªÊ¼ÔËÐÐ
EA = 1;
pwm = PWM_DUTY / 10; //¸øPWMÒ»¸ö³õÖµ£¬ÕâÀïΪ10%Õ¼¿Õ±È
LoadPWM(pwm); //¼ÆËãPWM֨װֵ
//PWM
UART1_config(2); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
//EA = 1; //ÔÊÐí×ÜÖжÏ
//UART1_485_DE=0;
if (x0==1){X1=0;}
if (x0==2){X2=0;}
if (x0==3){X3=0;}
//IDV1=20220;IDV2=10001;
/*
settmp2[0]=IDV%256;
settmp2[1]=(IDV/256)%256;
settmp2[2]=((IDV/256)/256)%256;
settmp2[3]=(((IDV/256)/256)/256)/256;
settmp2[4]=(((IDV/256)/256)/256)%256;
EEPROM_SectorErase(0X400);//²Á³ýEEPROM
delay_ms(100);
EEPROM_write_n(0X400,settmp2,5);//дÈëģʽ
delay_ms(100);
*/
OLED_ShowString(10,2,"SUBITOP",16);
Get_ADC10bitResult(7);
jinr = Get_ADC10bitResult(7);
oled_x();
delay_ms(200);
OLED_Clear();
jinr1 = Get_ADC10bitResult(6);
tm30=tm10*10;
tm31=tm20*10;
while(1)
{
//if (abs(jint-jinr)>65 ){jdjs_v=1;jdjs_v1=1;}else{jdjs_v=jdjs_v0;jdjs_v1=jdjs_v0;}
//if (modv==1){delay_ms(2);}
//jinr = Get_ADC10bitResult(7);
//kgsj();//
/*
OLED_ShowNum(0,6,jinr,4,16);
OLED_ShowNum(50,6,openv,4,16);
OLED_ShowNum(90,6,closev,4,16);
OLED_ShowNum(90,6,jint2,4,16);
OLED_ShowNum(50,6,jint1,4,16);
OLED_ShowNum(90,6,Get_ADC10bitResult(6),4,16);
*/
/**/
//if (modv==0||modv==1){if (bz_dz==1&&g1<9){g1++;}else{g1=settmp[7];}}//¹ýŤµ÷Ϊ×Ô¶¯
if (modv==0||modv==1)
{
if (bz_dz==1&&tm30<tm10*30){tm30++;kgsj_jsbz=1;}//else{tm30=tm10;}
if (bz_dz==1&&tm31<tm20*30){tm31++;kgsj_jsbz=1;}//else{tm31=tm20;}
if (kgcs_bz1>5&&tm30>tm10*10/3){tm30--;kgsj_jsbz=1;}
if (kgcs_bz2>5&&tm31>tm20*10/3){tm31--;kgsj_jsbz=1;}
if (kgsj_jsbz==1){kgsj_jsbz=0;}
}//¹ýŤµ÷Ϊ×Ô¶¯
/************* **************/
oled_s1();
if (zdkzv>0&&x2==0)
{
//zdkzv:1-13,2-12321,3-1231,4-1321
if (zjsv3==1)//×Ô¶¯¿ØÖÆ
{
if (X1==1){X1=0;X3=1;}else{X1=1;X3=0;}
if (zdv<5){zdv++;}else{zdv=1;}
switch(zdv)
{
case 1:X1=0;X2=1;X3=1;break;
case 2:if (zdkzv==2||zdkzv==3){X1=1;X2=0;X3=1;}else {zdv++;} break;
case 3:X1=1;X2=1;X3=0;break;
case 4:if (zdkzv==2||zdkzv==4){X1=1;X2=0;X3=1;}else {X1=0;X2=1;X3=1;zdv=1;}break;
}
zjsv3=0;
}
}
if (jsv3==1&& (modv==1 || modv==0))
{
if (x6==1) {modbus_bw();}//×Ô¶¯±¨ÎÄ
jsv3=0;
}
if (jsv30==1)
{
if (x5==1) {TX1_write2buff(add_v);}//ÐÄÌø°ü
jsv30=0;
}
if (modbus_ex(1)==1)//дµØÖ·
{
add_v=RX1_Buffer[5];
write_cs();
if (x7==1)OLED_ShowNum(45,6,add_v,3,16);
}
if (modbus_ex(2)==1)//ģʽmodv
{
modv=RX1_Buffer[5];
write_cs();
OLED_Clear();
lcd0=0;
}
if (modbus_ex(3)==1)//±ê¶¨
{
modv=2;
ks=1;
OLED_Clear();
}
if (modbus_ex(16)==1)//Çý¶¯g1
{
g1=RX1_Buffer[5];
if (g1<11)write_cs();
}
if (modbus_ex(4)==1)//¾«¶Èx1
{
x1=RX1_Buffer[5];if (x1<10)write_cs();
OLED_ShowNum(35,6,RX1_Buffer[5],4,16);
}
if (modbus_ex(5)==1)//³õʼλÖÃx0
{
x0=RX1_Buffer[5];if (x0<4)write_cs();
}
if (modbus_ex(6)==1)//ÖмäλÖÃxst
{
xst=RX1_Buffer[5];
jint2=xst*(closev-openv)/100+openv+1;
if (jint2>closev){jint2=closev;}
if (jint2<openv){jint2=openv;}
xst=((abs(jint2-openv)*1000/(closev-openv)))/10;
if (((abs(jint2-openv)*1000/(closev-openv)))/10<5){xst=0;}
if (((abs(jint2-openv)*1000/(closev-openv)))/10>100){xst=100;}
write_cs();
}
if (modbus_ex(7)==1)//Ô¶³Ì¿ØÖÆx2
{
x2=RX1_Buffer[5];
x3=0;
if (x2==0){jint3=jint2;}
}
if (x2==1)
{
X1=1;X2=1;X3=1;
if (modv==0||modv==1) if (x7==1)OLED_ShowString(100,6,"net",16); }
else {if (modv==0||modv==1){if (x7==1)OLED_ShowString(100,6," ",16);}}
if (x2==1 && X1==0 && X2==0 && X3==0){x2=0;jint3=jint2;}
if (modbus_ex(8)==1)//¿ª¹Ø¿ØÖÆ
{
x3=RX1_Buffer[5];
}
if (modbus_ex(9)==1&&x2==1)//¿ØÖÆ¿ª¶È
{
//x4=RX1_Buffer[5];
x3=0;
xst=RX1_Buffer[5];
jint3=xst*(closev-openv)/100+openv+1;
if (jint3>closev)jint3=closev;
if (jint3<openv)jint3=openv;
xst=((abs(jint3-openv)*1000/(closev-openv)))/10;
if (((abs(jint3-openv)*1000/(closev-openv)))/10<5){xst=0;}
if (((abs(jint3-openv)*1000/(closev-openv)))/10>100){xst=100;}
}
if (modbus_ex(10)==1)//ÐÄÌø°ü¿ØÖÆ
{
x5=RX1_Buffer[5];if (x5<2)write_cs();
}
if (modbus_ex(11)==1)//×Ô¶¯±¨ÎÄ¿ØÖÆ
{
x6=RX1_Buffer[5];if (x6<2)write_cs();
}
if (modbus_ex(12)==1)//µØÖ·ÏÔʾ
{
x7=RX1_Buffer[5];if (x7<2)write_cs();
if (x7==1){OLED_ShowString(1,6," add:",16);} else {OLED_ShowString(1,6," ",16);}
if (x7==1){OLED_ShowNum(45,6,add_v,3,16); } else {OLED_ShowString(45,6," ",16); }
if (x2==1)
{if (modv==0||modv==1) if (x7==1)OLED_ShowString(100,6,"net",16); }
else {if (modv==0||modv==1){if (x7==1)OLED_ShowString(100,6," ",16);}}
if (modv==0||modv==1){if (x7==0)OLED_ShowString(100,6," ",16);}x3=0;
}
if (modbus_ex(13)==1)//×Ô¶¯¿ØÖÆzdkzv
{
zdkzv=RX1_Buffer[5];if (zdkzv<5)write_cs();
}
if (modbus_ex(14)==1)//×Ô¶¯¿ØÖƼä¸ôi_tim
{
i_tim=RX1_Buffer[5];if (i_tim<256)write_cs();
}
if (modbus_ex(15)==1)//±£´æÊý¾Ý
{
write_fzcs();
}
if (modbus_ex(17)==1)//¿ª¹Ø¿ØÖÆ
{
kzmd=RX1_Buffer[5];
}
if (modbus_zo()==1)//Çå0ÔËÐÐʱ¼ä¡¢¿ª¹Ø´ÎÊý
{
tim0=0;
L1T=0;L2T=0;L3T=0;
write_fzcs();
}
if (modbus_id()==1)//id
{
IDV1=RX1_Buffer[3]*256+RX1_Buffer[4];
IDV2=RX1_Buffer[5]*256+RX1_Buffer[6];
write_fzcs();
}
modbusv();
//*********************************************//
if (tim_bz==1)//10·ÖÖÓ±£´æ
{
write_fzcs();
tim_bz=0;
}
if (modv==0 || modv==1)//01ģʽÏÔʾ
{
if (lcd0==0)
{
OLED_ShowString(1,0," Model:",16);
OLED_ShowString(1,2," Setup:",16);
OLED_ShowString(1,4," Fback:",16);
OLED_ShowString(90,2,"%",16);
OLED_ShowString(90,4,"%",16);
if (modv==0){OLED_ShowString(57,0,"AD ",16);}
if (modv==1){OLED_ShowString(57,0,"SW ",16);}
if (x7==1)OLED_ShowString(1,6," add:",16);
if (x7==1)OLED_ShowNum(45,6,add_v,3,16);
lcd0=1;
}
if (((X1==0&&x2==0)||(x3==1&&x2==1))){xst=0;jint=openv;}
if (((X3==0&&x2==0)||(x3==3&&x2==1))){xst=100;jint=closev;}
OLED_ShowNum(55,2,xst,4,16);
OLED_ShowNum(55,4,xsr,4,16);
}
//ÐźÅÊäÈë¼ì²â
if (modv==0)
{
if ((jint1<50||jint1>1024)&&er1==0){er1=1;jxvop=1;jxvcl=1;}
if (jint1>50&&jint1<1024&&er1==1){jint1 = Get_ADC10bitResult(6);delay_ms(300);er1=0;jxvop=0;jxvcl=0;}
//if (jint1>50&&jint1<1024&&er1==1){jint1 = adv1;delay_ms(300);er1=0;jxvop=0;jxvcl=0;}
if( er1==1){OLED_ShowString(57,0,"AD ER ",16);}else{OLED_ShowString(57,0,"AD ",16);}
}
//
//Îı¾ÏÔʾ
if (modv==2){OLED_ShowString(57,0,"Initial ",16);}
//if (modv==3){OLED_ShowString(57,0,"Grade ",16);}
if (modv==4){OLED_ShowString(57,0,"Position ",16);}
if (modv==5){OLED_ShowString(57,0,"Accuracy ",16);}
if (modv==6){OLED_ShowString(57,0,"Median ",16);}
if (modv==7){OLED_ShowString(57,0,"A-test ",16);}
if (k1>0){a1=0;}
if (k3>0){a2=0;}
//¿ª¹Ø´ÎÊý
if (L1==0 && l1_bz==0){L1T++;l1_bz=1;}
if (L1==1){l1_bz=0;}
if (L2==0 && l2_bz==0){L2T++;l2_bz=1;}
if (L2==1){l2_bz=0;}
if (L3==0 && l3_bz==0){L3T++;l3_bz=1;}
if (L3==1){l3_bz=0;}
//01ģʽѡÔñ
if ((k10==0 &&k3>0&&k2>0)&&modv<2&&a1==0)
{
switch(modv)
{
case 0:modv=1;jint=jint2;a1=1; OLED_Clear();a1=1;lcd0=0;break;
case 1:modv=0;a1=1;OLED_Clear(); a1=1;lcd0=0;break;
default:modv=0;a1=1;OLED_Clear();a1=1;lcd0=0;break;
}
}
if ((k30==0 &&k1>0&&k2>0)&&modv<2&&a2==0)
{
switch(modv)
{
case 0:modv=1;jint=jint2;a1=1; OLED_Clear();a2=1;lcd0=0;break;
case 1:modv=0;a1=1;OLED_Clear(); a2=1;lcd0=0;break;
default:modv=0;a1=1;OLED_Clear();a2=1;lcd0=0;break;
}
}
//
if ((modv==0 || modv==1)&&(k1==0 && k3==0&&k2>0)){modv=2;OLED_Clear() ;}//½øÈë³õʼ»¯²Ëµ¥
//½øÈë²Ëµ¥
if ((k1==0 && k3==0&&k2>0) )
{
if (a1==0){
switch(modv)
{
case 0:modv=2;a1=1;OLED_Clear();break;
case 1:modv=2;a1=1;OLED_Clear();break;
//case 2:modv=3;a1=1;OLED_Clear();break;
case 2:modv=4;a1=1;OLED_Clear();break;
case 4:modv=5;a1=1;OLED_Clear();break;
case 5:modv=6;a1=1;OLED_Clear();break;
case 6:modv=7;a1=1;OLED_Clear();break;
case 7:modv=8;a1=1;OLED_Clear();break;
case 8:modv=9;a1=1;OLED_Clear();break;
case 9:modv=0;a1=1;OLED_Clear();lcd0=0;break;
default:modv=0;a1=1;OLED_Clear();lcd0=0;break;
}
}
}
//
if (modv==4)//³õʼλÖÃ
{
if (k10==0&&k3>0&&k2>0&&a1==0){if (x0>0){x0=x0-1;}a1=1;}
if (k30==0&&k1>0&&k2>0&&a2==0){if (x0<3){x0=x0+1;}a2=1;}
}
if (modv==5)//¾«¶È
{
if (k10==0&&k3>0&&k2>0&&a1==0){if (x1>0){x1=x1-1;}a1=1;}
if (k30==0&&k1>0&&k2>0&&a2==0){if (x1<9){x1=x1+1;}a2=1;}
}
//*/
if (modv==7)
{
if (k10==0&&k3>0&&k2>0){if (i_tim>1){i_tim=i_tim-1;}}
if (k30==0&&k1>0&&k2>0){if (i_tim<255){i_tim=i_tim+1;}}
if (k1==0&&k3>0&&k2==0&&a1==0){if (zdkzv>0){zdkzv=zdkzv-1;}a1=1;}
if (k3==0&&k1>0&&k2==0&&a2==0){if (zdkzv<4){zdkzv=zdkzv+1;}a2=1;}
}
if (modv==2)//³õʼ»¯
{
Y1=0;Y2=1;
if (k1==0 && k2==0&&k3>0){ks=1;Y1=0;Y2=1;}
if ( k3==0 && k2==0&&k1>0){ks=1;Y1=0;Y2=1;}
if ( ks==1)
{
if ( jva2==0)
{
Y1=1;Y2=0;delay_ms(1500);
OLED_ShowString(30,6," Waiting...",16);
Y2=1;Y1=0;openv=Get_ADC10bitResult(7)+1;jint2=openv+abs((closev-openv)/2);
delay_ms(3000);
openv=Get_ADC10bitResult(7)-1;jint2=openv+abs((closev-openv)/2);
delay_ms(300);
jv1=Get_ADC10bitResult(7);
if (abs(openv-jv1)<5){jva2=1;Y1=1;delay_ms(300);Y1=1;}
//jva2=1;
}
if (jva2==1)
{
Y1=1;Y2=0;delay_ms(300);closev=Get_ADC10bitResult(7)-0;jint2=openv+abs((closev-openv)/2);
delay_ms(3000);
closev=Get_ADC10bitResult(7)-1;jint2=openv+abs((closev-openv)/2);
delay_ms(1000);
jv1=Get_ADC10bitResult(7);
if (abs(closev-jv1)<5){jva2=2;Y2=1;tm10=0;delay_ms(300);Y2=1;}
//jva2=2;
}
if(jva2==2)//¹ØÊ±¼ä
{
if (Y2==1){Y1=0;ksjv=1;}
if(abs(openv-Get_ADC10bitResult(7))<10){Y1=1;ksjv=0;jva2=3;tm20=0;delay_ms(2000);Y1=1;}
//jva2=3;
}
if(jva2==3)//¿ªÊ±¼ä
{
Y1=1;
if (Y1==1){Y2=0;ksjv2=1;}
if(abs(closev-Get_ADC10bitResult(7))<10){ksjv2=0;ks=0;jva2=0;delay_ms(1500);Y2=1;
closev=closev+0;
write_cs();
tm30=tm10;
tm31=tm20;
OLED_ShowString(30,6," OK! ",16); delay_ms(500);modv=modv0;OLED_Clear();lcd0=0;
}
}
}
}
/*
if (modv==3)//Çý¶¯µÈ¼¶
{
if (k10==0&&k3>0&&k2>0&&a1==0){if (g1>0){g1=g1-1;}a1=1;}
if (k30==0&&k1>0&&k2>0&&a2==0){if (g1<10){g1=g1+1;}a2=1;}
}
*/
if (k20==0&&k10>0&&k30>0&&bca==0)//±£´æÉèÖÃ
{
bca=1;
OLED_ShowString(30,6," Waiting...",16);
write_cs();
Y1=1;Y2=1;
OLED_ShowString(30,6," OK ",16);
}
if (k20>0)bca=0;
if (modv==6)//ÖмäλÉèÖÃ
{
if (jint2<openv){jint2=openv+(closev-openv)/2;}
if (jint2>closev){jint2=openv+(closev-openv)/2;}
if(k10==0&&k2>0&&k3>0&&jint2>openv){jint2=jint2-1;}
if(k30==0&&k2>0&&k1>0&&jint2<closev){jint2=jint2+1;}
//xst=((abs(jint2-openv)*1000/(closev-openv)))/10;
//if (((abs(jint2-openv)*1000/(closev-openv)))/10<5){xst=0;}
//if (((abs(jint2-openv)*1000/(closev-openv)))/10>100){xst=100;}
xst=((jint2-openv)*1000/(closev-openv))/10;
if (xst<5){xst=0;}
if (xst>100){xst=0;}
}
//³õʼλ
if (modv==0 && X2B==1)
{
if ( abs(jinr1-jinr0)>10) {X2=1;X1=1;X3=1;X2B=0;}
if ( (abs(jint3-jinr0)>10) && x2==1) {X2=1;X1=1;X3=1;X2B=0;}
if (X1==0 ){X2=1;X3=1;X2B=0;}
if (X2==0 ){X1=1;X3=1;X2B=0;}
if (X3==0 ){X2=1;X1=1;X2B=0;}
if (x3>0&& x2==1){X2B=0;}
}
if (modv==1 && X2B==1)
{
if (x3>0&& x2==1){X2B=0;}
if (X1==0 ){X2=1;X3=1;X2B=0;}
if (X2==0 ){X1=1;X3=1;X2B=0;}
if (X3==0 ){X2=1;X1=1;X2B=0;}
}
//
//È«¿ªÈ«¹Ø²Ù×÷X1X3
if (modv==0 || modv==1)
{
if (modv==0)
{
jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-200ul)))/10000ul);
if (jint<openv){jint=openv;}
if (jint>closev){jint=closev;}
if (jint<(openv+5)&& X2==1 && X3==1){X1=0;}else{X1=1;}
if (jint>(closev-5)&& X2==1 && X1==1){X3=0;}else{X3=1;}
}
if ((modv==0 &&(X1==0||X3==0||jxvcl==1||jxvop==1)&&x2==0)||(modv==0 &&(x3==1||x3==3)&&x2==1)||(modv==1 && (X1==0||X3==0)&&x2==0)||(modv==1 && (x3==1||x3==3)&&x2==1))
{
tj_yc1=0;tj_yc2=0;tj_yc3=0;tj_ma0=0;tj_ma1=0;
if (((X1==0&&x2==0)||(jxvop==1&&x2==0)||(x3==1&&x2==1))&&openv<(jinr-2)){L2=1;Y4=1;Y2=1;if (Y3==1){Y1=0;}jint=openv;}
if (((X3==0&&x2==0)||(jxvcl==1&&x2==0)||(x3==3&&x2==1))&&closev>(jinr+2)){L2=1;Y4=1;Y1=1;Y2=0;jint=closev;}
oled_s1();
if ((X1==0&&x2==0)||(x3==1&&x2==1)){jxvop=0;}
if ((X3==0&&x2==0)||(x3==3&&x2==1)){jxvcl=0;}
if (kzmd==0)
{
if (x2==0)
{
if (((jinr<=openv)||(jinr<openv+2))&&(X1==0||jxvop==1)){jxvop=0;Y1=1;}
if (((jinr>=closev)||(jinr>closev-2))&&(X3==0||jxvcl==1)){jxvcl=0;Y2=1;}
}
if (x2==1)
{
if (((jinr<=openv)||(jinr<openv+2))&&x3==1){jxvop=0;Y1=1;}
if (((jinr>=closev)||(jinr>closev-2))&&x3==3){jxvcl=0;Y2=1;}//¿ª
}
}
if(bz_dz==0)
{
if ((jinr<=openv)||(jinr<openv+6)) {L2=1;Y4=1;L3=1;L1=0;Y3=0;xsr=0;jrtem1=1200;csv=1;}else{L1=1;Y3=1;csv=0;}
if ((jinr>=closev)||(jinr>closev-6)){L1=1;L2=1;Y4=1;L3=0;Y5=0;xsr=100;jrtem1=6000;csv=1;}else{L3=1;Y5=1;csv=0;}
}
else{
//¹ýŤ¸´Î»
//if ((jinr<=openv)||(jinr<openv+4)) {bz_dz=0;}
//if ((jinr>=closev)||(jinr>closev-4)) {bz_dz=0;}
if (jinr<openv+4) {bz_dz=0;}
if (jinr>closev-4) {bz_dz=0;}
}
//¹ØÊ±¼ä
if ((X3==0)||(x3==3&&x2==1)){ksjv11=0;tm11=0;}//&&x2==0
if ((X1==0)||(x3==1&&x2==1)){ksjv12=0;tm21=0;}//&&x2==0
if (((X1==0) ||(x3==1&&x2==1)) && L1==1&&L3==0){ksjv11=1;}//&&x2==0
if(L1==0){ksjv11=0;}
//¿ªÊ±¼ä
if (((X3==0)||(x3==3&&x2==1)) && L3==1&&L1==0){ksjv12=1;}//&&x2==0
if(L3==0){ksjv12=0;}
LoadPWM(jrtem1);
delay_ms(2);
//if ((L1==0||L3==0 )&& csvbz==1){jinr0 = Get_ADC10bitResult(6);X2B=1;}
//if ((L1==0||L3==0 )&& csvbz==1){jinr0 = adv1();X2B=1;}
if ((L1==0||L3==0 )&& csvbz==1){jinr0 =Get_ADC10bitResult(6);X2B=1;}
}
//
//Y1¹ØY2¿ª
//4-20MAģʽ
//Get_ADC10bitResult(6);
jint1 = Get_ADC10bitResult(6);
//jint1 = adv1();
jinr = adv();
if (x2==1)//Ô¶³Ì¿ØÖÆÖмäÁ¿
{
tj_ma0=0;tj_ma1=0;
if (modv==0 && x3==0){jint=jint3;tj_yc1=1;}else{tj_yc1=0;}
if (modv==0 && x3==2){jint=jint2;tj_yc2=1;}else{tj_yc2=0;}
if (modv==1 && x3==2){jint=jint2;tj_yc3=1;}else{tj_yc3=0;}
}
else//±¾µØ¿ØÖÆÖмäÁ¿
{
tj_yc1=0;tj_yc2=0;tj_yc3=0;
if (modv==0 && X2==1&& X1==1&& X3==1&&jxvcl==0&&jxvop==0){jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-208ul)))/10000ul);}//+3ul;}
if ((modv==0 && X2==0&& X1==1&& X3==1)||(modv==1&& X2==0&& X1==1&& X3==1) ){jint=jint2;}
if (er1==1 && modv==0){
if (x0==1){jint=openv;}
if (x0==2){jint=jint2;;}
if (x0==3){jint=closev;}
}
if (er1==0 && modv==0 ){if (X2==1&& X1==1&& X3==1){jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-208ul)))/10000ul);}}
if ((modv==0 && X2==1&& X1==1&& X3==1&&jxvop==0&&jxvcl==0)||(modv==0 && X2==0&& X1==1&& X3==1)){tj_ma0=1;}else{tj_ma0=0;}
if (modv==1 && X2==0&& X1==1&& X3==1){tj_ma1=1;}else{tj_ma1=0;}
}
if ((tj_ma0==1||tj_ma1==1||tj_yc1==1||tj_yc2==1||tj_yc3==1))
{
if ((jint>(closev-1-x1) && jint<(closev+1+x1))){jint=closev;jxvcl=1;}else{jxvcl=0;}
if ((jint>(openv-1-x1) && jint<(openv+1+x1))){jint=openv;jxvop=1; }else{jxvop=0;}
xst=(abs(jint-openv)*100/(closev-openv));
oled_s1();
if (jint<openv){jint=openv;}
if (jint>closev){jint=closev;}
if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;}
if (jint<jinr )
{
if (jint<(jinr-1-x1) )//¹Ø***********OPENV
{
jxvcl=0;
oled_s1();
if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;}
if (tjdz_bz2_b1==0) {if (Y3==1){Y1=0;Y2=1;}}else{Y1=1;Y2=1;}
if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;}
if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;}
if (L2==0&&bz_dz==0&&Y1==0){kgcs_bz1++;}
}
}
if (jint>jinr )
{
if (jint>(jinr+1+x1) )//¿ª*****
{
jxvop=0;
oled_s1();
if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;}
if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;}
if (tjdz_bz2_b==0) {Y1=1;Y2=0;}else{Y2=1;Y1=1;}
if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;}
if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y2=1;}
if (L2==0&&bz_dz==0&&Y2==0){kgcs_bz2++;}
}
}
jinr = adv();
if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;}
//ָʾµÆ
if(bz_dz==0)
{
if (jinr>(openv-(4+x1)) && jinr<(openv+(4+x1)) ) {L1=0;Y3=0;xsr=0;jrtem1=1200;csv=1;bz_dz=0;}else{L1=1;Y3=1;csv=0;}
if (jinr>(closev-(4+x1)) && jinr<(closev+(4+x1)) ){L3=0;Y5=0;xsr=100;jrtem1=6000;csv=1;bz_dz=0;}else{L3=1;Y5=1;csv=0;}
if (jint>(openv-(4+x1)) && jint<(openv+(4+x1)) ) {xst=0;}
if (jint>(closev-(4+x1)) && jint<(closev+(4+x1)) ){xst=100;}
if (jint>(jinr-(4+x1)) && jint<(jinr+(4+x1)) && L1==1 && L3==1) {L2=0;Y4=0;csv=1;}else{L2=1;Y4=1;csv=0;bz_dz=0;}
}
else{
//¹ýŤ¸´Î»
if (jinr>(openv-(4+x1)) && jinr<(openv+(4+x1)) ) {bz_dz=0;}
if (jinr>(closev-(4+x1)) && jinr<(closev+(4+x1))) {bz_dz=0;}
if (jint>(jinr-(4+x1)) && jint<(jinr+(4+x1)) ) {bz_dz=0;}
}
LoadPWM(jrtem1);delay_ms(1);
//if ((L1==0||L2==0||L3==0 )&& csvbz==1){Get_ADC10bitResult(6);jinr0 = Get_ADC10bitResult(6);X2B=1;}
if ((L1==0||L2==0||L3==0 )&& csvbz==1){jinr0 = Get_ADC10bitResult(6);X2B=1;}
//}
}
}
//ģʽÏÔʾ
if (modv==3 || modv==4 ||modv==5 ||modv==6)
{
OLED_ShowString(1,0," DATA :",16);
OLED_ShowString(1,4," Setup:",16);
}
if (modv==6)//Öмäλ
{
OLED_ShowNum(55,4,xst,4,16);
OLED_ShowString(90,4,"%",16);
}
if (modv==2)//³õʼ»¯
{
OLED_ShowString(1,0," DATA :",16);
OLED_ShowString(1,2," KEY1+KEY2",16);
}
if (modv==4)//³õʼλÖÃ
{
OLED_ShowNum(55,4,x0,4,16);
}
if (modv==5)//¾«¶È
{
OLED_ShowNum(55,4,x1,4,16);
}
/*
if (modv==3)//Çý¶¯µÈ¼¶
{
//if (g1==0){OLED_ShowString(57,4,"Auto ",16);}else{OLED_ShowString(57,4,"Fix ",16);}
OLED_ShowString(57,4,"Fix ",16);
OLED_ShowNum(88,4,g1,2,16);
}
*/
if (modv==7)
{
OLED_ShowString(1,0," DATA :",16);
OLED_ShowString(1,2," Type:",16);
OLED_ShowString(1,4," time:",16);
OLED_ShowString(1,4," time:",16);
OLED_ShowNum(50,2,zdkzv,1,16);
//zdkzv:1-13,2-12321,3-1231,4-1321
OLED_ShowNum(50,4,i_tim,3,16);
OLED_ShowString(100,4,"s",16);
switch(zdkzv)
{
case 0:OLED_ShowString(70,2," OFF ",16); break;
case 1:OLED_ShowString(70,2," 13 ",16); break;
case 2:OLED_ShowString(70,2," 12321",16); break;
case 3:OLED_ShowString(70,2," 1231 ",16); break;
case 4:OLED_ShowString(70,2," 1321 ",16); break;
}
}
if (modv==8)
{
//OLED_ShowString(1,0," Model:",16);
OLED_ShowString(1,0," ID:",16);
OLED_ShowString(1,2," T-OP:",16);
OLED_ShowString(1,4," T-CL:",16);
OLED_ShowNum(34,0,IDV1,5,16);OLED_ShowNum(74,0,IDV2,5,16);
//OLED_ShowString(35,0,LCD_line0,16);
OLED_ShowNum(50,2,tm22,6,16);
OLED_ShowNum(50,4,tm12,6,16);
OLED_ShowNum(0,6,tim0/60,6,16);OLED_ShowString(50,6," H ",16);
OLED_ShowNum(75,6,tim0%60,2,16);OLED_ShowString(95,6," M ",16);
}
if (modv==9)
{
//OLED_ShowString(1,0," Model:",16);
OLED_ShowString(1,0,"N-OP:",16);
OLED_ShowString(1,2,"N-MD:",16);
OLED_ShowString(1,4,"N-CL:",16);
OLED_ShowNum(40,0,L1T,8,16);
OLED_ShowNum(40,2,L2T,8,16);
OLED_ShowNum(40,4,L3T,8,16);
//OLED_ShowNum(0,6,tm10,4,16);
//OLED_ShowNum(60,6,tm20,4,16);
}
}
}
void oled_s1()
{
//jint1 = Get_ADC10bitResult(6);
jint1 =adv1();
jinr = adv();
oled_x();
if ((abs(jint-openv)*100/(closev-openv))<4){xst=0;}
if ((abs(jint-openv)*100/(closev-openv))>97){xst=100;}
if ((abs(jinr-openv)*100/(closev-openv))<4){xsr=0;}
if ((abs(jinr-openv)*100/(closev-openv))>97){xsr=100;}
jrtem1=(120000ul+48ul*((abs(jinr-openv)*10000ul/(closev-openv))))/100ul;
jrtem1=jrtem1-jrtem1/100ul;
if (xst==0){jrtem1=1200;}
if (xst==100){jrtem1=6000;}
LoadPWM(jrtem1);
}
void oled_x()
{
jinr = adv();
xst=(abs(jint-openv)*100/(closev-openv));
xsr=(abs(jinr-openv)*100/(closev-openv));
}
void kgsj()
{
if (tm10>=0 && tm10<100){jdjs_v=20;jdjs_v1=22;jdjs_v10=1;jdjs_v20=1;}
if (tm10>=100 && tm10<150){jdjs_v=16;jdjs_v1=15;jdjs_v10=1;jdjs_v20=1;}
if (tm10>=150 && tm10<200){jdjs_v=12;jdjs_v1=12;jdjs_v10=1;jdjs_v20=1;}
if (tm10>=200 && tm10<280){jdjs_v=11;jdjs_v1=11;jdjs_v10=1;jdjs_v20=1;}
if (tm10>=280 && tm10<380){jdjs_v=10;jdjs_v1=10;jdjs_v10=1;jdjs_v20=1;}
if (tm10>=380 && tm10<500){jdjs_v=9;jdjs_v1=9;jdjs_v10=2;jdjs_v20=2;}
if (tm10>=500 && tm10<650){jdjs_v=8;jdjs_v1=8;jdjs_v10=2;jdjs_v20=2;}
if (tm10>=650 && tm10<850){jdjs_v=7;jdjs_v1=7;jdjs_v10=2;jdjs_v20=2;}
if (tm10>=850 && tm10<1200){jdjs_v=6;jdjs_v1=6;jdjs_v10=2;jdjs_v20=2;}
if (tm10>=1200 && tm10<1500){jdjs_v=5;jdjs_v1=5;jdjs_v10=2;jdjs_v20=3;}
if (tm10>=1500 && tm10<2000){jdjs_v=4;jdjs_v1=4;jdjs_v10=3;jdjs_v20=3;}
if (tm10>=2000 && tm10<2500){jdjs_v=3;jdjs_v1=3;jdjs_v10=3;jdjs_v20=3;}
if (tm10>=2500 && tm10<3000){jdjs_v=2;jdjs_v1=2;jdjs_v10=4;jdjs_v20=4;}
if (tm10>=3000 && tm10<4000){jdjs_v=1;jdjs_v1=1;jdjs_v10=5;jdjs_v20=5;}
if (tm10>=4000 && tm10<6000){jdjs_v=1;jdjs_v1=1;jdjs_v10=6;jdjs_v20=6;}
if (tm10>=6000 && tm10<30000){jdjs_v=1;jdjs_v1=1;jdjs_v10=7;jdjs_v20=7;}
jdjs_v=jdjs_v+(11-x1)/3;
jdjs_v1=jdjs_v;
}
long int adv()
{
Get_ADC10bitResult(7);
for(j=0, i=0; i<16; i++)
{
j += Get_ADC10bitResult(7);
}
return (j/16);
}
int adv1()
{
//Get_ADC10bitResult(6);
int jst1=0;
int ist1;
jst1 = Get_ADC10bitResult(6);
for( ist1=0; ist1<64; ist1++)
{
jst1 = (jst1 +Get_ADC10bitResult(6))/2;
}
return jst1;
}
//========================================================================
// º¯Êý: void PrintString1(u8 *puts)
// ÃèÊö: ´®¿Ú1·¢ËÍ×Ö·û´®º¯Êý¡£
// ²ÎÊý: puts: ×Ö·û´®Ö¸Õë.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2014-11-28
// ±¸×¢:
//========================================================================
/*void PrintString1(u8 *puts) //·¢ËÍÒ»¸ö×Ö·û´®
{
for (; *puts != 0; puts++) //Óöµ½Í£Ö¹·û0½áÊø
{
SBUF = *puts;
B_TX1_Busy = 1;
while(B_TX1_Busy);
}
}
*/
//========================================================================
// º¯Êý: void UART1_config(u8 brt)
// ÃèÊö: UART1³õʼ»¯º¯Êý¡£
// ²ÎÊý: brt: Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2014-11-28
// ±¸×¢:
//========================================================================
void UART1_config(u8 brt) // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ.
{
/*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷2 *****************/
if(brt == 2)
{
AUXR &= ~(1<<4); //Timer stop ²¨ÌØÂÊʹÓÃTimer2²úÉú
AUXR |= 0x01; //S1 BRT Use Timer2;
AUXR |= (1<<2); //Timer2 set as 1T mode
TH2 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);
TL2 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);
AUXR |= (1<<4); //Timer run enable
}
/*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷1 *****************/
else
{
TR1 = 0;
AUXR &= ~0x01; //S1 BRT Use Timer1;
AUXR |= (1<<6); //Timer1 set as 1T mode
TMOD &= ~(1<<6); //Timer1 set As Timer
TMOD &= ~0x30; //Timer1_16bitAutoReload;
TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256);
TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256);
ET1 = 0; //½ûÖ¹ÖжÏ
INT_CLKO &= ~0x02; //²»Êä³öʱÖÓ
TR1 = 1;
}
/*************************************************/
SCON = (SCON & 0x3f) | 0x40; //UART1ģʽ, 0x00: ͬ²½ÒÆÎ»Êä³ö, 0x40: 8λÊý¾Ý,¿É±ä²¨ÌØÂÊ, 0x80: 9λÊý¾Ý,¹Ì¶¨²¨ÌØÂÊ, 0xc0: 9λÊý¾Ý,¿É±ä²¨ÌØÂÊ
PS = 1; //¸ßÓÅÏȼ¶ÖжÏ
ES = 1; //ÔÊÐíÖжÏ
REN = 1; //ÔÊÐí½ÓÊÕ
P_SW1 &= 0x3f;
P_SW1 |= 0x40; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7 (±ØÐëʹÓÃÄÚ²¿Ê±ÖÓ)
//PCON2 |= (1<<4); //ÄÚ²¿¶Ì·RXDÓëTXD, ×öÖмÌ, ENABLE,DISABLE
//PCON|=0x80; //´®¿Ú²¨ÌØÂʼӱ¶
B_TX1_Busy = 0;
TX1_Cnt = 0;
RX1_Cnt = 0;
}
//========================================================================
// º¯Êý: void UART1_int (void) interrupt UART1_VECTOR
// ÃèÊö: UART1ÖжϺ¯Êý¡£
// ²ÎÊý: nine.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2014-11-28
// ±¸×¢:
//========================================================================
void UART1_int (void) interrupt 4
{
if(RI)
{
RI = 0;
if(RX1_Cnt >= RX1_Lenth) RX1_Cnt = 0; //·ÀÒç³ö
RX1_Buffer[RX1_Cnt++] = SBUF;
if (RX1_Buffer[0]!=add_v) RX1_Cnt = 0;//±¾»úµØÖ·ÅжÏ
}
if(TI)
{
TI = 0;
//UART1_485_DE=1;
if(TX_read != TX_write)
{
// UART1_485_DE=1;
SBUF = TX1_Buffer[TX_read];
if(++TX_read >= TX1_Lenth) TX_read = 0;
}
//else {B_TX1_Busy = 0;UART1_485_DE=0;}
else {B_TX1_Busy = 0;}
}
}
void TX1_write2buff(u8 dat) //дÈë·¢ËÍ»º³å£¬Ö¸Õë+1
{
TX1_Buffer[TX_write] = dat; //×°·¢ËÍ»º³å
if(++TX_write >= TX1_Lenth) TX_write = 0;
if(B_TX1_Busy == 0) //¿ÕÏÐ
{
TI = 1; //´¥·¢·¢ËÍÖжÏ
B_TX1_Busy = 1; //±ê־æ
}
}
unsigned int CRC16(unsigned char * puchMsg, unsigned int usDataLen)
{
unsigned int temp=0xffff,temp1,i,j;
for(i=0;i<usDataLen;i++)
{
temp^=*(puchMsg+i);
for(j=0;j<8;j++)
{
temp1=temp;
temp>>=1;
if(temp1&0x0001)
temp^=0xa001;
}
}
return(temp);
}
void write_fzcs(void)
{
settmp1[0]=tim0%256;
settmp1[1]=(tim0/256)/256;
settmp1[2]=(tim0/256)%256;
settmp1[3]=L1T%256;
settmp1[4]=(L1T/256)/256;
settmp1[5]=(L1T/256)%256;
settmp1[6]=L2T%256;
settmp1[7]=(L2T/256)/256;
settmp1[8]=(L2T/256)%256;
settmp1[9]=L3T%256;
settmp1[10]=(L3T/256)/256;
settmp1[11]=(L3T/256)%256;
settmp1[12]=tm22/256;
settmp1[13]=tm22%256;
settmp1[14]=tm12/256;
settmp1[15]=tm12%256;
settmp1[16]=IDV1/256;
settmp1[17]=IDV1%256;
settmp1[18]=IDV2/256;
settmp1[19]=IDV2%256;
EEPROM_SectorErase(0X200);//²Á³ýEEPROM
delay_ms(10);
EEPROM_write_n(0X200,settmp1,20);//дÈëģʽ
delay_ms(10);
}
void write_cs(void)
{
settmp[0]=openv/256;
settmp[1]=openv%256;
settmp[2]=closev/256;
settmp[3]=closev%256;
settmp[4]=jint2/256;
settmp[5]=jint2%256;
if (modv==0||modv==1){settmp[6]=modv;modv0=modv;}else{settmp[6]=modv0;}
settmp[7]=g1;
settmp[8]=tm10/256;
settmp[9]=tm10%256;
settmp[10]=tm20/256;
settmp[11]=tm20%256;
settmp[12]=x0;
settmp[13]=x1;
settmp[14]=add_v;
settmp[15]=x5;
settmp[16]=x6;
settmp[17]=x7;
settmp[18]=zdkzv;
settmp[19]=i_tim;
EEPROM_SectorErase(0X0);//²Á³ýEEPROM
delay_ms(10);
EEPROM_write_n(0X0,settmp,20);//дÈëģʽ
delay_ms(10);
}
void modbusv(void)//¶ÁÈ¡ËùÓвÎÊý
{//01 01 00 65 00 2E 20 XX XX
char e1=0;
u16 crc;
if(RX1_Cnt>7)
{
crc=CRC16(RX1_Buffer,RX1_Cnt-2);
if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ·
if (RX1_Buffer[1]==0X01 &&RX1_Buffer[2]==0X00 &&RX1_Buffer[3]==0X65 &&RX1_Buffer[5]==0X2E &&RX1_Buffer[6]==0X20 && e1==0)
{
modbus_bw();
RX1_Cnt = 0;
}
}
}
void modbus_bw(void)//×Ô¶¯±¨ÎÄ--¶ÁÈ¡ËùÓвÎÊý
{
u8 i;
u8 XV1,XV2;
u8 X201=0,X202=0,X203=0;
u8 Y101=0,Y102=0,Y103=0,Y104=0,Y105=0;
u8 L101=0,L102=0,L103=0;
u16 crc1;
u8 V3[48];
if (modv==0 || modv==1)//01ģʽÏÔʾ
{
if (((X1==0&&x2==0)||(x3==1&&x2==1))){xst=0;jint=openv;}
if (((X3==0&&x2==0)||(x3==3&&x2==1))){xst=100;jint=closev;}
}
X201=X1;X202=X2;X203=X3;
Y101=Y1;Y102=Y2;Y103=Y3;Y104=Y4;Y105=Y5;
L101=L1;L102=L2;L103=L3;
XV1=_bin(X201,X202,X203,0,0,0,0,0);
XV2=_bin(Y101,Y102,Y103,Y104,Y105,L101,L102,L103);
V3[6]=XV1;V3[7]=XV2;
V3[0]=add_v;//µØÖ·
V3[1]=0X01;//Ö¸Áî
V3[2]=0X24;//Êý¾Ý³¤¶È
V3[3]=0X00+modv;//ģʽ
V3[4]=0X00+g1;//Çý¶¯Ä£Ê½
V3[5]=0X00+x1;//¾«¶È
V3[6]=0X00+x0;//³õʼλÖÃ
V3[7]=0X00+xst;//Öмäλ
V3[8]=0X00+x5;//ÐÄÌø°ü
V3[9]=0X00+x6;//×Ô¶¯±¨ÎÄ
V3[10]=0X00+x7;//µØÖ·ÏÔʾ
V3[11]=zdkzv;//×Ô¶¯¿ØÖÆÀàÐÍ
V3[12]=i_tim;//×Ô¶¯¿ØÖƼä¸ô
V3[13]=XV1;//X¶Ë
V3[14]=XV2;//Y¶Ë
V3[15]=jint/256;//ÊäÈë
V3[16]=jint%256;
V3[17]=jinr/256;//Êä³ö
V3[18]=jinr%256;
V3[19]=0X00+xst;//ÊäÈ뿪¶È
V3[20]=0X00+xsr;//¿ª¶È
V3[21]=tim0%256;//ÔËÐÐʱ¼ä·ÖÖÓtim0=(V3[16]*256+V3[17])*256+V3[15];
V3[22]=(tim0/256)/256;
V3[23]=(tim0/256)%256;
V3[24]=L1T%256;//¿ª´ÎÊý
V3[25]=(L1T/256)/256;
V3[26]=(L1T/256)%256;
V3[27]=L2T%256;//Öмä´ÎÊý
V3[28]=(L2T/256)/256;
V3[29]=(L2T/256)%256;
V3[30]=L3T%256;//¹Ø´ÎÊý
V3[31]=(L3T/256)/256;
V3[32]=(L3T/256)%256;
V3[33]=tm22/256;//¿ªÊ±¼ä
V3[34]=tm22%256;
V3[35]=tm12/256;//¹ØÊ±¼ä
V3[36]=tm12%256;
V3[37]=openv/256;//openv
V3[38]=openv%256;
V3[39]=closev/256;//closev
V3[40]=closev%256;
V3[41]=IDV1/256;//idǰ5λ
V3[42]=IDV1%256;
V3[43]=IDV2/256;//idºó5λ
V3[44]=IDV2%256;
V3[45]=0X20;//ÉèÖÃÀàÐÍ0X01µç¶¯//0X20Æø¶¯¿ª¹ØºÐ
crc1=CRC16(V3,46);
V3[46]=crc1%256;
V3[47]=crc1/256;
for(i=0; i<48; i++) {TX1_write2buff(V3[i]);} //Êý¾Ý·µ»Ø
}
int modbus_ex(char x)//²ÎÊý±à¼
{//01 06 01 F5 00 01 20 XX XX
u8 i;
u8 rx3;
u16 crc;
char e1=0;
switch(x)
{
case 1:rx3=0XF1;break;//µØÖ·add_v 01 06 01 F1 00 01 20 XX XX
case 2:rx3=0XF2;break;//ģʽmodv 01 06 01 F2 00 01 20 XX XX
case 3:rx3=0XF3;break;//±ê¶¨ 01 06 01 F3 00 01 20 XX XX
case 4:rx3=0XF4;break;//¾«¶Èx1 01 06 01 F4 00 01 20 XX XX
case 5:rx3=0XF5;break;//³õʼλÖÃx0 01 06 01 F5 00 01 20 XX XX
case 6:rx3=0XF6;break;//ÖмäÖµxst 01 06 01 F6 00 01 20 XX XX
case 7:rx3=0XF7;break;//network--x2 01 06 01 F7 00 01 20 XX XX
case 8:rx3=0XF8;break;//¿ª¹Ø¿ØÖÆ123--x3 01 06 01 F8 00 01 20 XX XX
case 9:rx3=0XF9;break;//¿ª¶È¿ØÖÆ--x4 01 06 01 F9 00 01 20 XX XX
case 10:rx3=0XFA;break;//ÐÄÌø°ü--x5 01 06 01 FA 00 01 20 XX XX
case 11:rx3=0XFB;break;//×Ô¶¯±¨ÎÄ--x6 01 06 01 FB 00 01 20 XX XX
case 12:rx3=0XFC;break;//µØÖ·ÏÔʾ--x7 01 06 01 FC 00 01 20 XX XX
case 13:rx3=0XFD;break;//×Ô¶¯¿ØÖÆ--zdkzv 01 06 01 FD 00 01 20 XX XX
case 14:rx3=0XFE;break;//ʱ¼ä¼ä¸ô--i_tim 01 06 01 FE 00 01 20 XX XX
case 15:rx3=0XFF;break;//Êý¾Ý±£´æ--x8 01 06 01 FF 00 01 20 XX XX
case 16:rx3=0XE1;break;//Çý¶¯g1 01 06 01 E1 00 01 20 XX XX
case 17:rx3=0XE2;break;//Çý¶¯µ¥Ë«kzmd 01 06 01 E2 00 01 20 XX XX
}
if(RX1_Cnt > 7)
{
crc=CRC16(RX1_Buffer,RX1_Cnt-2);
if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ·
if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0X01 && RX1_Buffer[3]==rx3 && RX1_Buffer[6]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî
{
for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔÑù·µ»Ø
RX1_Cnt = 0;
return 1;
}
}
return 0;
}
int modbus_zo(void)//ÔËÐÐÊý¾ÝÇå0¿ª¹ØÊ±¼äÔËÐÐʱ¼ä
{//01 06 FF FF 00 00 20 FF FF---01 06 FF 00 00 20
u8 i;
u16 crc;
char e1=0;
if(RX1_Cnt > 7)
{
crc=CRC16(RX1_Buffer,RX1_Cnt-2);
if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ·
// if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XFF && RX1_Buffer[3]==0XFF&& RX1_Buffer[4]==0X00&& RX1_Buffer[5]==0X00 && RX1_Buffer[6]==0X20&& RX1_Buffer[7]==0XFF&& RX1_Buffer[8]==0XFF&& e1==0)//¶ÁÈ¡ÊäÈëÃüÁî
if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XFF && RX1_Buffer[5]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî
{
for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔÑù·µ»Ø
RX1_Cnt = 0;
return 1;
}
}
return 0;
}
int modbus_id(void)//IDÐÞ¸Ä
{//01 06 EE EE 00 00 00 00 20 EE EE //01 06 EE 00 00 00 00 20
u8 i;
u16 crc;
char e1=0;
if(RX1_Cnt > 7)
{
crc=CRC16(RX1_Buffer,RX1_Cnt-2);
if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ·
if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XEE && RX1_Buffer[7]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî
{
for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔÑù·µ»Ø
RX1_Cnt = 0;
return 1;
}
}
return 0;
}
void INIT_SET(void)
{
settmp1[0]=0;
settmp1[1]=0;
settmp1[2]=0;
settmp1[3]=0;
settmp1[4]=0;
settmp1[5]=0;
settmp1[6]=0;
settmp1[7]=0;
settmp1[8]=0;
settmp1[9]=0;
settmp1[10]=0;
settmp1[11]=0;
settmp1[12]=0;
settmp1[13]=0;
settmp1[14]=0;
settmp1[15]=0;
settmp1[16]=0;
settmp1[17]=0;
settmp1[18]=0;
settmp1[19]=0;
EEPROM_SectorErase(0X200);//²Á³ýEEPROM
delay_ms(10);
EEPROM_write_n(0X200,settmp1,20);//дÈëģʽ
delay_ms(10);
settmp[0]=0;
settmp[1]=0;
settmp[2]=0;
settmp[3]=0;
settmp[4]=0;
settmp[5]=0;
settmp[6]=0;
settmp[7]=0;
settmp[8]=0;
settmp[9]=0;
settmp[10]=0;
settmp[11]=0;
settmp[12]=0;
settmp[13]=0;
settmp[14]=0;
settmp[15]=0;
settmp[16]=0;
settmp[17]=0;
settmp[18]=0;
settmp[19]=0;
settmp[20]=1;
EEPROM_SectorErase(0X0);//²Á³ýEEPROM
delay_ms(10);
EEPROM_write_n(0X0,settmp,21);//дÈëģʽ
delay_ms(10);
}
最新发布