📄 caiji.c.bak
字号:
watch_send_reg=WATCH_SEND_TIME;
watch_send_flag=1;
}
if(watch_up_send_reg!=0)
{
watch_up_send_reg--;
}
else
{
watch_up_send_reg=WATCH_SEND_TIME;
watch_up_send_flag=1;
}
}
if(interval_send_reg!=0)
{
interval_send_reg--;
}
else{
interval_send_reg=INTERVAL_SEND_TIME;
interval_send_flag=1;
}
}
void send_word_down(void){
unsigned char data i,yushu,shang;
send_buffer0[0]=0x23;//#
send_buffer0[1]=(interval_send_moduel+1)/16+0x30;
send_buffer0[2]=(interval_send_moduel+1)%16+0x30;
send_buffer0[3]=interval_send_chanel+0x30;
send_buffer0[4]=END_WORD;
send_length0=5;
send_finger0=&send_buffer0;
SBUF=*send_finger0;
watch_send_reg=WATCH_SEND_TIME;
watch_send_flag=0;
}
//*********************************------------------------------//
/*主函数*/
//********************************-------------------------------//
void main(void){
unsigned char data master,master1,master2,number;
BEGIN:
init();
read_e2(); //读e2
initial(); //初始化液晶
send_number1=0;
master=1;
for(master2=0;master2<moduel_number;master2++)
{
send_number1=moduel[master2].use_chanel+send_number1;
master=moduel[master2].use_chanel+master;
}
send1_buffer1[2]=send_number1;
send_all_nb=send_number1;
EA=1;
while(1)
{
if(watch_send_flag)
{
goto BEGIN;
}
if(cpu_run_flag)
{
RUN_CPU=RUN_CPU^1;
cpu_run_flag=0;
}
if((cpu_show_flag)&&(keyvalue!=SET)&&(keyvalue!=CHECK))
{
display_cycle();
cpu_show_flag=0;
control=1;
}
ldelay(1);
if(keyvalue==SET)
{
pass();
control=1;
}
if(keyvalue==CHECK)
{
display_void();
control=1;
}
if((interval_send_flag==1)&&(receive_bit_number0==0)&&(dispose_step0==0)&&(receive_bit_number1==0))
{
if(interval_send_nb!=interval_receive_nb)
{
chanel_str[receive_moduel][receive_chanel].display_data=0;
chanel_str[receive_moduel][receive_chanel].real_data=0;
interval_receive_nb++;
if(interval_receive_nb>=send_all_nb)
interval_receive_nb=0;
}
// address=moduel[interval_send_moduel].moduel_station; //当前下发地址
address=interval_send_moduel+1;
//command_send_down=1;
chanel_n=interval_send_chanel; //当前下发的通道
receive_moduel=interval_send_moduel;
receive_chanel=interval_send_chanel;
control_485=1;
send_word_down();
interval_send_chanel++;
interval_send_nb++;
if(interval_send_chanel>=moduel[interval_send_moduel].use_chanel)
{
interval_send_chanel=0;
interval_send_moduel++;
if(interval_send_moduel>=moduel_number)
{
interval_send_moduel=0;
interval_send_nb=0;
}
}
interval_send_flag=0;
}
if(receive_over_flag0==1) //收完下行数据
{
for(master=0;master<8;master++)
{
if(receive_bit_number0<8)
{
if(receive_buffer0[master+1]!=0x0d)
{
moduel[receive_moduel].chanel_data[receive_chanel][master]=receive_buffer0[master+1];
}
else
{
moduel[receive_moduel].chanel_data[receive_chanel][master]=0x0d;
}
}
else
{
moduel[receive_moduel].chanel_data[receive_chanel][master]=receive_buffer0[master+1];
}
}//与for 对应
receive_over_flag0=0;
receive_bit_number0=0;
receive_step=0;
dispose_step0=1;
if(receive_temprature_flag==1)
{
temp_to_data();
receive_temprature_flag=0;
}
else
asc_to_data();
if(dispose_step0==2)
{
data_to_display();
}
interval_receive_nb++;
if(interval_receive_nb>=send_all_nb)
interval_receive_nb=0;
}
}//与while对应
}//与void对应
//*********************************------------------------------//
/*上行中断相关处理函数*/
//********************************-------------------------------//
uchar check_sum(unsigned int xdata up_begin,unsigned char xdata length)
{
uchar xdata * kk;
uint ll;
uchar mm;
ll=0;
kk=up_begin;
do{
ll=ll+*kk;
ll=ll%256;
kk++;
length--;
}
while(length!=0);
mm=(uchar)(ll);
return (mm);
}
//*********************************------------------------------//
/*处理函数,变成需要显示的数值*/
//********************************-------------------------------//
void temp_to_data()
{
if(moduel[receive_moduel].chanel_data[receive_chanel][0]==0x2b)
{
chanel_str[receive_moduel][receive_chanel].real_data=(moduel[receive_moduel].chanel_data[receive_chanel][1]-0x30)*1000;
chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][2]-0x30)*(100);
chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][3]-0x30)*(10);
chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][4]-0x30);
// chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][7]-0x30)*(0.0001);
dispose_step0=2;
}
else
{
chanel_str[receive_moduel][receive_chanel].real_data=0;
dispose_step0=2;
}
}
void asc_to_data()
{
if(moduel[receive_moduel].chanel_data[receive_chanel][0]==0x2b)
{
if(moduel[receive_moduel].chanel_data[receive_chanel][2]==0x2e)
{
chanel_str[receive_moduel][receive_chanel].real_data=moduel[receive_moduel].chanel_data[receive_chanel][1]-0x30;
chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][3]-0x30)*(0.1);
chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][4]-0x30)*(0.01);
chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][5]-0x30)*(0.001);
chanel_str[receive_moduel][receive_chanel].real_data=chanel_str[receive_moduel][receive_chanel].real_data+(moduel[receive_moduel].chanel_data[receive_chanel][6]-0x30)*(0.0001);
dispose_step0=2;
}
else
{
chanel_str[receive_moduel][receive_chanel].real_data=0;
dispose_step0=2;
}
}
else
{
chanel_str[receive_moduel][receive_chanel].real_data=0;
dispose_step0=2;
}
}
void data_to_display()
{
float idata i;
switch(chanel_str[receive_moduel][receive_chanel].mode) //输入模式
{
case 1: //mode1 0-10ma
if(chanel_str[receive_moduel][receive_chanel].real_data<=0)
{
chanel_str[receive_moduel][receive_chanel].display_data=0;
dispose_step0=0;
}
else
{
i=chanel_str[receive_moduel][receive_chanel].scale/5;
chanel_str[receive_moduel][receive_chanel].display_data=chanel_str[receive_moduel][receive_chanel].real_data * i;
dispose_step0=0;
}
break;
case 2: //mode2 4-20ma
if(chanel_str[receive_moduel][receive_chanel].real_data<=1)
{
chanel_str[receive_moduel][receive_chanel].display_data=0;
dispose_step0=0;
}
else
{
i=chanel_str[receive_moduel][receive_chanel].scale/4;
chanel_str[receive_moduel][receive_chanel].display_data=(chanel_str[receive_moduel][receive_chanel].real_data-1) * i;
dispose_step0=0;
//dwordtobcd(&(chanel_str[receive_moduel][receive_chanel].display_data),4);
//putstring1(8,2);
}
break;
case 3: //mode3 温度
if(chanel_str[receive_moduel][receive_chanel].real_data<=0)
{
chanel_str[receive_moduel][receive_chanel].display_data=0;
dispose_step0=0;
}
else
{
i=chanel_str[receive_moduel][receive_chanel].scale/600;
chanel_str[receive_moduel][receive_chanel].display_data=(chanel_str[receive_moduel][receive_chanel].real_data) * i;
dispose_step0=0;
//dwordtobcd(&(chanel_str[receive_moduel][receive_chanel].display_data),4);
//putstring1(8,2);
}
break;
default:
chanel_str[receive_moduel][receive_chanel].display_data=0;
dispose_step0=0;
break;
}//switch mode
}
//*********************************------------------------------//
/*读函数*/
//********************************-------------------------------//
void read_e2(void)
{
unsigned char data i,j,m,str10[16];
i=0;
for (j=0;j<16;j=j+2)
{
begn_read:
str10[j]=read_24c021(j);
str10[j+1]=read_24c021(j+1);
if(i<25){
if(str10[j]!=str10[j+1])
{
i=i+1;
goto begn_read;
}
else
i=0;
}
else
i=0;
}
device_address=str10[0];
send_buffer1[0]=0x68;
send_buffer1[1]=device_address;
send1_buffer1[0]=0x68;
send1_buffer1[1]=device_address;
moduel_number=str10[2];
for (j=0;j<6;j++)
{
chanel_number[j]=str10[j*2+4];
moduel[j].use_chanel=str10[j*2+4];
}
for (i=0;i<moduel_number;i++)
{
for(j=0;j<chanel_number[i];j++)
{
chanel_str[i][j].name=read_24c021(i*32+j*4+0x10); //读名称
chanel_str[i][j].title=read_24c021(i*32+j*4+0x10+1);//读标题
m=read_24c021(i*32+j*4+0x10+2);//量程
chanel_str[i][j].scale=m*10;
chanel_str[i][j].mode=read_24c021(i*32+j*4+0x10+3);//模式
}
}
}
uchar read_24c021(uchar pp)
{
unsigned char kld;
control_write_e2=0;
str24c021();
w24c021(0xa0);
w24c021(pp);
str24c021();
w24c021(0xa1);
kld=rd24c021();
stop24c021();
ldelay(2);
control_write_e2=1;
return (kld);
}
void write_24c021(uchar tt,uchar dd)
{
EA=0;
control_write_e2=0;
str24c021();
w24c021(0xa0);
w24c021(tt);
w24c021(dd);
stop24c021();
ldelay(10);
control_write_e2=1;
EA=1;
}
//*********************************------------------------------//
/*公共函数*/
//********************************-------------------------------//
void init_display(void)
{
switch(chanel_str[moduel_display_step][chanel_display_step].name) //名称
{
case 1:
{
display_name="一号";//&name_1[];
break;
}
case 2:
display_name="二号";//name_2[];
break;
case 3:
display_name="三号";//name_3[];
break;
case 4:
display_name="一次";//name_4[];
break;
case 5:
display_name="二次";//name_5[];
break;
default:
display_name="二次";//name_5[];
break;
}//switch name
switch(chanel_str[moduel_display_step][chanel_display_step].title) //标题
{
case 1:
display_title="汽包液位";//title_1[];
display_unit="mmHg";//unit_height[];
break;
case 2:
display_title="蒸汽压力";//title_2[];
display_unit="KPa";//unit_pressure[];
break;
case 3:
display_title="蒸汽温度";//title_3[];
display_unit="℃";//unit_temperature[];
break;
case 4:
display_title="补水压力";//title_4[];
display_unit="KPa";//unit_pressure[];
break;
case 5:
display_title="进水压力";//title_5[];
display_unit="KPa";//unit_pressure[];
break;
case 6:
display_title="回水压力";//title_6[];
display_unit="KPa";//unit_pressure[];
break;
case 7:
display_title="进水温度";//title_7[];
display_unit="℃";//unit_temperature[];
break;
case 8:
display_title="回水温度";//title_8[];
display_unit="℃";//unit_temperature[];
break;
default:
display_title="回水温度";//title_8[];
display_unit="℃";//unit_temperature[];
break;
}//swictch title unit
switch(chanel_str[moduel_display_step][chanel_display_step].mode) //输入模式
{
case 1:
display_mode="0-10MA"; //mode1
break;
case 2:
display_mode="4-20MA";
//mode2
break;
case 3:
display_mode="温度 ";
break;
default:
display_mode="错误";
break;
}//switch mode
}
void initial(void) //初始化液晶
{
write(0,0x3f); /* open the displayer */
write(2,0x3f);
write(0,0xc0); /* set scan from the first line */
write(2,0xc0);
clear(); /* clear screen */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -