久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5162|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的溫度和可燃?xì)怏w探測(cè)的仿真模型+源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:380262 發(fā)表于 2018-10-22 21:59 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    本系統(tǒng)主要實(shí)現(xiàn)的功能為:溫度采集電路實(shí)時(shí)采集環(huán)境中的溫度,氣體監(jiān)測(cè)電路實(shí)時(shí)監(jiān)測(cè)環(huán)境中的可燃?xì)怏w(如甲烷、丙烷等),監(jiān)測(cè)到的溫度數(shù)據(jù)和可燃?xì)怏w數(shù)據(jù)通過相應(yīng)的傳感器轉(zhuǎn)換為模擬電信號(hào)送到AD轉(zhuǎn)換器中,AD轉(zhuǎn)換器將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)送到MCU中進(jìn)行處理,MCU根據(jù)AD轉(zhuǎn)換器送來的數(shù)字信號(hào)計(jì)算出溫度值和有害氣體濃度等級(jí)并送到顯示模塊進(jìn)行顯示,當(dāng)溫度值超過設(shè)定值時(shí),風(fēng)扇電路啟動(dòng)風(fēng)扇工作,當(dāng)可燃?xì)怏w濃度超過設(shè)定等級(jí)時(shí),報(bào)警電路啟動(dòng)蜂鳴器報(bào)警。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <math.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. #define LCD1602_IO P0
  7. #define GPIO_MOTOR P1

  8. sbit LCD1602_RS=P2^0;
  9. sbit LCD1602_RW=P2^1;
  10. sbit LCD1602_E=P2^2;

  11. sbit ADC0832_CS=P1^5;
  12. sbit ADC0832_CLK=P1^6;
  13. sbit ADC0832_DO=P1^7;      //將CS置高電平禁用芯片

  14. sbit MOTOR_CS=P2^3;
  15. sbit BUZZER_CS=P3^2;

  16. void Delay1ms(uint c);

  17. void LcdInit();
  18. void LcdWriteCom(uchar com);
  19. void LcdWriteData(uchar dat);
  20. uchar Get_AD_Result(bit channel);
  21. void  Motor_stepper();

  22. uchar line1[]={'C','H','0',' ','T','E','P',':',' ','0','0','.','0',' ',0xdf,'C'};
  23. uchar line2[]={'C','H','1',' ','L','E','V','E','L',':',' ','0',' ',' ',' ',' '};

  24.                                   
  25. void main(void)
  26. {
  27.         uint i;
  28.         double ADCdata,NTCr,t;
  29.         int t_temp;
  30.         bit channel;
  31.         LcdInit();
  32.         for(i=0;i<16;i++)
  33.         {
  34.                 LcdWriteData(line1[i]);       
  35.         }
  36.         LcdWriteCom(0x80|0x40);  //設(shè)置數(shù)據(jù)指針起點(diǎn)為第二行
  37.         for(i=0;i<16;i++)
  38.         {
  39.                 LcdWriteData(line2[i]);       
  40.         }
  41.         MOTOR_CS=1;
  42.         BUZZER_CS=0;
  43.         while(1)
  44.         {       
  45.                 channel = 0;
  46.                  ADCdata = Get_AD_Result(channel)*5.0/256;
  47.                 NTCr= 10*ADCdata/(5-ADCdata);
  48.                 t=1/(log(NTCr/10)/3900+1/(25+273.15))-273.15;        //B=3435
  49.                
  50.                 if(t>=25)
  51.                 {
  52.                         MOTOR_CS=0;                //開風(fēng)扇
  53.                 }               
  54.                 else
  55.                 {
  56.                         MOTOR_CS=1;                //關(guān)風(fēng)扇       
  57.                 }
  58.                
  59.                 if(t<0)
  60.                 {
  61.                         line1[8]='-';
  62.                         t=-t;
  63.                 }
  64.                 else
  65.                 {
  66.                          line1[8]=' ';
  67.                 }
  68.                                
  69.                 t_temp=t*10;
  70.                 line1[9]=t_temp/100+'0';
  71.                 line1[10]=t_temp/10%10+'0';
  72.                 line1[12]=t_temp%10+'0';

  73.           LcdWriteCom(0x80);
  74.                 for(i=0;i<16;i++)
  75.                 {
  76.                         LcdWriteData(line1[i]);       
  77.                 }

  78.                 channel = 1;
  79.                  ADCdata = Get_AD_Result(channel)*5.0/256;

  80.           if(ADCdata<=0.5)
  81.                         line2[11]='0';
  82.                 else if(ADCdata>0.5&&ADCdata<=1)       
  83.                         line2[11]='1';
  84.                 else if(ADCdata>1&&ADCdata<=2)       
  85.                         line2[11]='2';
  86.                 else if(ADCdata>2&&ADCdata<=3)       
  87.                         line2[11]='3';
  88.                 else if(ADCdata>3&&ADCdata<=4)       
  89.                         line2[11]='4';
  90.                 else       
  91.                         line2[11]='5';

  92.                 if(ADCdata>1)
  93.                         BUZZER_CS=1;
  94.                 else
  95.                         BUZZER_CS=0;

  96.           LcdWriteCom(0x80|0x40);
  97.                 for(i=0;i<16;i++)
  98.                 {
  99.                         LcdWriteData(line2[i]);       
  100.                 }

  101.         }       
  102.                        
  103. }


  104. void Delay1ms(uint c)   //誤差 0us
  105. {
  106.     uint a,b;
  107.         for (; c>0; c--)
  108.         {
  109.                  for (b=199;b>0;b--)
  110.                  {
  111.                           for(a=1;a>0;a--);
  112.                  }      
  113.         }
  114.            
  115. }

  116. void LcdInit()                                                  //LCD初始化子程序
  117. {
  118.         LcdWriteCom(0x38);  //開顯示,8位數(shù)據(jù)端口、兩行顯示、5x7點(diǎn)陣字符
  119.         LcdWriteCom(0x0c);  //開顯示不顯示光標(biāo)
  120.         LcdWriteCom(0x06);  //寫一個(gè)指針加1
  121.         LcdWriteCom(0x01);  //清屏
  122.         LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)為第一行第一個(gè)字符
  123. }


  124. /*******************************************************************************
  125. * 函 數(shù) 名         : LcdWriteCom
  126. * 函數(shù)功能                   : 向LCD寫入一個(gè)字節(jié)的命令
  127. * 輸    入         : com
  128. * 輸    出         : 無
  129. *******************************************************************************/
  130. void LcdWriteCom(uchar com)          //寫入命令
  131. {
  132.         LCD1602_E = 0;     //使能
  133.         LCD1602_RS = 0;           //選擇發(fā)送命令
  134.         LCD1602_RW = 0;           //選擇寫入
  135.        
  136.         LCD1602_IO = com;     //放入命令
  137.         Delay1ms(1);                //等待數(shù)據(jù)穩(wěn)定

  138.         LCD1602_E = 1;                  //寫入時(shí)序
  139.         Delay1ms(5);          //保持時(shí)間
  140.         LCD1602_E = 0;
  141. }

  142. /*******************************************************************************
  143. * 函 數(shù) 名         : LcdWriteData
  144. * 函數(shù)功能                   : 向LCD寫入一個(gè)字節(jié)的數(shù)據(jù)
  145. * 輸    入         : dat
  146. * 輸    出         : 無
  147. *******************************************************************************/                             
  148. void LcdWriteData(uchar dat)                        //寫入數(shù)據(jù)
  149. {
  150.         LCD1602_E = 0;        //使能清零
  151.         LCD1602_RS = 1;        //選擇輸入數(shù)據(jù)
  152.         LCD1602_RW = 0;        //選擇寫入

  153.         LCD1602_IO = dat; //寫入數(shù)據(jù)
  154.         Delay1ms(1);

  155.         LCD1602_E = 1;   //寫入時(shí)序
  156.         Delay1ms(5);   //保持時(shí)間
  157.         LCD1602_E = 0;
  158. }

  159. uchar Get_AD_Result(bit channel)
  160. {
  161.         uchar i;
  162.         int data1=0x00,data2=0x00;
  163.         ADC0832_CLK=0;      //初始化
  164.         ADC0832_DO=1;
  165.         _nop_();
  166.         ADC0832_CS=0;
  167.         _nop_();
  168.         ADC0832_CLK=1;
  169.         _nop_();
  170.                                                 //在第2、3個(gè)脈沖下沉之前DI端應(yīng)輸入2位數(shù)據(jù)用于選擇通道功能
  171.         ADC0832_CLK=0;             //通道第一位
  172.         ADC0832_DO=1;
  173.         _nop_();
  174.         ADC0832_CLK=1;
  175.         _nop_();
  176.         ADC0832_CLK=0;             //通道0的第二位
  177.         ADC0832_DO=channel;
  178.         _nop_();
  179.         ADC0832_CLK=1;
  180.         _nop_();
  181.          
  182.         ADC0832_CLK=0;
  183.         ADC0832_DO=1;
  184.         for(i=0;i<8;i++)     //讀取前8位的值 先高位后低位
  185.         {
  186.                  _nop_();
  187.                   data1<<=1;
  188.                   ADC0832_CLK=1;
  189.                   _nop_();
  190.                   ADC0832_CLK=0;
  191.                   if(ADC0832_DO)
  192.                            data1|=0x01;
  193.                   else
  194.                            data1|=0x00;
  195.          }

  196.         for(i=0;i<8;i++)     //讀取后8位的值 先低位后高位
  197.         {
  198.                   data2>>=1;
  199.                   if(ADC0832_DO)
  200.                            data2|=0x80;
  201.                   else
  202.                            data2|=0x00;
  203.                   _nop_();
  204.                   ADC0832_CLK=1;
  205.                   _nop_();
  206.                   ADC0832_CLK=0;
  207.         }

  208.         _nop_();
  209.         ADC0832_CS=1;              //將CS置高電平禁用芯片
  210.         ADC0832_DO=1;
  211.         ADC0832_CLK=1;
  212.         return (data1 == data2) ? data1:0;
  213. }
復(fù)制代碼

所有資料51hei提供下載:
信息采集與處理-溫度和可燃?xì)怏w濃度采集模型.rar (102.83 KB, 下載次數(shù): 189)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:399521 發(fā)表于 2018-10-24 11:49 | 只看該作者
很棒,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:462149 發(fā)表于 2019-1-4 21:30 | 只看該作者
很好用, 謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

地板
ID:253493 發(fā)表于 2019-2-27 15:06 | 只看該作者
按鍵怎么沒有了
回復(fù)

使用道具 舉報(bào)

5#
ID:405625 發(fā)表于 2019-3-24 20:44 | 只看該作者
可以用,感謝分享
回復(fù)

使用道具 舉報(bào)

6#
ID:405625 發(fā)表于 2019-3-24 20:46 | 只看該作者
建議用一些帶AD收集的芯片,省很多事
回復(fù)

使用道具 舉報(bào)

7#
ID:754005 發(fā)表于 2020-5-17 14:57 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区免费在线观看 | 丁香综合| 在线一区二区三区 | 日韩欧美高清 | 久久精品二区亚洲w码 | 国产精品区二区三区日本 | 黄色一级电影在线观看 | 人人99| 97久久精品午夜一区二区 | 天天操天天干天天爽 | 无码日韩精品一区二区免费 | 日韩电影一区 | a级大片| 欧美片网站免费 | 日本欧美黄色片 | 91精品国产综合久久国产大片 | 中文字幕在线第二页 | 亚洲成人一区 | 日韩影音 | 91传媒在线观看 | 亚洲第一天堂无码专区 | 久久精品国产久精国产 | 国产一区二区三区四区三区四 | 久久国产精品一区二区三区 | 在线观看国产精品一区二区 | 国产精品欧美精品 | 亚洲成人午夜电影 | 欧美精品一区在线发布 | 91精品国产一区二区三区 | 精品久久久久久久 | 午夜视频一区二区 | 日韩中文久久 | 国产做爰 | 亚洲免费精品一区 | 国产91亚洲精品一区二区三区 | 午夜影院网站 | 涩涩片影院 | 亚洲一二三视频 | 亚洲视频在线观看免费 | 午夜播放器在线观看 | 亚洲一区成人 |