欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4353|回復: 2
收起左側(cè)

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

[復制鏈接]
ID:166237 發(fā)表于 2017-3-2 20:51 | 顯示全部樓層 |閱讀模式
最近在做紅外測距實驗,用的是2Y0A21紅外傳感器,外加外置的ADC0809轉(zhuǎn)換模塊連接到單片機中,用數(shù)碼管顯示出測到的距離,程序在下面,紅外模塊和ADC的連線應(yīng)該沒有錯誤,但是不能測到距離,數(shù)碼管總是顯示000,求大神幫助為什么不能測出距離;PS:我的單片機數(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;//因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量
  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)         //位選,選擇點亮的數(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下降沿時啟動芯片,開始進行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;                //給一個脈沖,上升沿寄存器復位,下降沿AD轉(zhuǎn)換開始
  84.              while(!EOC)
  85.              {
  86.                         CLK=1;
  87.                CLK=0;
  88.              }        //當EOC為1時,轉(zhuǎn)換結(jié)束
  89.              OE=1;                        //寄存器數(shù)據(jù)輸出到D0-D7
  90.              temp=P0;               
  91.              OE=0;                    //DO-D7復位

  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.   }

復制代碼


相關(guān)帖子

回復

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
ID:1 發(fā)表于 2017-3-3 17:03 | 顯示全部樓層
你先把ad的輸入端分別接地和vcc看看 看看這時候數(shù)碼管的顯示有沒有變化
回復

使用道具 舉報

ID:166237 發(fā)表于 2017-3-4 18:31 | 顯示全部樓層
admin 發(fā)表于 2017-3-3 17:03
你先把ad的輸入端分別接地和vcc看看 看看這時候數(shù)碼管的顯示有沒有變化

都只是顯示000
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表