超声波测距lcd1602显示,大神帮忙看看哪错了屏幕不显示呢
时间:10-02
整理:3721RD
点击:
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit trig=P3^3;
//发射
sbit echo=P3^2; //接收
sbit lcde=P2^7; //e
sbit wr=P2^5;
sbit rd=P2^6;
void delay(uint z);
void com(uchar com);
void writedata(uchar date);
void display(uchar temp);
uchar num,i;
uchar table1[3];
int time,distance,succeedflag;
void lcdinit();
void main()
{
EA=1;
TMOD=0X01;
ET0=1;
while(1)
{
succeedflag=0;
trig=1;
delay(10);
trig=0;
while(!echo);
TR0=1;
TH0=0;
TL0=0;
while(echo);
TR0=0;
succeedflag=1;
delay(40);
}
if(succeedflag==1)
{
time=TH0*256+TL0;
distance=time*0.0172; //cm
display(distance);
}
if(succeedflag==0)
{
distance=0;
}
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void com(uchar com) //lcd命令
{
rd=0;
wr=0;
P0=com;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void writedata(uchar date) //lcd数据
{
rd=1;
wr=0;
P0=date;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void lcdinit() //lcd命令
{
com(0x38);
com(0x0c);
com(0x06);
com(0x01);
com(0x80);
}
void display(uchar temp) //记数
{
uchar bai,shi,ge,i,j;
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
table1[0]=bai+'0';
table1[1]=shi+'0';
table1[2]=ge+'0';
lcdinit();
for(i=0;i<3;i++)
{
writedata(table1[i]);
}
}
void timer0() interrupt 1 //定时器0中断
{
TH0=0;
TH0=0;
}
#define uint unsigned int
#define uchar unsigned char
sbit trig=P3^3;
//发射
sbit echo=P3^2; //接收
sbit lcde=P2^7; //e
sbit wr=P2^5;
sbit rd=P2^6;
void delay(uint z);
void com(uchar com);
void writedata(uchar date);
void display(uchar temp);
uchar num,i;
uchar table1[3];
int time,distance,succeedflag;
void lcdinit();
void main()
{
EA=1;
TMOD=0X01;
ET0=1;
while(1)
{
succeedflag=0;
trig=1;
delay(10);
trig=0;
while(!echo);
TR0=1;
TH0=0;
TL0=0;
while(echo);
TR0=0;
succeedflag=1;
delay(40);
}
if(succeedflag==1)
{
time=TH0*256+TL0;
distance=time*0.0172; //cm
display(distance);
}
if(succeedflag==0)
{
distance=0;
}
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void com(uchar com) //lcd命令
{
rd=0;
wr=0;
P0=com;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void writedata(uchar date) //lcd数据
{
rd=1;
wr=0;
P0=date;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
void lcdinit() //lcd命令
{
com(0x38);
com(0x0c);
com(0x06);
com(0x01);
com(0x80);
}
void display(uchar temp) //记数
{
uchar bai,shi,ge,i,j;
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
table1[0]=bai+'0';
table1[1]=shi+'0';
table1[2]=ge+'0';
lcdinit();
for(i=0;i<3;i++)
{
writedata(table1[i]);
}
}
void timer0() interrupt 1 //定时器0中断
{
TH0=0;
TH0=0;
}
有没有大神出来出来看看呢?
做项目或小制作不是一股脑把程序写好的,应该由底层到上层写起。比如你用1602进行测距显示,你构建程序的顺序应该是:
1.写个引脚电平跳变程序,检验单片机是否能正常工作
2.在1的基础上写1602的驱动程序,确保1602能进行显示,留出显示程序接口
3.在2的基础上验证定时器是否正常工作
4.在2和3都正常的情况下,编写测距程序
不要说我为什么不直接给你指出错误,我只希望各位电子爱好者不光能写程序,还要写好程序
恩恩,知道啦,谢啦!