教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 法律文档 >

毕业论文-移专-陈龙-修改2 - 图文(6)

来源:网络收集 时间:2026-09-06
导读: 武汉工程大学邮电与信息工程学院毕业设计(论文) 第3章 系统软件设计 3.1 键盘输入的程序 while(temp!=0xf0) { delay(5); P3=0xfd; temp=P3; temp=temp while(temp!=0xf0) { temp=P3; switch(temp) { } while(temp

武汉工程大学邮电与信息工程学院毕业设计(论文)

第3章 系统软件设计

3.1 键盘输入的程序

while(temp!=0xf0) {

delay(5); P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) {

temp=P3; switch(temp) { }

while(temp!=0xf0) { }

temp=P3;

temp=temp&0xf0;//****0000 case 0xed:num=0;

break;

case 0xdd:num=1;

break;

case 0xbd:num=2;

break;

case 0x7d:num=3;

break;

20

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

在这里使用了_crol_函数,所以头文件中要增加#include,这里包括去抖和松手检测。经过检测以后通过不同的temp值,使num被赋予相应的数值,这样num就是要输入的一个数字。

3.2 DS18B20温度传感器设计

连接好电路以后,就可以开始设计DS18B20的软件环节。首先要初始化DS18B20以下为初始化程序。

void dsstart() {

unsigned int i; ds=0;

i=100; //拉低约800us, 符合协议要求的480us以上 while(i>0) i--;

ds=1; //产生一个上升沿, 进入等待应答状态 }

然后延时等待,回应。如以下子函数。 void dswait() {

unsigned int i;

while(ds); //等待应答信号 i=4;

while(i>0) i--;

while(~ds); //检测到应答脉冲 i=4;

while(i>0) i--; }

以下两个子函数为读取的数据时用到的。可以在温度采集读取时调用。 bit readbit()//读取一个bit

21

武汉工程大学邮电与信息工程学院毕业设计(论文)

{

unsigned int i; bit b; ds=0;

i++; //延时约8us, 符合协议要求至少保持1us ds=1; i++;

i++; //延时约16us, 符合协议要求的至少延时15us以上 b=ds;

i=8;

while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求 return b; }

uchar readbyte()//读取一个字节 { uint b; }

以下为写入命令程序。用于操控DS18B20。 void writeor(uchar order)//写入命令 {

uint b;

22

uchar date,a; b=0;date=0; while(b<8) { }

return date;

a=readbit();

date=(a<<7)|(date>>1); b++;

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

uchar a; bit bit2; b=0;

for(a=0;a<8;a++) { }

bit2=order&0x01; order>>=1; if(bit2)//写入1 { } else//0 { }

ds=0;

for(b=0;b<8;b++); ds=1; b++;b++; ds=0; b++,b++; ds=1;

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

当以上程序书写完成后,准备工作基本完成。现在只要调用这些函数,来操控DS18B20使其能够按协议规定将温度数据传送给单片机。软件实施方法如下:

void changetemp()//温度转变函数 {

dsstart(); dswait(); delay(1);

23

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

writeor(0xcc);// 跳过读序号列号的操作 writeor(0x44);// 启动温度转换 delay(1);

uint gettemp()//获取温度 { }

以上两个程序流程为,changetemp()子函数中先初始化DS18B20,芯片应答以后写入两个以字节为一个单位的命令,0xcc与0x44它们的作用分别为跳过读序号列号的操作和启动温度转换。然后温度获取gettemp()子函数完成。在gettemp()子函数中首先也是初始化DS18B20、等待应答,写入命令0xcc跳过读序号列号的操作和0xbe读取温度命令。使用readbyte()读取两个字节的数据,分

float tt; int temp; uchar geta,getb; dsstart(); dswait(); delay(1); writeor(0xcc);

writeor(0xbe);//读取温度命令 delay(2);

geta=readbyte();//读取两个字节 getb=readbyte(); temp=getb;

temp<<=8;//左移8位 temp=temp|geta;

tt=temp*0.0625;//将temp中的数转化成实际的温度值 temp=tt*10+(temp > 0 ? 0.5 : -0.5);//,变大十倍且 四舍五入 return(temp);

24

…… 此处隐藏:197字,全部文档内容请下载后查看。喜欢就下载吧 ……
毕业论文-移专-陈龙-修改2 - 图文(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/436270.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)