📄 main.c
字号:
// 24C64数据存放
//00 page DS18B20的序列号
//01 page
// 00 01 02 03 04 05 06
// 序列号个数 下限 上限 下限负号 上限负号 本机编号 显示模式
/**************** RS485 ***************************************/
// 00 奇 偶
// 本机编号 传感器编号 温度/FE
//发送:AA + LINE + C2 + CHECK + 55
//接收:04 + C2 + 采集器号+奇+偶+''''''''''+传感器总数+SMOKE+03
/******************************************************************/
#include<w78e58b.h>
#include<intrins.h>
#include<function_and_library.h>
#include<ch451_key.h>
#include<math.h>
void send(unsigned char m);
void start(void);
void delay_start(int i);
void lcd_screen_blank(void);
void display_set(void);
void found_new(void);
void error(void);
bit finding(void);
void display_temp(unsigned i,unsigned char j,short int temp);
void display_temp_6(unsigned i,unsigned char j,short int temp);
void display_temp_single(unsigned i,unsigned char j,short int temp);
void delay_1s(unsigned int hhhh);
void initialization();
void ch451_init(void);
void ch451_write(unsigned short int command);
static bit key_flag;
void key_delay(int);
void key(void);
void off(void);
void myselfe_number(void);
void myselfe_number_1(void);
void memery_error(void);
short int match_ds2438(unsigned char iic_read[]);
void setup_succeed(void);
void move_number(unsigned char num1);
bit write_ds2438_flag;
bit up_temp;
bit down_temp;
bit flag_exit;
bit flag_exit_ok;
static unsigned int ok_n_times;
/************** main function ********************************************/
void main(void)
{
bit fff;
unsigned char i,z,j,or;
short int temp;
bit display_mode_flag;
bit display_mode_flag_single;
bit first_clear;
key_flag=0;
or=0;
up_temp=0;
down_temp=0;
write_ds2438_flag=0;
display_mode_flag=0;
call=1;
flag_exit=0;
flag_exit_ok=0;
led_rs485=0;
led=0;
first_clear=0;
// iic_read[0]=20;iic_read[6]=6;
// write_iic_data(1,&iic_read,0,8);delay_iic();
// total=iic_read[0];
// read_iic_data(2,&iic_read,24,8);delay_iic();
initialization();
EX1=1; // out interrupt
ES=0; //串口中断
PX1=0; // 优先级
IT1=1; // 边沿触发(下降沿有效)
read_iic_data(1,&iic_read,0,8);delay_iic();
if(iic_read[6]==8){display_mode_flag=1;} // choice 0 for 8
else display_mode_flag=0;
if(iic_read[6]==1&iic_read[0]<=6){display_mode_flag_single=1;}
else display_mode_flag_single=0;
while(1)
{ ES=0;
fff=finding();if(fff){found_new();display_set();}
ES=1;
// if(key_flag!=0){ES=0;key();ES=1; if(display_mode_flag_single){first_clear=0;}} // key
ds18b20_start();ds2438_start();
ES=0;
read_iic_data(1,&iic_read,0,8); // driver number
z=iic_read[0];
t_buf[0]=iic_read[5];//本机编号 RS485
sensor_total=iic_read[0];//传感器总数 RS485
ES=1;
if(display_mode_flag) // 8/1
{
if(z%8==0){or=1;}else or=0;
for(j=0;j<=z/8-or;j++)
{ led=0; // ES=1;
delay_1s(35000); ES=0; // led free off
clear_lcd_screen();
if(key_flag!=0){key();if(display_mode_flag_single){first_clear=0;}} //key
for(i=1;i<=8;i++)
{
read_iic_data(0,&iic_read,j*64+(i-1)*8,8);
temp=0xffff;
if(iic_read[0]==0x28){led=1;temp=match_temperature(&iic_read); }
if(iic_read[0]==0x26){led=1;temp=match_ds2438(&iic_read);} // temp=0x00f8;
display_temp(j,i,temp);
led=0;
if(z<=j*8+i){break;}
} ES=1;
}
}
else // 6/1
{
if(z%6==0){or=1;}else or=0;
for(j=0;j<=z/6-or;j++)
{
delay_1s(35000); ES=0;
if(!display_mode_flag_single){ first_clear=0; } // 本机编号 }
if(key_flag!=0){key();if(display_mode_flag_single){first_clear=0;}} //key
for(i=1;i<=6;i++)
{
myselfe_number_1();
read_iic_data(0,&iic_read,j*48+(i-1)*8,8);
temp=0xffff;
if(iic_read[0]==0x28){led=1;temp=match_temperature(&iic_read);}
if(iic_read[0]==0x26){led=1;temp=match_ds2438(&iic_read);}
if(!first_clear){clear_lcd_screen();first_clear=1; myselfe_number_1(); } // 本机编号 }
if(display_mode_flag_single)
display_temp_single(j,i,temp);
else display_temp_6(j,i,temp);
led=0;
if(z<=j*6+i){break;}
} ES=1;
}
}
call=1;
}
}
/**************** start display ****************************************/
void start(void)
{
unsigned char o1,o2;
delay_time(2);
initialization_led_screen();
write_byte(0,0,0,&number[19]); //write input a byte blank;
write_word(0,0,8,&chinese[0]); //write input a word "韦"
write_word(0,0,24,&chinese[1]); //write input a word "安"
write_word(0,0,40,&chinese[2]); //write input a word "博"
write_word(0,0,56,&chinese[3]); //write input a word "电"
write_word(1,0,8,&chinese[4]); //write input a word "力"
write_word(1,0,24,&chinese[5]); //write input a word "科"
write_word(1,0,40,&chinese[6]); //write input a word "技"
write_byte(1,0,56,&number[19]); //write input a byte blank
write_byte(0,2,0,&number[19]); //write input a byte blank;
write_byte(0,2,8,&number[19]); //write input a byte blank;
write_word(0,2,16,&chinese[7]); //write input a word "温"
write_word(0,2,32,&chinese[8]); //write input a word "度"
write_word(0,2,48,&chinese[9]); //write input a word "巡"
write_word(1,2,0, &chinese[10]); //write input a word "测"
write_word(1,2,16,&chinese[11]); //write input a word "系"
write_word(1,2,32,&chinese[12]); //write input a word "统"
write_byte(0,2,0,&number[19]); //write input a byte blank;
write_byte(0,2,0,&number[19]); //write input a byte blank;
write_byte(0,4,0,&number[19]); //write input a byte blank;
write_byte(0,4,8,&number[19]); //write input a byte blank;
write_byte(0,4,16,&number[19]); //write input a byte blank;
write_word(0,4,24,&chinese[13]); //write input a word "终"
write_word(0,4,40,&chinese[14]); //write input a word "端"
write_word(0,4,56,&chinese[15]); //write input a word "采"
write_word(1,4,8, &chinese[16]); //write input a word "集"
write_word(1,4,24,&chinese[17]); //write input a word "器"
write_byte(1,4,40,&number[19]); //write input a byte blank;
write_byte(1,4,48,&number[19]); //write input a byte blank;
write_byte(1,4,56,&number[19]); //write input a byte blank;
write_byte(0,6,0,&number[19]); //write input a byte blank;
write_word(0,6,8,&chinese[18]); //write input a word "本"
write_word(0,6,24,&chinese[19]); //write input a word "机"
write_word(0,6,40,&chinese[20]); //write input a word "编"
write_word(0,6,56,&chinese[21]); //write input a word "号"
write_byte(1,6,8,&number[22]); //write input a byte ":"
read_iic_data(1,&iic_write[0],5,1); ///////???????????
o1=iic_write[0]/10;
o2=iic_write[0]%10;
write_byte(1,6,16,&number[0]);
write_byte(1,6,24,&number[o1]);
write_byte(1,6,32,&number[o2]);
delay_1s(10000);
delay_1s(30000);
}
/**************** display iic blank ********************************/
void lcd_screen_blank(void)
{
unsigned int j,i;
unsigned int hhhh;
bit ff;
hhhh=0;
for(i=0;i<8;i++)
{iic_read[i]=0x00;}
iic_read[2]=80;
iic_read[1]=0;
iic_read[3]=0;
iic_read[4]=0;
iic_read[5]=0;
iic_read[7]=0;
write_iic_data(1,&iic_read,0,8); // 初始温度上限
clear_lcd_screen();
write_word(0,3,12,&chinese[27]); //write input a word "存储器无记录!“
write_word(0,3,28,&chinese[28]);
write_word(0,3,44,&chinese[17]);
write_word(0,3,60,&chinese[29]);
write_word(1,3,12,&chinese[30]);
write_word(1,3,28,&chinese[31]);
write_byte(1,3,44,&number[23]);
while(1){if(base_time==1){ hhhh++;if(hhhh>40000){break;}}}
clear_lcd_screen();
write_word(0,2,10,&chinese[22]); // write input a word "请连接传感器!
write_word(0,2,26,&chinese[32]);
write_word(0,2,42,&chinese[33]);
write_word(0,2,58,&chinese[25]);
write_word(1,2,10,&chinese[26]);
write_word(1,2,26,&chinese[17]);
write_byte(1,2,42,&number[23]);
write_word(0,4,20,&chinese[34]); // write input 搜索中
write_word(0,4,36,&chinese[35]);
write_word(0,4,50,&chinese[36]);
i=2;
while(1)
{
write_byte(1,4,i,&number[24]);
i+=6;
if(i>32){i=2;for(j=8;j<35;j+=8){ write_byte(1,4,j,&number[19]); }} //clear
while(1){if(base_time==1){ hhhh++;if(hhhh>2000){break;}}} // point while
ff= finding();
if(ff){break;}
}
}
/**************** display before set ************************************/
void display_set(void)
{
unsigned char z,x,y; // 系统状态
read_iic_data(1,&iic_read[0],0,6);
clear_lcd_screen();
write_word(0,0,32,&chinese[11]);
write_word(0,0,48,&chinese[12]);
write_word(1,0,0,&chinese[60]);
write_word(1,0,16,&chinese[61]);
write_word(0,2,4,&chinese[42]); //write input a word "已"
write_word(0,2,20,&chinese[23]); //write input a word "安装硬件"
write_word(0,2,36,&chinese[24]);
write_word(0,2,52,&chinese[40]);
write_word(1,2,4,&chinese[41]);
write_byte(1,2,20,&number[22]);
x=iic_read[0]/10; //
write_byte(1,2,28,&number[x]);
x=iic_read[0]%10;
write_byte(1,2,36,&number[x]);
write_word(0,4,4,&chinese[7]); // 温度下限
write_word(0,4,20,&chinese[8]);
write_word(0,4,36,&chinese[45]);
write_word(0,4,52, &chinese[44]);
write_byte(1,4,4,&number[22]);
write_byte(1,4,32,&number[26]);
write_byte(1,4,40,&number[12]);
z=iic_read[1]/100;
write_byte(1,4,12,&number[z]);
x=(iic_read[1]-z*100)/10;
write_byte(1,4,20,&number[x]);
y=(iic_read[1]-z*100-x*10)%10;
write_byte(1,4,28,&number[y]);
if(iic_read[3]==1) {write_byte(1,4,12,&number[25]);}
// else if(z==0&x==0){write_byte(1,2,20,&number[25]);} // 正负号!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -