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

📄 主机.c

📁 利用AD7705与热敏电阻来检测实际的温度
💻 C
📖 第 1 页 / 共 5 页
字号:
      {
       word=256*(w1[i]-0xa0)+w1[i+1]-0xa0;
       dis_word(j+3,0,0xf0);
      }
/* for(i=0,j=0;i<13;i=i+2,j++)
      {
       word=256*(w2[i]-0xa0)+w2[i+1]-0xa0;
       dis_word(j+3,1,0xf0);
      }*/
 P1=0xff;
 for(i=0;i<1000;i++)
     for(j=0;j<10;j++);
 while(P1!=0xee&&P1!=0xed&&P1!=0xeb&&P1!=0xe7&&P1!=0xde&&P1!=0xdd&&P1!=0xdb&&P1!=0xd7&&P1!=0xbe)
    check_key();
    b1=P1;
     send_byte(0xf4);
     switch(b1)
     {
       /*case 0x7d://0
            word='0';
            flag1=0;
            break;*/
       case 0xee://1
            word='1';
             sendbuf[1]=1;
            break;
       case 0xed://2
            word='2';
            sendbuf[1]=2;
            break;
       case 0xeb://3
            word='3';
            sendbuf[1]=3;
            break;
       case 0xe7://4
            word='4';
            sendbuf[1]=4;
            break;
       case 0xde://5
            word='5';
            sendbuf[1]=5;
            break;
       case 0xdd://6
            word='6';
            sendbuf[1]=6;
            break;
       case 0xdb://7
            word='7';
            sendbuf[1]=7;
            break;
       case 0xd7://8
            word='8';
            sendbuf[1]=8;
            break;
       case 0xbe://9
            word='9';
            sendbuf[1]=9;
            break;
     }
  for(i=0;i<1000;i++)
     for(j=0;j<10;j++);
 send_byte(0xf4);
 for(i=0,j=0;i<13;i=i+2,j++)
      {
       word=256*(w5[i]-0xa0)+w5[i+1]-0xa0;
       dis_word(j+3,0,0xf0);
      }
   for(i=0;i<1000;i++)
      for(j=0;j<10;j++);
  P1=0xff;
  while(P1!=0xee&&P1!=0xed)
    check_key();
  z=P1;
  send_byte(0xf4);
  if(z==0xee||z==0xed)
    {
     switch(z)
     {
       case 0xee://1
            word='1';
            times=1;
            sendbuf[2]=10;
            break;
       case 0xed://2
            word='2';
            times=2;
            sendbuf[2]=11;
            break;
     }
    dis_word(0x04,0,0xf9);
   }
   for(i=0;i<1000;i++)
      for(j=0;j<10;j++);
 sendbuf[3]=times;
 sendbuf[8]=sendbuf[1]+sendbuf[2]+sendbuf[3]+sendbuf[4]+sendbuf[5]+sendbuf[6]+sendbuf[7];
 send();
 send_byte(0xf4);
 for(i=0,j=0;i<9;i=i+2,j++)
      {
       word=256*(w6[i]-0xa0)+w6[i+1]-0xa0;
       dis_word(j+3,0,0xf0);
      }
 j=0;
 //////////////////////////////////////////
 while((RI==0)&&(j<100000)) //校准延时较长
         {
          j++;
         }
    if(j>=100000)
      overtime=1;
    else
    {
      overtime=0;
      RI=0;
     }
 ////////////////////////////////////////////
 if(overtime==0)
 {
   for(i=0;i<7;i++)
	    {
	       j1=0;
	       while(RI==0)
	            {
	               j1++;
	                  if(j1>1000)
	                    {
	                      break;				//超时退出
	                    }
	            }
	       RI=0;
	       if(j1>1000)
	         {
	          break;				//超时退出
	         }
	         buff[i]=SBUF;
	    }
    }
     if(j1>1000||overtime==1)
     {
       send_byte(0xf4);
       P1=0xff;
       for(i=0,j=0;i<3;i=i+2,j++)
        {
         word=256*(w3[i]-0xa0)+w3[i+1]-0xa0;
         dis_word(j+2,0,0xf0);
        }
       for(i=0;i<100;i++)
         for(j=0;j<100;j++);
     }
  if(j1<1000&&overtime==0)
   {
     send_byte(0xf4);
     for(i=0,j=0;i<3;i=i+2,j++)
        {
         word=256*(w4[i]-0xa0)+w4[i+1]-0xa0;
         dis_word(j+2,0,0xf0);
        }
       for(i=0;i<1000;i++)
         for(j=0;j<10;j++);
   }
   overtime=0;
   send_byte(0xf4);
   P1=0xff;
}

number()//编号
{
  uchar w3[]={"超时"};
  uchar w4[]={"成功"};
  uchar x;
     k=3;
     send_byte(0xf4);
     for(i=0,j=0;i<7;i=i+2,j++)
     {
      word=256*(www1[i]-0xa0)+www1[i+1]-0xa0;
      dis_word(j+3,0,0xf0);
     }
     P1=0xff;
     for(i=0;i<1000;i++)
       for(j=0;j<10;j++);
     while(P1!=0xee&&P1!=0xed&&P1!=0xeb&&P1!=0xe7&&P1!=0xde&&P1!=0xdd&&P1!=0xdb&&P1!=0xd7&&P1!=0xbe&&P1!=0x7d)
       check_key();
       x=P1;
       send_byte(0xf4);
     switch(x)
     {
       case 0x7d://0
            word='0';
            num=0;
            break;
       case 0xee://1
            word='1';
            num=1;
            break;
       case 0xed://2
            word='2';
            num=2;
            break;
       case 0xeb://3
            word='3';
            num=3;
            break;
       case 0xe7://4
            word='4';
            num=4;
            break;
       case 0xde://5
            word='5';
            num=5;
            break;
       case 0xdd://6
            word='6';
            num=6;
            break;
       case 0xdb://7
            word='7';
            num=7;
            break;
       case 0xd7://8
            word='8';
            num=8;
            break;
       case 0xbe://9
            word='9';
            num=9;
            break;
     }
  dis_word(0x04,2,0xf9);
  for(i=0;i<1000;i++)
     for(j=0;j<10;j++);
  sendbuf[1]=0x00;
  sendbuf[3]=num;//地址,一号
  sendbuf[2]=0x01;
  sendbuf[8]=sendbuf[1]+sendbuf[2]+sendbuf[3]+sendbuf[4]+sendbuf[5]+sendbuf[6]+sendbuf[7];
  send();
  j=0;
  while((RI==0)&&(j<100))
         {
          j++;
         }
    if(j>=100)
      overtime=1;
    else
    {
      overtime=0;
      RI=0;
     }
  if(overtime==0)
  {
   for(i=0;i<7;i++)
	    {
	       j1=0;
	       while(RI==0)
	            {
	               j1++;
	                  if(j1>1000)
	                    {
	                      break;				//超时退出
	                    }
	            }
	       RI=0;
	       if(j1>1000)
	         {
	          break;				//超时退出
	         }
	       buff[i]=SBUF;
	    }
     }
     if(j1>1000||overtime==1)
     {
       send_byte(0xf4);
       P1=0xff;
       for(i=0,j=0;i<3;i=i+2,j++)
        {
         word=256*(w3[i]-0xa0)+w3[i+1]-0xa0;
         dis_word(j+2,0,0xf0);
        }
     }
   if(j1<1000&&overtime==0)
   {
     for(i=0,j=0;i<3;i=i+2,j++)
        {
         word=256*(w4[i]-0xa0)+w4[i+1]-0xa0;
         dis_word(j+2,0,0xf0);
        }
   }
  for(i=0;i<1000;i++)
    for(j=0;j<10;j++);
   //delay(1000,10);
   overtime=0;
   send_byte(0xf4);
  P1=0xff;
}
send_err()//送零点或者满度误差
{
  frash();
}
////////////////////////
check_key()
{
  P0=0xf0;
  if(pkey()==1) //先扫描行,再扫描列,分别从第一行与第一列开始扫描
  {
    switch((P0&0xf0))//从第一行扫描
    {
     case 0xe0://第一行
          m=0;
          break;
     case 0xd0:
          m=1;
          break;
     case 0xb0:
          m=2;
          break;
     case 0x70: //第四行
          m=3;
          break;
     default:
          break;
    }
    P0=0x0f;
    switch((P0&0x0f))
    {
     case  0x0e://第一列
           n=0;
           break;
     case  0x0d:
           n=1;
           break;
     case  0x0b:
           n=2;
           break;
     case  0x07://第四列
           n=3;
           break;
    }
    P1=tab[m][n];
  }
}
main()
{
 uchar data a1[]={"请输入子机号"};
 uchar flag1=0,flag=0,b1=0;
 SCON=0x50;                                         //串口初始化方式1
 TMOD=0x21;                                         //定时器T1为方式2,T0方式1
 TH1=0xfd;                                          //定义9600波特率
 TL1=0xfd;
 TR1=1;
 RI=0;
 RI=0;
 TI=0;                                              //串口中断
 trx=0;
 rest=0;
 for(i=0;i<20;i++)
 {}
 rest=1;
 for(i=0;i<8000;i++)
 {}
 req=0;
 sendbuf[0]=0xaa;
 if((flag&0x80)==0x80)
 {
   write_word(7,0,0);
   write_word(0,flag&0x7f,0);
   write_word(7,0x80,0);
 }
 if(read_word(2,1)!=0xaa)
 {
   write_word(7,0,0);
   write_word(2,0xaa,1);
   write_word(0,0,0);
   write_word(7,0x80,0);
 }
/////////////////
 for(i=0,j=0;i<7;i=i+2,j++)
 {
  word=256*(www[i]-0xa0)+www[i+1]-0xa0;
  dis_word(j+4,0,0xf0);
  }
//////////////////
  for(i=0,j=0;i<7;i=i+2,j++)
  {
   word=256*(aa[i]-0xa0)+aa[i+1]-0xa0;
   dis_word(j+3,1,0xf0);
  }
 word='1';
 dis_word(0x11,16,0xf9);
/////////////
 for(i=0,j=0;i<9;i=i+2,j++)
  {
   word=256*(bb[i]-0xa0)+bb[i+1]-0xa0;
   dis_word(j+3,2,0xf0);
  }
  word='2';
 dis_word(0x11,33,0xf9);
///////////////
 for(i=0,j=0;i<9;i=i+2,j++)
  {
   word=256*(cc[i]-0xa0)+cc[i+1]-0xa0;
   dis_word(j+3,3,0xf0);
  }
  word='3';
 dis_word(0x11,50,0xf9);
////////////////
 while(1)//扫描键盘
 {
 if(P1==0xee)
 {
  P1=0xff;
  Up();
 }
 if(P1==0xed)
 {
   dis_time();
   retur();
 }
 if(P1==0xeb)
 {
   frash();
   retur();
 }
 if(P1==0xe7)
 {
   dis_lim();
   retur();
 }
 if(P1==0xde)
{
  dis_lim();
  retur();
 }
 if(P1==0xdd)//显示温度
 {
    send_byte(0xf4);
    P1=0xff;
    for(i=0,j=0;i<11;i=i+2,j++)
        {
         word=256*(a1[i]-0xa0)+a1[i+1]-0xa0;
         dis_word(j+3,0,0xf0);
        }
   for(i=0;i<1000;i++)
       for(j=0;j<10;j++);
     while(P1!=0xee&&P1!=0xed&&P1!=0xeb&&P1!=0xe7&&P1!=0xde&&P1!=0xdd&&P1!=0xdb&&P1!=0xd7&&P1!=0xbe&&P1!=0x7d)
       check_key();
      b1=P1;
      send_byte(0xf4);
     switch(b1)
     {
       case 0x7d://0
            word='0';
            flag1=0;
            break;
       case 0xee://1
            word='1';
            flag1=1;
            break;
       case 0xed://2
            word='2';
            flag1=2;
            break;
       case 0xeb://3
            word='3';
            flag1=3;
            break;
       case 0xe7://4
            word='4';
            flag1=4;
            break;
       case 0xde://5
            word='5';
            flag1=5;
            break;
       case 0xdd://6
            word='6';
            flag1=6;
            break;
       case 0xdb://7
            word='7';
            flag1=7;
            break;
       case 0xd7://8
            word='8';
            num=8;
            break;
       case 0xbe://9
            word='9';
            flag1=9;
            break;
     }
    dis_word(0x04,2,0xf9);
    for(i=0;i<1000;i++)
       for(j=0;j<10;j++);
    getT(flag1);
    retur();
 }
 if(P1==0xdb)//设置上限
 {
    frash();
    retur();
 }
 if(P1==0xd7)//设置下限
 {
   frash();
   retur();
 }
 if(P1==0xbe)//校准
 {
   T_check();
   retur();
 }
 if(P1==0xbd)//送误差
 {
   frash();
   retur();
 }
 if(P1==0xbb)//读误差
 {
  read_err();
  retur();
 }
 if(P1==0x7d)
 {
   number();
   retru();
 }
 check_key();
 }
}

⌨️ 快捷键说明

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