|
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SID=P2^4;
sbit SCIK=P2^5;
sbit ECHO=P3^2;
sbit TRIG=P1^0;
uint sum=1240,i=0,a=0;
void bizhang();
void StartMo();
void display();
void delay(uchar z)
{
uint i,j;
for(i=0;i<=z;i++)
for(j=0;j<=110;j++);
}
void sendbyte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
SCIK=0; //拉低時(shí)鐘線
SID=(bit)(byte&0x80); //發(fā)送最高位數(shù)據(jù)
SCIK=1; //上升沿發(fā)送數(shù)據(jù)
byte=byte<<1; //左移一位
}
}
void write_com(uchar com)
{
sendbyte(0xf8); //送入5個(gè)連續(xù)的“1“,啟動(dòng)一個(gè)周期,11111,RW(0),RS(0),0
sendbyte(0xf0&com);
sendbyte(0xf0&(com<<4));
delay(10);
}
void write_data(uchar date)
{
sendbyte(0xfa); //送入5個(gè)連續(xù)的“1“,啟動(dòng)一個(gè)周期,11111,RW(0),RS(1),0
sendbyte(0xf0&date); //取高四位,數(shù)據(jù)分兩次傳送,
//每個(gè)字節(jié)的內(nèi)容被送入兩個(gè)字節(jié)
//高四位放在第一個(gè)字節(jié)的高四位
sendbyte(0xf0&(date<<4)); //低四位放在第二個(gè)字節(jié)
delay(10);
}
void write_hz(uchar *hz)
{
while(*hz!='\0')
{
write_data(*hz); //寫入漢字
hz++;
}
}
void display()
{
write_com(0x80);
write_hz("sum=");
write_data(sum/1000+0x30);
write_data(sum/100%10+0x30);
write_data(sum/10%10+0x30);
write_data(sum%10+0x30);
write_hz("cm");
write_data(a);
}
void main()
{
//定時(shí)器部分
TMOD=0X10;
EA=1;
ET1=1;
//定時(shí)器部分
write_com(0xf8);//送11111
write_com(0x0c);//整體和游標(biāo)顯示
write_com(0x01);//清屏
delay(5);
write_com(0x06);//寫一個(gè)字符,地址和光標(biāo)指針加1
while(1)
{
a=0;
bizhang();
display();
delay(200);
}
}
void bizhang()
{
ECHO=0;
StartMo();
while(!ECHO);
TH1=0;
TL1=0;
TR1=1; //定時(shí)器初始化
while(ECHO);
TR1=0;
sum=(TH1*256+TL1)*0.00017;//
TH1=0;TL1=0;
delay(80);
}
void StartMo()
{
TRIG=0;
TRIG=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG=0;
}
void ds1()interrupt 3
{
a=1;
}
12864可以顯示,但超聲波就是測不了啊,真心求幫助,
|
|