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

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

QQ登錄

只需一步,快速開始

搜索
查看: 7356|回復(fù): 1
收起左側(cè)

單片機(jī)模擬量輸出的(煙霧、酒精等)傳感器源程序及仿真電路

[復(fù)制鏈接]
ID:197252 發(fā)表于 2018-11-5 16:08 | 顯示全部樓層 |閱讀模式
花了一個(gè)星期做的單片機(jī)結(jié)課作業(yè),代碼注釋清晰,可讀性高。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20181105160318.png

單片機(jī)源程序如下:
  1. /******************************************************************
  2. * @file                                                chengxu.c
  3. *        @author                                        16自動(dòng)化1班       
  4. *        @version                                終結(jié)版
  5. *        @date                                                2018年11月5號(hào)
  6. ******************************************************************
  7. *        @instructions       
  8. *        該程序?qū)崿F(xiàn)的是對(duì)煙霧濃度的檢測(cè)以百分制形式將采集到的值顯示在數(shù)
  9. *        碼管上,使用的是AT89系列單片機(jī)做處理器,模數(shù)轉(zhuǎn)換芯片采用AD0809
  10. *        芯片。(該程序運(yùn)用在大多模擬量采集轉(zhuǎn)數(shù)字的傳感器)
  11. ******************************************************************/


  12. #include <reg52.h>                                                                                                                                                                                                                                     //頭文件
  13. #define uchar unsigned char                                                                                                                                                                                                                                  //宏定義無(wú)符號(hào)字符型
  14. #define uint  unsigned  int                                                                                                                                                                                                                                   //宏定義無(wú)符號(hào)整型
  15. code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};                         //顯示段碼 數(shù)碼管字跟
  16. uchar wei[4]={0XEf,0XDf,0XBf,0X7f};                                                                                                                                                                                                  //位控制碼
  17. sbit ST=P3^0;                                                                                                                                                                                                                                                                                   //A/D啟動(dòng)轉(zhuǎn)換信號(hào)
  18. sbit OE=P3^1;                                                                                                                                                                                                                                                                                   //數(shù)據(jù)輸出允許信號(hào)
  19. sbit EOC=P3^2;                                                                                                                                                                                                                                                                                  //A/D轉(zhuǎn)換結(jié)束信號(hào)
  20. sbit CLK=P3^3;                                                                                                                                                                                                                                                                                  //時(shí)鐘脈沖
  21. sbit Beep=P3^7;                                                                                                                                                                                                                                                                                 //蜂鳴器IO口
  22. uint z,x,c,v,AD0809, date;                                                                                                                                                                                                                                        //定義數(shù)據(jù)類型(全局變量)


  23. /******************************************************************
  24. us延時(shí)函數(shù),具體延時(shí)情況跟單片機(jī)選擇的晶振有關(guān)
  25. ******************************************************************/
  26. void delayus(uint i)
  27. {
  28.   while(i--);
  29. }


  30. /******************************************************************
  31. ms延時(shí)函數(shù),具體延時(shí)情況跟單片機(jī)選擇的晶振有關(guān)
  32. ******************************************************************/
  33. void delayms(uchar t)
  34. {
  35.   uchar i,j;
  36.    for(i=0;i<t;i++)
  37.    {
  38.             for(j=13;j>0;j--);
  39.                  { ;
  40.                  }
  41.    }
  42. }

  43. /*************************************************************************
  44.                                                                                                         蜂鳴器報(bào)警函數(shù)
  45. **************************************************************************/
  46. void Subeep()
  47. {
  48.         int i;
  49.         for(i=0;i<10;i++)
  50.         {
  51.                 Beep=~Beep;                                                                                                                                                                                                                                                                                //蜂鳴器輸出
  52.                 delayus(12);                                                                                                                                                                                                                                                                        //如要改變發(fā)聲改變延時(shí)即可
  53.         }
  54. }


  55. /**********************************************************************
  56.                                                                                                                 數(shù)碼管動(dòng)態(tài)掃描
  57. *********************************************************************/
  58. void xianshi()                                                                                                                                                                                                                                                                                 //顯示函數(shù)
  59. {
  60. uint z,x,c,v;
  61.   z=date/1000;                                                                                                                                                                                                                                                                                 //求百分?jǐn)?shù)十位
  62.   x=date%1000/100;                                                                                                                                                                                                                                                                 //求百分?jǐn)?shù)的個(gè)位
  63.   c=date%100/10;                                                                                                                                                                                                                                                                         //求百分?jǐn)?shù)小數(shù)點(diǎn)后一位
  64.   v=date%10;                                                                                                                                                                                                                                                                                         //求百分?jǐn)?shù)小數(shù)點(diǎn)的后兩位

  65.          if(z>5)                                                                                                                                                                                                                                                                                                //如果煙霧濃度大于50%蜂鳴器發(fā)出報(bào)警聲
  66.          {
  67.                 Subeep();                                                                     //調(diào)用蜂鳴器報(bào)警函數(shù)
  68.          }
  69.          
  70.          if(z==10)                                                                                                                                                                                                                                                                                        //判斷z的值是否是10
  71.          {
  72.                  z=9;                                                                                                                                                                                            //z賦值9
  73.                  x=9;                                                                                                                                                                                                                                                                                                        //x賦值9
  74.                  c=9;                                                                                                                                                                                                                                                                                                        //c賦值9
  75.                  v=9;                                                                                                                                                                                                                                                                                                        //v賦值9
  76.          }
  77.                         P2=0XFF;                                                                                                                                                                                                                                                                                //P2IO初始化
  78.                         P0=seg7code[z];                                                                                                                                                                                                                                                        //百分?jǐn)?shù)十位賦值給數(shù)碼管斷碼
  79.                         P2=wei[0];                                                                                                                                                                                                                                                                        //選擇百分?jǐn)?shù)十位顯示
  80.                         delayms(3);                                                                                                                                                                                                                                                                        //顯示3ms
  81.                         P2=0XFF;                                                                                                                                                                                                                                                                          //消影
  82.                         P0=seg7code[x]&0x7f;                                                                                                                                                                                                                                //百分?jǐn)?shù)個(gè)位賦值給數(shù)碼管斷碼和小數(shù)點(diǎn)斷碼
  83.                         P2=wei[1];                                                                                                                                                                                                                                                                        //選擇百分?jǐn)?shù)個(gè)位顯示
  84.                         delayms(3);                                                                                                                                                                                                                                                                        //顯示3ms
  85.                         P2=0XFF;                                                                                                                                                                                                                                                                          //消影
  86.                         P0=seg7code[c];                                                                                                                                                                                                                                                        //百分?jǐn)?shù)小數(shù)點(diǎn)后一位賦值給數(shù)碼管斷碼
  87.                         P2=wei[2];                                                                                                                                                                                                                                                                        //選擇百分?jǐn)?shù)小數(shù)點(diǎn)后兩位顯示
  88.                         delayms(3);                                                                                                                                                                                                                                                                        //顯示3ms
  89.                         P2=0XFF;                                                                                                                                                                                                                                                                          //消影
  90.                         P0=seg7code[v];                                                                                                                                                                                                                                                        //百分?jǐn)?shù)小數(shù)點(diǎn)后兩位賦值給數(shù)碼管斷碼
  91.                         P2=wei[3];                                                                                                                                                                                                                                                                        //選擇百分?jǐn)?shù)小數(shù)點(diǎn)后兩位顯示
  92.                         delayms(4);                                                                                                                                                                                                                                                                 //顯示3ms
  93.                         P2=0XFF;                                                                                                                                                                                                                                                                                //消影
  94.   }
  95. /*************************************************************************
  96.                                 CLK振蕩信號(hào)       
  97. **************************************************************************/
  98. void timer0( ) interrupt 1                                                                                                                                                                                                                                 //定時(shí)器0工作方式1
  99. {

  100. TH0=(65536-2)/256;                                                                                                                                                                                                                                                          //重裝計(jì)數(shù)初值
  101. TL0=(65536-2)%256;                                                                                                                                                                                                                                                          //重裝計(jì)數(shù)初值
  102. CLK=!CLK;                                                                                                                                                                                                                                                                                                  //取反
  103. }



  104. /*************************************************************************
  105.                                 主函數(shù)       
  106. **************************************************************************/
  107. void main()
  108. {
  109. TMOD=0X01;                                                                                                                                                                                                                                                                                          //定時(shí)器中斷0

  110. CLK=0;                                                                                                                                                                                                                                                                                                          //脈沖信號(hào)初始值為0
  111. TH0=(65536-2)/256;                                                                                                                                                                                                                                                          //定時(shí)時(shí)間高八位初值
  112. TL0=(65536-2)%256;                                                                                                                                                                                                                                                          //定時(shí)時(shí)間低八位初值
  113. EA=1;                                                                                                                                                                                                                                                                                                                  //開CPU中斷
  114. ET0=1;                                                                                                                                                                                                                                                                                                          //開T/C0中斷
  115. TR0=1;
  116. while(1)                                                                                                                                                                                                                                                                                                   //無(wú)限循環(huán)
  117.         {
  118.         ST=0;                                                                                                                                                                                                                                                                                                                //使采集信號(hào)為低
  119.         ST=1;                                                                                                                                                                                                                                                                                                                //開始數(shù)據(jù)轉(zhuǎn)換
  120.         ST=0;                                                                                                                                                                                                                                                                                                                //停止數(shù)據(jù)轉(zhuǎn)換
  121.         while(!EOC);                                                                                                                                                                                                                                                                                //等待數(shù)據(jù)轉(zhuǎn)換完畢
  122.         OE=1;                                                                                                                                                                                                                                                                                                                //允許數(shù)據(jù)輸出信號(hào)
  123.         AD0809=P1;                                                                                                                                                                                                                                                                            //讀取數(shù)據(jù)
  124.         OE=0;                                                                                                                                                                                                                                                                                                                //關(guān)閉數(shù)據(jù)輸出允許信號(hào)
  125.         if(AD0809>=251)                                                                                                                                                                                                                                                                        //電壓顯示不能超過(guò)5V
  126.         AD0809=250;
  127.         date=AD0809*40;                                                                                                                                                                                                                                                                        //數(shù)碼管顯示的數(shù)據(jù)值,其中40為采集數(shù)據(jù)的毫安值
  128.         xianshi();                                                                                                                                                                                                                                                                                        //數(shù)碼管顯示函數(shù)
  129.     }
  130. }       
復(fù)制代碼
0.png

所有資料51hei提供下載:
基于51單片機(jī)的煙霧傳感器的檢測(cè).zip (462.62 KB, 下載次數(shù): 65)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:698810 發(fā)表于 2020-2-26 22:26 | 顯示全部樓層
很不錯(cuò)嗎,學(xué)習(xí)了,感謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区四区hd | 成人在线电影网站 | 综合伊人 | 日韩中文字幕在线视频 | 欧美亚洲国产一区二区三区 | 国产99久久精品一区二区永久免费 | 最近免费日本视频在线 | 欧洲视频一区二区 | 精品中文字幕一区二区三区 | 夏同学福利网 | 欧美成人高清 | 免费看一区二区三区 | 爱高潮www亚洲精品 中文字幕免费视频 | 日韩国产精品一区二区三区 | 久久午夜精品 | 久草热线| 欧美日韩视频 | 毛片一级黄色 | 精品国产高清一区二区三区 | 日本高清中文字幕 | 国产色网站 | 免费国产一区二区 | 美女张开腿露出尿口 | 精品久久久久久中文字幕 | 草久久久 | 伦理二区 | 亚洲精品一区二区在线观看 | 91在线视频在线观看 | 久久久久国产精品一区二区 | 欧美中文在线 | 亚洲综合一区二区三区 | 国产在线精品一区二区三区 | 久久久精品视频一区二区三区 | 国产真实精品久久二三区 | 亚洲激情一区二区三区 | 久草网免费 | 免费三级网 | 国产精品一区二区久久精品爱微奶 | 91网站在线观看视频 | 亚洲精品久久久一区二区三区 | 夜夜爽夜夜操 |