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

標題: 基于51單片機ADC0832轉換MQ3酒精傳感器OLED顯示程序與Proteus仿真 [打印本頁]

作者: binggg    時間: 2022-11-12 17:30
標題: 基于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)

作者: tens1on    時間: 2024-12-9 14:21
用的lcd?代碼里咋寫oled




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 色综合天天综合网国产成人网 | 国产免费视频 | 久草免费在线视频 | av免费在线观看网站 | 亚洲人在线观看 | 午夜黄色剧场 | 成人毛片100免费观看 | 黄色大片免费在线观看 | 亚洲一区二区在线视频 | 天堂免费av | 成年视频在线观看 | 国产精品久久久久久久久久久久午夜片 | av色婷婷 | 日韩久久久 | 欧美日本精品 | 国产高清免费 | 特黄aaaaaaaaa真人毛片 | 色综合五月 | 四虎网站| 日本精品久久 | 中文字幕第一区 | 亚洲区视频 | 日韩欧美视频在线 | 成人永久免费视频 | 成人激情在线观看 | 日韩三级在线播放 | 波多野结衣一区二区三区在线观看 | 亚洲天堂视频在线观看 | 超碰成人网 | 极品新婚夜少妇真紧 | 蜜臀久久99精品久久久久久宅男 | 99在线播放 | 久久综合影院 | 久久一区 | 国产成人精品一区二区三区在线观看 | 欧美精品二区 | 成人永久免费 | 亚洲另类视频 | 亚洲美女爱爱 | 欧美日韩一二三区 | 四虎av在线 |