找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4157|回复: 6
打印 上一主题 下一主题
收起左侧

基于51单片机的酒精浓度检测程序Proteus仿真 keil5 C语言编写

  [复制链接]
跳转到指定楼层
楼主
1. 能够检测煤气的浓度;
2. 液晶LCD1602显示煤气的浓度;
3. 超标进行声光报警。
由于是仿真,烟雾浓度传感器采用仿真里面的光敏传感器代替,用ADC0832测电压值。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit rs=P3^5;
  5. sbit lcden=P3^4;
  6. sbit SCL=P2^6;                //SCL定义,连接ADC0832SCL脚
  7. sbit DO=P2^5;                //DO定义,连接ADC0832DO脚
  8. sbit CS=P2^4;                //CS定义,连接ADC0832CS脚
  9. sbit baojing=P1^0;  //声光报警
  10. uchar table[]="CO:";
  11. uint CO=0,a,nongdu;
  12. void delay(uint x)
  13. {
  14.         uint a,b;
  15.         for(a=x;a>0;a--)
  16.                 for(b=10;b>0;b--);
  17. }

  18. void write_com(uchar com)         //写命令,RS=0
  19. {
  20.         P0=com;
  21.         rs=0;
  22.         lcden=0;
  23.         delay(10);
  24.         lcden=1;
  25.         delay(10);
  26.         lcden=0;
  27.        
  28. }

  29. void write_data(uchar dat)           //写数据,RS=1
  30. {
  31.         P0=dat;
  32.         rs=1;
  33.         lcden=0;
  34.         delay(10);
  35.         lcden=1;
  36.         delay(10);
  37.         lcden=0;
  38.        
  39. }

  40. void init()
  41. {

  42.         write_com(0x38);   //显示模式设置:16×2显示,5×7点阵,8位数据接口
  43.         delay(20);
  44.         write_com(0x0c);   //显示模式设置
  45.         delay(20);
  46.         write_com(0x06);   //显示模式设置:光标右移,字符不移
  47.         delay(20);
  48.         write_com(0x01);   //清屏幕指令,将以前的显示内容清除
  49.         delay(20);       
  50. }
  51. void dis(uchar k)
  52. {         
  53.         CO=k;

  54.         write_com(0x80);  //设置所要显示字符的位置为第一行第一列
  55.         a=0;
  56.         for(a=0;a<3;a++)           //总共要显示3个字符,故循环三次。
  57.         {                                          
  58.         write_data(table[a]);
  59.         delay(10);               
  60.         }
  61.     write_com(0x83);                 //显示浓度百位
  62.         write_data(0x30+CO/100);
  63.         delay(10)  ;

  64.         write_com(0x84);           //显示浓度十位
  65.         write_data(0x30+CO/10%10);
  66.         delay(10)  ;

  67.         write_com(0x85);           //显示浓度个位
  68.         write_data(0x30+CO%10);
  69.         delay(10)  ;

  70.         write_com(0x86);
  71.         write_data('%');        //显示“%”
  72.         delay(10)  ;
  73.        


  74. }  
  75. unsigned char ad0832read(bit SGL,bit ODD)
  76. {
  77.         unsigned char i=0,value=0,value1=0;               
  78.                 SCL=0;
  79.                 DO=1;
  80.                 CS=0;                //开始
  81.                 SCL=1;                //第一个上升沿       
  82.                 SCL=0;
  83.                 DO=SGL;
  84.                 SCL=1;          //第二个上升沿
  85.                 SCL=0;
  86.                 DO=ODD;
  87.                 SCL=1;           //第三个上升沿
  88.                 SCL=0;           //第三个下降沿
  89.                 DO=1;
  90.                 for(i=0;i<8;i++)
  91.                 {
  92.                         SCL=1;
  93.                         SCL=0; //开始从第四个下降沿接收数据
  94.                         value<<=1;
  95.                         if(DO)
  96.                                 value++;                                               
  97.                 }
  98.                 for(i=0;i<8;i++)
  99.                 {                        //接收校验数据
  100.                         value1>>=1;
  101.                         if(DO)
  102.                                 value1+=0x80;
  103.                         SCL=1;
  104.                         SCL=0;
  105.                 }
  106.                 CS=1;
  107.                 SCL=1;       
  108.                 if(value==value1)                                //与校验数据比较,正确就返回数据,否则返回0       
  109.                         return value;
  110.         return 0;
  111. }

  112. void main()
  113. ……………………

  114. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
煤气泄漏检测报警器.rar (51.17 KB, 下载次数: 106)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:996321 发表于 2021-12-23 21:55 | 只看该作者
请问,把这个变成酒精检测的需要怎么操作
回复

使用道具 举报

板凳
ID:993801 发表于 2021-12-26 15:55 | 只看该作者
楼主你好,我的运行之后显示屏一直是255%没有变化是怎么回事
回复

使用道具 举报

地板
ID:262 发表于 2021-12-27 04:57 | 只看该作者
2262273731 发表于 2021-12-26 15:55
楼主你好,我的运行之后显示屏一直是255%没有变化是怎么回事

版本的问题,你用Proteus8.8打开

51hei.png (25.78 KB, 下载次数: 91)

51hei.png
回复

使用道具 举报

5#
ID:908826 发表于 2021-12-27 09:39 | 只看该作者
这个一氧化碳浓度传感器是Proteus自带的吗????
回复

使用道具 举报

6#
ID:1017505 发表于 2022-4-15 00:08 | 只看该作者
博主,为什么声光报警器,当浓度超过30%的时候只有光报警,没有声音报警,请问是哪里出了问题吗
回复

使用道具 举报

7#
ID:1018482 发表于 2022-4-15 00:43 | 只看该作者
at89c52换成51可以吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表