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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機ADC0832轉換MQ3酒精傳感器OLED顯示程序與Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
如果仿真打不開,把Proteus升級到8.13版本。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<oled.h>
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. uchar Get_AD_Result();   //模數轉換結果
  7. uint boundaries=80;//初始酒精報警設定為80
  8. uint vt;
  9. uchar AD;
  10. uint x,y;

  11. //ADC0832引腳定義
  12. sbit CS   = P1^0;
  13. sbit CLK  = P1^2;
  14. sbit DIDO = P1^1;
  15. sbit K1 = P2^2;
  16. sbit K2 = P2^3;
  17. sbit LEDR=P0^0;
  18. sbit Beep=P2^7;

  19. void Delayms(unsigned int n)//延時函數
  20. {
  21. unsigned int i,j;
  22. for(j=n;j>0;j--)
  23. for(i=112;i>0;i--);
  24. }

  25. void main()                        
  26. {         
  27.    OLED_Init();//初始化OLED
  28.          OLED_ColorTurn(0);//0正常顯示,1 反色顯示
  29.    OLED_DisplayTurn(1);//0正常顯示 1 屏幕翻轉顯示
  30.         
  31.          OLED_ShowChinese(0,0,0,16);
  32.          OLED_ShowChinese(16,0,1,16);
  33.          OLED_ShowChinese(32,0,2,16);
  34.          OLED_ShowChinese(48,0,3,16);
  35.          OLED_ShowChinese(64,0,4,16);
  36.          OLED_ShowChinese(80,0,5,16);//顯示酒精濃度測試
  37.          Delayms(2000);
  38.          OLED_Clear();
  39.          OLED_ShowChinese(0,0,0,16);//顯示酒
  40.          OLED_ShowChinese(16,0,1,16);//顯示精
  41.          OLED_ShowChinese(0,2,6,16);//顯示設
  42.          OLED_ShowChinese(16,2,7,16);//顯示定
  43.          OLED_ShowString(32,0,":",16);//顯示:
  44.          OLED_ShowString(32,2,":",16);//顯示:
  45.          OLED_ShowString(88,2,"mg/ml",16);//顯示mg/ml
  46.          OLED_ShowString(88,0,"mg/ml",16);//顯示mg/ml

  47.    CLK = 0;      //ADC0832初始化
  48.    CS   = 1;   
  49.    while(1)
  50.          {
  51.           AD = Get_AD_Result();
  52.     vt = (500.0/256.0)*AD;//得到輸出電壓
  53.           x=(vt-3)/2.778;//酒精濃度
  54.           y=x/10;
  55.           OLED_ShowNum(40,0,x,3,16);//顯示整數
  56.           OLED_ShowNum(72,0,y,1,16);//顯示小數
  57.           OLED_ShowString(64,0,".",16);//顯示小數點
  58.           OLED_ShowNum(40,2,boundaries,3,16);//顯示設定值
  59.                 if(x>=boundaries)//酒精濃度大于等于設定,蜂鳴器響,紅燈亮
  60.                 {
  61.                         Beep=0;
  62.                         LEDR=0;
  63.                 }
  64.                 else//酒精濃度小于設定值,蜂鳴器不響,紅燈不亮
  65.                 {
  66.           Beep=1;
  67.                 LEDR=1;
  68.                 }
  69.                
  70.                 if(K1==0)//按下K1時,設定值減1
  71.                 {
  72.                         Delayms(15);//消抖
  73.                         if(K1==0)
  74.                         {
  75.                          boundaries--;
  76.                         }
  77.                  while(!K1);//判斷K1是否彈起
  78.                 }
  79.                  
  80.                 if(K2==0)//按下K2時,設定值減+
  81.                 {
  82.                         Delayms(15);//消抖
  83.                         if(K2==0)
  84.                         {
  85.                                 boundaries++;
  86.                         }
  87.                  while(!K2);//判斷K2是否彈起
  88.                 }
  89.          }
  90. }





  91. //------------------------------
  92. //     獲取AD轉換結果(0通道)
  93. //------------------------------
  94. uchar Get_AD_Result()         //包含11個CLK下降沿      
  95. {
  96.     uchar i, dat;
  97.     CS = 1;              //ADC0832未工作時,CS端為高電平,此時芯片禁用
  98.     _nop_;               //對于延時很短的,要求在us級的,采用“_nop_”函數      
  99.     CLK =1;                  
  100.     CS = 0;
  101.     DIDO = 1; CLK = 0; _nop_; CLK = 1; _nop_; //SCLK第一個下降沿來到時,DI = 1啟動ADC0832
  102.     DIDO = 1; CLK = 0; _nop_; CLK = 1; _nop_; //SCLK第二個下降沿
  103.     DIDO = 0; CLK = 0; _nop_; CLK = 1; _nop_; //SCLK第三個下降沿,發送1,0選擇通道cho
  104.     DIDO = 1;                                //釋放總線
  105.     for(i = 0; i < 8; i++)                  //第4個下降沿到第11個下降沿
  106.     {
  107.         CLK = 0;                           //clk處于下降沿,每一個下降沿DO端輸入下一個
  108.         _nop_;                              //對于延時很短的,要求在us級的,采用_nop_函數      
  109.         if(DIDO) dat |= 0x01;              // dat = dat | 0x01,dat和0x01做“或”的運算,意思是最低位置1,其它位保持不變。
  110.         CLK = 1; _nop_;                      //clk處于上升沿
  111.         dat <<= 1;                          //數據左移
  112.     }
  113.     return (dat);
  114.     CS = 1;                                  //ADC0832停止工作
  115. }
復制代碼

Keil代碼與Proteus8.13版本的仿真(注意其他版本打不開的)下載:
51酒精報警.zip (91.61 KB, 下載次數: 71)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1139033 發表于 2024-12-9 14:21 | 只看該作者
用的lcd?代碼里咋寫oled
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天操网 | 免费黄网站在线观看 | a级片网站 | 麻豆久久久久久 | 瑟瑟视频在线看 | 成人二区| 99这里只有精品视频 | 亚洲www啪成人一区二区 | 欧美老妇交乱视频 | 亚洲精品乱码久久久久久久久久 | 国产视频福利一区 | 亚洲日韩欧美一区二区在线 | www.色综合| 午夜天堂| 国产精品69毛片高清亚洲 | 日韩欧美网 | 这里只有精品999 | 精品欧美一区二区三区久久久 | 欧美午夜精品久久久久久浪潮 | 激情91| 毛片一区二区三区 | 99久久精品免费看国产小宝寻花 | 毛片一区二区 | 日韩精品一区二区三区在线观看 | 国产亚洲区 | 久久久久久久91 | 精品久久久久久久 | 亚洲精品久久久一区二区三区 | 久久99精品久久久久久秒播九色 | 91色啪 | 欧美韩一区二区三区 | 日韩欧美在线一区二区 | 国产一级在线视频 | 免费午夜视频在线观看 | 日本三级网址 | 久久久久国产精品午夜一区 | 狠狠干网站| 伊人免费视频二 | 国产精品国产精品 | 99热视| 日韩国产一区二区三区 |