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

📄 from_hs.c

📁 用单片机和DSP测量DN100管道的气体流量,使用涡街传感器
💻 C
📖 第 1 页 / 共 2 页
字号:
}

//***********---------------- Pulse output--------------**********************
void Output(float f)                       // 脉冲输出子程序(脉冲输出函数)
{  
   long int a;
   P4DIR |= 0x01;                          // P4.0 output
   P4SEL |= 0x01;                          // P4.0 option select
   TBCCTL0 = OUTMOD_4;                     // CCR0 toggle mode
   if(f>100)
   { 
      BCSCTL2=SELS + DIVS_1;
      a=2000000/(2*f);
      TBCTL = TBSSEL_2 + MC_1;             // SMCLK, up mode
   }
   else
    { 
      a=32768/(2*f);
     TBCTL = TBSSEL_1 + MC_1;              // ACLK, up mode
    }
   TBCCR0 = a-1;
}

//***********---------------- LCD display ----------------**********************
void Disp_Init(void)
{ 
    P6OUT|=BIT7;                     // ~CS=1 reset 
    for(delay=0;delay<100;delay++);
    buffer=0x00;
    wrcommand();
    buffer=0x29;                     // 上电初始化命令专用模块
    wrcommand();
    buffer=0x18;                     // 定义内部振荡器工作
    wrcommand();
    buffer=0x01;                     // 开振荡器
    wrcommand();
    buffer=0x03;                     // 开显示器
    wrcommand(); 
    addr_buffer=0x1B;                // 显示Q标志
    buffer=0x08;
    wrdata();  
}

void wrcommand(void)                 // LCD写命令
{  
   P6OUT&=~BIT7;                     // ~CS=0
   P6OUT|=BIT5;                      // DATA=1
   wr_act(); 
   P6OUT&=~BIT5;                     // DATA=0
   wr_act(); 
   P6OUT&=~BIT5;                     // DATA=0
   wr_act();
   for(count=0;count<8;count++)
   {
	if((buffer&0x80)==0x80)
	  P6OUT|=BIT5;
        else P6OUT&=~BIT5;
	wr_act(); 
	buffer<<=1;
   }
   P6OUT&=~BIT5;                     // DATA=0
   wr_act(); 
   P6OUT|=(BIT7+BIT6+BIT5);          // ~CS=1,~WR=1,DATA=1
}

void wr_act(void)
{
   P6OUT&=~BIT6;
   for(delay=0;delay<10;delay++);
   P6OUT|=BIT6;              
   for(delay=0;delay<10;delay++);
}

void wrdata(void)                    // LCD写数据程序
{ 	 	
        P6OUT&=~BIT7;                // CS=0,使能液晶
	P6OUT|=BIT5;     /*1*/      
        wr_act(); 	
	P6OUT&=~BIT5;   /*0*/
	wr_act(); 
	P6OUT|=BIT5;   /*1*/
	wr_act(); 
        P6OUT&=~BIT5;  /*0*/
	wr_act(); 
	
	addr_buffer<<=3;             // 左移三位,低五位有效
	for(count=0;count<5;count++)
	  {	    
		if((addr_buffer&0x80)==0x80)
		P6OUT|=BIT5;
		else P6OUT&=~BIT5;
		wr_act(); 
		addr_buffer<<=1;
	   }
	for (count=0;count<8;count++)
	  {
		if((buffer&0x01==0x01))
		P6OUT|=BIT5;
		else P6OUT&=~BIT5;
		wr_act(); 
		buffer>>=1;
	   }
	P6OUT|=(BIT7+BIT6+BIT5);      // ~CS=1,~WR=1,DATA=1
}
 
void int_ascii(void)            //将整型数转化为用于显示的ASCII
{
  int i;
  unsigned long int view_temp;
  for(i=0;i<8;i++)
  {
     view_temp=view/10;
     asc[i]=view-view_temp*10;  //求余数
     view=view/10;
  }
  for(i=0;i<6;i++)
  {
     dis_up[i]=asc[i];
  }  
  for(i=0;i<8;i++)
  {
     dis_down[i]=asc[i];
  }  
}

void updisp(void)                //上排液晶显示程序
{
        int t;
        addr_buffer=addr_up[0];  //显示上排第0位
        t=dis_up[0]; 
	buffer=upseg[t];
	wrdata();

        addr_buffer=addr_up[1];  //显示上排第1位
        t=dis_up[1]; 
	buffer=upseg[t];
	wrdata();  
	
	addr_buffer=addr_up[2];  //显示上排第2位
        t=dis_up[2]; 
	buffer=upseg[t];
	wrdata();

	addr_buffer=addr_up[3];  //显示上排第3位
        t=dis_up[3]; 
	buffer=upseg[t];
	buffer|=0x08;
	wrdata();
	
	addr_buffer=addr_up[4];  //显示上排第4位
        t=dis_up[4]; 
	buffer=upseg[t];
	wrdata();

	addr_buffer=addr_up[5];  //显示上排第5位
        t=dis_up[5]; 
	buffer=upseg[t];
	wrdata();
}

void downdisp(void)//下排液晶显示程序
{
        int t;
        addr_buffer=addr_down[0];//显示下排第0位
        t=dis_down[0]; 
	buffer=downseg[t];
	wrdata();

	addr_buffer=addr_down[1];//显示下排第1位
        t=dis_down[1]; 
	buffer=downseg[t];
	wrdata();
	
	addr_buffer=addr_down[2];//显示下排第2位
        t=dis_down[2]; 
	buffer=downseg[t];
	wrdata();

	addr_buffer=addr_down[3];//显示下排第3位
        t=dis_down[3]; 
	buffer=downseg[t];
	wrdata();

	addr_buffer=addr_down[4];//显示下排第4位
        t=dis_down[4]; 
	buffer=downseg[t];
	wrdata();

	addr_buffer=addr_down[5];//显示下排第5位
        t=dis_down[5]; 
	buffer=downseg[t];
	wrdata();
 
	addr_buffer=addr_down[6];//显示下排第6位
        t=dis_down[6]; 
	buffer=downseg[t];
	wrdata();
	
	addr_buffer=addr_down[7];//显示下排第7位
        t=dis_down[7]; 
	buffer=downseg[t];
	wrdata();
} 


//************------------------ FFT calculate-------------**********************
void FFT_calculate(void)
{
  
}


//------------------- Timer A1 interrupt service routine------------------------
//#if VERSION>126
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A (void)
//#else
//interrupt[TIMERA0_VECTOR] void Timer_A(void)
//#endif
{   
    CCTL1 &= ~CCIFG;                        // clear CCI1A interrupt flag
    newcapture = CCR1;                          // Get current captured ACLK 
    Compare = newcapture - Oldcapture;         // ACLK difference
    Oldcapture = CCR1;                      // Save current captured ACLK                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    cap[cap_cnt]=Compare;
    cap_cnt++;
    if(cap_cnt>number)                                                                                                       
    { 
      CCTL1 = 0;
      taflag= 1;
      
    }
    
    _BIC_SR_IRQ(LPM0_bits);               // Clear LPM0, SET BREAKPOINT HERE         
}

⌨️ 快捷键说明

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