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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2674|回復: 1
打印 上一主題 下一主題
收起左側

51單片機便攜式瓦斯監測儀設計(程序及Proteus仿真)

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


瓦斯傳感器放大輸出0~70MV,放大51倍后為0~3.57V
0~3.57V對應單片機采樣碼值為0~357,精度0.2MV
  1. /*煙霧檢測系統程序,單片機通過ADC0808檢測3路煙霧傳感器信號,并通過液晶顯示,超過設定門限就聲光報警*/
  2. #include<reg52.h>
  3. #include "LCD1602.h"
  4. #include "da1302.h"

  5. unsigned int i;
  6. unsigned int j;
  7. unsigned char V_getdata1;         //傳感器電壓采集變量
  8. unsigned long V_temp1,alarm_temp;//傳感器電壓采集變量和設定報警值
  9. unsigned int alarm,speak;
  10. unsigned char V_temp1Buffer[10],alarm_tempBuffer[10];

  11. SYSTEMTIME CurrentTime ;        //建立時間結構體

  12. unsigned char count;  
  13. sbit ST=P3^0;
  14. sbit OE=P3^1;
  15. sbit EOC=P3^2;
  16. sbit AD_CLK=P3^3;        //ADC0809時鐘
  17. sbit ADDA=P3^4;            //ADC0809選擇通道口
  18. sbit ADDB=P3^5;
  19. sbit ADDC=P3^6;
  20. sbit ALARM=P3^7;
  21. sbit key1=P2^3;  //加1按鈕
  22. sbit key2=P2^4;          //減1按鈕

  23. void TimeInitial();
  24. void Delay(unsigned int i);

  25. void TimeInitial()                 //系統時鐘初始化
  26. { TMOD=0x10;
  27.   TH1=(65536-200)/256;
  28.   TL1=(65536-200)%256;
  29.   EA=1;
  30.   ET1=1;
  31.   TR1=1;
  32. }
  33. void Delay(unsigned int i)
  34. {
  35.   unsigned int j;
  36.   for(;i>0;i--)
  37.   {
  38.   for(j=0;j<125;j++)
  39.   {;}
  40.   }
  41. }

  42. /******************************************/
  43. /*              LCD 顯示轉換字符程序              */
  44. /******************************************/
  45. void IntToStr(unsigned int t, unsigned char *str, unsigned char n)         //將整型數據轉換成字符指針,在液晶上顯示
  46. {
  47.         unsigned char a[3]; char i, j;                                                                                    
  48.         a[0]=(t/100)%10;                                             
  49.         a[1]=(t/10)%10;                                               
  50.         a[2]=(t/1)%10;                                                

  51.         for(i=0; i<3; i++)         //轉成ASCII碼                     
  52.                 a[i]=a[i]+'0';                                            
  53.         for(i=0; a[i]=='0' && i<=3; i++);                             
  54.         for(j=3-n; j<i; j++)       //填充空格                        
  55.                 { *str=' ';  str++; }                                    
  56.         for(; i<3; i++)                                               
  57.                 { *str=a[i]; str++; }  //加入有效的數字                  
  58.         *str='\0';
  59. }

  60. /******************************************/
  61. /*              延時子程序                */
  62. /******************************************/
  63. void Delay1ms(unsigned int count)
  64. {
  65.         unsigned int i,j;
  66.         for(i=0;i<count;i++)
  67.         for(j=0;j<120;j++);
  68. }

  69. /******************************************/
  70. /*              AD轉換程序                    */
  71. /******************************************/

  72. void Voltaget_AD1() //第一路電壓AD采樣 IN0
  73. {
  74.     ST=0;
  75.         OE=0;
  76.         ST=1;
  77.         ST=0;
  78.         ADDA=0;                   //000設置A采樣端口IN0
  79.         ADDB=0;
  80.         ADDC=0;
  81.         while(EOC==0);        //等待轉換結束
  82.         OE=1;                        //允許轉換輸出
  83.         V_getdata1=P0;        //讀取轉換結果8位二進制數
  84.         OE=0;
  85.         V_temp1=V_getdata1*1.0/255*500;          //對采樣結果進行常規變換
  86.         V_getdata1=0;
  87.         Delay(10);
  88. }


  89. void main()
  90. {
  91.    V_getdata1=0;
  92.    V_temp1=0; //傳感器采集變量
  93.    ALARM=0;   //報警信號
  94.    alarm_temp=250; //初始化報警門限值250,對應電壓為2.5V

  95.    TimeInitial();
  96.    LCD_Initial();                   //液晶屏初始化

  97.    GotoXY(0,0);                       //定位液晶顯示位置第一行第一列
  98.    Print("The 1602 COUNTER");  //系統開機顯示logo
  99.    GotoXY(0,1);
  100.    Print(" BY BF-SHNU  ");
  101.    Delay1ms(1000);
  102.    GotoXY(0,0);
  103.    Print("                 ");          //清空液晶屏
  104.    GotoXY(0,1);
  105.    Print("                 ");
  106.    while(1)
  107.    {
  108.                 Voltaget_AD1();                //電壓采樣一通道
  109.                 Delay(10);
  110.                
  111.                 IntToStr(V_temp1,&V_temp1Buffer[0],3);  //將采集到的電壓數轉換為液晶顯示字符        
  112.                 IntToStr(alarm_temp,&alarm_tempBuffer[0],3);  //將采集到的電壓數轉換為液晶顯示字符alarm_tempBuffer[10]
  113.             GotoXY(0,0);                   //設定液晶顯示的位置,第1列第1行
  114.             Print("WSND:");                       //第一路采集瓦斯濃度:
  115.             Print(&V_temp1Buffer[0]);         //顯示采集碼值
  116.                 Print("/10000");
  117.                 GotoXY(0,1);                  //設定液晶顯示的位置,第1列第2行
  118.             Print("ALARM:");                  //第一路采集瓦斯濃度:
  119.             Print(&alarm_tempBuffer[0]);         //顯示采集碼值        
  120.                 Print("/10000");   
  121.             Delay1ms(7);

  122.                 if(key1==0)                           //報警值加1按鈕
  123.                 {
  124.                   Delay1ms(10);                  //按鈕消抖動
  125.                   while(key1==0);          //等待按鍵松開
  126.                   alarm_temp=alarm_temp+10;        //報警值加1
  127.                 }
  128.                 if(key2==0)                                        //報警值減1按鈕
  129.                 {
  130.                   Delay1ms(10);                                //按鈕消抖動
  131.                   while(key2==0);                        //等待按鍵松開
  132.                   alarm_temp=alarm_temp-10;        //報警值加1
  133.                 }
  134.                
  135.                                  
  136. /*--------------------------------------------------------------------------------------------*/
  137. /*--------------------------------------------------------------------------------------------*/
  138.                 if(V_temp1>=alarm_temp) //判斷是否超過設定門限,設定瓦斯傳感器輸出2.5V為報警判斷值,對應碼值為250
  139.                 {
  140.                    ALARM=1;                  //煙霧報警燈亮 ,蜂鳴器響  
  141.                 }
  142.                 else ALARM=0;
  143.    }                                 
  144. }        

  145. void t1(void) interrupt 3 using 0
  146. {
  147.   TH1=(65536-200)/256;
  148.   TL1=(65536-200)%256;
  149.   AD_CLK=~AD_CLK;
  150.   }
復制代碼

全部資料51hei下載地址:
1400基于單片機的便攜式瓦斯檢測儀結題各項資料.rar (111.15 KB, 下載次數: 75)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:748874 發表于 2020-5-11 14:06 | 只看該作者
您好,才學著用proteus。打開里面有很多的程序,把哪一個導入進去呀,拜托了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级做a爰片久久毛片免费看 | 国产伦精品一区二区三区高清 | 免费一区二区 | 二区欧美 | 欧美不卡视频一区发布 | 中文字幕在线看人 | 午夜影院操 | 羞羞的视频在线观看 | 国产超碰人人爽人人做人人爱 | 欧美日一区二区 | 日韩国产一区二区三区 | 精品成人佐山爱一区二区 | 午夜精品久久 | 免费一级做a爰片久久毛片潮喷 | 欧美一区二区免费电影 | 91精品国产91久久综合桃花 | 看一级黄色毛片 | 欧美一区二区三区视频 | 一区免费| 成人激情视频在线观看 | 亚洲综合二区 | 999久久精品| 欧美一区在线视频 | 亚洲成人一区 | 国产精品特级片 | 米奇狠狠鲁 | 久久久久资源 | 国产精品美女久久久久久久久久久 | 午夜国产一区 | 美女视频一区 | 天天澡天天狠天天天做 | 亚洲国产第一页 | 中文字幕精品视频在线观看 | 国产日韩一区二区 | 91在线精品视频 | 99精品久久99久久久久 | 亚洲国产精品激情在线观看 | 精品国产一区二区三区观看不卡 | 一区二区三区四区毛片 | 综合色婷婷 | 亚洲免费视频在线观看 |