关于51单片机超声波测距的若干问题,后半部分后贴上来..

#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharsbi... #include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit DU=P2^6;
sbit WE=P2^7;
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P2^5;
sbit RX=P3^2;
sbit TX=P1^5;
sbit FM=P2^3;

uint time=0;
unsigned long S=0;
bit flag=0; //为什么是bit?sbit和bit有什么区别?
uchar disdat[]={0,0,0,0};

void delay(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
for(y=112;y>0;y--);
}

void write_com(uchar com)
{
RS=0;
RW=0;
P0=com;
delay(5);
EN=1;
delay(5);
EN=0;
}

void write_dat(uchar dat)
{
RS=1;
RW=0;
P0=dat;
delay(5);
EN=1;
delay(5);
EN=0;
}

void write_1602(uchar add,uchar dat2)
{
write_com(0x80+0x40+add);
write_dat(dat2);
}

void ZIFU(uchar *ch)
{
while(*ch!=0)
{
write_dat(*ch++);
delay(20);
}
}

void init()
{
DU=0;
WE=0;
EN=0;
write_com(0x38);
delay(2);
write_com(0x0f);
write_com(0x06);
write_com(0x80);
write_com(0x01);
ZIFU(" UltraSonic");
}

void count()
{
time=TH0*256+TL0; //为什么时间等于TH0*256+TL0?
TH0=0;
TL0=0;
S=time/58;
if(S>100)
{
FM=0;
}
else
{
FM=1;
}

disdat[0]=S%1000/100;
disdat[1]=S%1000%100/10;
disdat[2]=S%1000%10%10;
write_1602(1,'D');
write_1602(2,'i');
write_1602(3,'s');
write_1602(4,'t');
write_1602(5,'a');
write_1602(6,'n');
write_1602(7,'c');
write_1602(8,'e');
write_1602(9,':'); //这里可以用数组方式实现吗?
write_1602(10,disdat[0]+0x30);
write_1602(11,disdat[1]+0x30);
write_1602(12,disdat[2]+0x30);
write_1602(13,'C');
write_1602(14,'M');
}

void timer0() interrupt 1
{
flag=1; //flag置一有什么作用?
}
展开
 我来答
tony_sgt
2015-05-04 · TA获得超过8423个赞
知道大有可为答主
回答量:5330
采纳率:66%
帮助的人:1223万
展开全部
Sbit是特殊寄存器用的通常是用在端口上,bit是说可以作位处理,编译后会以51内的可位元定址的空间来替代。

时间为什么是要乘256这个是因为定时器处在16位的功能由TH0,TL0来组成,TH0*256等于位移8个在加上TL0就是完整的
至于数组,完全可以替代
flag一定是程序里面哪里有用到
追问
void main()
{
delay(400);
init();
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
ET0=1;
while(1)
{
start();
while(!RX);
TR0=1;
while(RX); //两个while()的作用是什么?
TR0=0;
count();
delay(20);
}

}

“TH0*256等于位移8个在加上TL0就是完整的”这句话不太理解
追答
那个while是要来启动定时器的,定时器再去看下吧,定时器溢位产生中断
艾因蒂克
2024-11-28 广告
超声阵列探头是艾因蒂克科技(上海)有限公司在超声检测领域的一项重要技术产品。它采用先进的阵列设计,能够显著提高超声检测的精度和效率。该探头通过多个超声传感器的协同工作,实现对被检测物体的全方位、多角度扫描,从而更准确地发现物体内部的缺陷和问... 点击进入详情页
本回答由艾因蒂克提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式