標(biāo)題:
51單片機(jī)跟超聲波測(cè)距硬件電路沒有問題,數(shù)碼管顯示為0
[打印本頁]
作者:
趙博
時(shí)間:
2018-2-7 20:12
標(biāo)題:
51單片機(jī)跟超聲波測(cè)距硬件電路沒有問題,數(shù)碼管顯示為0
硬件電路沒有問題,程序出現(xiàn)了問題,數(shù)碼管顯示為0 天使了一下午也沒有解決 望大神們解答。。!
IMG_20180207_183632.jpg
(1.63 MB, 下載次數(shù): 40)
下載附件
2018-2-7 20:11 上傳
#include<reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 time,distance;
bit flag=0; //中斷溢出標(biāo)志
u8 pros[3];
void delay(u16 i)
{
while(i--);
}
void delay20us(void) //誤差 -0.46875us
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=1;a>0;a--);
}
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit TRIG=P2^5;
sbit ECHO=P2^6;
void Usair() //中斷
{
TMOD=0X01; //定時(shí)器0
TH0=0;
TL0=1;
EA=1;
TR0=1;
}
void Count() //計(jì)算距離
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
distance=(time*1.87)/100;
}
void Digplay() //數(shù)碼管動(dòng)態(tài)掃描
{
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case(0):LSA=0;LSB=0;LSC=0;break;
case(1):LSA=1;LSB=0;LSC=0;break;
}
P1=pros[i];
delay(100);
P1=0X00;
}
}
void KeyDown() //數(shù)碼管顯示
{
if(flag==1)
{
flag=0;
pros[0]=0x40;
pros[1]=0x40;
}
pros[0]=smgduan[distance/10];
pros[1]=smgduan[distance%10];
}
void star_Ch() //打開超聲波測(cè)距模塊
{
TRIG=1;
delay20us();
TRIG=0;
}
void main()
{
Usair();
while(1)
{
star_Ch();
while(!ECHO);
TR0=1;
while(ECHO)
TR0=0;
delay(1000);
Digplay();
KeyDown();
}
}
void Init() interrupt 1
{
TH0=0;
TL0=0;
flag=1;
}
復(fù)制代碼
作者:
l6931639
時(shí)間:
2018-2-8 07:44
沒有看懂你的程序,count函數(shù)在主程序沒有使用,定時(shí)器中斷里吧定時(shí)器清零了,那么你的程序就是使用查詢定時(shí)器發(fā)得到距離。你的顯示部分沒有體現(xiàn)出數(shù)碼管的掃描,LSB和LSC沒有使用過,沒有看懂你的i掃描了0到8結(jié)果只取了0到3是做什么用的?我想說,新手,你先用簡(jiǎn)單的程序把數(shù)碼管驅(qū)動(dòng)好再來吃蛋糕吧!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1