超声波测距18b20测温 12864显示全.docx

上传人:b****4 文档编号:4905057 上传时间:2022-12-11 格式:DOCX 页数:18 大小:19.07KB
下载 相关 举报
超声波测距18b20测温 12864显示全.docx_第1页
第1页 / 共18页
超声波测距18b20测温 12864显示全.docx_第2页
第2页 / 共18页
超声波测距18b20测温 12864显示全.docx_第3页
第3页 / 共18页
超声波测距18b20测温 12864显示全.docx_第4页
第4页 / 共18页
超声波测距18b20测温 12864显示全.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

超声波测距18b20测温 12864显示全.docx

《超声波测距18b20测温 12864显示全.docx》由会员分享,可在线阅读,更多相关《超声波测距18b20测温 12864显示全.docx(18页珍藏版)》请在冰豆网上搜索。

超声波测距18b20测温 12864显示全.docx

超声波测距18b20测温12864显示全

#include

#include

#defineunitunsignedint

#defineucharunsignedchar

ucharcodetable[]="超声波测距显示:

";

ucharcodetable1[]="距离:

";

ucharcodetablenum[]="温度:

";

ucharcodetable4[]="2010级15班我我";

ucharcodepicture[]={

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,

0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFE,0x3F,0x00,0x00,

0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0xFC,0x3F,0x00,0x00,

0xE0,0x00,0x00,0x00,0x00,0x00,0x3F,0xFE,0x1F,0xFF,0xFF,0xFF,0xF8,0x3F,0x00,0x00,

0xE0,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x1F,0xFF,0xFF,0xFF,0xF0,0x7F,0x00,0x00,

0xC0,0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0x1F,0x9F,0xFF,0xFF,0xF0,0x7F,0x00,0x00,

0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x3F,0x1F,0xFF,0xFF,0xF0,0x7F,0x00,0x00,

0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x3E,0x00,0x00,0x00,0x30,0x7F,0x00,0x00,

0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x3C,0x00,0x00,0x00,0x30,0x7F,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFC,0x3C,0x00,0x00,0x00,0x18,0x7F,0x00,0x00,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x07,0xFE,0x3C,0x00,0x00,0x00,0x1C,0x7F,0x00,0x00,

0xFF,0xFD,0xFF,0xFF,0xFF,0xFE,0x0F,0xFF,0x3C,0x00,0x00,0x00,0x1E,0x7F,0x00,0x00,

0xFF,0xF1,0xFF,0xFF,0xFF,0xFE,0x1F,0xFF,0x3E,0x00,0x00,0x00,0x1E,0x7F,0x00,0x00,

0xFF,0xF0,0x00,0x00,0x00,0x7C,0x3F,0xFF,0x3F,0x00,0x00,0x00,0x1E,0x7F,0x00,0x00,

0xFF,0xE0,0x00,0x00,0x00,0x3C,0x7F,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x00,0x00,0x00,0x3C,0x7F,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x00,0x00,0x00,0x3C,0x7F,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x00,0x00,0x00,0x3C,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x00,0x00,0x00,0x3F,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x3F,0xFF,0xC0,0x3F,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xFC,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xF8,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xF0,0x7F,0xFF,0xFF,0x0F,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x4F,0xFF,0xFC,0x03,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x0F,0xFF,0xF8,0x03,0xFF,0xFF,0x3F,0x1F,0xC7,0xF8,0xFE,0x7F,0x00,0x00,

0xFF,0xE0,0x07,0xFF,0xF0,0x03,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x1E,0x7F,0x00,0x00,

0xFF,0xE0,0x01,0xFF,0xE0,0x03,0xFF,0xFF,0x3E,0x00,0x00,0x00,0x1E,0x7F,0x00,0x00,

0xFF,0xF0,0x00,0x3F,0xC0,0x03,0xFF,0xFF,0x1E,0x00,0x00,0x00,0x0E,0x7F,0x00,0x00,

0xFF,0xF8,0x00,0x0F,0x80,0x07,0xFF,0xFF,0x1E,0x00,0x00,0x00,0x0E,0x7F,0x00,0x00,

0xFF,0xFC,0x00,0x03,0x80,0x1F,0xFF,0xFF,0x1E,0x00,0x00,0x00,0x0E,0x7F,0x00,0x00,

0xFF,0xFC,0x00,0x00,0x00,0x7F,0xFF,0xFF,0x1E,0x00,0x00,0x00,0x0E,0x7F,0x00,0x00,

0xFF,0x0C,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x1F,0x87,0xFF,0xFF,0xFE,0x3F,0x00,0x00,

0xFE,0x04,0x60,0x00,0x03,0xFF,0xFF,0xFF,0x1F,0x03,0xFF,0xFF,0xFE,0x3F,0x00,0x00,

0xFC,0x00,0x7C,0x00,0x07,0xFF,0xFF,0xFF,0x1E,0x03,0xFF,0xFF,0xFE,0x3F,0x00,0x00,

0xF8,0x00,0x7F,0x80,0x03,0xFF,0xFF,0xFF,0x3C,0x03,0xFF,0xFF,0xFE,0x3F,0x00,0x00,

0xF0,0x00,0x7F,0xE0,0x01,0xFF,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFE,0x3F,0x00,0x00,

0xE0,0x00,0x7F,0xE0,0x00,0xFF,0xFF,0xF3,0xF8,0x03,0xFF,0xFF,0xFE,0x3F,0x00,0x00,

0xE0,0x00,0x7F,0xC0,0x00,0x7F,0xFF,0xF3,0xF8,0x07,0xFF,0xFF,0xFE,0x7F,0x00,0x00,

0xE0,0x1C,0x7F,0xC0,0x80,0x3F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,

0xE0,0xFC,0x7F,0x81,0xE0,0x1F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,

0xE3,0xFC,0x7F,0x03,0xF0,0x0F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,

0xE7,0xFC,0x7F,0x07,0xFC,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,

0xFF,0xFC,0x7E,0x0F,0xFE,0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,

0xFF,0xFC,0x7C,0x1F,0xFF,0x01,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,

0xFF,0xFC,0x7C,0x3F,0xFF,0x80,0xFF,0xC1,0xFF,0x00,0x3F,0xFF,0xFC,0x07,0x00,0x00,

0xFF,0xFC,0x7C,0x3F,0xFF,0xC0,0xFF,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x00

};

sbitrs=P2^0;

sbitrw=P2^1;

sbiten=P2^2;

sbitpsb=P2^3;

sbitTX=P2^6;//发送

sbitRX=P2^7;//接收

sbitDQ=P3^6;//18b20

sbitBEEP=P3^7;

bitflag=0;

bitflag1;

uchartime;

unita;

voiddelay(unitz)

{

uniti,j;

for(i=z;i>0;i--)

for(j=110;j>0;j--);

}

voidbeep()//蜂鸣器响一声函数

{

uchari;

for(i=0;i<100;i++)

{

delay

(1);

BEEP=!

BEEP;//BEEP取反

}

BEEP=1;//关闭蜂鸣器

delay(250);//延时

}

voidcmd(ucharcmd)

{

rs=0;

rw=0;

P1=cmd;

delay

(2);

en=1;

delay

(2);

en=0;

}

voiddate(uchardate)

{

rs=1;

rw=0;

P1=date;

delay

(1);

en=1;

delay

(1);

en=0;

}

//显示汉字

voidpos(ucharx,uchary)//X为哪一行,Y为哪一列

{

ucharpos;

if(x==0)

{x=0x80;}

if(x==1)

{x=0x90;}

if(x==2)

{x=0x88;}

if(x==3)

{x=0x98;}

pos=x+y;//Y为1往右移一位,y自动加1

cmd(pos);//写入坐标

}

//图形初始化

voidpic_init()

{

psb=1;//并口方式

cmd(0x01);//清除lcd内容

delay(5);

cmd(0x30);//

delay(5);

cmd(0x34);//扩展指令动作(6)

delay(5);

cmd(0x36);//显示自定义图形(16)

delay(5);

}

voidinit()

{

psb=1;//并行口

TMOD=0X01;

TH0=0;

TL0=0;

//TH1=0;

//TL1=0;

//EA=1;

//ET1=1;

//TR1=1;

cmd(0x30);

delay(5);

cmd(0x0c);

delay(5);

cmd(0x01);

delay(5);

}

//液晶自定义显示

voiddispicture(ucharcode*add)//*add为指针类型!

{

unitx,y;

for(x=0;x<32;x++)//上半屏

{

cmd(0x80+x);//lie

cmd(0x80);//hang

for(y=0;y<16;y++)

{

date(*add);

add++;

}

}

for(x=0;x<32;x++)//下半屏

{

cmd(0x80+x);

cmd(0x88);

for(y=0;y<16;y++)

{

date(*add);

add++;

}

}

}

/*****************************************************

函数功能:

将DS18B20传感器初始化,读取应答信号

出口参数:

flag

***************************************************/

bitInit_DS18B20(void)

{

//储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在

DQ=1;//先将数据线拉高

for(time=0;time<2;time++);//略微延时约6微秒

DQ=0;//再将数据线从高拉低,要求保持480~960us

for(time=0;time<200;time++);//略微延时约600微秒

//以向DS18B20发出一持续480~960us的低电平复位脉冲

DQ=1;//释放数据线(将数据线拉高)

for(time=0;time<10;time++);

//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)

flag=DQ;//让单片机检测是否输出了存在脉冲(DQ=0表示存在)

for(time=0;time<200;time++);//延时足够长时间,等待存在脉冲输出完毕

return(flag1);//返回检测成功标志

}

/*****************************************************

函数功能:

从DS18B20读取一个字节数据

出口参数:

dat

***************************************************/

unsignedcharReadOneChar(void)

{

uchari=0;

uchardat;//储存读出的一个字节数据

for(i=0;i<8;i++)

{

DQ=1;//先将数据线拉高

_nop_();//等待一个机器周期

DQ=0;//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序

_nop_();//等待一个机器周期

DQ=1;//将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备

for(time=0;time<2;time++);//延时约6us,使主机在15us内采样

dat>>=1;

if(DQ==1)

dat|=0x80;//如果读到的数据是1,则将1存入dat

else

dat|=0x00;//如果读到的数据是0,则将0存入dat

//将单片机检测到的电平信号DQ存入r[i]

for(time=0;time<8;time++);//延时3us,两个读时序之间必须有大于1us的恢复期

}

return(dat);//返回读出的十六进制数据

}

/*****************************************************

函数功能:

向DS18B20写入一个字节数据

入口参数:

dat

***************************************************/

WriteOneChar(uchardat)

{

uchari=0;

for(i=0;i<8;i++)

{

DQ=1;//先将数据线拉高

_nop_();//等待一个机器周期

DQ=0;//将数据线从高拉低时即启动写时序

DQ=dat&0x01;//利用与运算取出要写的某位二进制数据,

//并将其送到数据线上等待DS18B20采样

for(time=0;time<10;time++)

;//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样

DQ=1;//释放数据线

for(time=0;time<1;time++)

;//延时3us,两个写时序间至少需要1us的恢复期

dat>>=1;//将dat中的各二进制位数据右移1位

}

for(time=0;time<4;time++);//稍作延时,给硬件一点反应时间

}

/*****************************************************

函数功能:

做好读温度的准备

***************************************************/

voidReadyReadTemp(void)

{

Init_DS18B20();//将DS18B20初始化

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动温度转换

delay(10);//转换一次需要延时一段时间

Init_DS18B20();//将DS18B20初始化

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0xBE);//读取温度寄存器,前两个分别是温度的低位和高位

}

voiddisplay()

{

uchari;

pos(0,0);

i=0;

while(table[i]!

='\0')

{

date(table[i]);

i++;

}

pos(1,0);

i=0;

while(table1[i]!

='\0')

{

date(table1[i]);

i++;

}

pos(2,0);

i=0;

while(tablenum[i]!

='\0')

{

date(tablenum[i]);

i++;

}

cmd(0x8d);

date('.');

cmd(0x8f);

date('c');

pos(3,0);

i=0;

while(table4[i]!

='\0')

{

date(table4[i]);

i++;

}

cmd(0x90+6);

date('.');

}

voidzhengshu(ucharx)

{

ucharj,k,l;//j,k,l分别储存温度的百位、十位和个位

j=x/100;//取百位

k=(x%100)/10;//取十位

l=x%10;//取个位

cmd(0x8b);

if(flag1==1)

{

date('-');//负温度时显示“—”

}

else{

date(0x30+j);//将百位数字的字符常量写入LCD

}

date(0x30+k);//将十位数字的字符常量写入LCD

date(0x30+l);//将个位数字的字符常量写入LCD

delay(5);//延时1ms给硬件一点反应时间

}

/*****************************************************

函数功能:

显示温度的小数数部分

入口参数:

x

***************************************************/

voidxiaoshu(ucharx)

{

cmd(0x8e);//写显示地址,将在第2行第11列开始显示

date(0x30+x);//将小数部分的第一位数字字符常量写入LCD

delay(5);//延时1ms给硬件一点反应时间

}

voidce()

{

ucharj,k,l,m;

unsignedints;

unsignedinttime;

time=TH0*256+TL0;//1us,1个时钟周期

TH0=0;

TL0=0;//测试距离等于(高电平时间*声速340m/s)/2;

//s=(time*1.7)/100;//算出来是CM!

!

!

要显示小数点以后的位,比如121.3的话

s=(time*1.7)/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1