1. 能够检测煤气的浓度;
2. 液晶LCD1602显示煤气的浓度;
3. 超标进行声光报警。
由于是仿真,烟雾浓度传感器采用仿真里面的光敏传感器代替,用ADC0832测电压值。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
部分源码:完整源码见附件
- void init()
- {
- write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
- delay(20);
- write_com(0x0c); //显示模式设置
- delay(20);
- write_com(0x06); //显示模式设置:光标右移,字符不移
- delay(20);
- write_com(0x01); //清屏幕指令,将以前的显示内容清除
- delay(20);
- }
- void dis(uchar k)
- {
- CO=k;
- write_com(0x80); //设置所要显示字符的位置为第一行第一列
- a=0;
- for(a=0;a<3;a++) //总共要显示3个字符,故循环三次。
- {
- write_data(table[a]);
- delay(10);
- }
- write_com(0x83); //显示浓度百位
- write_data(0x30+CO/100);
- delay(10) ;
- write_com(0x84); //显示浓度十位
- write_data(0x30+CO/10%10);
- delay(10) ;
- write_com(0x85); //显示浓度个位
- write_data(0x30+CO%10);
- delay(10) ;
- write_com(0x86);
- write_data('%'); //显示“%”
- delay(10) ;
-
- }
- unsigned char ad0832read(bit SGL,bit ODD)
- {
- unsigned char i=0,value=0,value1=0;
- SCL=0;
- DO=1;
- CS=0; //开始
- SCL=1; //第一个上升沿
- SCL=0;
- DO=SGL;
- SCL=1; //第二个上升沿
- SCL=0;
- DO=ODD;
- SCL=1; //第三个上升沿
- SCL=0; //第三个下降沿
- DO=1;
- for(i=0;i<8;i++)
- {
- SCL=1;
- SCL=0; //开始从第四个下降沿接收数据
- value<<=1;
- if(DO)
- value++;
- }
- for(i=0;i<8;i++)
- { //接收校验数据
- value1>>=1;
- if(DO)
- value1+=0x80;
- SCL=1;
- SCL=0;
- }
- CS=1;
- SCL=1;
- if(value==value1) //与校验数据比较,正确就返回数据,否则返回0
- return value;
- return 0;
- }
- void main()
- ……………………
- …………限于本文篇幅 余下代码请下载附件…………
复制代码 完整源码和proteus仿真文件:
煤气泄漏检测报警器.rar
(51.17 KB, 售价: 2 E币)
|
|