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

📄 程序.c

📁 涡轮流量计的应用程序
💻 C
📖 第 1 页 / 共 2 页
字号:
  dishz816(4,50,xr);
}


void disyesclr(void)
{
  dishz816(2,82,DY);
  dishz816(2,90,DE);
  dishz816(2,98,DS);
  dishz816(4,34,DC);
  dishz816(4,42,DL);
  dishz816(4,50,xr);
}


void dispzs(void)
{
  dishz816(4,50,DS);
  dishz816(4,58,gang);
  dishz816(4,66,DP);
  dishz816(4,74,DZ);
  dishz816(4,82,DS);
}


void disq(uchar xx)
{
  switch(xx)
	{
	  case 0:hzcode=dig0;break;
      case 1:hzcode=dig1;break;
      case 2:hzcode=dig2;break;
	  case 3:hzcode=dig3;break;
	  default:break;
	}
   
  dishz816(2,98,hzcode);
  dishz816(4,42,xq);
  dishz816(4,50,gang);
  dishz816(4,58,DP);
  dishz816(4,66,DO);
  dishz816(4,74,DI);
  dishz816(4,82,DN);
}




void dist(uchar yy)
{
  switch(yy)
	{
	  case 0:hzcode=dig0;break;
      case 1:hzcode=dig1;break;
      case 2:hzcode=dig2;break;
	  case 3:hzcode=dig3;break;
	  default:break;
	}
   
  dishz816(2,98,hzcode);
  dishz816(4,42,xt);
  dishz816(4,50,gang);
  dishz816(4,58,DP);
  dishz816(4,66,DO);
  dishz816(4,74,DI);
  dishz816(4,82,DN);
}


void diszero(void)
{
  uchar i,colum=64;
  for(i=0;i<6;i++)
	{ checkdig(Low[i]);
	  dishz816(2,colum,hzcode);
	  if(point1!=0)
	  	{
	  		if(5-i==point1)
				{
		 		 	colum=colum+8;
		  			hzcode=dot;
	 	  			dishz816(2,colum,hzcode);
				}
		}
				
	colum=colum+8;
	}
  zerocolum=colum-8;
  zero=colum-8;
  dishz816(4,zerocolum,heng);
}



void disspan(void)
{ 
  uchar i,colum=64;
  for(i=0;i<6;i++)
	{
	  checkdig(High[i]);
	  dishz816(2,colum,hzcode);
	  if(point2!=0)
	  	{
			if(5-i==point1)
				{
			  		colum=colum+8;
		  			hzcode=dot;
	 	  			dishz816(2,colum,hzcode);
				}
		}
	 colum=colum+8;
	}
    spancolum=colum-8;
	span=colum-8;
	dishz816(4,spancolum,heng);

}

void dissecret(void)
{
  dishz816(2,82,dig2);
  dishz816(2,90,dig0);
  dishz816(2,98,dig0);
  dishz816(2,106,dig0);
  dishz816(4,4,DS);
  dishz816(4,12,DE);
  dishz816(4,20,DC);
  dishz816(4,28,xr);
  dishz816(4,36,DE);
  dishz816(4,44,xt);
  
}

void setkey(void)
{
  uchar key1,key2,key3,clr=0;
  if(set==0)
	{
	  r1=0;r2=0;r3=0;r4=0;r5=0;r6=0;r8=0;
	}
  key1=P2IN&0x01;
  key2=P2IN&0x02;
  key3=P2IN&0x04;
  if(key1==0)
	{
	  set++;
	  if(set==4)
		{
		  if(move==0)
			set=set+4;
		}
	}
  if(set==1)
	{
	  if(r1==0)
		{
		  clearLCD();
		  discode();
		  r1=1;
		}
	  if(key2==0)
		{
		  code[i]++;
		  if(code[i]>9)
		  		code[i]=0;
		  checkdig(code[i]);
		  dishz816(2,codecolum,hzcode);
		  
		}
	  if(key3==0)
		{
		  i++;
		  if(i==1)
			{clearLCDa(4,82);codecolum=90;dishz816(4,codecolum,heng);}
			
		  if(i==2)
			{  clearLCDa(4,90);
			   codecolum=98;
			   dishz816(4,codecolum,heng);
			}
		  if(i==3)
			{clearLCDa(4,98);codecolum=106;dishz816(4,codecolum,heng);}
		  if(i>3)
			{
			  {clearLCDa(4,106);
			   codecolum=82;
			  dishz816(4,codecolum,heng);
			  i=0;}
			}
  		}
	}
  if(set==2)
	{ 
	  
	  if((r2==0)&&(set==2))
		{ 
		  checkcode();
		  if(set==2)
		  { 
		    clearLCD();
		    disnoclr();
		    r2=1;
		  }
		}
	  if(key2==0)
		{
		  clearLCD();
		  disyesclr();

		  yes=1;
		}
	  if((key3==0)&&(yes==1))
		{
		  yes=0;
		  sum=0;
		  set=0;
		  clearLCD();
		}
	}
  if(set==3)
	{
	  if(r3==0)
		{
		  clearLCD();
		  dispzs();
		  r3=1;
		}
	  if(key3==0)
		{
		  disq(point1);
		  move=1;
		}
	  if((key2==0)&&(move==1))
		{
		  point1++;
		  if(point1>3)
			point1=0;
		  disq(point1);
		}
	}
  if(set==4)
	{   move=0;
       if(r4==0)
		{
		  clearLCD();
	      dist(point2);
	      r4=1;
		}
	  if(key2==0)
		{
		  point2++;
		  if(point2>3)
			point2=0;
		  dist(point2);
		} 
	}
   if(set==5)
	{
	  if(r5==0)
		{
		  clearLCD();
		  diszero();
		  r5=1;
		}
	  if(key2==0)
		{
		  Low[5-j]++;
		  if(Low[5-j]>9)
				Low[5-j]=0;
		  checkdig(Low[5-j]);
		  dishz816(2,zerocolum,hzcode);
		  
		}
	  if(key3==0)
		{
		  j++;
		  if(j==point1)
			{ clearLCDa(4,zerocolum);
			  zerocolum=zerocolum-16;
			  dishz816(4,zerocolum,heng);
			}  
		  else
			{ clearLCDa(4,zerocolum);
			  zerocolum=zerocolum-8;
			  dishz816(4,zerocolum,heng);
			}  
		  if(j>5)
			{ clearLCDa(4,zerocolum);
			  zerocolum=zero;
			  dishz816(4,zerocolum,heng);
			  j=0;
			}
		}
	}
  
   if(set==6)
	{
	  Lclm=Low[0]*100000+Low[1]*10000+Low[2]*1000+Low[3]*100+Low[4]*10+Low[5];
	  if(r6==0)
		{
		  clearLCD();
		  disspan();
		  r6=1;
		}
	  if(key2==0)
		{
		  High[5-k]++;
		  if(High[5-k]>9)
			High[5-k]=0;
		  checkdig(High[5-k]);
		  dishz816(2,spancolum,hzcode);
		  
		}
	  if(key3==0)
		{
		  k++;
		  if(k==point1)
			{ clearLCDa(4,spancolum);
			  spancolum=spancolum-16;
			  dishz816(4,spancolum,heng);
			 } 
		  else
			{ clearLCDa(4,spancolum);
			  spancolum=spancolum-8;
			  dishz816(4,spancolum,heng);
		    }
		  if(k>5)
			{ clearLCDa(4,spancolum);
			  spancolum=span;
			  dishz816(4,spancolum,heng);
			  k=0;
			}
		}
	}

  if(set==7)
		{ Hclm=High[0]*100000+High[1]*10000+High[2]*1000+High[3]*100+High[4]*10+High[5];
		  set=0;
		  clearLCD();
		}
  if(set==8)
	{
	  if(r8==0)
		{
		  clearLCD();
		  dissecret();
		  r8=1;
		}
	  if(key2==0)
		{
	 	  password[x]++;
		  if(password[x]>9)
			password[x]=0;
		  checkdig(password[x]);
		  dishz816(2,passcolum,hzcode);
		  
		  dishz816(4,passcolum,heng);
		}
	  if(key3==0)
		{
		  x++;
		  if(x==1)
			{
			  clearLCDa(4,82);
			  passcolum=90;
			  dishz816(4,passcolum,heng);
			}
		  if(x==2)
			{
			  clearLCDa(4,90);
			  passcolum=98;
			  dishz816(4,passcolum,heng);
			}
		  if(x==3)
			{ 
			  clearLCDa(4,98);
			  passcolum=106;
			  dishz816(4,passcolum,heng);
			}
		  if(x>3)
			{
			  clearLCDa(4,106);
			  passcolum=82;
			  dishz816(4,passcolum,heng);
			  x=0;
			}
		}
	}
  if(set==9)
	{
	   set=0;
	   clearLCD();
	}
}
 

//////////////////A/D初始化程序////////////////////////////////
void ADinit(void)
{
  P6SEL=0xFF;                     //P6口设为外围模块功能
  ADC12CTL0&=~0x02;               //ENC=0
  ADC12CTL0=ADC12ON;                                                            
  ADC12CTL1=0x0200;                 //SHP=1
  ADC12MCTL0=0x84;                //REF=AVSS,AVCC,INPUT=A4
                                  //ADC12MCTL4是最后一个转换通道
                                  //ADC12SC位触发采样和保持
                                  //采样脉冲由采样定时器产生
                                  //时钟源:内部振器
                                  //时钟分频:1
                                  //转换模式:单通道单次转换

  
  ADC12CTL0|=0x02;                 //ENC=1
  
}

void fun(void)
{
  double b=2500;
  switch(point1)
	{
	  case 0:times1=1;break;
	  case 1:times1=10;break;
	  case 2:times1=100;break;
	  case 3:times1=1000;break;
	  default:break;
	}
  switch(point2)
	{
	  case 0:times2=1;break;
	  case 1:times2=10;break;
	  case 2:times2=100;break;
	  case 3:times2=1000;break;
	  default:break;
	}

  voltage=(result*3.3/4095-1.65)/(-27.5);
  w=(voltage*1000)/60;
  jiao=asin(w)/2;
  Q=(b*tan(jiao)+2500)*times1;
  sum=sum+0.53*Q/times1*times2;
  if((Q>Hclm)||(Q<Lclm))
         P1OUT|=BIT2;
  else 
         P1OUT&=~BIT2;
  
}




/////////////////////定时器初始化程序////////////////////////////
void timerinit(void)
{                            
  TACTL=0x0184;                      //ACLK 4分频,清TAR
  CCTL0|=CCIE;                      //CCR0中断允许
  CCR0=38;                       //定时0.1s
  TACTL|=MC0;                       
  _EINT();
}

///////////////////////////////////////////////////////////////////
void keyscan(void)
{ 
  uchar keydelay;      
  key=P2IN&0x07;
  delay(1000);
  keydelay=P2IN&0x07;
  if(key==keydelay)
		{
	   	  if(key!=0x07)
			   {
			      setkey();
			   }
		}	
  if(set==0)
		{ 
		  displayQ();
		  displaytotal();
		}
				
}

//////////////////////定时器中断程序///////////////////////////////
interrupt[TIMERA0_VECTOR] void timer_A(void)
{ 
    t++;
    ADC12CTL0|=0x01;                          //开始转换
    while((ADC12IFG&BIT0)==0);
    result=ADCMEM[0];
    resultall=resultall+result;
   
}



//////////////////////////////////主函数///////////////////////////////////////////////////////////


void main(void)
{ 
  uchar i;
  WDTCTL=WDTPW+WDTHOLD;              //停止看门狗
  BCSCTL1=0xe0;                      
  BCSCTL2=0xc0; 
  do
	{
	  IFG1&=~OFIFG;
	  for(i=0xff;i>0;i--);
	}
	while((IFG1&OFIFG)!=0); 
   P1DIR|=BIT2;   
   P2DIR&=0x00;                        //P2口输入
   //WDTCTL=WDTPW+WDTSSEL;             //ACLK为时钟源 tACLK*215         
   lcdinit();
   ADinit();
   timerinit();  
  while(1)
	{  
	   if(t==5000)
       {
         t=0;
         result=resultall/5000;
         resultall=0;
         fun();
         keyscan();
       }
 }      
} 

⌨️ 快捷键说明

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