找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4377|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

有關(guān)用2Y0A21紅外傳感器測量距離的程序,求幫助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:166237 發(fā)表于 2017-3-2 20:51 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
最近在做紅外測距實(shí)驗(yàn),用的是2Y0A21紅外傳感器,外加外置的ADC0809轉(zhuǎn)換模塊連接到單片機(jī)中,用數(shù)碼管顯示出測到的距離,程序在下面,紅外模塊和ADC的連線應(yīng)該沒有錯誤,但是不能測到距離,數(shù)碼管總是顯示000,求大神幫助為什么不能測出距離;PS:我的單片機(jī)數(shù)碼管顯示程序是正確的,程序編譯后沒有錯誤沒有警告
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char


  5. sbit ST  = P3^0;
  6. sbit OE  = P3^1;
  7. sbit EOC = P3^2;
  8. sbit CLK = P3^3;
  9. sbit LSA=P2^2;
  10. sbit LSB=P2^3;
  11. sbit LSC=P2^4;
  12. sbit adress_A=P1^0; //這是定義ADIN0輸入
  13. sbit adress_B=P1^1;
  14. sbit adress_C=P1^2;

  15. uchar DisplayData[8]; //數(shù)碼管顯示數(shù)組

  16. uchar code table[]={ 0x3f  , 0x06 , 0x5b , 0x4f ,0x66 , 0x6d,
  17.                        0x7d , 0x07 , 0x7f  , 0x6f , 0x77 , 0x7c,
  18.                              0x39 , 0x5e , 0x79 , 0x71} ;

  19. void delayms(uint a)        //延時函數(shù)
  20.   {
  21.      uint c,d;
  22.      for(c=a;c>0;c--)
  23.        for(d=110;d>0;d--);
  24.   }


  25. /*******************************************************************************
  26. * 函 數(shù) 名         : datapros()
  27. * 函數(shù)功能                   :AD讀取處理轉(zhuǎn)換函數(shù)
  28. * 輸    入         : temp
  29. * 輸    出         : 無
  30. *******************************************************************************/
  31. void datapros(int temp)  //數(shù)據(jù)轉(zhuǎn)換函數(shù),用來轉(zhuǎn)換由AD轉(zhuǎn)換而來的電壓值,以便讓數(shù)碼管顯示
  32. {
  33.    DisplayData[0] = 0x00;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個浮點(diǎn)型變量
  34.     DisplayData[1]=table[temp/100];
  35.      DisplayData[2]=table[temp%100/10];
  36.      DisplayData[3]=table[temp%100%10];
  37. }

  38. /*******************************************************************************
  39. * 函數(shù)名         :DigDisplay()
  40. * 函數(shù)功能                 :數(shù)碼管顯示函數(shù)
  41. * 輸入           : 無
  42. * 輸出                  : 無
  43. *******************************************************************************/
  44. void DigDisplay()
  45. {
  46.         uchar i;
  47.         for(i=0;i<3;i++)
  48.         {
  49.                 switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,
  50.                 {
  51.                         case(0):
  52.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  53.                         case(1):
  54.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  55.                         case(2):
  56.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  57.                         case(3):
  58.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  59.                         case(4):
  60.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  61.                         case(5):
  62.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位        
  63.                 }
  64.                 P0=DisplayData[3-i];//發(fā)送數(shù)據(jù)
  65.                 delayms(5); //間隔一段時間掃描        
  66.                 P0=0x00;//消隱
  67.         }               
  68. }



  69. void ADC0809 ()          //ADC0809啟動程序
  70. {        
  71.       long int temp;
  72.         long int temp1;

  73.       adress_A=0;adress_B=0;adress_C=0;   //選擇IN0作為模擬信號輸入
  74.       ST=0;         //START下降沿時啟動芯片,開始進(jìn)行A/D轉(zhuǎn)換,轉(zhuǎn)換期間保持低電平
  75.         OE=0;

  76.         delayms(10);

  77.         while(1)
  78.         {
  79.              ST=1;ST=0;
  80.              CLK=1;                     //用作AD的時鐘
  81.            CLK=0;
  82.            CLK=1;
  83.            CLK=0;                //給一個脈沖,上升沿寄存器復(fù)位,下降沿AD轉(zhuǎn)換開始
  84.              while(!EOC)
  85.              {
  86.                         CLK=1;
  87.                CLK=0;
  88.              }        //當(dāng)EOC為1時,轉(zhuǎn)換結(jié)束
  89.              OE=1;                        //寄存器數(shù)據(jù)輸出到D0-D7
  90.              temp=P0;               
  91.              OE=0;                    //DO-D7復(fù)位

  92.              temp1=(temp*500)/256;        //AD值轉(zhuǎn)換成電壓值(V=AD*VREF/256)
  93. //顯示AD值
  94.            datapros(temp1); //先轉(zhuǎn)換數(shù)據(jù)
  95.              DigDisplay();
  96.         }
  97. }

  98. void main()
  99.   {
  100.           ADC0809 ();
  101.          
  102.   }

復(fù)制代碼


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

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2017-3-3 17:03 | 只看該作者
你先把a(bǔ)d的輸入端分別接地和vcc看看 看看這時候數(shù)碼管的顯示有沒有變化
回復(fù)

使用道具 舉報

板凳
ID:166237 發(fā)表于 2017-3-4 18:31 | 只看該作者
admin 發(fā)表于 2017-3-3 17:03
你先把a(bǔ)d的輸入端分別接地和vcc看看 看看這時候數(shù)碼管的顯示有沒有變化

都只是顯示000
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表