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

📄 qq.c

📁 为一个油量测量系统的源程序,可以对任意形状的油箱进行设置匹配
💻 C
📖 第 1 页 / 共 3 页
字号:
                      }
                  key_data_update=false;
                 }
              
            }
       
        else  if (menu = zero_zero)
             {    
             	if (key_data_update==set)
             	  {         	
                  while (reflush!=data_reflush) x25045_feed();
                  chiefdata = count_image/circle_init;
                  reflush = false;	
                  
                    if (globe - chiefdata >= zero_zero_set)
                        {
                        x25045_feed();	
                        x25045_write_word(gas_zero_address,chiefdata);
                        x25045_write_word((gas_zero_address+2),0);
                        x25045_write_word((gas_zero_address+4),max_f);
                        x25045_write_word((gas_zero_address+6),max_l);
                      
                        x25045_write_word(gas_set_all,1);
                        menu = menu_set; 
                        }
                
                     else 
                         {
                          dispdata[0] = dis_off;                                  /*数码管全灭*/
                          dispdata[1] = dis_off;
                          dispdata[2] = dis_off;
                          dispdata[3] = dis_off;
                          display();
                          delay(hold_flash_time);
                                                 	
                    	  }
                
                   }
             	
         	}


        
        else if (menu==menu_set)
             {
             	 x25045_feed();
             if (key_data_update)
                 {
                  if (key_data_update==255)
                       {
                     	menu=menu_main;
                          if (index>0)
                          x25045_write_word(gas_set_all,index);
                          
                       }   
                  
                  else if (key_data_update==alt)
                      {                      	 
                      	 while (reflush!=data_reflush) x25045_feed();
                         reflush=false;  
                         chiefdata = count_image/circle_init;   
                         chiefdata = max_f-chiefdata;                 	
                         dis();
                         delay(hold_flash_time);
                         delay(hold_flash_time);
                      }                
                  
                  
                  
                                           
                  else if (key_data_update==set)
                      {
                      	 while (reflush!=data_reflush) x25045_feed();;
                      	 
                         reflush=false;  
                         chiefdata = count_image/circle_init;   
                         chiefdata = max_f-chiefdata;                 	
                         x25045_write_word((gas_set_address+4*index),chiefdata);
                         chiefdata=chiefdata;
                         
                         
                      dispdata[0] = dis_off;                                  /*数码管全灭*/
                      dispdata[1] = dis_off;
                      dispdata[2] = dis_off;
                      dispdata[3] = dis_off;
                      display();
                      delay(hold_flash_time);
                      
                      dis();
                      delay(hold_flash_time);
                      delay(hold_flash_time);
                      
                      
                      chiefdata=temp;
                      dis();
                      delay(hold_flash_time);
                      delay(hold_flash_time);
                      
                      dispdata[0] = dis_off;                                  /*数码管全灭*/
                      dispdata[1] = dis_off;
                      dispdata[2] = dis_off;
                      dispdata[3] = dis_off;
                      display();
                      delay(hold_flash_time);                
                                         
                                         
                                                                                                                                    
                      x25045_write_word((gas_set_address+4*index+2),temp);
                      
                      
                      index++;
                      x25045_write_word((gas_set_address+4*index),max_f);
                      
                      
                      x25045_write_word((gas_set_address+4*index+2),max_l);
                     
                      
                                                                 
                      }
                  key_data_update=false;
                 
                 }
             }
             
}



void display_init()                                  /*显示初始化*/
{
menu = menu_main;
temp = 1;

}






void menu_main_dis()
{
  switch(temp)
   {
    case  menu_max:  dispdata[3]=0x9E ;dispdata[2]=0x13 ;dispdata[1]= 0x11;dispdata[0]= 0x93;         break;              /*max*/
    case  menu_zero:  dispdata[3]=0x24 ;dispdata[2]=0x27; dispdata[1]= 0x61;dispdata[0]=0x0f5;         break;              /*zer*/
    case  menu_min:  dispdata[3]=0x0c ;dispdata[2]=0x13 ;dispdata[1]= 0x0f;dispdata[0]=0xd5 ;         break;              /*min*/
    case  menu_set:  dispdata[3]=0x98 ;dispdata[2]=0x49 ;dispdata[1]= 0x61;dispdata[0]= 0x73;         break;              /*set*/
    default: dispdata[3]=0x9E ;dispdata[2]=0x13 ;dispdata[1]= 0x11;dispdata[0]= 0x93; temp=1; break;              /*max*/
    }
display();
delay(20);

}





void display_srv()                                   /*显示服务程序*/
{
    switch (menu)
      {
      case menu_main: menu_main_dis();                                               break;
      case menu_max:  bin_bcd(temp);      bcd_dis_four();dispdata[3]=0x9e;display(); break;
      case menu_zero: bin_bcd(chiefdata); bcd_dis_four();dispdata[3]=0x24;display(); break;
      case menu_min:  bin_bcd(temp);      bcd_dis_four();dispdata[3]=0x0c;display(); break;
      case menu_set:  bin_bcd(temp);      bcd_dis_four();dispdata[3]=0x98;display(); break;  
      case zero_zero: bin_bcd(0);         bcd_dis_four();dispdata[3]=0x98;display(); break; 
      default:        menu_main_dis();                                               break;
      }
      delay(20);
}



void key_data()                                 /*键盘数据扫描程序*/
{
 
        x25045_feed();
        
        
    	//if(key==mode) 
         //      {
          //      key_data_update=mode;
                ///while (key==mode) x25045_feed();; 
           //     delay(10);
  	//	times=0;		/*按键加速计数器清零*/
          //      }
       
        if(key==255) 
               {
                key_data_update=255;
                ///while (key==mode) x25045_feed();; 
                delay(10);
  		times=0;		/*按键加速计数器清零*/
                }
  		
  		
  		else if(key==alt-1) 
               {
                key_data_update=alt;
                delay(10);
  		times=0;		/*按键加速计数器清零*/
                }

  		
  		
    	else if(key==up-1) 		/*加*/
    		{
                 if(times<15) {times++;temp++;delay(200);;}
    		 else if(times<150) {times++;temp++;delay(15);}
    		 else {times=151;temp++;delay(5);}
    		 
                 if(temp>maxdata){temp=0;}	
                 
                 if (menu==menu_main)  {if(temp> menu_set){temp=1;}  }
    		}

    	else if(key==down-1) 		/*减*/
    		{
    		if(times<15) {times++;temp--;delay(200);}
    		 else if(times<150) {times++;temp--;delay(15);}
    		 else {times=151;temp--;delay(5);}

    		 if(temp>maxdata){temp=maxdata;}
    		 
    		 if (menu==menu_main)  {if(temp<1){temp= menu_set;}  }
    		}

    	else if(key==set-1) 		/*确认*/
    		{ 
    		key_data_update = set; 
    		while (key==set-1) x25045_feed();;
    		delay(10);
    		times=0;		
    		}
    	else times=0;			/*按键加速计数器清零*/
    
    }
   
/*标定程序****最主要的一个键盘服务程序*/


/*按键处理模块结束+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/






/*x25045模块开始++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void x25045_outb(uchar outdata)  //单片机向X25045写数据函数
{uchar i;
  for(i=1;i<=8;i++)              //上升沿输入数据
    {x25045_sck=0;
     outdata=outdata<<1;
     x25045_si=CY;
     x25045_sck=1;
     }
  x25045_si=0;
}

uchar x25045_inb()                 //X25045输出数据给单片机函数		
{
  uchar i,j,k=0;
    for (i=1;i<=8;i++)
      {x25045_sck=1;              //下降沿输出数据测试
       x25045_sck=0;
       j=(x25045_so==1)?1:0;     //SO端口数据为1则J=1,否则J=0
       k=(k<<1)|j; 
      }
  return(k);
}

uchar x25045_rdsr()       //单片机向X25045写入读状态寄存器指令(RDSR),并读状态寄存器值         
{uchar i;
 x25045_sck=0;
 x25045_cs=0;
 x25045_outb(0x05);       //写入读状态寄存器指令(RDSR)    
 i=x25045_inb();          //读状态寄存器值
 x25045_sck=0;
 x25045_cs=1;
 return i;
}

void x25045_wipp()
{uchar i;
 uchar j;
 for (i=1;i<=99;i++)
 {
  j=x25045_rdsr();
  if ((j&0x01)==0) /*判断是否wip=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等待直到达到99次*/ 
    {break;}	  
 }
}


void x25045_wren()                      /*初始化函数之一,写使能函数*/
{	x25045_sck=0;
	x25045_cs =0;
	x25045_outb(0x06);
	x25045_sck=0;
	x25045_cs=1;
}

void x25045_wrdi()                      /*初始化函数之一,写不使能函数*/
{	x25045_sck=0;
	x25045_cs =0;
	x25045_outb(0x04);
	x25045_sck=0;
	x25045_cs=1;
}

void x25045_wrsr()                     /*初始化函数之一,写状态寄存器*/
{	x25045_sck=0;
	x25045_cs =0;
	x25045_outb(0x01);
	x25045_outb(0x00);	               /*看门狗时间设置*/
	x25045_sck=0;
	x25045_cs=1;
	x25045_wipp();
}

void x25045_wrbt(uint address,uchar indata)   /*写数据函数*/
{x25045_sck=0;
 x25045_cs=0;
 //x25045_outb((((uchar)(address-0xff))<<3)|0x02);/* send write instruction including msb of address */
 x25045_outb(((uchar)(address>>5)&0x08)|0x02);
 /*将高位地址左移3位与写入先导字相或,得到正确的先导字写入25045*/
 x25045_outb((uchar)(address));
 /*输出低位地址到25045*/
 x25045_outb(indata);
 /*写入数据到25045的对应单元*/
 x25045_sck=0;
 x25045_cs=1;
 x25045_wipp();
 /*检测是否写完*/
}



void x25045_write_word(uint address,uint indata)      /*写双字函数*/
{
uint error;
uchar i;	
union word_bytes tb1;
tb1.word=indata;
x25045_wren();
x25045_wrbt(address,tb1.bytes.b0);
x25045_wren();
x25045_wrbt(address+1,tb1.bytes.b1);
x25045_wrdi();

error=x25045_read_word(address);
while (error!=indata)
{

	x25045_feed();
	for (i=0;i<3;i++)
	    {
	    x25045_wren();
        x25045_wrbt(address,tb1.bytes.b0);
        x25045_wren();
        x25045_wrbt(address+1,tb1.bytes.b1);
        x25045_wrdi();
	   }
error=x25045_read_word(address);	   
}

}

uchar x25045_rdbt(uint address)           /*读数据函数*/
{uchar outdata;
 x25045_sck=0;
 x25045_cs=0;
// x25045_outb((((uchar)(address-0xff))<<3)|0x03);/* send write instruction including msb of address */
x25045_outb(((uchar)(address>>5)&0x08)|0x03);
 /*将高位地址左移3位与写入先导字相或,得到正确的先导字写入25045*/
 x25045_outb((uchar)(address));
 /*输出低位地址到25045*/
 outdata=x25045_inb();
 /*写入数据到25045的对应单元*/
 x25045_sck=0;
 x25045_cs=1;
 return(outdata);
}



uint x25045_read_word(uint address)      /*读双字函数*/
{union word_bytes tb1;
tb1.bytes.b0=x25045_rdbt(address);
tb1.bytes.b1=x25045_rdbt(address+1);
return(tb1.word);
}

void x25045_feed()                /*喂狗*/     
{	x25045_cs=0;
	_nop_();
	x25045_cs=1;	
}
 
void x25045_init()              /*初始化*/
{
x25045_wren();
x25045_wrsr();
x25045_wrdi();
}
/*x25045模块结束++++++++++++++++++++++++++++++++++++++++++++++++++++*/


#ifdef clear

void do_clear()
{
uchar i;
for (i=0;i<100;i++)
  {
x25045_feed();
x25045_write_word(i*2,0);
chiefdata=x25045_read_word(i*2);
dis();	
while (chiefdata!=0){x25045_write_word(i*2,0);chiefdata=x25045_read_word(i*2);}
 }
}

#endif


#ifdef check

void do_check()
{
while (1)
{
  chiefdata=key;
  dis();
  P0=255;
  delay(500);
  mode_led = led_on;
  delay(500);
         
  run_led  = led_on;
  delay(500);
          
  eror_led  = led_on;   
  delay(500);
      
  current_led= led_on;
  delay(500);
       
  hold_led= led_on;
  delay(500);
           
  min_led= led_on;
  delay(500);   
}
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -