• 基于51单片机气体检测报警系统-proteus仿真-源程序


    一、系统方案
    1、本设计采用51单片机作为主控器。
    2、MQ5采集气体值送到液晶1602显示。
    3、按键设置报警阀值,声光报警。
    在这里插入图片描述

    二、硬件设计
    原理图如下:
    在这里插入图片描述

    三、单片机软件设计
    1、首先是系统初始化
    void init_1602() //初始化
    {
    lcdwc(0x01);
    lcdwc(0x38);
    lcdwc(0x0c);
    lcdwc(0x06);
    }

    2、液晶显示程序
    void lcdwc(uchar lcd_cmd) //液晶命令
    {
    lcden=0;
    lcdrs=0;
    lcdrw=0;
    datlcd=lcd_cmd;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
    }
    void lcdwd(uchar lcd_data) //液晶数据
    {
    lcden=0;
    lcdrs=1;
    lcdrw=0;
    datlcd=lcd_data;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
    }
    void lcdxy(uchar hlcd,uchar addlcd,uchar dtlcd) //定位写数据
    {
    if (hlcd1)
    {
    lcdwc(0x80+addlcd);
    lcdwd(dtlcd);
    }
    else
    {
    lcdwc(0xc0+addlcd);
    lcdwd(dtlcd);
    }
    }
    3、按键程序
    void key()//按键扫描
    {
    if(key1
    0)//手动开关灯
    {
    delay(10);//延时消除按键抖动
    if(key10)// 再次判断
    {
    while(!key1);// 等待按键释放
    led=!led;
    }
    }
    if(key2
    0)//报警值加1
    {
    delay(10);
    if(key20)
    {
    while(!key2);
    MAX=MAX+1;
    if(MAX>100)
    MAX=0;
    }
    }
    if(key3
    0)//报警值减1
    {
    delay(10);
    if(key30)
    {
    while(!key3);
    if(MAX>=1)
    MAX–;
    }
    }
    if(key4
    0)//取消报警
    {
    delay(10);
    if(key4==0)
    {
    while(!key4);
    flag=1;
    }
    }

    }
    4、核心算法程序
    //
    // 获取指定通道的A/D转换结果
    /
    /
    uchar Get_ADC0832()
    {
    uchar i;
    uchar dat1=0;
    uchar dat2=0;

    ADC_CLK = 0;				// 电平初始化
    ADC_DAT = 1;
    _nop_();
    ADC_CS = 0;
    WavePlus();					// 起始信号 
    ADC_DAT = 1;
    WavePlus();					// 通道选择的第一位
    ADC_DAT = 0;      
    WavePlus();					// 通道选择的第二位
    ADC_DAT = 1;
    
    for(i=0;i<8;i++)		// 第一次读取
    {
    	dat1<<=1;
    	WavePlus();
    	if(ADC_DAT)
    		dat1=dat1|0x01;
    	else
    		dat1=dat1|0x00;
    }
    
    for(i=0;i<8;i++)		// 第二次读取
    {
    	dat2>>= 1;
    	if(ADC_DAT)
    		dat2=dat2|0x80;
    	else
    		dat2=dat2|0x00;
    	WavePlus();
    }
    
    _nop_();						// 结束此次传输
    ADC_DAT = 1;
    ADC_CLK = 1;
    ADC_CS  = 1;   
    
    if(dat1==dat2)			// 返回采集结果
    	return dat1;
    else
    	return 0;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    }

    四、 proteus仿真设计
    Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
    在这里插入图片描述

  • 相关阅读:
    格式化之 %d,%2d, %02d
    3.9 拆解小红书爆文,流量密码原来是这些【玩赚小红书】
    如何在 MAC 电脑上查找 IP 地址
    C++11标准模板(STL)- 算法(std::rotate)
    U-Net 模型改进和应用场景研究性综述
    什么是 Node.js
    2022 云原生编程挑战赛火热报名中!看导师如何拆解 Serverless 赛题?
    小红书母婴行业文案怎么写,创作方向有哪些?
    2023年9月青少年软件编程(C 语言) 等级考试试卷(八级)
    JavaScript中Set的基本指南
  • 原文地址:https://blog.csdn.net/bbxyliyang/article/details/133315158