⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 自己写的测试程序,调试已通过,可以直接使用, 而且有的还有详细的注释.红外采集器软件
💻 C
📖 第 1 页 / 共 5 页
字号:
//     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 + -