标题:
STC12C5A60S2单片机烟雾报警系统的设计
[打印本页]
作者:
liu4195381
时间:
2020-4-14 19:34
标题:
STC12C5A60S2单片机烟雾报警系统的设计
这是前几天做的一个基于51单片机的一个烟雾报警系统,采用有ADC功能的STC12C5A60S2单片机,通过MQ-2烟雾模块检测,温度传感器DS18B20检测温度,通过LCD12864实时显示浓度和温度,可以调节浓度值,并且有声光报警功能。附件中是原理图以及ADC采集电压源码。
单片机源程序如下:
//****************************************STC12C5A60S2 AD转换***********************************************//
#include <reg60.h>
#include <intrins.h> //包含_nop_()函数定义的头文件
#include <stdio.h>
//------------------------------------------------------------------------------
void AD_init();
void serial_init();
void delay(unsigned int a);
float AD_work(unsigned char channel);
unsigned int AD_get(unsigned char channel);
//------------------------------------------------------------------------------
void main()
{
AD_init(); //A/D转换初始化
serial_init(); //串口初始化
while(1)
{
// unsigned char i;
// for(i=0;i<8;i++) //循环发送P1.0-P1.7的转换数值
// {
// TI=1; //使用printf函数前须先将发送标志位TI置1
// printf("The P1.%bd voltage is %f\n",i,AD_work(i));
// TI=0;
// delay(1000); //延时约1s
// }
TI=1; //使用printf函数前须先将发送标志位TI置1
printf("The P1.%bd voltage is %f\n",7,AD_work(7));
TI=0;
delay(1000); //延时约1s
}
}
//------------------------------------------------------------------------------
unsigned int AD_get(unsigned char channel)
{
ADC_CONTR=0x88|channel; //开启AD转换1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
_nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器
while(!(ADC_CONTR&0x10)); //等待转换完成
ADC_CONTR&=0xe7; //关闭AD转换,ADC_FLAG位由软件清0
return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制)
}
//------------------------------------------------------------------------------
float AD_work(unsigned char channel)
{
float AD_val; //定义处理后的数值AD_val为浮点数
unsigned char i;
for(i=0;i<100;i++)
AD_val+=AD_get(channel); //转换100次求平均值(提高精度)
AD_val/=100;
AD_val=(AD_val*5)/1024; //AD的参考电压是单片机上的5v,所以乘5即为实际电压值
return AD_val;
}
//------------------------------------------------------------------------------
void delay(unsigned int a) //延时约1ms
{
unsigned int i;
while (--a!=0)
for(i=600;i>0;i--); //1T单片机i=600,若是12T单片机i=125
}
//------------------------------------------------------------------------------
void serial_init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd; //设置9600波特率
SCON=0x50; //串口方式1,允许接收
TR1=1;
}
//------------------------------------------------------------------------------
void AD_init()
{
P1ASF=0xcf; //P1口全部作为模拟功能AD使用
ADC_RES=0; //清零转换结果寄存器高8位
ADC_RESL=0; //清零转换结果寄存器低2位
ADC_CONTR=0x80;//开启AD电源
delay(2); //等待1ms,让AD电源稳定
}
/*程序编写:落叶
2010.11.03*/
复制代码
所有资料51hei提供下载:
BS.pdf
(366.43 KB, 下载次数: 38)
2020-4-14 19:29 上传
点击文件名下载附件
原理图
下载积分: 黑币 -5
ADC源码.rar
(37.21 KB, 下载次数: 34)
2020-4-14 19:31 上传
点击文件名下载附件
STC12C5A60S2ADC采集电压源码
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1