最近因一臺消防控制系統設備需加泡沫罐檢漏功能,所以專門做了單片機檢測壓力傳感器電流值,做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)
2019-7-23 14:47 上傳
點擊文件名下載附件
程序
|