#include <reg52.h> #include <stdio.h> //**************定義管腳***************// //sbit P0_7=P0^7; //小數(shù)點 sbit P1_0_A=P1^0; //與74LM138的A相連接 sbit P1_1_B=P1^1; //與74LM138的B相連接 sbit P1_2_C=P1^2; //與74LM138的C相連接 sbit SAT=P1^3; //SAT是A/D轉(zhuǎn)換啟動信號,輸入高電平有效 sbit OE=P1^4; //OE為輸出允許信號,高電平有效 sbit EOC=P3^2; //A/D轉(zhuǎn)換結(jié)束信號,轉(zhuǎn)換結(jié)束時,此端輸出一個高電平 sbit LED_RED=P1^5; //低電平點亮 sbit LED_BLUE=P1^6; //低電平點亮 sbit SPEAKER=P1^7; //高電平報警 unsigned int DATA; //****************七段碼*****************//--->高電平點亮七段碼 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x80}; void Xint0() interrupt 0 using 1 //中斷INT0函數(shù) { OE=1; DATA=P2; OE=0; } //****************延時函數(shù)******************// void delay_1ms(unsigned int i) { unsigned char x, j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } //************ADC0809轉(zhuǎn)換函數(shù)**************// void ADC0809() { SAT=0; EOC=1; delay_1ms(1); SAT=1; EOC=0; delay_1ms(1); SAT=0; EOC=1; delay_1ms(5); } //*************Display函數(shù)*******************// //--->Display函數(shù)的功能:將采集到的電壓值轉(zhuǎn)換為實際氣體濃度值進行顯示 void Display(unsigned int date) { unsigned int ge,shi,bai,qian; qian=date/1000%10;//--->提取千位 bai=date/100%10; //--->提取百位 shi=date/10%10; //--->提取十位 ge=date%10; //--->提取個位 P1_2_C=0; //C P1_1_B=0; //B P1_0_A=0; //A --->選擇千位數(shù)碼管 P0=table[qian]; //--->將千位的數(shù)據(jù)送給千位 delay_1ms(3); P1_2_C=0;//C P1_1_B=0;//B P1_0_A=1;//A --->選擇百位數(shù)碼管 P0=table[bai]; //--->將百位的數(shù)據(jù)送給百位 delay_1ms(3); //P0=table[10]; //--->點亮小數(shù)點 //delay_1ms(3); P1_2_C=0;//C P1_1_B=1;//B P1_0_A=0;//A --->選擇十位數(shù)碼管 P0=table[shi]; //--->將十位的數(shù)據(jù)送給十位 delay_1ms(3); //P0=table[10]; //--->點亮小數(shù)點 //delay_1ms(3); P1_2_C=0;//C P1_1_B=1;//B P1_0_A=1;//A --->選擇個位數(shù)碼管 P0=table[ge]; //--->將個位的數(shù)據(jù)送給個位 delay_1ms(3); } //*****************主函數(shù)******************// void main() { ET0=0; IT0=1; //設(shè)INT0為邊沿觸發(fā) EX0=1; //中斷INT0允許 EA=1; //開放中斷 while(1) { ADC0809(); DATA=DATA*4; //數(shù)據(jù)的處理 Display(DATA); if(DATA<400) //--->判斷是否需要報警 { SPEAKER=0; //--->不報警 LED_BLUE=0; } else if (DATA>=800) { SPEAKER=1;//--->嚴(yán)重報警 LED_RED=0; LED_BLUE=1; delay_1ms(2); SPEAKER=0; LED_RED=1; delay_1ms(2); SPEAKER=1; LED_RED=0; } else { SPEAKER=1; //--->一般報警 LED_RED=1; LED_BLUE=1; delay_1ms(2); SPEAKER=0; delay_1ms(2); SPEAKER=1; } } }
|