#include <msp430xG46x.h>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#include "math.h"
#include "string.h"
#include "LCD12864_MicroPrinter.h"
#include "Key_4X4.h"
#include "GPS_DeCode.h"
#include "Information_Update.h"
#include "Radio.h"
#include "Blue_Teeth.h"
#define uint unsigned int
#define uchar unsigned char
volatile unsigned int i,j=0,jj=0;
int m_time_flag=0;
extern unsigned int upflag = 0;
extern unsigned int f_400ms = 0;
extern unsigned long frequency = 0;
extern float frequency_float = 0;
extern unsigned long frequency_sum = 0;
extern float shunshi_liuliang = 0.0;
extern float liuliang = 0.0;
extern unsigned int liuliang_flag = 0;//用来判断显示流量还是GPS信息
extern unsigned int GPS_flag = 0;//用来判断显示流量还是GPS信息
extern unsigned int input_display_flag = 0;//用来判断显示所输入的相关信息信息
extern unsigned int input_flag = 0;//用来判断输入状态的标志
/**定义成全局变量**/
extern char ch,*str,*right,*left;//整型数转字符串用变量
extern unsigned char RecBuf_USART1[255]; //USART1串口接收数据缓存
extern unsigned char Rindex_USART1; //USART1串口接收数据计数
extern unsigned char RecBuf_USART0[255]; //USART0串口接收数据缓存
extern unsigned int Rindex_USART0=0; //USART0串口接收数据计数
extern unsigned char Pilot_Name[255]; //飞行员更新信息数据缓存
extern unsigned char Rindex_Pilot_Name; //飞行员更新信息数据缓存接收数据计数
extern uchar Update_Bytes_counter; //飞行员更新信息数据缓存接收数据计数
extern uchar GPS_time[9]="0"; //UTC时间
extern uchar GPS_wd[12]="0"; //纬度
extern uchar GPS_jd[13]="0"; //经度
extern uchar GPS_warn; //定位警告
extern uchar GPS_quality; //定位质量
extern uchar GPS_status; //定位状态
extern uchar GPS_alt[8]="0"; //海拔
extern uchar GPS_sv[3]="0"; //使用卫星
extern uchar GPS_speed[10]="0"; //速度
extern uchar GPS_date[9]="0"; //UTC日期
extern uchar GPS_date_BeiJing[11]="0"; //北京时间日期日期
extern uchar GPS_time_BeiJing[9]="0";//北京时间
extern uchar m_airplane_number[10]="0";//定义存放代号的字符串缓冲区
extern uchar m_pilot_number[10]="0";
extern uchar m_oil_man_number[10]="0";
extern uchar m_oil_truck_number[10]="11029";
extern uchar m_oil_well_number[10]="0";
extern int operation_end_F=0;//定义操作结束标志位
extern int printer_end_F=0;//定义打印结束标志位
extern int printer_timing=0;//加油结束后忘记打印时,进行打印计时的变量
extern int printer_end_timing=0;//打印结束后计时变量
extern int liuliang_zero_timing=0;//如果流量等于零并且累积流量大于零就开始进行“加油结束”计时
extern int initial_display_timing=0;//定义初始画面轮换显示计时变量
extern int initial_display_F=0;//初始画面显示标志位
extern float temp;
/**定义成全局变量**/
void GPRMC(uchar);
void GPGGA(uchar);
void GPVTG(uchar);
void GPGSA(uchar);
void gps(uchar);
//****************
//**端口初始化
//***************
void Init_Port(void)
{
/****************/
/**液晶显示端口初始化
/***************/
P6SEL=0X00;
P6DIR=0XFF; //输出端口
P6OUT=0X00;
P3SEL=0X00;
P3DIR=0XFF; //输出端口
P3OUT=0X00;
/****************/
/**以上是液晶显示端口初始化
/***************/
/****************/
/**以下是打印机端口初始化
/***************/
P7SEL=0X00;
P7DIR=0XFF; //输出端口
P7OUT=0X00;
/****************/
/**以上是打印机端口初始化
/***************/
/****************/
/**键盘扫描端口初始化
/***************/
//将P1口所有的管脚在初始化的时候设置为输入方式
P1DIR = 0;
//将P1口所有的管脚设置为一般I/O口
P1SEL = 0;
// 将P1.4 P1.5 P1.6 P1.7设置为输出方向
P1DIR |= BIT4;
P1DIR |= BIT5;
P1DIR |= BIT6;
P1DIR |= BIT7;
//先输出低电平
P1OUT = 0x00;
// 将中断寄存器清零
P1IE = 0;
P1IES = 0;
P1IFG = 0;
//打开管脚的中断功能
//对应的管脚由高到低电平跳变使相应的标志置位
P1IE |= BIT0;
P1IES |= BIT0;
P1IE |= BIT1;
P1IES |= BIT1;
P1IE |= BIT2;
P1IES |= BIT2;
P1IE |= BIT3;
P1IES |= BIT3;
/****************/
/**以上是键盘扫描端口初始化
/***************/
}
void main()
{
WDTCTL=WDTPW+WDTHOLD; // Stop WDT
// FLL_CTL0|=XCAP14PF; // Configure load caps
// SCFI0|=FN_2;
// SCFQCTL=127;
TACTL=TASSEL1+TACLR+TAIE; //设置定时器用,ACLK,清除TAR,允许定时器计数溢出中断
TACTL|=MC_2; //设置定时器用,MC0,Time_a增计数模式;MC1,Time_a连续计数模式
TBCTL=TBSSEL1;
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0x47FF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
//Timer_B的设置,用于产生定时中断,中断时间为50000us
P2DIR|=0x02; //设置P2.1口方向为输出,便于用示波器测量。
TBCTL|= TBSSEL_2;
TBCTL|=TBCLR;
TBCTL|= ID_3;//8分频
TBCTL|= MC_1; // SMCLK,1M, upmode增计数模式
TBCCTL0|= CCIE; // TBCCR0 interrupt enabled
TBCCR0 = 50000;//理论上是400ms的定时即;1/(1000000/8/50000),实际上,用示波器测量为382ms
//---------------------------------------------------------------------
// P2DIR&=~BIT0;
// P2SEL = BIT0; //==设置P2.0端口为功能模块使用,即:做捕获源,这时使用的是Timer_A Capture: CCI2A input==
P2DIR&=~BIT0; //设置P2.0口方向为输入,使用I/O中断。
P2SEL&=~BIT0; //设置为普通I/O口功能
P2IE|=BIT0; //打开中断允许
P2IES|=BIT0;//表示P2.0在负跳变时产生中断
P2IFG=0; //P2IES的切换有可能使得P2IFG置位,需清除
TACTL|=TASSEL_0;
TACTL|=ID_3;
TACTL|=TACLR;
TACTL|=TAIE;
TACTL|=MC_2;
TACCR0 = 16384;//定时1/(32768/16384/2)=1s
//==因为设置P2.0端口为功能模块使用,即:做捕获源,这时使用的是Timer_A Capture: CCI2A input==
TACCTL2|=CM_1;
TACCTL2|=SCS;
TACCTL2|=CAP;
TACCTL2|=CCIE;
TACCTL2|=CCIS_0;
//以下是USART0串口通信设置,用于与无线数传模块通信
P2SEL |= 0x30; // P2.4,5 = USCI_A0 TXD,RXD
P2DIR|=0x10;
/*
UCA0CTL1 |= UCSSEL_1; // SMCLK
UCA0BR0 = 0x03; // 32k/9600 - 3.41
UCA0BR1 = 0x00; //
UCA0MCTL = 0x06; // Modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
*/
UCA0CTL1 |= UCSSEL_2; // SMCLK 1MHz
UCA0BR0 = 0x36; // 19200 Hz
UCA0BR1 = 0x00; //
UCA0MCTL = 0x06; // Modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
//以上是USART0串口通信设置,用于与无线数传模块通信
//以下是USART1串口通信设置,用于与GPS模块通信
P4SEL |= 0x03; // 将P4.0,1使用外围模块 = USART1 TXD/RXD
P4DIR |= 0x01; // 将P4.0设为输出(发),P4.1默认为输入(收)
ME2 |= URXE1; // 使能USART1的发送和接受
ME2 |= UTXE1; // 使能USART1的发送和接受
/*
UCTL1 |= CHAR; // 选择8位字符
UTCTL1 |= SSEL0; // UCLK = ACLK
UBR01 = 0x03; // 波特率9600
UBR11 = 0x00; //
UMCTL1 = 0x4A; // Modulation
UCTL1 &= ~SWRST; // 初始化UART状态机
IE2 |= URXIE1+UCA0RXIE; // 使能USART1的接收中断
*/
//因为后买的GPS模块经过测试后,发现其通信的波特率为4800,所以进行设置
UCTL1 |= CHAR; // 选择8位字符
UTCTL1 |= SSEL0; // UCLK = ACLK
UBR01 = 0x06; // 波特率4800
UBR11 = 0x00; //
UMCTL1 = 0x6F;