亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
有關用2Y0A21紅外傳感器測量距離的程序,求幫助
[打印本頁]
作者:
林懂
時間:
2017-3-2 20:51
標題:
有關用2Y0A21紅外傳感器測量距離的程序,求幫助
最近在做紅外測距實驗,用的是2Y0A21紅外傳感器,外加外置的ADC0809轉換模塊連接到單片機中,用數碼管顯示出測到的距離,程序在下面,紅外模塊和ADC的連線應該沒有錯誤,但是不能測到距離,數碼管總是顯示000,求大神幫助為什么不能測出距離;PS:我的單片機數碼管顯示程序是正確的,程序編譯后沒有錯誤沒有警告
#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]; //數碼管顯示數組
uchar code table[]={ 0x3f , 0x06 , 0x5b , 0x4f ,0x66 , 0x6d,
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c,
0x39 , 0x5e , 0x79 , 0x71} ;
void delayms(uint a) //延時函數
{
uint c,d;
for(c=a;c>0;c--)
for(d=110;d>0;d--);
}
/*******************************************************************************
* 函 數 名 : datapros()
* 函數功能 :AD讀取處理轉換函數
* 輸 入 : temp
* 輸 出 : 無
*******************************************************************************/
void datapros(int temp) //數據轉換函數,用來轉換由AD轉換而來的電壓值,以便讓數碼管顯示
{
DisplayData[0] = 0x00;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
DisplayData[1]=table[temp/100];
DisplayData[2]=table[temp%100/10];
DisplayData[3]=table[temp%100%10];
}
/*******************************************************************************
* 函數名 :DigDisplay()
* 函數功能 :數碼管顯示函數
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void DigDisplay()
{
uchar i;
for(i=0;i<3;i++)
{
switch(i) //位選,選擇點亮的數碼管,
{
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];//發送數據
delayms(5); //間隔一段時間掃描
P0=0x00;//消隱
}
}
void ADC0809 () //ADC0809啟動程序
{
long int temp;
long int temp1;
adress_A=0;adress_B=0;adress_C=0; //選擇IN0作為模擬信號輸入
ST=0; //START下降沿時啟動芯片,開始進行A/D轉換,轉換期間保持低電平
OE=0;
delayms(10);
while(1)
{
ST=1;ST=0;
CLK=1; //用作AD的時鐘
CLK=0;
CLK=1;
CLK=0; //給一個脈沖,上升沿寄存器復位,下降沿AD轉換開始
while(!EOC)
{
CLK=1;
CLK=0;
} //當EOC為1時,轉換結束
OE=1; //寄存器數據輸出到D0-D7
temp=P0;
OE=0; //DO-D7復位
temp1=(temp*500)/256; //AD值轉換成電壓值(V=AD*VREF/256)
//顯示AD值
datapros(temp1); //先轉換數據
DigDisplay();
}
}
void main()
{
ADC0809 ();
}
復制代碼
作者:
admin
時間:
2017-3-3 17:03
你先把ad的輸入端分別接地和vcc看看 看看這時候數碼管的顯示有沒有變化
作者:
林懂
時間:
2017-3-4 18:31
admin 發表于 2017-3-3 17:03
你先把ad的輸入端分別接地和vcc看看 看看這時候數碼管的顯示有沒有變化
都只是顯示000
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1