📄 流量测量.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 + -