标题:
单片机压力传感器的实时监测和报警程序
[打印本页]
作者:
lixiaodong
时间:
2019-7-23 14:47
标题:
单片机压力传感器的实时监测和报警程序
最近因一台消防控制系统设备需加泡沫罐检漏功能,所以专门做了单片机检测压力传感器电流值,做AD转换,进行实时处理,实现对压力传感器的实时监测和报警功能,原理图如图片所示,程序如附件所示。
无标题.png
(220.22 KB, 下载次数: 52)
下载附件
2019-7-23 14:42 上传
单片机源程序如下:
#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)
2019-7-23 14:47 上传
点击文件名下载附件
程序
下载积分: 黑币 -5
作者:
花花花儿
时间:
2020-1-11 16:14
请问,原理图能更清楚的发出来吗?
作者:
tomli
时间:
2020-1-12 10:02
同楼上,能给份原理图学习,谢了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1