標(biāo)題:
有關(guān)用2Y0A21紅外傳感器測(cè)量距離的程序,求幫助
[打印本頁]
作者:
林懂
時(shí)間:
2017-3-2 20:51
標(biāo)題:
有關(guān)用2Y0A21紅外傳感器測(cè)量距離的程序,求幫助
最近在做紅外測(cè)距實(shí)驗(yàn),用的是2Y0A21紅外傳感器,外加外置的ADC0809轉(zhuǎn)換模塊連接到單片機(jī)中,用數(shù)碼管顯示出測(cè)到的距離,程序在下面,紅外模塊和ADC的連線應(yīng)該沒有錯(cuò)誤,但是不能測(cè)到距離,數(shù)碼管總是顯示000,求大神幫助為什么不能測(cè)出距離;PS:我的單片機(jī)數(shù)碼管顯示程序是正確的,程序編譯后沒有錯(cuò)誤沒有警告
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit ST = P3^0;
sbit OE = P3^1;
sbit EOC = P3^2;
sbit CLK = P3^3;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit adress_A=P1^0; //這是定義ADIN0輸入
sbit adress_B=P1^1;
sbit adress_C=P1^2;
uchar DisplayData[8]; //數(shù)碼管顯示數(shù)組
uchar code table[]={ 0x3f , 0x06 , 0x5b , 0x4f ,0x66 , 0x6d,
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c,
0x39 , 0x5e , 0x79 , 0x71} ;
void delayms(uint a) //延時(shí)函數(shù)
{
uint c,d;
for(c=a;c>0;c--)
for(d=110;d>0;d--);
}
/*******************************************************************************
* 函 數(shù) 名 : datapros()
* 函數(shù)功能 :AD讀取處理轉(zhuǎn)換函數(shù)
* 輸 入 : temp
* 輸 出 : 無
*******************************************************************************/
void datapros(int temp) //數(shù)據(jù)轉(zhuǎn)換函數(shù),用來轉(zhuǎn)換由AD轉(zhuǎn)換而來的電壓值,以便讓數(shù)碼管顯示
{
DisplayData[0] = 0x00;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
DisplayData[1]=table[temp/100];
DisplayData[2]=table[temp%100/10];
DisplayData[3]=table[temp%100%10];
}
/*******************************************************************************
* 函數(shù)名 :DigDisplay()
* 函數(shù)功能 :數(shù)碼管顯示函數(shù)
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void DigDisplay()
{
uchar i;
for(i=0;i<3;i++)
{
switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
}
P0=DisplayData[3-i];//發(fā)送數(shù)據(jù)
delayms(5); //間隔一段時(shí)間掃描
P0=0x00;//消隱
}
}
void ADC0809 () //ADC0809啟動(dòng)程序
{
long int temp;
long int temp1;
adress_A=0;adress_B=0;adress_C=0; //選擇IN0作為模擬信號(hào)輸入
ST=0; //START下降沿時(shí)啟動(dòng)芯片,開始進(jìn)行A/D轉(zhuǎn)換,轉(zhuǎn)換期間保持低電平
OE=0;
delayms(10);
while(1)
{
ST=1;ST=0;
CLK=1; //用作AD的時(shí)鐘
CLK=0;
CLK=1;
CLK=0; //給一個(gè)脈沖,上升沿寄存器復(fù)位,下降沿AD轉(zhuǎn)換開始
while(!EOC)
{
CLK=1;
CLK=0;
} //當(dāng)EOC為1時(shí),轉(zhuǎn)換結(jié)束
OE=1; //寄存器數(shù)據(jù)輸出到D0-D7
temp=P0;
OE=0; //DO-D7復(fù)位
temp1=(temp*500)/256; //AD值轉(zhuǎn)換成電壓值(V=AD*VREF/256)
//顯示AD值
datapros(temp1); //先轉(zhuǎn)換數(shù)據(jù)
DigDisplay();
}
}
void main()
{
ADC0809 ();
}
復(fù)制代碼
作者:
admin
時(shí)間:
2017-3-3 17:03
你先把a(bǔ)d的輸入端分別接地和vcc看看 看看這時(shí)候數(shù)碼管的顯示有沒有變化
作者:
林懂
時(shí)間:
2017-3-4 18:31
admin 發(fā)表于 2017-3-3 17:03
你先把a(bǔ)d的輸入端分別接地和vcc看看 看看這時(shí)候數(shù)碼管的顯示有沒有變化
都只是顯示000
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1