×
单片机 > 单片机程序设计 > 详情

基于51单片机的1602+ADC0832烟雾报警系统

发布时间:2024-04-19 发布时间:
|

本设计基于51单片机,共有ADC0832数模转换模块,1602液晶显示模块,按键控制与声光报警模块4大模块组成!可实现对烟雾浓度的实时监测与反应

之后是仿真目录

下面是部分代码,想要了解,可以下载文末完整附件!
//基于1602+ADC0832的烟雾/温度报警系统
//作者:科技小宅神
//创作时间:2020/09/20
//版权:科技小宅神原创!抄袭必究,仅供参考学习!
#include //包含51单片机寄存器的头文件
#include <1602.h>//调用1602.h文件
#include //包含_nop_函数定义的头文件
#define uchar unsigned char
#define uint unsigned int

//ADC0832引脚定义
sbit CS = P1^0;//片选使能位,定义为P1^0引脚
sbit CLK = P1^1;//时钟脉冲输入位,定义为P1^1引脚
sbit DIO = P1^2;//数据信号输入/输出,并联使用。定义为P1^2引脚
//有害气体含量变量
uchar temp; //用于读取ADC数据
uchar yushe_yanwu= 255;//烟雾预设值
//按钮模式
uchar mode=0;
//管脚声明
sbit led_yanwu= P2^3; //烟雾报警灯
sbit baojing= P2^4; //蜂鸣器接口
//按键
sbit key1=P2^5; //设置键
sbit key2=P2^6; //加按键
sbit key3=P2^7; //减按键

//1毫秒延时程序(不精确)
void delayms(uint ms)
{
uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
//ADC0832函数
uchar AD()
{
uchar i,dat1 = 0,dat2 = 0;
//第一个周期:转换开始
CS = 0;
CLK = 0;
DIO = 1;
_nop_(); _nop_();//短暂定时2us——也可以写成delay2us();,那么程序就要有delay2us();的定义了。
CLK = 1; _nop_(); _nop_();


//第二个周期:选择选择单通道还是双通道DIO=0双通道差分 或 DIO=1单通道
CLK = 0; DIO=1; _nop_();_nop_();
CLK = 1; _nop_();_nop_();

//第三个周期:DIO选择CH1-->如果DIO=0 选择CH0
CLK = 0;DIO = 0; _nop_();_nop_();
CLK = 1;DIO = 1; _nop_();_nop_();

//等待
CLK = 0; DIO = 1; _nop_();_nop_();

//4-11,共8个下降沿读取数据(MSB->LSB) 先进来的为最高位,后进来为最低位
for(i=0;i<8;i++)
{
CLK = 1;_nop_();_nop_();
CLK = 0;_nop_();_nop_();
dat1 = dat1<<1|DIO;
}
//11-18 共8个下降沿读取数据(LSB->MSB) 先进来的为最低位,后进来为最高位
for(i=0;i<8;i++)
{
dat2 = dat2|((uchar)(DIO)<CLK = 1;_nop_();_nop_();
CLK = 0;_nop_();_nop_();
}

//禁止片选
CS = 1;
//如果MSB->LSB和LSB->MSB读取数据结果相同,返回读取结果,否者0
return (dat1==dat2) ? dat1 : 0 ;
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法