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

標題: 為什么CO傳感器MQ-7檢測的數據不能傳輸到單片機進而在液晶屏上顯示呢? [打印本頁]

作者: 一人心0511    時間: 2018-6-12 09:19
標題: 為什么CO傳感器MQ-7檢測的數據不能傳輸到單片機進而在液晶屏上顯示呢?
板子是自己焊接的,1602調試可用,圖片中與四根杜邦線相連的器件就是MQ-7,芯片與ADC0832的0通道連接,單片機進行數據處理后將數據顯示在液晶屏1602上。程序是直接燒入在芯片中,所以下載器只接了正負極,給板子供電。

問題是MQ-7可以檢測氣體,但是數據傳不到單片機,無法進一步處理,是硬件問題還是軟件問題呢,請給出具體解決辦法吧,非常感謝了,以下是所有程序


主函數部分






  1. #include <reg52.h>
  2. #include <intrins.h>  
  3. #include <math.h>   
  4. #include <stdio.h>
  5. #include "ad08.h"
  6. #include "l1602.h"
  7. #define uint unsigned int
  8. #define uchar unsigned char


  9. uchar qt;

  10. void LCD_init(void);
  11. unsigned int Adc0832(unsigned char channel);
  12. void LCD_disp_char(uchar x,uchar y,uchar dat);//??????????????,X(0-15),y(1-2)  
  13. void LCD_disp_str(uchar x,uchar y,uchar *str);
  14. void main()
  15. {

  16.         LCD_init();           
  17.          

  18.         while(1)
  19.         {
  20.           qt=Adc0832(0);
  21.          qt = qt*19.607843; //轉換為實際電壓便于顯示
  22.    qt=qt/1000%10;
  23.          LCD_disp_str(9,0,"Q:");
  24.          LCD_disp_char(11,0,qt/100+0x30);
  25.          LCD_disp_char(12,0,qt%100/10+0x30);
  26.          LCD_disp_char(13,0,qt%100%10+0x30);
  27.                  LCD_disp_str(14,0,"p");

  28.         }
  29. }
復制代碼
ADC0832部分





  1. #include <reg52.h>
  2. #include <intrins.h>  
  3. #include <math.h>   
  4. #include <stdio.h>
  5. #include "ad08.h"

  6. unsigned int Adc0832(unsigned char channel)
  7. {
  8.         uchar i=0;
  9.         uchar j;
  10.         long dat=0;
  11.         uchar ndat=0;
  12.         uchar  Vot=0;

  13.         if(channel==0)channel=2;
  14.         if(channel==1)channel=3;
  15.         ADDI=1;
  16.         _nop_();
  17.         _nop_();
  18.         ADCS=0;//??CS?
  19.         _nop_();
  20.         _nop_();
  21.         ADCLK=1;//??CLK?
  22.         _nop_();
  23.         _nop_();
  24.         ADCLK=0;//拉低CLK端,形成下降沿1
  25.         _nop_();
  26.         _nop_();
  27.   ADCLK=0;
  28.         _nop_();
  29.         _nop_();       
  30.         ADCLK=1;//??CLK?
  31.         ADDI=channel&0x1;
  32.         _nop_();
  33.         _nop_();
  34.         ADCLK=0;//拉低CLK端,形成下降沿2
  35.         _nop_();
  36.         _nop_();
  37.         ADCLK=1;//??CLK?
  38.         ADDI=(channel>>1)&0x1;
  39.         _nop_();
  40.         _nop_();
  41.         ADCLK=0;//拉低CLK端,形成下降沿3
  42.         ADDI=1;//控制命令結束
  43.         _nop_();
  44.         _nop_();
  45.         dat=0;
  46.         for(i=0;i<8;i++)
  47.         {
  48.                 dat|=ADDO;//接收數據
  49.                 ADCLK=1;
  50.                 _nop_();
  51.                 _nop_();
  52.                 ADCLK=0;//形成一次時鐘脈沖
  53.                 _nop_();
  54.                 _nop_();
  55.                 dat<<=1;
  56.                 if(i==7)dat|=ADDO;
  57.         }
  58.         for(i=0;i<8;i++)
  59.         {
  60.                 j=0;
  61.                 j=j|ADDO;//接收數據
  62.                 ADCLK=1;
  63.                 _nop_();
  64.                 _nop_();
  65.                 ADCLK=0;//形成一次時鐘脈沖
  66.                 _nop_();
  67.                 _nop_();
  68.                 j=j<<7;
  69.                 ndat=ndat|j;
  70.                 if(i<7)ndat>>=1;
  71.         }
  72.         ADCS=1;//??CS?
  73.         ADCLK=0;//??CLK?
  74.         ADDO=1;//拉高數據端,回到初始狀態
  75.         dat<<=8;
  76.         dat|=ndat;

  77.         return(dat);            //return ad data
  78. }
復制代碼

ADC0832頭文件





  1. #ifndef _L08_H
  2. #define _L08_H

  3. #include <reg52.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int       
  6. sbit ADCS         =P1^2; //ADC0832 使能口
  7. sbit ADCLK  =P1^3; //ADC0832 時鐘口
  8. sbit ADDI         =P1^4; //ADC0832                數據口
  9. sbit ADDO         =P1^4;

  10. unsigned int Adc0832(unsigned char channel);


  11. #endif
復制代碼

液晶1602部分





  1. #include <reg52.h>
  2. #include <intrins.h>  
  3. #include <math.h>   
  4. #include <stdio.h>
  5. #include "l1602.h"

  6. #define uchar unsigned char
  7. #define uint unsigned int

  8.        
  9. void delay_n10us(uint n)  //延時
  10. {                 
  11.         uint i;                    
  12.         for(i=n;i>0;i--)            
  13.          {         
  14.          nop_();_nop_();_nop_();_nop_();_nop_();_nop_();   
  15.          }
  16. }
  17. void LCD_init(void)
  18. {  
  19.         delay_n10us(10);  
  20.         LCD_write_command(0x38);//??8???,2?,5x7
  21.         delay_n10us(10);  LCD_write_command(0x0c);//???,???,???
  22.         delay_n10us(10);  LCD_write_command(0x06);//??????,?????
  23.         delay_n10us(10);  LCD_write_command(0x01);//??????  
  24.         delay_n10us(100);       //????,????,???n?10us
  25. }

  26. void LCD_write_command(uchar dat)
  27. {  
  28.         delay_n10us(10);  
  29.         LCD_RS=0;         //??
  30.         LCD_RW=0;         //??
  31.         LCD_E=1;          //??
  32.         LCD_DB=dat;  delay_n10us(10);  //????,??LCD1602?,?for??1???????????
  33.         LCD_E=0;  delay_n10us(10);  //????,??LCD1602?,?for??1???????????
  34. }

  35. void LCD_write_data(uchar dat)
  36. {  
  37.         delay_n10us(10);  
  38.         LCD_RS=1;          //??
  39.         LCD_RW=0;                   //??
  40.         LCD_E=1;           //??
  41.         LCD_DB=dat; delay_n10us(10);
  42.          LCD_E=0;  delay_n10us(10);
  43. }

  44. void LCD_disp_char(uchar x,uchar y,uchar dat)
  45. {   
  46.         uchar address;   
  47.         if(y==0)           
  48.         address=0x80+x;  
  49.         else           
  50.         address=0xc0+x;   
  51.         LCD_write_command(address);   
  52.         LCD_write_data(dat);
  53. }

  54. void LCD_disp_str(uchar x,uchar y,uchar *str)
  55. {   
  56.         uchar address;   
  57.         if(y==0)           
  58.         address=0x80+x;   
  59.         else           
  60.         address=0xc0+x;   
  61.         LCD_write_command(address);   
  62.         while(*str!='\0')   
  63.                 {      
  64.                 LCD_write_data(*str);
  65.                 str++;
  66.                 }
  67. }
復制代碼

液晶頭文件





  1. #ifndef _L1602_H
  2. #define _L1602_H

  3. #include <reg52.h>

  4. #define LCD_DB        P0


  5. #define uchar unsigned char
  6. sbit         LCD_RS=P2^7;   
  7. sbit         LCD_RW=P2^6;  
  8. sbit         LCD_E=P2^5;

  9. void LCD_init(void);                          //?????
  10. void LCD_write_command(uchar command);        //?????
  11. void LCD_write_data(uchar dat);               //?????  
  12. void LCD_disp_char(uchar x,uchar y,uchar dat);//??????????????,X(0-15),y(1-2)  
  13. void LCD_disp_str(uchar x,uchar y,uchar *str); //LCD1602???????

  14. #endif
復制代碼




請大家幫忙解決以下吧,比較著急用呢,多謝了






IMG_20180612_090258.jpg (4.8 MB, 下載次數: 61)

IMG_20180612_090258.jpg

作者: zhanghyg    時間: 2018-6-12 11:11

uchar類型的qt范圍0--255,我懷疑ADC0832是可以讀數據的,就是你在轉換的時候qt乘上一個浮點數在賦值給qt的時候數據會出錯。最好再加個浮點數類型的中間變量。

作者: 一人心0511    時間: 2018-6-12 12:11
zhanghyg 發表于 2018-6-12 11:11
uchar類型的qt范圍0--255,我懷疑ADC0832是可以讀數據的,就是你在轉換的時候qt乘上一個浮點數在賦值給qt ...

我先試試,多謝了
作者: 一人心0511    時間: 2018-6-12 12:31
zhanghyg 發表于 2018-6-12 11:11
uchar類型的qt范圍0--255,我懷疑ADC0832是可以讀數據的,就是你在轉換的時候qt乘上一個浮點數在賦值給qt ...

非常感謝,已經有讀數了
作者: 為了通過    時間: 2019-5-30 10:03
在嗎,可以給我說一下電路圖什么樣子么?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品一区二区三区不卡 | 欧美福利影院 | 三级免费av | 欧美1区| 中文字幕av在线 | 亚洲欧美日韩精品久久亚洲区 | 又黄又色 | www.国产| 超碰人人艹 | 国产精品久久久久久久久久 | 91深夜福利视频 | 中文字幕乱码视频32 | 最新国产精品视频 | 色视频成人在线观看免 | 久久久久网站 | 欧美日韩在线免费 | 91精品国产91久久久 | 免费看的av | 亚洲va欧美va人人爽午夜 | 国产国产精品久久久久 | 亚洲不卡一 | 天天插天天操 | 亚洲视频在线观看 | 亚洲美女在线一区 | 欧美性受xxxx白人性爽 | 中文字幕一区二区在线观看 | av毛片在线| 福利片一区二区 | 国产成人99久久亚洲综合精品 | 成人精品一区 | 9久久精品 | av第一页 | 成人在线免费观看视频 | 亚洲一区在线日韩在线深爱 | 老司机午夜性大片 | 亚洲丝袜天堂 | 日本精品一区二区 | 国产1页 | 成人性视频在线 | 精品中文字幕在线观看 | 欧美淫片|