📄 m128_alky_touch_con1.c
字号:
//ICC-AVR application builder : 2007-10-26 14:46:56
// Target : M128
// Crystal: 4.0000Mhz
// IC:M128,DS1302,LM324
// 功能:酒精浓度气体发生Hh6232A
// 说明:酒精浓度检测采用LM324模拟电路
// 作者:邵伍胜
// 创作时期:2007年10月
// 修改时期:2008年01月
#include <iom128v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
//********************************** main
//**********************************
typedef struct PID {
uint SetPoint; // 设定目标Desired value
uchar Proportion; // 比例常数Proportional Const
uchar Integral; // 积分常数Integral Const
uchar Derivative; // 微分常数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 L_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];
const unsigned char TOUCH_KEY_BD[38][7];
const unsigned char TOUCH_MENU_Message[16][12][25];
const unsigned char TOUCH_LOCK_TAB[2][16][2];
//**********************************
//EEPROM存储结构
#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系数
#define EE_LDPID_I_Addr 0x0049 //浓度I系数
#define EE_LDPID_D_Addr 0x004A //浓度D系数
#define EE_LDPID_MAX_AddrL 0x004B //浓度饱和值
#define EE_LDPID_MAX_AddrH 0x004C //浓度饱和值
#define EE_WDPID_P_Addr 0x004D //温度P系数
#define EE_WDPID_I_Addr 0x004E //温度I系数
#define EE_WDPID_D_Addr 0x004F //温度D系数
#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为十组参数记忆
//**********************************
#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; //设定值改变使能
unsigned char Set_Change_Flag1; //设定值改变标志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; //设定浓度值
unsigned int Set_LiuLiang_Value; //设定流量值
unsigned char Set_WenDu_Value; //设定温度值
unsigned char Set_ShiJian_Value; //设定时间值
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; //设定温度周期值
unsigned int F_LDZQ_Value; //设定浓度周期值
unsigned char F_FSYZ_FLAG; //换算因子标记 0:2000;1:2100;2:2200
unsigned char F_YYJB_Value; //设定原液加补值
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 char LOCK_Count;
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 TOUCH_LOCK_F 0x05
#define Set_TOUCH_KEY_DISP_F() FLAG|=1<<TOUCH_KEY_DISP_F
#define Clr_TOUCH_KEY_DISP_F() FLAG&=~(1<<TOUCH_KEY_DISP_F)
#define YN_TOUCH_KEY_DISP_F (FLAG&(1<<TOUCH_KEY_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 Set_TOUCH_LOCK_F() FLAG|=1<<TOUCH_LOCK_F
#define Clr_TOUCH_LOCK_F() FLAG&=~(1<<TOUCH_LOCK_F)
#define YN_TOUCH_LOCK_F (FLAG&(1<<TOUCH_LOCK_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相关
//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延时函数
void delay_1ms(void); //1us延时函数
void LCD_init(void); //液晶初始化
void OUT_LCM (unsigned char n);
void init_devices(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -