#include <reg52.h> #include <stdio.h> //**************定义管脚***************// //sbit P0_7=P0^7; //小数点 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转换启动信号,输入高电平有效 sbit OE=P1^4; //OE为输出允许信号,高电平有效 sbit EOC=P3^2; //A/D转换结束信号,转换结束时,此端输出一个高电平 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函数 { OE=1; DATA=P2; OE=0; } //****************延时函数******************// void delay_1ms(unsigned int i) { unsigned char x, j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } //************ADC0809转换函数**************// void ADC0809() { SAT=0; EOC=1; delay_1ms(1); SAT=1; EOC=0; delay_1ms(1); SAT=0; EOC=1; delay_1ms(5); } //*************Display函数*******************// //--->Display函数的功能:将采集到的电压值转换为实际气体浓度值进行显示 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 --->选择千位数码管 P0=table[qian]; //--->将千位的数据送给千位 delay_1ms(3); P1_2_C=0;//C P1_1_B=0;//B P1_0_A=1;//A --->选择百位数码管 P0=table[bai]; //--->将百位的数据送给百位 delay_1ms(3); //P0=table[10]; //--->点亮小数点 //delay_1ms(3); P1_2_C=0;//C P1_1_B=1;//B P1_0_A=0;//A --->选择十位数码管 P0=table[shi]; //--->将十位的数据送给十位 delay_1ms(3); //P0=table[10]; //--->点亮小数点 //delay_1ms(3); P1_2_C=0;//C P1_1_B=1;//B P1_0_A=1;//A --->选择个位数码管 P0=table[ge]; //--->将个位的数据送给个位 delay_1ms(3); } //*****************主函数******************// void main() { ET0=0; IT0=1; //设INT0为边沿触发 EX0=1; //中断INT0允许 EA=1; //开放中断 while(1) { ADC0809(); DATA=DATA*4; //数据的处理 Display(DATA); if(DATA<400) //--->判断是否需要报警 { SPEAKER=0; //--->不报警 LED_BLUE=0; } else if (DATA>=800) { SPEAKER=1;//--->严重报警 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; } } }
|