标题:
单片机超声波测距下面几行代码的意思求解
[打印本页]
作者:
人生这里
时间:
2019-4-20 20:41
标题:
单片机超声波测距下面几行代码的意思求解
求助
bai=s/100;
shi=s/10%10;
ge=s%10%10;
Lcd1602_WriteCom(0x80+0x02);
Lcd1602_WriteData(0x30+bai);
Lcd1602_WriteData(0x30+shi);
Lcd1602_WriteData(0x30+ge);
这些啥意思啊
下面是完整单片机程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar shi,ge,bai;
int jia=0;
unsigned long int s=0;
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
sbit trig=P1^1;
sbit echo=P1^3;
void start()
{
trig=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
trig=0;
}
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
uchar Lcd1602_ReadBusy()
{
uchar temp;
RS=0;
RW=1;
_nop_();
P0=0xff;
_nop_();
E=1;
_nop_();
temp=P0;
_nop_();
E=0;
return (temp&0x80);
}
void Lcd1602_WriteCom(uchar com)
{
while(Lcd1602_ReadBusy());
RS=0;
RW=0;
_nop_();
P0=com;
_nop_();
E=1;
_nop_();
_nop_();
E=0;
_nop_();
_nop_();
}
void Lcd1602_WriteData(uchar dat)
{
while(Lcd1602_ReadBusy());
RS=1;
RW=0;
_nop_();
P0=dat;
_nop_();
E=1;
_nop_();
_nop_();
E=0;
_nop_();
_nop_();
}
void Lcd1602_init()
{
delay(15);
Lcd1602_WriteCom(0x38);
delay(5);
Lcd1602_WriteCom(0x38);
delay(5);
Lcd1602_WriteCom(0x38);
Lcd1602_WriteCom(0x0c);
Lcd1602_WriteCom(0x01);
Lcd1602_WriteCom(0x06);
}
void main()
{
while(1)
{
TMOD=0x01;
ET0=1;
EA=1;
TL0=0;
TH0=0;
start();
while(!echo);
TR0=1;
while(echo);
TR0=0;
s=TH0*256+TL0+jia;
jia=0;
s=s*0.017*12/11;
Lcd1602_init();
bai=s/100;
shi=s/10%10;
ge=s%10%10;
Lcd1602_WriteCom(0x80+0x02);
Lcd1602_WriteData(0x30+bai);
Lcd1602_WriteData(0x30+shi);
Lcd1602_WriteData(0x30+ge);
}
}
void Time0(void) interrupt 1
{
jia=jia+65536;
TH0=0;
TL0=0;
}
复制代码
作者:
HC6800-ES-V2.0
时间:
2019-4-21 08:45
前三行,是将测量到的距离S,转换为可显示的各位数,百位、十位、个位
我个人习惯这样写:
bai=s/100;
shi=(s%100)/10;
ge=(s%10)/1;
后四行是对1602的显示进行操作:
第四行是向1602发命令,是指定显示位置的意思
最后三行就是显示内容了,0x30的ASCII码数字开始的位置,即将显示值转换为显示码。
作者:
孤剑酷
时间:
2019-4-21 14:31
取各个位的数值分别储存为单个字符,在LCD1602上显示
作者:
hantu
时间:
2019-4-21 15:38
bai=s/100;
shi=s/10%10;
ge=s%10%10;
Lcd1602_WriteCom(0x80+0x02);
Lcd1602_WriteData(0x30+bai);
Lcd1602_WriteData(0x30+shi);
Lcd1602_WriteData(0x30+ge);
分别取得s的百位、十位、个位,然后在1602显示屏的第一行的第三个字符处开始显示它们。
作者:
15555
时间:
2019-4-22 14:19
将数值分成百十个并显示在1602上
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1