?? main.c
字號:
#include "LCD.h"
#include "menu.h"
#define TIMER_VALUE 16384 //定時器 TIMER_A的定時值,8000H=32768D,延時0.5秒鐘
//flash 保存內(nèi)容
uint Password_Se1=1000; //se1密碼 。。。以后修改,加入flash 保存
uint Password_Se2=2000; //se2密碼1
uint Password_Se3=3000 ; //se3密碼2
uint Password_Super=6886; //超級密碼,@_@
uchar Meter_Type; //儀表類型 0為未設(shè)置,1:腰輪,2:渦輪
//腰輪儀表系數(shù)
float C0;
uchar C0_n2;
uchar C0_n1;
uchar C0_d1;
//渦輪儀表系數(shù)
float C1;
uchar C1_n2;
uchar C1_n1;
uchar C1_d1;
float C2;
uchar C2_n2;
uchar C2_n1;
uchar C2_d1;
float C3;
uchar C3_n2;
uchar C3_n1;
uchar C3_d1;
float C4;
uchar C4_n2;
uchar C4_n1;
uchar C4_d1;
float C5;
uchar C5_n2;
uchar C5_n1;
uchar C5_d1;
float C6;
uchar C6_n2;
uchar C6_n1;
uchar C6_d1;
float C7;
uchar C7_n2;
uchar C7_n1;
uchar C7_d1;
float F1;
uchar F1_n2;
uchar F1_n1;
uchar F1_d1;
float F2;
uchar F2_n2;
uchar F2_n1;
uchar F2_d1;
float F3;
uchar F3_n2;
uchar F3_n1;
uchar F3_d1;
float F4;
uchar F4_n2;
uchar F4_n1;
uchar F4_d1;
float F5;
uchar F5_n2;
uchar F5_n1;
uchar F5_d1;
float F6;
uchar F6_n2;
uchar F6_n1;
uchar F6_d1;
float F7;
uchar F7_n2;
uchar F7_n1;
uchar F7_d1;
uchar Pressure_Scale; //壓力傳感器量程選擇0 1 2
uchar Press_Flag; //線性修正標(biāo)志位
uchar Press_Linear_N; //壓力傳感器線性分段
uchar Press_Linear1; //壓力傳感器線性第1段修正值
uchar Press_Linear2;
uchar Press_Linear3;
uchar Press_Linear4;
uchar Press_Linear5; //壓力傳感器線性第5段修正值
uchar Press_Linear6;
uchar Press_Linear7;
uchar Press_Linear8;
uchar Press_Linear9; //壓力傳感器線性第9段修正值
float Flux_Total; //累積流量
uchar Tempe_Press_Type; //溫度壓力補(bǔ)償類型 0:均不 1:溫度壓力補(bǔ)償 2:溫度自動,壓力固定 3:壓力自動補(bǔ)償 4:溫壓固定補(bǔ)償
float Press_Const; //固定壓力輸入
float Tempe_Const; //固定溫度輸入
uchar Pulse_Const_Flag; //固定脈沖產(chǎn)生標(biāo)志位
uint Pulse_Const; //固定脈沖產(chǎn)生個數(shù)
uchar Fz_Flag; //壓縮因子啟用標(biāo)志位
float CO2; //CO2的體積百分比
float N2; //N2的體積百分比
float Density_Relat; //相對密度的百分比
uchar History_Flag; //歷史記錄啟用標(biāo)志位
uchar Year;
uchar Month;
uchar Day;
uchar Hour;
uchar Minute;
uchar Hour_Save; //存儲時間間隔
uchar Meter_No; //儀器編號,默認(rèn)168;
uchar Pulse_Out; //整方脈沖輸出
uchar Pulse_Width; //脈寬
uchar Pulse_Current; //供電電流
uchar Pulse_1Cube; //每方脈沖個數(shù)
uchar RS485_Flag; //RS485啟用標(biāo)志位
uchar Supply_Flag; //供電方式0 外部,1 內(nèi)部
uchar Baud_Rate ; //波特率設(shè)定
uchar C20ma_Flag; //4-20ma啟用標(biāo)志
uchar Current_20ma; //20ma對應(yīng)的最大電流
float Flux_Instant; //瞬時流量
//菜單設(shè)置參數(shù)
uchar Flash_Index=0;//閃爍標(biāo)志位(第三行),從左向右 1-8
uchar Flashflg;//閃爍標(biāo)志位, 控制顯示,不顯示
uchar Number_Input[8];//設(shè)置時各位輸入的數(shù)字0-9
uint CurrentPage;//菜單所在位置索引
void timer_init(void)//定時器設(shè)置
{
TACTL=TASSEL0+TACLR;
TACCTL0=CCIE;
CCR0=TIMER_VALUE;
TACTL|=MC0;
}
void key_init(void)//端口初始化
{
P1DIR=0XFF; //P1~~P6 i/o ports set
P1OUT=0X3c; //液晶4引腳輸出為高
P1IE=0X01; //P1.0的中斷暫時關(guān)閉,否則影響程序調(diào)試,以后檢測脈沖信號時還要打開!!!!!!
P1IES=0x00; //p1.0 interrupt low-to-high to record pulse number
P2DIR=0X0F;
P2OUT=0XF0;
P2IES=0XF0; //p2.4~p2.7 keyboard interrupt high-to-low
P2IE=0XF0;
P3DIR = BIT6;
P3OUT = 0x00;
P3SEL = 0x30; // P3.4,5 = USART0 TXD/RXD
P6DIR=0XBF; //p6.6 is input, others are outputs
P6OUT=0X00;
P6SEL=BIT6; //0: 該引腳為I/O端口; 1: 該引腳為外圍模塊功能
}
void InitSys()
{
LCD_INIT (); //p1.2~p1.5端口初始化
key_init();//按鍵端口初始化,p2.4-p2.7
timer_init();//開定時
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
uchar point=0;
if(Flash_Index)
{
if(Flashflg==1) //閃爍位不顯示
{
Flashflg=0;
point=judgedp(Flash_Index);
WRITE_LCD(0x00+2*(Flash_Index-1),10,point,2);
}
else
{
Flashflg=1;
point=judgedp(Flash_Index);
WRITE_LCD(0x00+2*(Flash_Index-1),Number_Input[Flash_Index-1],point,2);
}
}
/*
WRITE_LCD(dispflg*2,dispflg,1,1);
delay(4);
WRITE_LCD(dispflg*2,dispflg+6,1,2);
if(dispflg<14)
dispflg++;
else
dispflg=0;
*/
}
// 鍵盤中斷程序 //
unsigned char p2key(void) //判斷是否有鍵按下子程序
{
unsigned char x;
x=(P2IN&0XF0);
return(x);
}
#pragma vector=PORT2_VECTOR
__interrupt void Port2(void)
{
uint i;
if (p2key()!=0XF0) //注意: 函數(shù)可以直接用于條件判斷, 例如本行的 p2key()
{ //軟件延時消抖處理 //
i=6000;
while(i--);
if (p2key()!=0XF0)
{
switch (P2IN&0xF0)
{
case 0x70: key_set(); break;
case 0xB0: key_shift(); break;
case 0xD0: key_inc(); break;
case 0xE0: key_ok(); break;
default:break;
}
while (p2key()!=0XF0) ; //等待按鍵釋放 //
P2IE=0x00;
i=1000;
while(i--);
P2IE=0xf0;
}
}
P2IFG=0X00; //鍵盤中斷標(biāo)志位清零//
}
void main (void)
{
uint i;
uchar addr;
WDTCTL=WDTPW+WDTHOLD;//關(guān)狗
_DINT();
InitSys();//系統(tǒng)初始化
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
///全部顯示
wr_lcd(DDATA,3,1);//wr1選擇模式
addr=0x00;
addr=addr<<2;
wr_lcd(addr,6,1);//wr1 選地址
for(i=0;i<10;i++)
wr_lcd(0xff,8,1);//wr1 寫數(shù)據(jù)
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實(shí)現(xiàn)低功耗。
wr_lcd(DDATA,3,2);//wr2選擇模式
addr=0x00;
addr=addr<<2;
wr_lcd(addr,6,2);//wr1 選地址
for(i=0;i<14;i++)
wr_lcd(0xff,8,2);//wr2 寫數(shù)據(jù)
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實(shí)現(xiàn)低功耗。
delay(60);
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
//全部清除
wr_lcd(DDATA,3,1);//wr1選擇模式
addr=0x00;
addr=addr<<2;
wr_lcd(addr,6,1);//wr1 選地址
for(i=0;i<10;i++)
wr_lcd(0x00,8,1);//wr1 寫數(shù)據(jù)
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實(shí)現(xiàn)低功耗。
wr_lcd(DDATA,3,2);//wr1選擇模式
addr=0x00;
addr=addr<<2;
wr_lcd(addr,6,2);//wr1 選地址
for(i=0;i<14;i++)
wr_lcd(0x00,8,2);//wr1 寫數(shù)據(jù)
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實(shí)現(xiàn)低功耗。
/*
for(i=0;i<10;i+=2)
{
WRITE_LCD(0x00+i,i,0,1);//wr1 寫數(shù)據(jù)
}
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實(shí)現(xiàn)低功耗。
for(i=0;i<13;i+=2)
{
WRITE_LCD(0x00+i,i,1,2);//wr1 寫數(shù)據(jù)
}
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實(shí)現(xiàn)低功耗。
*/
for(i=0;i<60000;i++);
for(i=0;i<60000;i++);
_EINT();
LPM2;
while(1)
{
;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -