?? m128_alky_touch_con1._c
字號:
//ICC-AVR application builder : 2007-10-26 14:46:56
// Target : M128
// Crystal: 4.0000Mhz
// IC:M128,DS1302,LM324
// 功能:酒精濃度氣體發(fā)生Hh6232A
// 說明:酒精濃度檢測采用LM324模擬電路
// 作者:邵伍勝
// 創(chuàng)作時期:2007年10月
// 修改時期:2008年01月
#include <iom128v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
//********************************** main
//**********************************
typedef struct PID {
uint SetPoint; // 設(shè)定目標Desired value
uchar Proportion; // 比例常數(shù)Proportional Const
uchar Integral; // 積分常數(shù)Integral Const
uchar Derivative; // 微分常數(shù)Derivative Const
int LastError; // Error[-1]
int PrevError; // Error[-2]
int SumError; // Sums of Errors
} PID;
PID LD_PID;
PID WD_PID;
//LD_PID.Proportion=5; LD_PID.Integral=1; LD_PID.Derivative=12;
//WD_PID.Proportion=20; WD_PID.Integral=2; WD_PID.Derivative=40;
//***********************************
const unsigned char KEY_TZ[16];
const unsigned char CON_TAB[240][40];
const unsigned char START_TAB[240][40];
const unsigned char F_TAB[240][40];
const unsigned char L_TAB[240][40];
const unsigned char L_PID_TAB[240][40];
const unsigned char ZM_Verdana_fifty[10][51][6];
const unsigned char ZM_Verdana_nine[12][9];
const unsigned char ZM_Songti_twelve[12][11];
const unsigned char ZM_Songti_ten_ChangK[12][4];
const unsigned char ZM_Songti_ten_DianD[12][4];
const unsigned char MiMa_TAB[3][8];
const unsigned char GX_TAB[8];
const unsigned char SELECT_BDLD_TAB[12][32];
const unsigned char OK_BDLD_TAB[12][32];
const unsigned char Succeed_BDLD_TAB[12][32];
const unsigned char Fail_BDLD_TAB[12][32];
const unsigned char TOUCH_KEY_TAB[195][28];
const unsigned char TOUCH_MENU_TAB[195][28];
//**********************************
//EEPROM存儲結(jié)構(gòu)
#define EE_Set_LD_AddrL 0x0030 //
#define EE_Set_LD_AddrH 0x0031 //濃度
#define EE_Set_FL_AddrL 0x0032 //
#define EE_Set_FL_AddrH 0x0033 //風量
#define EE_Set_WD_Addr 0x0034 //溫度
#define EE_MODE_SJ_Addr 0x0035 //時間模式,1:定時控制;2:點動;3:常開
#define EE_Set_SJ_Addr 0x0036 //時間
//******
#define EE_F_WDZQ_Addr 0x0037 //
#define EE_F_LDZQ_AddrL 0x0038 //
#define EE_F_LDZQ_AddrH 0x0039 //
#define EE_F_FSYZ_Addr 0x003A //換算因子標記 0:2000;1:2100;2:2200
#define EE_F_YYJB_Addr 0x003B //
#define EE_F_MiMa_Addr1 0x003C //
#define EE_F_MiMa_Addr2 0x003D //
#define EE_F_MiMa_Addr3 0x003E //
#define EE_F_MiMa_Addr4 0x003F //
#define EE_F_MiMa_Addr5 0x0040 //
#define EE_F_MiMa_Addr6 0x0041 //用戶級
#define EE_L_MiMa_Addr1 0x0042 //
#define EE_L_MiMa_Addr2 0x0043 //
#define EE_L_MiMa_Addr3 0x0044 //
#define EE_L_MiMa_Addr4 0x0045 //
#define EE_L_MiMa_Addr5 0x0046 //
#define EE_L_MiMa_Addr6 0x0047 //工廠級
#define EE_LDPID_P_Addr 0x0048 //濃度P系數(shù)
#define EE_LDPID_I_Addr 0x0049 //濃度I系數(shù)
#define EE_LDPID_D_Addr 0x004A //濃度D系數(shù)
#define EE_LDPID_MAX_AddrL 0x004B //濃度飽和值
#define EE_LDPID_MAX_AddrH 0x004C //濃度飽和值
#define EE_WDPID_P_Addr 0x004D //溫度P系數(shù)
#define EE_WDPID_I_Addr 0x004E //溫度I系數(shù)
#define EE_WDPID_D_Addr 0x004F //溫度D系數(shù)
#define EE_WDPID_MAX_AddrL 0x0050 //溫度飽和值
#define EE_WDPID_MAX_AddrH 0x0051 //溫度飽和值
#define EE_BDLD_052_AddrL 0x0052
#define EE_BDLD_052_AddrH 0x0053
#define EE_BDLD_130_AddrL 0x0054
#define EE_BDLD_130_AddrH 0x0055
#define EE_BDLD_208_AddrL 0x0056
#define EE_BDLD_208_AddrH 0x0057
#define EE_BDLD_300_AddrL 0x0058
#define EE_BDLD_300_AddrH 0x0059
#define EE_BDLD_520_AddrL 0x005A
#define EE_BDLD_520_AddrH 0x005B
#define EE_BDLD_780_AddrL 0x005C
#define EE_BDLD_780_AddrH 0x005D
#define EE_LD_CLR_Addr 0x0060
#define EE_BD_Year_Addr 0x0061
#define EE_BD_Month_Addr 0x0062
#define EE_BD_Date_Addr 0x0063
//0x0070-0x00BF為十組參數(shù)記憶
//**********************************
#define SELECT_BDLD_1 0x01
#define OK_BDLD_2 0x02
#define Succeed_BDLD_3 0x03
#define Fail_BDLD_4 0x04
#define Year DataTime[0]
#define Month DataTime[1]
#define Date DataTime[2]
#define Hour DataTime[3]
#define Minute DataTime[4]
#define Second DataTime[5]
#define BDLD_052 BDLD_DianYa[0]
#define BDLD_130 BDLD_DianYa[1]
#define BDLD_208 BDLD_DianYa[2]
#define BDLD_300 BDLD_DianYa[3]
#define BDLD_520 BDLD_DianYa[4]
#define BDLD_780 BDLD_DianYa[5]
unsigned char DataTime[6];
unsigned int BDLD_DianYa[6];
unsigned char BD_Year;
unsigned char BD_Month;
unsigned char BD_Date;
unsigned char BD_Succeed_Flag;
unsigned char MENU_NUM;
unsigned char Last_Key;
unsigned char Time_Change_Enable; //時間改變使能
unsigned char Time_Change_Flag; //時間改變標志1-10
unsigned char Flag_500ms; //半秒閃爍標志
unsigned char Set_Change_Enable; //設(shè)定值改變使能
unsigned char Set_Change_Flag1; //設(shè)定值改變標志1-4
unsigned char Set_Change_Flag2; //
unsigned char PID_Change_Flag1; //
unsigned char PID_Change_Flag2; //
unsigned char L_Change_Enable;
unsigned char L_PID_Change_Enable;
unsigned char F_Change_Enable;
unsigned char F_FLAG1; //
unsigned char F_FLAG2; //
unsigned char Button_FLAG; //
unsigned char L_FLAG1; //
unsigned char L_FLAG2; //
unsigned char BDLD_FLAG; //
unsigned char LD_CLR_FLAG;
unsigned char BDLD_YN_FLAG052;
unsigned char BDLD_YN_FLAG130;
unsigned char BDLD_YN_FLAG208;
unsigned char BDLD_YN_FLAG300;
unsigned char BDLD_YN_FLAG520;
unsigned char MiMa_TEMP[6];
unsigned char KEY_TEMP[6];
unsigned char P_OK;
unsigned char Count_50ms;
unsigned char Count_5S;
//*********
unsigned int DQ_LD_Value; //當前濃度值
unsigned int Set_LD_Value; //設(shè)定濃度值
unsigned int Set_LiuLiang_Value; //設(shè)定流量值
unsigned char Set_WenDu_Value; //設(shè)定溫度值
unsigned char Set_ShiJian_Value; //設(shè)定時間值
unsigned char Set_ShiJian_MODE; //時間模式,1:定時控制;2:點動;3:常開
float DQ_WenDu_Value; //當前溫度值
unsigned char DQ_ShiDu_Value; //當前濕度值
float ZhuQi_WenDu_Value; //注氣溫度值
unsigned int DQ_LiuLiang_Value; //當前流量值
unsigned char DaoJiShi_Value; //倒計時間值
float DQ_mgl_Value; //當前mgl值
float DQ_BAC_Value; //當前BAC值
//****************
unsigned char F_WDZQ_Value; //設(shè)定溫度周期值
unsigned int F_LDZQ_Value; //設(shè)定濃度周期值
unsigned char F_FSYZ_FLAG; //換算因子標記 0:2000;1:2100;2:2200
unsigned char F_YYJB_Value; //設(shè)定原液加補值
unsigned int YYJB_DJS_Value; //原液加補倒計時間值
unsigned int DQ_LD_XianShi_TOT;
unsigned int DQ_LD_Value_XianShi;
unsigned int DQ_WenDu_TOT; //當前溫度值之和
unsigned int ZhuQi_WenDu_TOT; //注氣溫度值之和
unsigned int DQ_ShiDu_TOT; //當前濕度值之和
unsigned long int ADC_data_T;
unsigned int BDLD_AD_Value; //標定時濃度AD值
unsigned int ICR1_TEMP;
unsigned int ICR3_TEMP;
unsigned int LD_CLR_Count;
unsigned char LD_CLR_Value;
unsigned int LDPID_MAX; //濃度PID飽和值
unsigned int WDPID_MAX; //溫度PID飽和值
unsigned int LDPWM_Value_XianShi; //
uchar FLAG;
//*********FLAG***********
#define TOUCH_KEY_DISP_F 0x07
#define TOUCH_MENU_DISP_F 0x06
#define Set_TOUCH_KEY_DISP_F() FLAG|=1<<TOUCH_MENU_DISP_F
#define Clr_TOUCH_KEY_DISP_F() FLAG&=~(1<<TOUCH_MENU_DISP_F)
#define YN_TOUCH_KEY_DISP_F (FLAG&(1<<TOUCH_MENU_DISP_F))
#define Set_TOUCH_MENU_DISP_F() FLAG|=1<<TOUCH_MENU_DISP_F
#define Clr_TOUCH_MENU_DISP_F() FLAG&=~(1<<TOUCH_MENU_DISP_F)
#define YN_TOUCH_MENU_DISP_F (FLAG&(1<<TOUCH_MENU_DISP_F))
//**********************************
#define F_WDZQ_Addr 0x47B9 //
#define F_LDZQ_Addr 0x4BC9 //
#define F_FSYZ_Addr 0x4FB1 //
#define F_Year_Addr 0x53E9 //
#define F_Month_Addr 0x53EE //
#define F_Date_Addr 0x53F2 //
#define F_Hour_Addr 0x53F7 //
#define F_Minute_Addr 0x53FA //
#define F_Second_Addr 0x53FD //
#define F_YYJB_Addr 0x57A9 //
#define F_MiMa_Addr 0x5BEA //
//**********************************
#define DQ_LD_Addr 0x494C //當前濃度
#define Set_LD_Addr 0x47B2 //(49*40)+(80/8)濃度
#define Set_LiuLiang_Addr 0x4BC2 //(75*40)+(80/8)流量
#define Set_WenDu_Addr 0x4FD2 //(101*40)+(80/8)溫度
#define Set_ShiJian_Addr 0x53E2 //(127*40)+(80/8)時間
#define DQ_WenDu_Addr 0x57F2 //(153*40)+(80/8)當前溫度
#define DQ_ShiDu_Addr 0x5B8A //(176*40)+(80/8)當前濕度
#define ZhuQi_WenDu_Addr 0x5F70 //(201*40)+(64/8)注氣溫度
#define DQ_LiuLiang_Addr 0x5F7B //(201*40)+(152/8)流量
#define DaoJiShi_Addr 0x5F8B //(201*40)+(280/8)倒計時間
#define mgl_Addr 0x57FE
#define BAC_Addr 0x5808
//**********************************
//#define DQ_WenDu_ADC 0x02 //當前溫度 ADMUX select adc input 2
//#define DQ_ShiDu_ADC 0x03 //當前濕度 ADMUX select adc input 3
//#define ZhuQi_WenDu_ADC 0x01 //注氣溫度 ADMUX select adc input 1
//#define DQ_LD_ADC 0x00 //當前濃度 ADMUX select adc input 0
#define DQ_WenDu_ADC 0x00 //當前溫度 ADMUX select adc input 0
#define DQ_ShiDu_ADC 0x01 //當前濕度 ADMUX select adc input 1
#define ZhuQi_WenDu_ADC 0x04 //注氣溫度 ADMUX select adc input 4
#define DQ_LD_ADC 0x06 //當前濃度 ADMUX select adc input 6
//**********************************
#define SOUND_PORT PORTB
#define SOUND 0x03 //portb3
#define Set_SOUND() SOUND_PORT|=1<<SOUND
#define Clr_SOUND() SOUND_PORT&=~(1<<SOUND)
//**********************************
#define Set_FA_OUT() PORTB|=1<<7
#define Clr_FA_OUT() PORTB&=~(1<<7)
#define Cpl_FA_OUT() PORTB^=1<<7
//***********
//#define Set_BENG_CON() PORTB|=1<<6
//#define Clr_BENG_CON() PORTB&=~(1<<6)
#define Set_BENG_CON() PORTB|=1<<5
#define Clr_BENG_CON() PORTB&=~(1<<5)
//**********************************
#define LCD_WR_PORT PORTD
#define LCD_RD_PORT PORTD
#define LCD_CS_PORT PORTG
#define LCD_RS_PORT PORTG
#define LCD_DATA_PORT PORTC
#define LCD_WR 0x40 //portd6 out
#define LCD_RD 0x80 //portd7 out
#define LCD_CS 0x01 //portg0 out
#define LCD_RS 0x02 //portg1 out 注意置位的格式
//**********************************
//**********************************
#define ads1100_writeaddr 0x90
#define ads1100_readaddr 0x91
#define ADS1100_data 1 //pd1 ads1100的第4腳
#define ADS1100_scl 0 //pd0 ads1100的第3腳
#define IN_ADS1100_data() DDRD&=~(1<<ADS1100_data)
#define OUT_ADS1100_data() DDRD|=1<<ADS1100_data
#define Set_ADS1100_data() PORTD|=1<<ADS1100_data
#define Clr_ADS1100_data() PORTD&=~(1<<ADS1100_data)
#define Set_ADS1100_scl() PORTD|=1<<ADS1100_scl
#define Clr_ADS1100_scl() PORTD&=~(1<<ADS1100_scl)
//***********************
//*****************氣室濃度讀取*****************
#define QS_ADS1100_data 5 //pd5 ads1100的第4腳
#define QS_ADS1100_scl 4 //pd4 ads1100的第3腳
#define IN_QS_ADS1100_data() DDRD&=~(1<<QS_ADS1100_data)
#define OUT_QS_ADS1100_data() DDRD|=1<<QS_ADS1100_data
#define Set_QS_ADS1100_data() PORTD|=1<<QS_ADS1100_data
#define Clr_QS_ADS1100_data() PORTD&=~(1<<QS_ADS1100_data)
#define Set_QS_ADS1100_scl() PORTD|=1<<QS_ADS1100_scl
#define Clr_QS_ADS1100_scl() PORTD&=~(1<<QS_ADS1100_scl)
//**********************************
//**********************************
//*****************觸摸屏ADS7846*****************
#define ADS7846_DCLK 2 //PE2
#define ADS7846_CS 3 //PE3
#define ADS7846_DIN 5 //PE5
//#define ADS7846_BUSY 5 //PE5
#define ADS7846_DOUT 6 //PE6
#define ADS7846_INT 7 //PE7
#define ADS7846_DOUT_PIN PINE
#define ADS7846_BUSY_PIN PINE
#define Set_ADS7846_DCLK() PORTE|=1<<ADS7846_DCLK
#define Clr_ADS7846_DCLK() PORTE&=~(1<<ADS7846_DCLK)
#define Set_ADS7846_CS() PORTE|=1<<ADS7846_CS
#define Clr_ADS7846_CS() PORTE&=~(1<<ADS7846_CS)
#define Set_ADS7846_DIN() PORTE|=1<<ADS7846_DIN
#define Clr_ADS7846_DIN() PORTE&=~(1<<ADS7846_DIN)
//**********************************
//**********************************
#define DS1302_RST 2 //pb2
#define DS1302_SDA 1 //pb1
#define DS1302_SCLK 0 //pb0
//ds1302相關(guān)
//DS1302_RST=1
#define Set_DS1302_RST() PORTB|=1<<DS1302_RST
//DS1302_RST=0
#define Clr_DS1302_RST() PORTB&=~(1<<DS1302_RST)
//DS1302_SDA=1
#define Set_DS1302_SDA() PORTB|=1<<DS1302_SDA
//DS1302_SDA=0
#define Clr_DS1302_SDA() PORTB&=~(1<<DS1302_SDA)
//DS1302_SCLK=1
#define Set_DS1302_SCLK() PORTB|=1<<DS1302_SCLK
//DS1302_SCLK=0
#define Clr_DS1302_SCLK() PORTB&=~(1<<DS1302_SCLK)
//DS1302的SDA置為輸出腳
#define Set_DS1302_DDRSDA() DDRB|=1<<DS1302_SDA
//DS1302的SDA置為輸入腳
#define Clr_DS1302_DDRSDA() DDRB&=~(1<<DS1302_SDA)
#define DS1302_SEC_Reg 0x80
#define DS1302_MIN_Reg 0x82
#define DS1302_HR_Reg 0x84
#define DS1302_DATE_Reg 0x86
#define DS1302_MONTH_Reg 0x88
#define DS1302_DAY_Reg 0x8a
#define DS1302_YEAR_Reg 0x8c
#define DS1302_CONTROL_Reg 0x8e
#define DS1302_CHARGER_Reg 0x90
#define DS1302_CLKBURST_Reg 0xbe
#define DS1302_Flag 0xc0
//**********************************
//**********************************
//**********************************
void delay_nus (unsigned int n);
void delay_nms (unsigned int n);
void Sound_delay_nms (unsigned int n);
void delay_1us(void); //1us延時函數(shù)
void delay_1ms(void); //1us延時函數(shù)
void LCD_init(void); //液晶初始化
void OUT_LCM (unsigned char n);
void init_devices(void);
void port_init(void);
void Disp_DQ_LD(unsigned char PN,unsigned int addr,unsigned int n);
void Disp_Set_LD(unsigned char flag,unsigned int addr,unsigned int n);
void Disp_Set_TWO(unsigned char flag,unsigned int addr,unsigned char n);
void Disp_Set_FOUR(unsigned char flag,unsigned int addr,unsigned int n);
void Disp_mgl(unsigned int n,float f);
void Disp_dot(unsigned int addr,float f);
void Disp_Set_LD111(unsigned int addr,unsigned int n);
void Display_Time(unsigned char n);
void Display_Time_CLR(void);
void DS1302_Write(uchar reg,uchar data);
uchar DS1302_Read(uchar reg);
uchar Check_DS1302(void);
void DS1302_Init(void);
void ReadTime(void);
void delay_us(unsigned int n);
void Sound_Nms(unsigned int n);
//*********
void ads1100_start(void); /*i2c start */
void ads1100_stop(void); /*i2c stop*/
uchar ackby_ads1100(void); /*ads1100應(yīng)答*/
void ackby_master(void); /*主機應(yīng)答*/
void send_frame(uchar framedata); /*send 8bit to ads1100*/
uchar read_frame(void); /*read bbit from ads1100*/
void ads1100_write(unsigned char addr,unsigned char command); /*write a command to the ads1100*/
unsigned int ads1100_read(unsigned char addr); /*read a convert data from ads1100*/
void QS_ads1100_start(void); /*i2c start */
void QS_ads1100_stop(void); /*i2c stop*/
uchar QS_ackby_ads1100(void); /*ads1100應(yīng)答*/
void QS_ackby_master(void); /*主機應(yīng)答*/
void QS_send_frame(uchar framedata); /*send 8bit to ads1100*/
uchar QS_read_frame(void); /*read bbit from ads1100*/
void QS_ads1100_write(unsigned char addr,unsigned char command); /*write a command to the ads1100*/
unsigned int QS_ads1100_read(unsigned char addr); /*read a convert data from ads1100*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -