找回密码
 立即注册

QQ登录

只需一步,快速开始

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

OLED屏幕烟雾温度报警程序原理图PCB(还有LCD1602屏幕)

[复制链接]
跳转到指定楼层
楼主
本来是用lcd1602显示,我给换成了oled屏幕,烟雾模块MQ-2模块,还有ds18b20模块
有程序有pcb图


Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下(1602显示的):
  1. #include <reg52.h>
  2. #include <18b20.h>
  3. #include <delay.h>
  4. #include <REGX52.H>
  5. #include <lcd1602.h>
  6. #include <intrins.h>

  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. sbit key1=P2^5;
  10. sbit key2=P1^6;
  11. sbit key3=P1^5;
  12. sbit CS  = P3^0;
  13. sbit CLK = P3^1;
  14. sbit DIO = P3^2;
  15. uchar i;
  16. uchar moshi=0;
  17. uint ad=0,wendu_h=35,a=0,time_20ms=0,shidu_h=200;
  18. bit jia=1,disFlag=0;
  19. extern uchar dis[];

  20. uchar ADc()
  21. {
  22.         uchar i,dat11 = 0,dat22 = 0;
  23.         //第一个周期:转换开始
  24.         CS = 0;
  25.         CLK = 0;
  26.         DIO = 1;
  27.         _nop_(); _nop_();//短暂定时2us——也可以写成delay2us();,那么程序就要有delay2us();的定义了。
  28.         CLK = 1; _nop_(); _nop_();
  29.         
  30.         
  31.         //第二个周期:选择选择单通道还是双通道  DIO=0双通道差分 或 DIO=1单通道
  32.         CLK = 0; DIO=1; _nop_();_nop_();
  33.         CLK = 1;        _nop_();_nop_();
  34.         
  35.         //第三个周期:DIO选择CH1-->如果DIO=0 选择CH0
  36.         CLK = 0;DIO = 0; _nop_();_nop_();
  37.         CLK = 1;DIO = 1; _nop_();_nop_();
  38.         
  39.         //等待
  40.         CLK = 0; DIO = 1; _nop_();_nop_();
  41.         
  42.         //4-11,共8个下降沿读取数据(MSB->LSB) 先进来的为最高位,后进来为最低位
  43.         for(i=0;i<8;i++)
  44.         {
  45.                 CLK = 1;  _nop_();_nop_();
  46.                 CLK = 0;  _nop_();_nop_();
  47.                 dat11 = dat11<<1|DIO;
  48.         }
  49.         //11-18 共8个下降沿读取数据(LSB->MSB) 先进来的为最低位,后进来为最高位
  50.         for(i=0;i<8;i++)
  51.         {
  52.                 dat22 = dat22|((uchar)(DIO)<<i);
  53.                 CLK = 1;  _nop_();_nop_();
  54.                 CLK = 0;  _nop_();_nop_();
  55.         }
  56.         
  57.         //禁止片选
  58.         CS = 1;
  59.         //如果MSB->LSB和LSB->MSB读取数据结果相同,返回读取结果,否者0
  60.         return (dat11==dat22) ? dat11 : 0 ;        
  61. }
  62. void keyscan()
  63. {
  64.         if(key1==0)
  65.         {
  66.                 delay(5);
  67.                 if(key1==0)
  68.                 {
  69.                         if(moshi==0){moshi=1;delay(20);}
  70.                         else if(moshi==1){moshi=0;delay(20);}        
  71.                 }
  72.                 while(!key1);
  73.         }
  74.         else if(key2==0)
  75.         {
  76.                 delay(5);
  77.                 if(key2==0)
  78.                 {
  79.                         if(moshi==0)
  80.                         {
  81.                                 if(wendu_h==40) wendu_h=20;
  82.                                 else wendu_h++;
  83.                         }
  84.                         else if(moshi==1)
  85.                         {
  86.                                 if(shidu_h==500) shidu_h=100;
  87.                                 else shidu_h+=50;
  88.                         }
  89.                         
  90.                 }
  91.                 while(!key2);
  92.         }
  93.   else if(key3==0)
  94.         {
  95.                 delay(5);
  96.                 if(key3==0)
  97.                 {
  98.                         if(moshi==0)
  99.                         {
  100.                                 if(wendu_h==20) wendu_h=40;
  101.                                 else wendu_h--;
  102.                         }
  103.                         else if(moshi==1)
  104.                         {
  105.                                 if(shidu_h==100) shidu_h=500;
  106.                                 else shidu_h-=50;
  107.                         }
  108.                 }
  109.                 while(!key3);
  110.         }        
  111. }


  112. void main()
  113. {
  114.          dsreset();
  115.          init();
  116.          while(1)
  117.          {
  118.                  
  119.                         if(moshi==0)
  120.                                  {
  121.                                        
  122.                                          for(i=0;i<5;i++)
  123.                                          {display_fazhiwen(wendu_h);}//delay(10);}
  124.                                          get_temp();
  125.                                          tempchange();
  126.                  for(i=0;i<10;i++)
  127.                                          {display_tempt(get_temp());}//delay(10);}
  128.                                  }
  129.                                  else if(moshi==1)
  130.                                  {
  131.                                          for(i=0;i<5;i++)
  132.                                          {display_fazhishidu(shidu_h);}
  133.                                          ad=ADc()*1.961;
  134.                                          for(i=0;i<10;i++)
  135.                                          {display_yanwu(ad);}//delay(10);} }
  136.                                  }
  137.                          keyscan();
  138.           }
  139. }
复制代码
全部资料51hei下载地址:
1602显示的程序: adc转换.rar (34.24 KB, 下载次数: 29)
PCB文件: 烟雾报警原理图PCB AD格式.7z (6.37 MB, 下载次数: 33)
另一个版本的程序,oled显示: 01-0.96OLED显示屏C51_IIC例程.rar (86.48 KB, 下载次数: 38)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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