最近因一台消防控制系统设备需加泡沫罐检漏功能,所以专门做了单片机检测压力传感器电流值,做AD转换,进行实时处理,实现对压力传感器的实时监测和报警功能,原理图如图片所示,程序如附件所示。
单片机源程序如下:
- #include <REG51F.H>
- #include <stdio.h>
- #include <intrins.h>
- #define LEAK_chg 320 //泄漏判断灵敏度
- #define ADD_chg 100 //加液判断灵敏度
- #define dat_yu 10 //抖动变量
- /*********************
- * 基本命令宏定义 *
- *********************/
- #define HZ_16X16 0XF0 //固定处: 显示16X16点阵国标汉字命令
- #define ASCII_8X8 0XF1 //固定处: 显示8X8ASCII字符命令
- #define SINGLE_DOT 0XF2 //任意点: 显示命令
- #define BYTE_DOT 0XF3 //字节处: 显示点阵命令
- #define SCREEN_CLEAR 0XF4 //整屏清屏命令
- #define ASCII_8X16 0XF9 //固定处: 显示8X16ASCII字符命令
- #define ALL_TOGGLE 0XFA //反白显示命令
- #define CURSOR_LENGTH 0XFB //光标: 开关及类型设置命令
- #define MOVE_SPEED 0XFC //调整移动速度命令
- #define PICTURE_DISP 0XFD //画图片命令
- #define SCREEN_ONOFF 0XFE //屏幕开命令
- #define POWER_SAVE 0XFF //系统省电命令
- #define ASCII_5X8 0XE0 //固定处: 显示5X8ASCII字符命令
- #define NUMBER_3X5 0XE1 //固定处: 显示3X5数字及大写字母命令
- #define ASCII_6X12 0XE2 //固定处: 显示6X12ASCII命令
- #define NUMBER_9X16 0XE3 //固定处: 显示9X16数字命令
- #define CURSOR_LOC 0XE4 //光标: 位置设置命令
- #define BACK_TOGGLE 0XE5 //背光取反命令
- #define CONTRAST_GRADIENT 0XE6 //对比度调整命令
- #define UART_BAUDRATE 0XE8 //UART波特率设置命令
- #define STR_8X16 0XE9 //固定处: 显示16X16中文和8X16ASCII混合字符串命令
- #define HZ_16X16_LOC 0XEA //任意点: 显示16X16中文字符命令
- #define STR_8X16_LOC 0XEB //任意点: 显示16X16中文和8X16ASCII混合字符串命令
- #define HZ_16X16_CUR 0XEC //光标处: 显示16X16点阵的中文字符命令
- #define STR_8X16_CUR 0XED //光标处: 显示中文和8X16ASCII混合字符串命令
- #define TEMPERATURE_SET 0XEE //设置温度补偿开关和系数命令
- #define SOFT_RESET 0XEF //复位命令
- #define ASCII_5X8_CUR 0XD0 //光标处: 显示一个5X8ASCII字符命令
- #define ASCII_8X8_CUR 0XD1 //光标处: 显示一个8X8ASCII字符命令
- #define ASCII_6X12_CUR 0XD2 //光标处: 显示一个6X12ASCII命令
- #define NUMBER_9X16_CUR 0XD3 //光标处: 显示一个9X16数字命令
- #define NUMBER_3X5_CUR 0XD4 //光标处: 显示一个3X5数字和大写字母命令
- #define STR_ASCII_5X8_CUR 0XD5 //光标处: 显示一5X8ASCII字符串命令
- #define STR_NUMBER_3X5_CUR 0XD6 //光标处: 显示3X5数字和大写字母字符串命令
- #define STR_6X12_CUR 0XD7 //光标处: 显示12X12中文和6X12ASCII混合字符串命令
- #define STR_NUMBER_9X16_CUR 0XD8 //光标处: 显示9X16数字字符串命令
- #define ASCII_8X16_CUR 0XD9 //光标处: 显示一个8X16ASCII字符命令
- #define STR_ASCII_8X8_CUR 0XDA //光标处: 显示8X8ASCII字符串命令
- #define STR_ASCII_5X8_LOC 0XDB //任意点: 显示5X8ASCII字符串命令
- #define STR_6X12_LOC 0XDC //任意点: 显示12X12中文和6X12ASCII混合字符串命令
- #define STR_NUMBER_9X16_LOC 0XDD //任意点: 显示9X16数字字符串命令
- #define STR_NUMBER_3X5_LOC 0XDE //任意点: 显示3X5数字和大写字母字符串命令
- #define STR_ASCII_8X8_LOC 0XDF //任意点: 显示8X8ASCII字符串命令
- #define ASCII_5X8_LOC 0XC0 //任意点: 显示5X8ASCII字符命令
- #define ASCII_8X8_LOC 0XC1 //任意点: 显示8X8ASCII字符命令
- #define ASCII_6X12_LOC 0XC2 //任意点: 显示6X12ASCII字符命令
- #define NUMBER_9X16_LOC 0XC3 //任意点: 显示9X16数字字符命令
- #define NUMBER_3X5_LOC 0XC4 //任意点: 显示3X5数字和大写字母字符命令
- #define DRAWLINE 0XC5 //任意点: 画线
- #define AREA_MOVE 0XC6 //任意指定: 区域块移位
- #define AREA_DATA 0XC7 //任意指定: 区域块显示数据 清零/全亮/反显
- #define AREA_FLASH 0XC8 //任意指定: 区域块显示数据自动闪烁
- #define ASCII_8X16_LOC 0XC9 //任意点: 显示8X16ASCII字符命令
- #define RESERVE_01 0XCA //模块内部预留命令,请勿使用
- #define KEYBOARD 0XCB //内置键盘开关命令
- #define RESERVE_02 0XCC //模块内部预留命令,请勿使用
- #define HZ_FORM 0XCD //设置中文和半角ASCII放大字体命令
- #define GET_TEMP 0XCE //获取环境温度命令
- #define RESERVE_03 0XCF //模块内部预留命令,请勿使用
- #define HZ_12X12 0XB0 //固定处: 显示12X12点阵国标汉字命令
- #define RESERVE_04 0XB1 //模块内部预留命令,请勿使用
- #define RESERVE_05 0XB2 //模块内部预留命令,请勿使用
- #define RESERVE_06 0XB3 //模块内部预留命令,请勿使用
- #define RESERVE_07 0XB4 //模块内部预留命令,请勿使用
- #define BACK_ONOFF 0XB5 //背光开关命令
- #define RESERVE_08 0XB6 //模块内部预留命令,请勿使用
- #define RESERVE_09 0XB7 //模块内部预留命令,请勿使用
- #define RESERVE_10 0XB8 //模块内部预留命令,请勿使用
- #define STR_6X12 0XB9 //固定处: 显示12X12中文和6X12ASCII混合字符串命令
- #define HZ_12X12_LOC 0XBA //任意点: 显示12X12中文字符命令
- #define NOP 0XBB //空转命令
- #define HZ_12X12_CUR 0XBC //光标处: 显示12X12点阵的中文字符命令
- #define RESERVE_11 0XBD //模块内部预留命令,请勿使用
- #define RESERVE_12 0XBE //模块内部预留命令,请勿使用
- #define RESERVE_13 0XBF //模块内部预留命令,请勿使用
- sbit AMXR=P2^3; // 禁止ALE
- unsigned int n0,n1,n2,n3,n4;
- unsigned int SBMF;
- unsigned int ad_data1 , ad_data2 , ccc1 , ccc2;
- unsigned char tr_rx;
- unsigned char rx[9] , rec;//发送、接收缓存 计数
- unsigned int rec_tim;
- unsigned char prefz;//压力采样峰谷值判断计数
- unsigned int pressmax;//压力峰谷值采样数组
- unsigned int pressmin;//压力谷值采样数组
- unsigned int D_dat,avedat,avedatlast;//LCD显示最大值最小值
- unsigned int pressph[2];
- unsigned long press1p;//压力1采样平均值
- unsigned long press2p;//压力2采样平均值
- unsigned char bj,bj_jc; //泄漏报警标识 bj=1泄漏报警 bj=2加液过程 bj=3加液结束 bj=4进行喷放 bj=5喷放结束 bj=6停止检测 bj=7开始检测
- unsigned char cgf;//传感器阀标识 0:传感器阀关 1:传感器阀开
- void max126(unsigned int ch); //max126 AD 转换
- void Value(); //加液判断
- void DP();//数据处理
- void X5045wr1(unsigned char a); //写X5045指令 a:指令
- void X5045wr2(unsigned int a,unsigned char b) ; //写X5045存储器 a:数据 b:起始地址
- void X5045wr3(unsigned char a); //写X5045寄存器 a:寄存器数据
- unsigned char X5045rd1(); //读X5045寄存器 c:命令 d:读长度(位数)
- unsigned int X5045rd2(unsigned char c); //读X5045存储器 c:起始地址
- void BCD_chg(unsigned int dat1,unsigned char m,unsigned char n); //BCD码转换,m行 n 列
- void LCD(void); //液晶显示初始化
- void LCD_DISPLAY(unsigned int disdat1,unsigned int disdat2,unsigned int disdat3,unsigned int disdat4);//LCD显示
- //********************
- //延时函数1ms 100us
- //********************
- void Delay_1ms(unsigned int j) //对于11.0592MHz时钟延时1ms
- {
- unsigned char i,k;
- while(j--)
- {
- for(k=0;k<12;k++)
- for(i=0;i<125;i++)
- {}
- }
- }
- //*********************
- //串口方式读写数据
- //*********************
- void put_char(unsigned char ch)
- {
- SBUF = ch;
- while( TI == 0 ); //查询法
- TI = 0;
- }
- unsigned char get_char(void)
- {
- unsigned char ch;
- while(RI==0);
- ch=SBUF;
- RI=0;
- return ch;
- }
- /*****************************************************/
- /***********************液晶屏基本设置函数************/
- /*****************************************************/
- /*************************************************************
- 函数名称:Screen_Clear
- 函数功能:整屏清屏
- 调用函数:NO
- 被调函数:NO
- 输入参数:NO
- 输出参数:NO
- 函数返回:NO
- 其他说明:NO
- *************************************************************/
- void Screen_Clear(void)
- {
- unsigned char ch;
- put_char(SCREEN_CLEAR); //0xE3 行位置0-7 列位置0-25 ASC2字符代码 9*16 0-9数字
- ch=get_char();
- while(ch!=0xCC); //等待返回值???
- }
- /*************************************************************
- 函数名称:Back_Toggle
- 函数功能:背光开关
- 调用函数:NO
- 被调函数:NO
- 输入参数:NO
- 输出参数:NO
- 函数返回:NO
- 其他说明:发送一次E5命令,打开背光,在发送一次E5命令,关闭背光
- *************************************************************/
- void Back_Toggle(void)
- {
- unsigned char ch;
- put_char(BACK_TOGGLE);
- ch=get_char();
- while(ch!=0xCC); //等待返回值???
- }
- /********************************************************************************/
- /************************** 液晶屏汉字显示函数 ****************************/
- /********************************************************************************/
- /*************************************************************
- 函数名称:Screen_Onoff
- 函数功能:键盘开关命令
- 调用函数:NO
- 被调函数:NO
- 输入参数:Switch-开关(0/1)
- 输出参数:NO
- 函数返回:NO
- 其他说明:NO
- *************************************************************/
- void Screen_Onoff(unsigned char Switch)
- {
- unsigned char ch;
- put_char(SCREEN_ONOFF);
- put_char(Switch);
- put_char(02);
- ch=get_char();
- while(ch!=0xCC); //等待返回值???
- }
- /********************************************************************************/
- /************************** 液晶屏数字显示函数 ****************************/
- /********************************************************************************/
- /*************************************************************
- 函数名称:Number_9x16
- 函数功能:在指定位置显示一个9X16数字
- 调用函数:NO
- 被调函数:NO
- 输入参数:Y-行数(0-3),X-列数(00-13), *S-显示ASCII字符
- 输出参数:NO
- 函数返回:NO
- 其他说明:NO
- *************************************************************/
- void Number_9x16(unsigned char Y, unsigned char X, unsigned char s)
- {
- unsigned char ch;
- put_char(ASCII_8X16);
- put_char(Y);
- put_char(X);
- put_char(s); // 显示字符
- ch=get_char();
- while(ch!=0xCC); //等待返回值???
- }
- /********************************************************************************/
- /************************** 液晶屏ASCII字符显示函数 ****************************/
- /********************************************************************************/
- /********************************************************************************/
- /************************** 液晶屏混合字符显示函数 ****************************/
- /********************************************************************************/
- /*************************************************************
- 函数名称:Str_8x16
- 函数功能:在指定位置显示16X16中文和8X16ASCII字符串
- 调用函数:NO
- 被调函数:NO
- 输入参数:Y-行数(0-3),X-列数(0-15), *S-显示内容
- 输出参数:NO
- 函数返回:NO
- 其他说明:NO
- *************************************************************/
- void Str_8x16(unsigned char Y, unsigned char X, unsigned char *s)
- {
- unsigned char ch;
- put_char(STR_8X16);
- put_char(Y);
- put_char(X);
- while (*s)
- {
- put_char(*s); // 显示字符
- s++;
- }
- put_char(0X00); //结束符
- ch=get_char();
- while(ch!=0xCC); //等待返回值???
- }
- void X5045wr1(unsigned char a) //写X5045指令 a:指令
- {
- unsigned char i ,j,c;
- T0=1;
- T1=1;T2=0;
- T1=0;
- c=6; //X5045使能写
- for(i=0;i!=8;i++)
- {
- if((a & 0x80) == 0x80)
- {
- WR = 1;
- T2 = 1;
- }
- if((a & 0x80) == 0)
- {
- WR = 0;
- T2 = 1;
- }
- a = a << 1;
- for(j=0;j!=10;j++){}
- T2 = 0;
- }
- T1=1; //X5045禁止写
- }
- void X5045wr3(unsigned char a) //写X5045寄存器 a:寄存器数据
- {
- unsigned char i , c;
- c=0x01;
- T0=1;
- T1=1;
- T2=0;
- T1=0; //X5045使能写
- for(i=0;i!=8;i++)
- {
- if((c & 0x80 )== 0x80)
- {
- WR = 1;
- T2 = 1;
- }
- if((c & 0x80) == 0)
- {
- WR = 0;
- T2 = 1;
- }
- c = c << 1;
- T2 = 0;
- }
-
- for(i=0;i!=8;i++)
- {
- if((a & 0x80 )== 0x80)
- {
- WR = 1;
- T2 = 1;
- }
- if((a & 0x80) == 0)
- {
- WR = 0;
- T2 = 1;
- }
- a = a << 1;
- T2 = 0;
- }
- T1=1; //X5045禁止写
- }
- unsigned char X5045rd1() //读X5045寄存器 c:命令 d:读长度(位数)
- {
- unsigned char i,c,j,dat;
- c=0x05;
- T0=1;
- T1=1;
- T2=0; //读状态寄存器
- T1=0;
- //X5045使能写
- for(i=0;i!=8;i++) //写读指令
- {
- if((c & 0x80) == 0x80)
- {
- WR = 1;
- T2 = 1;
- }
- if((c & 0x80) == 0)
- {
- WR = 0;
- T2 = 1;
- }
- c = c << 1;
- for(j=0;j!=10;j++){}
- T2 = 0;
- }
- dat = 0;
- T2 = 0;
- for(i=0;i!=8;i++)
- {
- for(j=0;j!=10;j++){}
- {
- dat = dat << 1;
- }
- T2 = 0;
- for(j=0;j!=10;j++)
- {};
- c=RD;
- //for(j=0;j!=10;j++){}
- if(c == 1)
- {
- dat = (dat | 0x01);
- }
- T2 = 1;
- }
- T1=1; //X5045禁止
- return dat;
- }
- void rec_dat()interrupt 4 using 1//串口中断
- {
- RI=0;
- rec_tim=0;
- rx[rec]=SBMF;
- if(rx[0]==0x055 && rec<9)//幁头正确,未接收完
- {
- rec=rec+1;
- }
- if(rec==9)
- {
- rec=0;
- tr_rx=2;
- } //置接收完成标志
- }
- void BCD_chg(unsigned int dat1,unsigned char m,unsigned char n) //BCD码转换,m行 n 列
- {
- if((dat1==0)||(dat1<10))
- {
- n0=dat1+0x30;
- Number_9x16(m, n,n0);
- Number_9x16(m, n+1, 0x20);
- Number_9x16(m, n+2, 0x20);
- Number_9x16(m, n+3, 0x20);
- Number_9x16(m, n+4, 0x20);
- }
- else if((dat1==10)||((dat1>10)&&(dat1<100)))
- {
- n0=0x30+(dat1%10); //个位
- n1=(dat1/10)+0x30; //十位
- Number_9x16(m, n, n1);
- Number_9x16(m, n+1, n0);
- Number_9x16(m, n+2, 0x20);
- Number_9x16(m, n+3, 0x20);
- Number_9x16(m, n+4, 0x20);
- }
- else if((dat1==100)||((dat1>100)&&(dat1<1000)))
- {
- n0=((dat1%100)%10)+0x30; //个位
- n1=((dat1%100)/10)+0x30; //十位
- n2=(dat1/100)+0x30; //百位
- Number_9x16(m,n,n2);
- Number_9x16(m,n+1,n1);
- Number_9x16(m,n+2,n0);
- Number_9x16(m, n+3, 0x20);
- Number_9x16(m, n+4, 0x20);
- }
- else if((dat1==1000)||((dat1>1000)&&(dat1<10000)))
- {
- n0=((dat1%100)%10)+0x30; //个位
- n1=((dat1%100)/10)+0x30; //十位
- n2=((dat1/100)%10)+0x30; //百位
- n3=(dat1/1000)+0x30; //千位
- Number_9x16(m,n,n3);
- Number_9x16(m,n+1,n2);
- Number_9x16(m,n+2,n1);
- Number_9x16(m,n+3,n0);
- Number_9x16(m, n+4, 0x20);
- }
- else if((dat1==10000)||(dat1>10000))
- {
- n0=((dat1%100)%10)+0x30; //个位
- n1=((dat1%100)/10)+0x30; //十位
- n2=((dat1%1000)/100)+0x30; //百位
- n3=((dat1%10000)/1000)+0x30; //千位
- n4=(dat1/10000)+0x30; //万位
- Number_9x16(m,n,n4);
- Number_9x16(m,n+1,n3);
- Number_9x16(m,n+2,n2);
- Number_9x16(m,n+3,n1);
- Number_9x16(m,n+4,n0);
- }
- else
- {
- Number_9x16(m,n,0x39);
- Number_9x16(m,n+1,0x39);
- Number_9x16(m,n+2,0x39);
- Number_9x16(m,n+3,0x39);
- Number_9x16(m,n+4,0x39);
- }
- }
- void LCD()//液晶显示初始化
- {
- Screen_Clear(); //清屏
- Back_Toggle(); //打开背光
- Screen_Onoff(01); //屏幕全亮6S用于检查屏幕质量
- Delay_1ms(1000);
- Screen_Onoff(00); //屏幕恢复正常
- Str_8x16(1,0,"西安新竹防灾救生设备有限");
- Str_8x16(2,0,"公司");
- //显示“西安新竹防灾救生设备有限公司”
- Delay_1ms(500);
- Screen_Clear(); //清屏
- }
- void LCD_DISPLAY(unsigned int disdat1,unsigned int disdat2,unsigned int disdat3,unsigned int disdat4)//LCD显示
- {
- Str_8x16(0,0,"瞬时值");
- Str_8x16(1,0,"平均值");
- Str_8x16(2,0,"基准值");
- Str_8x16(3,0,"差 值");
- switch(bj)
- {
- case 1:
- Str_8x16(1,14,"泄漏报警"); //显示“泄漏报警”
- break;
- case 2:
- Str_8x16(1,14,"加泡沫液"); //显示"加泡沫液"
- break;
- case 3:
- Str_8x16(1,14,"液面稳定"); //显示"液面稳定"
- break;
- default:
- break;
- }
- if( bj_jc==0)
- {
- Str_8x16(0,14,"停止检测");
- }//显示“停止检测”
- else if( bj_jc==1)
- {
- Str_8x16(0,14,"开始检测");
- }//显示“开始检测”
- if( cgf==1)
- {
- Str_8x16(2,14,"传感器阀开");
- }//显示“传感器阀开”
- else
- {
- Str_8x16(2,14,"传感器阀关");
- }
-
- BCD_chg(disdat1,0,7);
- BCD_chg(disdat2,1,7);
- BCD_chg(disdat3,2,7);
- BCD_chg(disdat4,3,7);
- }
- //void max126(unsigned int ch) //max126 AD 转换
- //{
- // P2=(P2|0x80);
- // P2=0xff;
- // P0=0xff;//禁止62256
- // AMXR=0x01;//禁止ALE
- // CEX4=0; //max126选通 CS
- // WR=0; //写命令
- // P0=ch;//ch; //单通道
- // WR=1;
- // CEX4=1;
- // CEX3=0;//开始转换 CONVST
- // CEX3=1;
- // while(INT0==1){} //INT
- // CEX4=0;//max126选通
- // RD=0;
- // P0=0xff;
- // P2=0xff;
- // ad_data2 = P2; // 地址
- // ad_data1 = P0;// 数据 ad_data1 = P0;ad_data2 = P2;
- // RD=1;
- // CEX4=1;//max126禁止
- // ccc1 = ad_data1;
- // ccc2 = (ad_data2 & 0x003f);
- // ccc2 = (ccc2 <<8);//c2 = c2 & 0x3f00;
- // pressph[0]=(ccc1|ccc2); //c1;
- // if((pressph[0]<400)||(pressph[0]>16300))
- // {
- // pressph[0]=pressph[1];
- // }
- // else
- // {
- // pressph[1]=pressph[0];
- // }
- // P2=(P2 & 0xef);//使能62256
- // AMXR=0x00;//使能ALE
- //}
- void max126(unsigned int ch) //max126 AD 转换
- {
- P2=(P2|0x80);
- P2=0xff;
- P0=0xff;//禁止62256
- AMXR=0x01;//禁止ALE
- CEX4=0; //max126选通 CS
- WR=0; //写命令
- P0=ch;//ch; //单通道
- WR=1;
- CEX4=1;
- CEX3=0;//开始转换 CONVST
- CEX3=1;
- while(INT0==1); //INT
- CEX4=0;//max126选通
- RD=0;
- P0=0xff;
- P2=0xff;
- ad_data2 = P2; // 地址
- ad_data1 = P0;// 数据 ad_data1 = P0;ad_data2 = P2;
- RD=1;
- CEX4=1;//max126禁止
- ccc1 = ad_data1;
- ccc2 = (ad_data2 & 0x003f);
- ccc2 = (ccc2 <<8);//c2 = c2 & 0x3f00;
- pressph[0]=(ccc1|ccc2); //c1;
- if((pressph[0]<1000)||(pressph[0]>16300))
- {
- pressph[0]=pressph[1];
- }
- else
- {
- pressph[1]=pressph[0];
- }
- P2=(P2 & 0xef);//使能62256
- AMXR=0x00;//使能ALE
- }
- void DP()//数据处理
- {
- prefz=prefz+1;
- pressmax=0;
- pressmin=16300;
- if((pressph[1]>pressmax))
- {
- pressmax=pressph[1];
- }
- if(pressph[1]<pressmin)
- {
- pressmin=pressph[1];
- }
- if(prefz>10)
- {
- prefz=0;
- avedat=(pressmax+pressmin)/2;
- if(avedat<avedatlast)
- {
- bj=1;
- CEX0=0;
- D_dat=avedatlast-avedat;
- }
- else
- {
- D_dat=avedat-avedatlast;
- bj=3;
- CEX0=1;
- }
- }
- }
- void main()
- {
- unsigned int i,k;
- unsigned char m,normal,normal1,timecount,timecount1;//normal正常LED
- unsigned int timecount2;
- normal=0;normal1=0;timecount=0;timecount1=0;timecount2=0;//start=1;
- Delay_1ms(50);
- T0=1;
- T1=1;
- T2=0;//X5045 写保护
- m=0xff;
- P2=P2 | 0x80;//禁止62256
- T0=0;
- {X5045wr1(0x06);}//写允许
- while((m & 2)!=2){m=X5045rd1();}//是否允许写
- while((m & 1)==1){m=X5045rd1();}//是否写完
- X5045wr3(0x00);
- while((m & 1)==1){m=X5045rd1();}//读数据指令
- P2=P2 & 0xef;//使能62256
- SM0 = 0;
- SM1 = 1;
- SM2 = 1;//串口方式1,
- TMOD = 0x33; //禁止定时/计数器0,1
- TCON = 0x0; //禁止定时/计数器0,1计数
- T2CON = 0x30; //设定定时/计数器2为波特率发生器(接收、发送)
- T2MOD = 0x00; //设定定时/计数器2为递增
- PCON = 0x00;//波特率不倍增
- RCAP2H = 0xff;//0xfd;//22.1184MHz 9600 波特率
- RCAP2L = 0xb7;//0xc0;
- TR2 = 1; //启动定时器2
- REN = 1; //允许串口接收
- CEX2=1;
- WR=1;
- RD=1;
- ES=0;/////
- TI=0;
- RI=0;///////
- k=0;
- timecount=0;
- pressmax=0;
- pressmin=16300;
- bj=0;
- cgf=1;
- CEX0=1;
- INT1=0;
- if(CEX2==0)
- {
- LCD();
- }//液晶显示初始化 显示“西安新竹防灾救生设备有限公司”
- while (1)
- {
- if(T2EX==1)
- {
- cgf=1;
- bj_jc=1;
- RCAP2H = 0xff;//0xfd;//40MHz 输出16Mhz时钟
- RCAP2L = 0xff;//0xc0;
- T2CON = 0x04;//设定定时/计数器2为可编程时钟输出
- T2MOD = 0x02; //设定定时/计数器2为递增
- TR2 = 1; //启动定时器2
- press1p=0;
- press2p=0;
- for(i=0;i<50;i++)
- {
- max126(4);
- press2p=press2p+pressph[0];
- }
- press1p=press2p/50;
- press2p=0;
- if((press1p<400)||(press1p>16300))
- {
- INT1=1;
- }
- else
- {
- INT1=0;
- }//传感器故障判断
- T0=0;//X5054 写保护
- DP();//数据处理
- T2CON = 0x30; //设定定时/计数器2为波特率发生器(接收、发送)
- T2MOD = 0x00; //设定定时/计数器2为递增
- RCAP2H = 0xff;//0xfd;//22.1184MHz 9600 波特率
- RCAP2L = 0xb7;//0xc0;
- TR2 = 1; //启动定时器2
- if(CEX2==0)
- {
- LCD_DISPLAY(pressph[1],avedat,avedatlast,D_dat);//
- }
- if(CEX0==0)
- {
- i=10;
- }
- else
- {
- i=30;
- }//如果泄漏-液晶不显示;工作指示灯快闪。如果不泄漏-液晶不显示;工作指示灯慢闪。
- timecount++;
- if(timecount>i)
- {
- timecount=0;
- ECI=~ECI;
- }//工作指示灯点?
- }
- else
- {
- bj_jc=0;
- cgf=0;
- ECI=1;
- pressmax=0;
- pressmin=16300;
- if(CEX2==0)
- {
- LCD_DISPLAY(0,0,0,0);//
- }
- }
- T1=1;
- T1=0;
- T1=1;
- }
- }
复制代码
所有资料51hei提供下载:
include.docx
(31.05 KB, 下载次数: 34)
|