📄 caiji.c
字号:
#include<w77e58.h>
#include<stdio.h>
#include<absacc.h>
#define END_WORD 0x0d //结束字符
#define TH0_TIME 0xdc//10ms中断 0xfc //定时中断时间间隔
#define TL0_TIME 0 //0x66
#define CPU_RUN_TIME 25 //闪烁时间
#define INTERVAL_SEND_TIME 50 //发送间隔
#define CPU_SHOW_TIME 500 //显示变换时间 5秒
#define WATCH_SEND_TIME 360 //监视发送半小时不下发,即复位
//*显示参数*//
#define uchar unsigned char
#define uint unsigned int
#define ESC 15
#define ENTER 14
#define SET 10
#define CHECK 11
#define UP 12
#define DOWN 13
#define NONE 255
void initial(void);
void clear(void);
void wait_key(void);
void delay(void);
void ldelay(unsigned int i);
void display_cycle(void);
void print(unsigned int hzb,unsigned char h,unsigned char v);
void writebig(char zf,unsigned char h,unsigned char v);
void kbscan(void);
void write(unsigned char lrcd,unsigned char cd);
unsigned int addres(unsigned char x,unsigned char y,char bytes);
void whz(unsigned int hz,unsigned char h,unsigned char v);
void dwordtobcd(uint wa,unsigned char bytes);
void ddatatobcd(uchar chdata);
void putstring0(char bytes,char h);
void putstring1(char bytes,char h);
void putstring(char l);
void putstring_left(char l);
void get_address(void); //本设备的地址
void get_moduel_num(void); //设置获得模块数量
void get_chanel_num(void); //每个模块的通道数量
void get_chanel_param(void); //通道参数
void read_e2(void);
void init_display(void);
void w24c021(uchar k);
void str24c021(void);
void stop24c021(void);
uchar rd24c021(void);
void display_var(uchar code * dispt,uchar h,uchar v);
void pass(void);
void write_param(uchar put_where);
void write_moduel(unsigned char mod);
void write_chanel(unsigned char modu,unsigned char cha);
void write_mode(unsigned char modu_4,unsigned char cha_4);
void write_scale(unsigned char modu_3,unsigned char cha_3);
void write_name(unsigned char modu_1,unsigned char cha_1);
void write_title(unsigned char modu_2,unsigned char cha_2);
void write_e2(unsigned char modue1,unsigned char chane1,unsigned char kind,unsigned char position);
void display_void(void);
void display_param(void);
void display_value(void);
void check_chanel_number(void);
void check_chanel_param_void(void);
void check_chanel_now(uchar p,uchar b);
void check_chanel_display(uchar ccd);
uchar read_24c021(uchar pp);
void write_24c021(uchar tt,uchar dd);
unsigned char code input_chanel_number1[]="1:通道1";
unsigned char code input_chanel_number2[]="2:通道2";
unsigned char code input_chanel_number3[]="3:通道3";
unsigned char code input_chanel_number4[]="4:通道4>>";
unsigned char code input_chanel_number5[]="5:通道5";
unsigned char code input_chanel_number6[]="6:通道6";
unsigned char code input_chanel_number7[]="7:通道7";
unsigned char code input_chanel_number8[]="8:通道8";
unsigned char code input_moduel_number1[]="1:模块1";
unsigned char code input_moduel_number2[]="2:模块2";
unsigned char code input_moduel_number3[]="3:模块3";
unsigned char code input_moduel_number4[]="4:模块4>>";
unsigned char code input_moduel_number5[]="5:模块5";
unsigned char code input_moduel_number6[]="6:模块6";
unsigned char code unit_temperature[]="℃";
unsigned char code unit_pressure[]="KPa";
unsigned char code unit_height[]="mmHg";
unsigned char code wait[]="请稍候...";
unsigned char code save[]="正在保存数据";
unsigned char code * display_name;
unsigned char code * display_title;
unsigned char code * display_unit;
unsigned char code * display_mode;
unsigned char data keyvalue;
unsigned char xdata keybuff[16];
unsigned char xdata displaybuff[8];
unsigned char xdata chanel_number[8];
unsigned char data device_address; //本设备的地址
struct chanel_display{
unsigned char name,title,mode; //mode 是模式
unsigned int scale; //量程
float display_data,real_data;
};
struct chanel_display xdata chanel_str[6][8];
unsigned char idata mode;
unsigned char idata moduel_display_step=0;
unsigned char idata chanel_display_step=0;
unsigned char data nb_display_step=0;
//*显示参数结束*//
sbit control=P1^5;
sbit RUN_CPU=P3^2;
sbit control_write_e2=P3^3;
sbit control_485=P3^4;
sbit SDA=p1^7;//数据线
sbit SCL=p3^5;//时钟线
bit cpu_run_flag;
bit cpu_show_flag;
bit exchange_flag;
bit watch_send_flag;
bit watch_up_send_flag;
unsigned char data cpu_run_reg;
unsigned int xdata cpu_show_reg;
unsigned int xdata watch_send_reg;
unsigned int xdata watch_up_send_reg;
unsigned char idata chanel_n; //通道N
unsigned char idata address; //现在的地址
//unsigned char data command_send_down;//下发命令
struct moduel_str{
unsigned char moduel_station,use_chanel;
unsigned char chanel_data[8][8];
};
struct moduel_str xdata moduel[6];
unsigned char data moduel_number; //模块数量
unsigned char data interval_send_moduel;//定时招数的模块
unsigned char data interval_send_chanel;//定时招数的通道
unsigned char xdata interval_send_reg; //定时招数时间间隔寄存器
unsigned char data interval_send_nb; //定时发送指针
unsigned char data interval_receive_nb; //
unsigned char data send_all_nb;
bit interval_send_flag=0;
//*收发相关参数
unsigned char xdata receive_buffer0[60]; //下行收缓存
unsigned char xdata send_buffer0[15]; //下行发缓存
unsigned char xdata receive_bit_number0; //下行收数据个数
unsigned char xdata receive_step;
bit receive_over_flag0=0;
bit receive_temprature_flag=0;
unsigned char xdata receive_buffer1[6]; //上行收缓存
unsigned char xdata send_buffer1[400]; //上行发缓存
unsigned char xdata send1_buffer1[400];
unsigned char xdata * transmit;
unsigned char data send1_length1;
unsigned char xdata * send1_finger1;
unsigned char idata send1_number1;
unsigned char data receive_bit_number1;
bit receive_over_flag1=0;
unsigned char xdata send_length0; //下行发送个数
unsigned char xdata *send_finger0;
unsigned char data send_length1; //上行发送个数
unsigned char xdata *send_finger1;
unsigned char idata send_number1;
uchar check_sum(unsigned xdata up_begin,unsigned char xdata length);
unsigned char xdata *send_bus;
unsigned char idata receive_moduel;
unsigned char idata receive_chanel;
void send_word_down(void);
unsigned char data dispose_step0;
unsigned char data dispose_step1;
float idata real_data1;
float xdata display_data;
void asc_to_data(void);
void temp_to_data(void);
void data_to_display(void);
void dwordtobcd2(uint wa2);
void putstring5(uchar l);
unsigned int xdata dt1;
float xdata dt2;
void init(){
IE=0;
IP=0x42;
CKCON=0XC7;//11000111B;
TH0=TH0_TIME;
TL0=TL0_TIME;
TR0=1;
TR1=1;
/*串口1*/
SCON1=0x50;
TMOD=0x21;
TH1=0xe8;//e8; //上传为1200
TL1=0xe8;//e8;
/*串口0*/
SCON=0x50;
T2CON=0x34;
T2MOD=0;
TL2=0Xdc; //拨特率下发为9600
TH2=0Xff;
RCAP2L=0Xdc;
RCAP2H=0Xff;
TCON=0X55;
PS1=1;
IE=0x52; //开中断
ES1=1;
PT1=1;
ES=1;
//需要初始化的参数
cpu_run_reg=CPU_RUN_TIME;
cpu_show_reg=CPU_SHOW_TIME;
watch_send_reg=WATCH_SEND_TIME;
watch_send_flag=0;
watch_up_send_reg=WATCH_SEND_TIME;
watch_up_send_flag=0;
receive_bit_number0=0;
receive_step=0;
dispose_step0=0;
dispose_step1=0;
control=1; //液晶控制脚为低,液晶被点亮
cpu_show_flag=1;
receive_bit_number1=0;
moduel_display_step=0;
chanel_display_step=0;
nb_display_step=1;
interval_send_nb=0;
interval_receive_nb=0;
}
//*********************************------------------------------//
/*中断函数*/
//********************************-------------------------------//
void serail0 () interrupt 4 using 3 {
unsigned char data c,d;
if(RI==1)
{
RI=0;
c=SBUF;
switch (receive_step)
{
case 0:
{
switch (c){
case 0x3e: //>
{
receive_buffer0[receive_bit_number0]=c;
receive_bit_number0++;
receive_step=1;
break;
}
default:
break;
}//switch c
break;
} //case 0
case 1:
{
if((receive_bit_number0<8)&&(c!=0x0d))
{
receive_buffer0[receive_bit_number0]=c; //C
receive_bit_number0++;
}
if(receive_bit_number0>8)
{
receive_bit_number0=0;
receive_step=0;
}
if(c==0x0d)
{
if(receive_bit_number0<7)
{
receive_over_flag0=1;
receive_temprature_flag=1;
for(d=receive_bit_number0;d<8;d++)
{
receive_buffer0[d]=0x0d;
}
}
else
receive_buffer0[receive_bit_number0]=c;
receive_over_flag0=1;
}
break;
} //与case 1;
default:
break;
} //与switch
}//if(ri)
else if(TI==1) //发送
{
TI=0;
send_length0--;
send_finger0++;
if(send_length0!=0)
{
SBUF=*send_finger0;
}
else if(send_length0==0)
{
control_485=0;
watch_send_reg=WATCH_SEND_TIME;
watch_send_flag=0;
}
}//ti对应
}/*void对应*/
void serail_1() interrupt 7 {
unsigned char data da,x,y,z;
if(RI_1==1)
{
// RI_1=0;
da=SBUF1;
switch(receive_bit_number1)
{
case 0:
if(da==0x68)
{
receive_buffer1[receive_bit_number1]=da;
receive_bit_number1++;
}
RI_1=0;
break;
case 1:
{
if(da==device_address)
{
receive_buffer1[receive_bit_number1]=da;
receive_bit_number1++;
RI_1=0;
break;
}
else
{
if(da==0x68)
receive_bit_number1=1;
else
receive_bit_number1=0;
}
RI_1=0;
break;
}
case 2:
{
receive_buffer1[receive_bit_number1]=da;
receive_bit_number1++;
RI_1=0;
break;
}
case 3:
{
receive_buffer1[receive_bit_number1]=da;
x=0;
send_number1=0;
send1_number1=0;
send1_length1=0;
send_length1=0;
send_bus=receive_buffer1;
y=check_sum(receive_buffer1,3); //校验和是否正确
if(y==receive_buffer1[3])
{
for(x=0;x<(moduel_number);x++)
{
for(y=0;y<(moduel[x].use_chanel);y++)
{
//************************************************
transmit=(uchar xdata *)(&chanel_str[x][y].real_data);
send1_buffer1[send1_number1+3]=*transmit;
send1_number1++;
transmit++;
send1_buffer1[send1_number1+3]=*transmit;
send1_number1++;
transmit++;
send1_buffer1[send1_number1+3]=*transmit;
send1_number1++;
transmit++;
send1_buffer1[send1_number1+3]=*transmit;
send1_number1++;
transmit++;
//*************************************************
}
}
//******************************************************************
send1_buffer1[2]=send1_number1/4;
send1_length1=send1_number1+3;
send1_buffer1[send1_length1]=check_sum(send1_buffer1,send1_length1);
send1_length1++;
send1_finger1=&send1_buffer1;
SBUF1=*send1_finger1;
//******************************************************************
}
receive_bit_number1=0;
receive_over_flag1=0;
RI_1=0;
break;
}
default:
receive_bit_number1=0;
RI_1=0;
break;
}
}
else if(TI_1==1)
{
TI_1=0;
//**************************************************
send1_length1--;
send1_finger1++;
if(send1_length1!=0)
{
SBUF1=*send1_finger1;
}
else
{
watch_up_send_reg=WATCH_SEND_TIME;
watch_up_send_flag=0;
}
//**************************************************
}
}
void service_t0() interrupt 1 using 2
{
unsigned char data i,k,l,m;
char data j;
TH0=TH0_TIME;
TL0=TL0_TIME;
if(cpu_run_reg!=0){
cpu_run_reg--;
}
else{
cpu_run_reg=CPU_RUN_TIME;
cpu_run_flag=1;
}
if(cpu_show_reg!=0)
{
cpu_show_reg--;
}
else
{
cpu_show_reg=CPU_SHOW_TIME;
cpu_show_flag=1;
if(watch_send_reg!=0)
{
watch_send_reg--;
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -