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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機壓力傳感器MPX4115檢測-報警系統proteus仿真+源程序

[復制鏈接]
跳轉到指定樓層
樓主
一、系統方案
1、本設計采用這51單片機作為主控器。
2、MPX4115采集壓力值、DS18B20采集溫度值送到液晶1602顯示。
3、按鍵設置報警值。
4、蜂鳴器報警。


二、硬件設計
原理圖如下:

三、單片機軟件設計
1、首先是系統初始化
/*******************************************************************
                  液晶初始化
************************************************************************/
void chushihua()
{
  delayxms(20); //給液晶一段時間
  en=0;
  xiemingling(0x38);//設置16*2顯示,5*7點陣,8位數據接口
  delayxms(20);
  xiemingling(0x38);//
  delayxms(20);
  xiemingling(0x0c);//設置開顯示,不顯示光標
  delayxms(20);
  xiemingling(0x06);//寫一個字符后地址指針加1
  delayxms(20);
  xiemingling(0x01);//顯示清零,數據指針清零
  delayxms(20);
  xiemingling(0x80);//指定字符顯示的實際地址,,,顯示位置的確定方法規定為"80H+地址碼x"
  delayxms(20);
}
2、液晶顯示程序
//**************毫秒*******************
void delayxms(uint ms)                                           //延時 x  ms
{
    uint a,j;
    for(a=0;a<ms;a++)
          for(j=0;j<110;j++);
}
/*******************************************************************
                  寫命令
************************************************************************/
void xiemingling(unsigned char mingling)
{
  en=0;
  rs=0;
  rw=0;
  P0=mingling;
  delayxms(5);
  en=1;
  delayxms(10);
  en=0;
}
/*******************************************************************
                  寫數據
************************************************************************/
void xieshuju(unsigned char shuju)
{   
  en=0;
  rs=1;
  rw=0;
  P0=shuju;
  delayxms(5);
  en=1;
  delayxms(10);
  en=0;
}
3、按鍵程序
/*********************************************************/
// 按鍵掃描
/*********************************************************/
void key()
{
        if(key5==0)
        {
                delay(10);
                if(key5==0)
                {
                        while(!key5);
                        c1=c;
                        temp1=temp;
           
    }
        }      
                if(key6==0)
        {
                delay(10);
                if(key6==0)
                {
                        while(!key6);
            mode=!mode;
                        chushihua(); //LCD1602初始化
    }
        }      
      
      
        if(key1==0)
        {
                delay(10);
                if(key1==0)
                {
                        while(!key1);
              h++;
                          if(h>1000) h=1000;
    }
        }      
      
        if(key2==0)
        {
                delay(10);
                if(key2==0)
                {
                        while(!key2);
                        if(h>=1) h--;
               
    }
        }      
        if(key3==0)
        {
                delay(10);
                if(key3==0)
                {
                        while(!key3);
              l++;
                          if(l>1000) l=1000;
    }
        }      
      
        if(key4==0)
        {
                delay(10);
                if(key4==0)
                {
                        while(!key4);
                        if(l>=1) l--;
               
    }
        }      
      
}
4、核心算法程序
void main(void)
{
         
          chushihua(); //LCD1602初始化
               
  while(1)
  {         
             key();         
          getdata=Adc0832(0);
                check_wendu();
          if(0<getdata<243)                                 
                {                           
                  int vary=getdata;                                                      
                        press=((10.0/23.0)*vary)+9.3;                                                                                                                          
                        temp=(int)(press*10);               
                                                                                 
                        dispbuf[3]=temp/1000;                                     //取壓力值百位
                        dispbuf[2]=(temp%1000)/100;                            //取壓力值十位
                        dispbuf[1]=((temp%1000)%100)/10;                    //取壓力值個位
                        dispbuf[0]=((temp%1000)%100)%10;                        //取壓力值十分位
                        if(temp/10<l){ led1=0;led2=1;beep=0;}
                        else  if(temp/10>h){led1=1;led2=0;beep=0;}
       else  {led1=1;led2=1;beep=1;}
           }
                if(mode==0)
                {
                xiemingling(0x80+0);
                xieshuju('Q');
               
                xieshuju(':');
                xieshuju(dispbuf[3]+0x30);      
                xieshuju(dispbuf[2]+0x30);      
                xieshuju(dispbuf[1]+0x30);
                xieshuju('.');               
                xieshuju(dispbuf[0]+0x30);      
                xieshuju(' ');
               
                xieshuju('T');
                xieshuju(':');
                xieshuju(c/1000+0x30);      
                xieshuju(c%1000/100+0x30);      
                xieshuju(c%1000%100/10+0x30);
                xieshuju('.');               
                xieshuju(c%10+0x30);      
      
               
               
                xiemingling(0x80+0x40);
                        xieshuju('H');
                xieshuju(':');
                xieshuju(h/100+0x30);      
                xieshuju(h%100/10+0x30);      
                xieshuju(h%10+0x30);
      
     xieshuju(' ');
    xieshuju('L');
                xieshuju(':');
                xieshuju(l/100+0x30);      
                xieshuju(l%100/10+0x30);      
                xieshuju(l%10+0x30);      
        }
        else
                {
                        xiemingling(0x80+0);
                xieshuju('R');
               
                       
                       
                                xiemingling(0xC0+0);
                xieshuju('Q');
               
                xieshuju(':');
                xieshuju(temp1/1000+0x30);      
                xieshuju(temp1%1000/100+0x30);      
                xieshuju(temp1%1000%100/10+0x30);
                xieshuju('.');               
                xieshuju(temp1%10+0x30);      
                xieshuju(' ');
                       
                        xiemingling(0xC0+0);
                xieshuju('Q');
               
                xieshuju(':');
                xieshuju(temp1/1000+0x30);      
                xieshuju(temp1%1000/100+0x30);      
                xieshuju(temp1%1000%100/10+0x30);
                xieshuju('.');               
                xieshuju(temp1%10+0x30);      
                xieshuju(' ');
               
                xieshuju('T');
                xieshuju(':');
                xieshuju(c1/1000+0x30);      
                xieshuju(c1%1000/100+0x30);      
                xieshuju(c1%1000%100/10+0x30);
                xieshuju('.');               
                xieshuju(c1%10+0x30);      
      
               
               
               
        }
               
  }
}

四、 proteus仿真設計
Proteus軟件是一款應用比較廣泛的工具,它可以在沒有硬件平臺的基礎上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設計的最優方案。最后根據測試沒問題的仿真圖紙,焊接實物,調試,最終完成本設計的作品。


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区四区五区午夜 | 国产欧美在线一区二区 | 久久国内精品 | 亚洲高清在线 | 中文字幕一区二区三区精彩视频 | 天天看片天天干 | 国产良家自拍 | 免费一区 | 亚洲一二三区精品 | 日本成人中文字幕 | 亚洲成人中文字幕 | 国产一级片免费在线观看 | 国产精品久久久久久久久久久久冷 | 中文字字幕一区二区三区四区五区 | 国产精品不卡一区 | 欧美一区二区三区久久精品 | 91欧美激情一区二区三区成人 | 日韩成人av在线播放 | 国产精品久久久久久52avav | 欧美一区二区三区精品免费 | 亚洲国产二区 | 亚洲一区二区三区视频 | 国产在线一区二 | 国产第一区二区 | 精品一区二区三区中文字幕 | 成人国产一区二区三区精品麻豆 | 国产二区三区 | 久久久高清 | 精品一区二区久久久久久久网站 | 亚洲高清视频在线观看 | 成人精品一区二区三区中文字幕 | 天天澡天天狠天天天做 | 欧美亚洲综合久久 | 国产伦一区二区三区四区 | 亚洲男人天堂av | 日韩在线免费视频 | 中文字幕人成乱码在线观看 | 五月天婷婷丁香 | 日韩欧美网| 国产精品不卡视频 | 午夜电影在线播放 |