欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)壓力傳感器的實時監(jiān)測和報警程序
[打印本頁]
作者:
lixiaodong
時間:
2019-7-23 14:47
標(biāo)題:
單片機(jī)壓力傳感器的實時監(jiān)測和報警程序
最近因一臺消防控制系統(tǒng)設(shè)備需加泡沫罐檢漏功能,所以專門做了單片機(jī)檢測壓力傳感器電流值,做AD轉(zhuǎn)換,進(jìn)行實時處理,實現(xiàn)對壓力傳感器的實時監(jiān)測和報警功能,原理圖如圖片所示,程序如附件所示。
無標(biāo)題.png
(220.22 KB, 下載次數(shù): 52)
下載附件
2019-7-23 14:42 上傳
單片機(jī)源程序如下:
#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點(diǎn)陣國標(biāo)漢字命令
#define ASCII_8X8 0XF1 //固定處: 顯示8X8ASCII字符命令
#define SINGLE_DOT 0XF2 //任意點(diǎn): 顯示命令
#define BYTE_DOT 0XF3 //字節(jié)處: 顯示點(diǎn)陣命令
#define SCREEN_CLEAR 0XF4 //整屏清屏命令
#define ASCII_8X16 0XF9 //固定處: 顯示8X16ASCII字符命令
#define ALL_TOGGLE 0XFA //反白顯示命令
#define CURSOR_LENGTH 0XFB //光標(biāo): 開關(guān)及類型設(shè)置命令
#define MOVE_SPEED 0XFC //調(diào)整移動速度命令
#define PICTURE_DISP 0XFD //畫圖片命令
#define SCREEN_ONOFF 0XFE //屏幕開命令
#define POWER_SAVE 0XFF //系統(tǒng)省電命令
#define ASCII_5X8 0XE0 //固定處: 顯示5X8ASCII字符命令
#define NUMBER_3X5 0XE1 //固定處: 顯示3X5數(shù)字及大寫字母命令
#define ASCII_6X12 0XE2 //固定處: 顯示6X12ASCII命令
#define NUMBER_9X16 0XE3 //固定處: 顯示9X16數(shù)字命令
#define CURSOR_LOC 0XE4 //光標(biāo): 位置設(shè)置命令
#define BACK_TOGGLE 0XE5 //背光取反命令
#define CONTRAST_GRADIENT 0XE6 //對比度調(diào)整命令
#define UART_BAUDRATE 0XE8 //UART波特率設(shè)置命令
#define STR_8X16 0XE9 //固定處: 顯示16X16中文和8X16ASCII混合字符串命令
#define HZ_16X16_LOC 0XEA //任意點(diǎn): 顯示16X16中文字符命令
#define STR_8X16_LOC 0XEB //任意點(diǎn): 顯示16X16中文和8X16ASCII混合字符串命令
#define HZ_16X16_CUR 0XEC //光標(biāo)處: 顯示16X16點(diǎn)陣的中文字符命令
#define STR_8X16_CUR 0XED //光標(biāo)處: 顯示中文和8X16ASCII混合字符串命令
#define TEMPERATURE_SET 0XEE //設(shè)置溫度補(bǔ)償開關(guān)和系數(shù)命令
#define SOFT_RESET 0XEF //復(fù)位命令
#define ASCII_5X8_CUR 0XD0 //光標(biāo)處: 顯示一個5X8ASCII字符命令
#define ASCII_8X8_CUR 0XD1 //光標(biāo)處: 顯示一個8X8ASCII字符命令
#define ASCII_6X12_CUR 0XD2 //光標(biāo)處: 顯示一個6X12ASCII命令
#define NUMBER_9X16_CUR 0XD3 //光標(biāo)處: 顯示一個9X16數(shù)字命令
#define NUMBER_3X5_CUR 0XD4 //光標(biāo)處: 顯示一個3X5數(shù)字和大寫字母命令
#define STR_ASCII_5X8_CUR 0XD5 //光標(biāo)處: 顯示一5X8ASCII字符串命令
#define STR_NUMBER_3X5_CUR 0XD6 //光標(biāo)處: 顯示3X5數(shù)字和大寫字母字符串命令
#define STR_6X12_CUR 0XD7 //光標(biāo)處: 顯示12X12中文和6X12ASCII混合字符串命令
#define STR_NUMBER_9X16_CUR 0XD8 //光標(biāo)處: 顯示9X16數(shù)字字符串命令
#define ASCII_8X16_CUR 0XD9 //光標(biāo)處: 顯示一個8X16ASCII字符命令
#define STR_ASCII_8X8_CUR 0XDA //光標(biāo)處: 顯示8X8ASCII字符串命令
#define STR_ASCII_5X8_LOC 0XDB //任意點(diǎn): 顯示5X8ASCII字符串命令
#define STR_6X12_LOC 0XDC //任意點(diǎn): 顯示12X12中文和6X12ASCII混合字符串命令
#define STR_NUMBER_9X16_LOC 0XDD //任意點(diǎn): 顯示9X16數(shù)字字符串命令
#define STR_NUMBER_3X5_LOC 0XDE //任意點(diǎn): 顯示3X5數(shù)字和大寫字母字符串命令
#define STR_ASCII_8X8_LOC 0XDF //任意點(diǎn): 顯示8X8ASCII字符串命令
#define ASCII_5X8_LOC 0XC0 //任意點(diǎn): 顯示5X8ASCII字符命令
#define ASCII_8X8_LOC 0XC1 //任意點(diǎn): 顯示8X8ASCII字符命令
#define ASCII_6X12_LOC 0XC2 //任意點(diǎn): 顯示6X12ASCII字符命令
#define NUMBER_9X16_LOC 0XC3 //任意點(diǎn): 顯示9X16數(shù)字字符命令
#define NUMBER_3X5_LOC 0XC4 //任意點(diǎn): 顯示3X5數(shù)字和大寫字母字符命令
#define DRAWLINE 0XC5 //任意點(diǎn): 畫線
#define AREA_MOVE 0XC6 //任意指定: 區(qū)域塊移位
#define AREA_DATA 0XC7 //任意指定: 區(qū)域塊顯示數(shù)據(jù) 清零/全亮/反顯
#define AREA_FLASH 0XC8 //任意指定: 區(qū)域塊顯示數(shù)據(jù)自動閃爍
#define ASCII_8X16_LOC 0XC9 //任意點(diǎn): 顯示8X16ASCII字符命令
#define RESERVE_01 0XCA //模塊內(nèi)部預(yù)留命令,請勿使用
#define KEYBOARD 0XCB //內(nèi)置鍵盤開關(guān)命令
#define RESERVE_02 0XCC //模塊內(nèi)部預(yù)留命令,請勿使用
#define HZ_FORM 0XCD //設(shè)置中文和半角ASCII放大字體命令
#define GET_TEMP 0XCE //獲取環(huán)境溫度命令
#define RESERVE_03 0XCF //模塊內(nèi)部預(yù)留命令,請勿使用
#define HZ_12X12 0XB0 //固定處: 顯示12X12點(diǎn)陣國標(biāo)漢字命令
#define RESERVE_04 0XB1 //模塊內(nèi)部預(yù)留命令,請勿使用
#define RESERVE_05 0XB2 //模塊內(nèi)部預(yù)留命令,請勿使用
#define RESERVE_06 0XB3 //模塊內(nèi)部預(yù)留命令,請勿使用
#define RESERVE_07 0XB4 //模塊內(nèi)部預(yù)留命令,請勿使用
#define BACK_ONOFF 0XB5 //背光開關(guān)命令
#define RESERVE_08 0XB6 //模塊內(nèi)部預(yù)留命令,請勿使用
#define RESERVE_09 0XB7 //模塊內(nèi)部預(yù)留命令,請勿使用
#define RESERVE_10 0XB8 //模塊內(nèi)部預(yù)留命令,請勿使用
#define STR_6X12 0XB9 //固定處: 顯示12X12中文和6X12ASCII混合字符串命令
#define HZ_12X12_LOC 0XBA //任意點(diǎn): 顯示12X12中文字符命令
#define NOP 0XBB //空轉(zhuǎn)命令
#define HZ_12X12_CUR 0XBC //光標(biāo)處: 顯示12X12點(diǎn)陣的中文字符命令
#define RESERVE_11 0XBD //模塊內(nèi)部預(yù)留命令,請勿使用
#define RESERVE_12 0XBE //模塊內(nèi)部預(yù)留命令,請勿使用
#define RESERVE_13 0XBF //模塊內(nèi)部預(yù)留命令,請勿使用
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;//發(fā)送、接收緩存 計數(shù)
unsigned int rec_tim;
unsigned char prefz;//壓力采樣峰谷值判斷計數(shù)
unsigned int pressmax;//壓力峰谷值采樣數(shù)組
unsigned int pressmin;//壓力谷值采樣數(shù)組
unsigned int D_dat,avedat,avedatlast;//LCD顯示最大值最小值
unsigned int pressph[2];
unsigned long press1p;//壓力1采樣平均值
unsigned long press2p;//壓力2采樣平均值
unsigned char bj,bj_jc; //泄漏報警標(biāo)識 bj=1泄漏報警 bj=2加液過程 bj=3加液結(jié)束 bj=4進(jìn)行噴放 bj=5噴放結(jié)束 bj=6停止檢測 bj=7開始檢測
unsigned char cgf;//傳感器閥標(biāo)識 0:傳感器閥關(guān) 1:傳感器閥開
void max126(unsigned int ch); //max126 AD 轉(zhuǎn)換
void Value(); //加液判斷
void DP();//數(shù)據(jù)處理
void X5045wr1(unsigned char a); //寫X5045指令 a:指令
void X5045wr2(unsigned int a,unsigned char b) ; //寫X5045存儲器 a:數(shù)據(jù) b:起始地址
void X5045wr3(unsigned char a); //寫X5045寄存器 a:寄存器數(shù)據(jù)
unsigned char X5045rd1(); //讀X5045寄存器 c:命令 d:讀長度(位數(shù))
unsigned int X5045rd2(unsigned char c); //讀X5045存儲器 c:起始地址
void BCD_chg(unsigned int dat1,unsigned char m,unsigned char n); //BCD碼轉(zhuǎn)換,m行 n 列
void LCD(void); //液晶顯示初始化
void LCD_DISPLAY(unsigned int disdat1,unsigned int disdat2,unsigned int disdat3,unsigned int disdat4);//LCD顯示
//********************
//延時函數(shù)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++)
{}
}
}
//*********************
//串口方式讀寫數(shù)據(jù)
//*********************
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;
}
/*****************************************************/
/***********************液晶屏基本設(shè)置函數(shù)************/
/*****************************************************/
/*************************************************************
函數(shù)名稱:Screen_Clear
函數(shù)功能:整屏清屏
調(diào)用函數(shù):NO
被調(diào)函數(shù):NO
輸入?yún)?shù):NO
輸出參數(shù):NO
函數(shù)返回:NO
其他說明:NO
*************************************************************/
void Screen_Clear(void)
{
unsigned char ch;
put_char(SCREEN_CLEAR); //0xE3 行位置0-7 列位置0-25 ASC2字符代碼 9*16 0-9數(shù)字
ch=get_char();
while(ch!=0xCC); //等待返回值???
}
/*************************************************************
函數(shù)名稱:Back_Toggle
函數(shù)功能:背光開關(guān)
調(diào)用函數(shù):NO
被調(diào)函數(shù):NO
輸入?yún)?shù):NO
輸出參數(shù):NO
函數(shù)返回:NO
其他說明:發(fā)送一次E5命令,打開背光,在發(fā)送一次E5命令,關(guān)閉背光
*************************************************************/
void Back_Toggle(void)
{
unsigned char ch;
put_char(BACK_TOGGLE);
ch=get_char();
while(ch!=0xCC); //等待返回值???
}
/********************************************************************************/
/************************** 液晶屏漢字顯示函數(shù) ****************************/
/********************************************************************************/
/*************************************************************
函數(shù)名稱:Screen_Onoff
函數(shù)功能:鍵盤開關(guān)命令
調(diào)用函數(shù):NO
被調(diào)函數(shù):NO
輸入?yún)?shù):Switch-開關(guān)(0/1)
輸出參數(shù):NO
函數(shù)返回: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); //等待返回值???
}
/********************************************************************************/
/************************** 液晶屏數(shù)字顯示函數(shù) ****************************/
/********************************************************************************/
/*************************************************************
函數(shù)名稱:Number_9x16
函數(shù)功能:在指定位置顯示一個9X16數(shù)字
調(diào)用函數(shù):NO
被調(diào)函數(shù):NO
輸入?yún)?shù):Y-行數(shù)(0-3),X-列數(shù)(00-13), *S-顯示ASCII字符
輸出參數(shù):NO
函數(shù)返回: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字符顯示函數(shù) ****************************/
/********************************************************************************/
/********************************************************************************/
/************************** 液晶屏混合字符顯示函數(shù) ****************************/
/********************************************************************************/
/*************************************************************
函數(shù)名稱:Str_8x16
函數(shù)功能:在指定位置顯示16X16中文和8X16ASCII字符串
調(diào)用函數(shù):NO
被調(diào)函數(shù):NO
輸入?yún)?shù):Y-行數(shù)(0-3),X-列數(shù)(0-15), *S-顯示內(nèi)容
輸出參數(shù):NO
函數(shù)返回: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); //結(jié)束符
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:寄存器數(shù)據(jù)
{
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:讀長度(位數(shù))
{
unsigned char i,c,j,dat;
c=0x05;
T0=1;
T1=1;
T2=0; //讀狀態(tài)寄存器
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;
} //置接收完成標(biāo)志
}
void BCD_chg(unsigned int dat1,unsigned char m,unsigned char n) //BCD碼轉(zhuǎn)換,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用于檢查屏幕質(zhì)量
Delay_1ms(1000);
Screen_Onoff(00); //屏幕恢復(fù)正常
Str_8x16(1,0,"西安新竹防災(zāi)救生設(shè)備有限");
Str_8x16(2,0,"公司");
//顯示“西安新竹防災(zāi)救生設(shè)備有限公司”
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,"基準(zhǔn)值");
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,"液面穩(wěn)定"); //顯示"液面穩(wěn)定"
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,"傳感器閥關(guān)");
}
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 轉(zhuǎn)換
//{
// 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;//開始轉(zhuǎn)換 CONVST
// CEX3=1;
// while(INT0==1){} //INT
// CEX4=0;//max126選通
// RD=0;
// P0=0xff;
// P2=0xff;
// ad_data2 = P2; // 地址
// ad_data1 = P0;// 數(shù)據(jù) 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 轉(zhuǎn)換
{
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;//開始轉(zhuǎn)換 CONVST
CEX3=1;
while(INT0==1); //INT
CEX4=0;//max126選通
RD=0;
P0=0xff;
P2=0xff;
ad_data2 = P2; // 地址
ad_data1 = P0;// 數(shù)據(jù) 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()//數(shù)據(jù)處理
{
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 寫保護(hù)
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();}//讀數(shù)據(jù)指令
P2=P2 & 0xef;//使能62256
SM0 = 0;
SM1 = 1;
SM2 = 1;//串口方式1,
TMOD = 0x33; //禁止定時/計數(shù)器0,1
TCON = 0x0; //禁止定時/計數(shù)器0,1計數(shù)
T2CON = 0x30; //設(shè)定定時/計數(shù)器2為波特率發(fā)生器(接收、發(fā)送)
T2MOD = 0x00; //設(shè)定定時/計數(shù)器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();
}//液晶顯示初始化 顯示“西安新竹防災(zāi)救生設(shè)備有限公司”
while (1)
{
if(T2EX==1)
{
cgf=1;
bj_jc=1;
RCAP2H = 0xff;//0xfd;//40MHz 輸出16Mhz時鐘
RCAP2L = 0xff;//0xc0;
T2CON = 0x04;//設(shè)定定時/計數(shù)器2為可編程時鐘輸出
T2MOD = 0x02; //設(shè)定定時/計數(shù)器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 寫保護(hù)
DP();//數(shù)據(jù)處理
T2CON = 0x30; //設(shè)定定時/計數(shù)器2為波特率發(fā)生器(接收、發(fā)送)
T2MOD = 0x00; //設(shè)定定時/計數(shù)器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;
}//工作指示燈點(diǎn)?
}
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;
}
}
復(fù)制代碼
所有資料51hei提供下載:
include.docx
(31.05 KB, 下載次數(shù): 34)
2019-7-23 14:47 上傳
點(diǎn)擊文件名下載附件
程序
下載積分: 黑幣 -5
作者:
花花花兒
時間:
2020-1-11 16:14
請問,原理圖能更清楚的發(fā)出來嗎?
作者:
tomli
時間:
2020-1-12 10:02
同樓上,能給份原理圖學(xué)習(xí),謝了。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1