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

📄 流量测量.c

📁 一个基于MSP430F135单片机的热量计量表的C语言原码
💻 C
字号:
#include  <msp430x41x.h>
#include  <math.h>//C语言本身的库函数定义

#include  "main.h" //自己定义的必要的结构和变量

void delay(INT16U dd);
void display_LCD_all_off();
void display_INT32U();
//以下为初始化函数
void initial_port(void);//初始化端口

//以下为显示函数



//以下为标志映射位定义
static struct BIT8_flag exception_flag1={0,0,0,0,0,0,0,0};//需要保存
#define		is_display_flux_num 		exception_flag1.b0//
#define		is_display_now		 		exception_flag1.b1//
#define		is_one_second		 		exception_flag1.b2//


INT8U	pulse_status=0;	
INT8U 	start_measure_status=0;
INT8U	motor_status=0;

INT8U  	one_second=0;


INT8U  	LCD_buf[9];//LCD 缓存


INT16U	flux_num=0;

//主函数
void main(void)
{	
	initial_port();
	_EINT();
	display_LCD_all_off();
	LCDCTL |= LCDON;
	while(1){		
		is_display_now=1;
		display_INT32U((INT32U)flux_num);
		LPM3;		
  	}
}


void display_flag_clear(void)
{
	INT16U * ptr_INT16U;
	
	ptr_INT16U = (INT16U*) &exception_flag1;
	*ptr_INT16U = 0;
	
	display_LCD_all_off();
}


INT8U long2dec(INT32U temp2, INT32U * p) {
	INT8U i=0, len=0;
  	INT32U temp=0, d;
  	
  	d= temp2;
  	
  	do {
    	temp<<=4;
    	temp |= (INT32U) (d % 10);
    	d= d / 10;
    	len++;
  	} while(d!=0);

  	(*p) =0;
  	for(i=0;i<len;i++)
  	{
  		(*p) <<=4;
  		(*p) |= (temp&0x0000000f);
  		temp >>=4;
  	}
  	
  	return len;
}


void display_INT32U(INT32U t)
{
	INT32U temp=0;
	INT8U i=0, len;
	
	len = long2dec(t, &temp);
	
	for(i=0;i<len;i++)
	{
		LCD_buf[7-i] = (temp&0x0000000f);
		temp>>=4;
	}
	for(i=0;i<(7-len);i++)
	{
		LCD_buf[i]=16;
	}
}

//功能:熄灭所有LCD段
//描述:无
//参数:无
//返回:无
void display_LCD_all_off(void)
{
	INT8U i;
	for(i=0;i<=9;i++){//全部熄灭LCD段
		LCDMEM[i] = 0;
		LCD_buf[i] = 16;
	}
}

//功能:初始化有关端口
//描述:对有关端口进行设置
//参数:无
//返回:无
void initial_port(void){
	//以下为看门狗定义
	WDTCTL = WDTPW + WDTHOLD;    // Stop WDT
  	
  	  		
  	P2IES |= (BIT0+BIT1);//P2.0,P2.1-流量
  	P2IE  |= (BIT0+BIT1);
  	
  	  	
  	BTCTL = BTFRFQ0 + BTSSEL+BTDIV +BTIP1;  //每1秒中断16次,只作为时钟用
	IE2 |= BTIE;              // Enable BT interrupt

	LCDCTL = LCDON + LCD4MUX + LCDSG0_2;   // STK LCD 4Mux, S0-S19
  	  	
	
	P2SEL |= (BIT6+BIT7);
	P3SEL =0xff;
  	P4SEL =0xff;
  	P5SEL =0xff;
  	
}

#pragma vector=BASICTIMER_VECTOR
__interrupt void INT_timer_basic(void)
{
	INT8U i;
	
	
	one_second++;
	if(one_second>=16){
		one_second=0;
		is_one_second=1;
	}
	
	for(i=0;i<8;i++){
		LCDMEM[i] = digit[LCD_buf[i]];		
	}
	
	LPM3_EXIT;
}

#pragma vector=PORT2_VECTOR
__interrupt void INT_port2(void){

  if(P2IFG & BIT0) {//P2.0
    	flux_num++;
  }
  //if(P2IFG & BIT1) {//P2.1
  	    	
  //} 	

  P2IFG=0;
  LPM3_EXIT;
}

⌨️ 快捷键说明

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