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

📄 6 wendu.c

📁 一些驱动程序和显示程序及传感器的简单应用,再软件和硬件上全部调试通过,可以直接使用
💻 C
📖 第 1 页 / 共 2 页
字号:

/* 等待应答脉冲 */
void RxWait(void)
{
    uint i;
    while(DQ);
    while(~DQ);         // 检测到应答脉冲 
    i = 4;
    while (i>0) i--;
}

/* 读取数据的一位,满足读时隙要求 */ 
bit RdBit(void)
{
    uint i;
    bit b;
    DQ = 0;
    i++;
    DQ = 1;
    i++;i++;            // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
    b = DQ;
    i = 8;
    while(i>0) i--;
    return (b);
}

/* 读取数据的一个字节 */
uchar RdByte(void)
{
    uchar i,j,b;
    b = 0;
    for (i=1;i<=8;i++)
    {
        j = RdBit();
        b = (j<<7)|(b>>1);
    }
    return(b);
}

/* 写数据的一个字节,满足写1和写0的时隙要求 */
void WrByte(uchar b)
{
    uint i;
    uchar j;
    bit btmp;
    for(j=1;j<=8;j++)
    {
        btmp = b&0x01;
        b = b>>1;       // 取下一位(由低位向高位)
        if (btmp)
    	{
            /* 写1 */
            DQ = 0;
        	i++;
                        i++;    // 延时,使得15us以内拉高
            DQ = 1;
            i = 8;
            while(i>0) i--; // 整个写1时隙不低于60us 
       	}
        else
    	{
            /* 写0 */
            DQ = 0;			
            i = 8;
            while(i>0) i--; // 保持低在60us到120us之间
            DQ = 1;
        	i++;
        	i++;
    	}
    }
}

/* 启动温度转换 */
void convert(void)
{
    TxReset();          // 产生复位脉冲,初始化DS18B20
    RxWait();           // 等待DS18B20给出应答脉冲
    delay2(1);          // 延时
    WrByte(0xcc);               // skip rom 命令
    WrByte(0x44);               // convert T 命令
}

/* 读取温度值 */
void RdTemp(void)
{
    TxReset();          // 产生复位脉冲,初始化DS18B20 
    RxWait();           // 等待DS18B20给出应答脉冲
    delay2(1);          // 延时
    WrByte(0xcc);               // skip rom 命令
    WrByte(0xbe);               // read scratchpad 命令
    tplsb = RdByte();           // 温度值低位字节(其中低4位为二进制的“小数”部分)
    tpmsb = RdByte();           // 高位值高位字节(其中高5位为符号位)		
}

void cmpare(void)
{   
      alert=0;
   if(num[tem1[1]]>d[0]) alert=1;
   else if(num[tem1[1]]==d[0]) 
     {if(num[tem1[2]]>=d[1])  alert=1;
      else alert=0;
      }
    else alert=0;
     
}

tempreture()
{
      uchar i,j;
      lcd_wrcmd(0x80);
       for(i=0;i<15;i++)
       lcd_wrdata(str2[i]);
    
    while(1)
    {
      delay2(1);
      convert();
      delay2(500);
      RdTemp();
      temp1=(tpmsb<<4)|(tplsb>>4);
      temp2=tplsb&0x0f;
/*    for(i=0;i<3;i++)
     {  k=10^(2-i); 
      tem1[i]=temp1/k;
       temp1=temp1%k;
       lcd_wrcmd(0xc0+i);
       lcd_wrdata(num[tem1[i]]); 
       }  
       lcd_wrdata('.');
       temp2=temp2*625;
        for(i=0;i<4;i++)
     { tem2[i]=temp2/(10^(3-i));
       temp2=temp2%(10^(3-i));
       lcd_wrcmd(0xc4+i);
       lcd_wrdata(num[tem2[i]]); 
       } 
       lcd_wrdata(2);
       lcd_wrdata(3);

*/   
         j=getkey();             //返回
         if(j==0)
         {  lcd_wrcmd(1);
           state=1;
           break;
          }

      tem1[0]=temp1/100;
       temp1=temp1%100;
      tem1[1]=temp1/10;
       temp1=temp1%10;
       tem1[2]=temp1;



       temp2=temp2*625;
       tem2[0]=temp2/1000;
       temp2=temp2%1000;
       tem2[1]=temp2/100;
       temp2=temp2%100;
       tem2[2]=temp2/10;
       temp2=temp2%10;
       tem2[3]=temp2;  

       lcd_wrcmd(0xc0);    //显示当前温度
      for(i=0;i<3;i++)
       lcd_wrdata(num[tem1[i]]);

       lcd_wrdata('.');

       lcd_wrcmd(0xc4);
      for(i=0;i<4;i++)
        lcd_wrdata(num[tem2[i]]);
        lcd_wrdata(2);
        lcd_wrdata('C'); 
    	  
       lcd_wrcmd(0xcc);    //显示比较温度
        for(i=0;i<2;i++)
        lcd_wrdata(d[i]);
        lcd_wrdata(2);
        lcd_wrdata('C'); 

      cmpare();     //比较

     	 
    
        
      }

}
       


/*tempreture()
{ uchar i;
lcd_wrcmd(offset+0x00);
    for(i=0;i<4;i++)   
     {
       lcd_wrdata(d[i]);    
      } 
} */



input()
{     
       uchar i,j,cnt=0;  // 假如将cnt定义成全局变量,当退出这个界面时,cnt仍然保存原来的值        
       lcd_wrcmd(0x80);  //会出现光标乱跳的错误
       lcd_wrcmd(0xce);
       lcd_wrdata(2);
       lcd_wrdata('C');
       lcd_wrcmd(0x81);
       for(i=0;i<13;i++)lcd_wrdata(am[i]);
       lcd_wrcmd(0x0f);
       lcd_wrcmd(0xc0);
       while(1)                  //按键处理
       { 
           i=getkey();
           
            if(i==0)
            {
                 state=1;
                 lcd_wrcmd(0x0c);
                 lcd_wrcmd(1);
                 lcd_wrcmd(0x80);
            	 break;
        	}
            else if(i==2)
    		{
                cnt=0;      			 					 
                lcd_wrcmd(0xc0);
                for(j=0;j<=10;j++)
                lcd_wrdata(' ');
                lcd_wrcmd(0xc0);    
    		}
            else if(i<16)
           {     cnt++;
                 if(cnt<=2)
        		 	
                 {     lcd_wrcmd(0xc0+cnt-1);
                       lcd_wrdata(table[i]);
                        d[cnt-1]=table[i];
                       	
                 }	
            	 			 
                 else
        		 {	 
                     cnt=0;					 					 
                     lcd_wrcmd(0xc0);
                     for(j=0;j<=3;j++)
                         lcd_wrdata(' ');
                     lcd_wrcmd(0xc0);
                 }
            }
    	}
     
}

////////////////////////////////////////////////////////////////////////////////////
menu()
{
     uchar i,ii,cnt=1;

     lcd_wrcmd(0x83);
     for(i=0;i<10;i++)
         lcd_wrdata(str4[i]);
     lcd_wrcmd(0xc3);
     i=0;
     while(str5[i]!='\0')
     {
        lcd_wrdata(str5[i]);
        i++;
     }
     lcd_wrcmd(0x80);
     lcd_wrdata('-');
     lcd_wrdata('>');


     while(1)
     {
         ii=getkey();
       ///////////////////////////翻屏///////////////////////////////
         if(ii==2)        
         {   cnt++;
             if(cnt==5) cnt=1;
             if(cnt==1)
        	 {
                 //////////////////////
                 // ->1: FREQENCY
                 //	  2: PHASE
                 /////////////////////
                 lcd_wrcmd(1);//clear
                 lcd_wrcmd(0x83);        //frequency
                 for(i=0;i<10;i++)
                     lcd_wrdata(str4[i]);

                 lcd_wrcmd(0xc3);       //phase
                 i=0;
                  while(str5[i]!='\0')
                  {
                       lcd_wrdata(str5[i]);
                       i++;
                  }
                  lcd_wrcmd(0x80);
                  lcd_wrdata('-');
                  lcd_wrdata('>');      	     
        	 }

             else if(cnt==2)
        	 {
                 //////////////////////
                 //     1: FREQENCY
                 //   ->2: PHASE
                 /////////////////////
                 lcd_wrcmd(1);//clear

                 lcd_wrcmd(0x83);        //frequency
                 for(i=0;i<10;i++)
                     lcd_wrdata(str4[i]);

                 lcd_wrcmd(0xc3);       //phase
                 i=0;
                  while(str5[i]!='\0')
                  {
                       lcd_wrdata(str5[i]);
                       i++;
                  }
                  lcd_wrcmd(0xc0);
                  lcd_wrdata('-');
                  lcd_wrdata('>');
        	 }
             else if(cnt==3)
        	 { 

                 //////////////////////
                 //     2: PHASE
                 //  -> 3: Amplitude 
                 /////////////////////
                 lcd_wrcmd(1);

                 lcd_wrcmd(0xc3);           //Amplitude 
                 for(i=0;i<8;i++)
                     lcd_wrdata(str6[i]);        

                  lcd_wrcmd(0x83);
                  i=0;
                  while(str5[i]!='\0')      //phase
                  {
                       lcd_wrdata(str5[i]);
                       i++;
                  }
                  lcd_wrcmd(0xc0);
                  lcd_wrdata('-');
                  lcd_wrdata('>');
        	 }
             else if(cnt==4)
        	 {

                 //////////////////////
                 //     3: Amplitude 
                 //	 -> 4: HELP
                 /////////////////////
                 lcd_wrcmd(1);
                 lcd_wrcmd(0x83);           //setting
                 for(i=0;i<8;i++)
                     lcd_wrdata(str6[i]);        
                 lcd_wrcmd(0xc3);
                 for(i=0;i<7;i++)
                     lcd_wrdata(str7[i]);   //help				
                 lcd_wrcmd(0xc0);
                 lcd_wrdata('-');
                 lcd_wrdata('>'); 
        	 }
    		 
            		 		    
    	 }
/////////////////////////OK进入///////////////////////////////////////
         else if(ii==0)
    	 {
             if(cnt==1)
        	 {
                 state=2;
                 lcd_wrcmd(1);
            	 break;
        	  }
              else if(cnt==2)
        	  {
                  state=3;
                  lcd_wrcmd(1);
            	  break;
        	  }
              else if(cnt==3)
        	  {
                  state=4;
                  lcd_wrcmd(1);
            	  break;
              }				    
              else if(cnt==4)     //help
        	  {
                  state=5;
                  lcd_wrcmd(1);
            	  break;
        	  }
         }
////////////////////////快捷键///////////////////////////////////////////
         else if(ii==15)
    	 {
              state=2;
              lcd_wrcmd(1);
              break;
    	 }
         else if(ii==11)
    	 {
              state=3;
              lcd_wrcmd(1);
              break;
    	 }
         else if(ii==7)
    	 {
              state=4;
              lcd_wrcmd(1);
              break;
    	 }
         else if(ii==3)
    	 {
               state=5;
              lcd_wrcmd(1);
               break;
         }    


     }




}


help()
{
    uchar i,ii;
    lcd_wrcmd(0x80);
    for(i=0;i<16;i++)
    {
        lcd_wrdata(he[i]);
    }
    while(1)
    {
        ii=getkey();
        if(ii!=0xff)
    	{
            lcd_wrcmd(1);
            state=1;
            break;
    	 }
    	
        
    }

}


main()
{
       lcd_bus=0xff;
       lcd_ini();
    while(1)
       {
           if(state==0)welcome();
           else if(state==1)menu();
           else if(state==2)voltage();
           else if(state==3)tempreture();
           else if(state==4)input();
           else if(state==5)help();
       }
           
}
    		



                

⌨️ 快捷键说明

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