標題:
單片機超聲波測距下面幾行代碼的意思求解
[打印本頁]
作者:
人生這里
時間:
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;
}
復(fù)制代碼
作者:
HC6800-ES-V2.0
時間:
2019-4-21 08:45
前三行,是將測量到的距離S,轉(zhuǎn)換為可顯示的各位數(shù),百位、十位、個位
我個人習慣這樣寫:
bai=s/100;
shi=(s%100)/10;
ge=(s%10)/1;
后四行是對1602的顯示進行操作:
第四行是向1602發(fā)命令,是指定顯示位置的意思
最后三行就是顯示內(nèi)容了,0x30的ASCII碼數(shù)字開始的位置,即將顯示值轉(zhuǎn)換為顯示碼。
作者:
孤劍酷
時間:
2019-4-21 14:31
取各個位的數(shù)值分別儲存為單個字符,在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
將數(shù)值分成百十個并顯示在1602上
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1