- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
梧州学院
单片机课程设计报告
题 目:温度传感器
院 (系):信息与电子信息工程
专业班级:12物联网工程班
学生姓名:谢晋峰
学 号:201200210026
DS18B20温度传感器
目的
通过DS18B20温度传感器及时采集当前周边环境的温度值,并在数码管上显示。
所需器材
一个单片机,一个三八译码器和6个8位数码管,一个Ds18b20温度传感器。
内容与步骤
系统原理框架图
主函数流程图
LcdDisplay() 函数流程图
Ds18b20ReadTemp()函数流程图
(一)本设计内容分为两大部分:
1. DS18B20模块。DS18B20感受到当前的温度值并将其转化为数字信号存储在ROM中,然后单片机读取18B20中的温度信号。
2. 数码管显示模块。单片机将获取的温度信息按符号为、百位、十位、个位、十分位、百分位,分割,并保存在六个不同的变量中,然后让DS138译码器逐位控制数码管显示对应的数值。
(二)步骤如下:
初始化DS18B20
单片机向DS18B20写入跳过ROM命令,温度转化命令,温度寄存器命令
单片机读取18B20两个温度寄存器中的温度值
单片机将获取的温度值的符号、百位、十位、个位、十分位、百分位分别存在数组的对应元素中
通过38译码器动态扫描选定6个数码管,对应显示温度符号、百位、十位、个位、十分位、百分位的数值
(三) 本设计中18B20温度传感器的时序图如下:
代码
#includereg51.h
#define uchar unsigned char
#define uint unsigned int
/*在开头声明全局函数,待会就可以直接调用*/
void Delay1ms(uint );
uchar Ds18b20Init();
void Ds18b20WriteByte(uchar com);
uchar Ds18b20ReadByte();
void Ds18b20ChangTemp();
void Ds18b20ReadTempCom();
int Ds18b20ReadTemp();
sbit DSPORT=P3^7; //声明18B20使用的引脚
void Delay1ms(uint y) //延时函数
{
uint x;
for( ; y0; y--)
{
for(x=110; x0; x--);
}
}
uchar Ds18b20Init() //18B20的初始化
{
uchar i;
DSPORT = 0; //拉低总线
i = 70;
while(i--); //延时680微秒以上
DSPORT = 1; //释放总线
i = 0;
while(DSPORT); //一直等待18B20响应
}
void Ds18b20WriteByte(uchar dat) /*向18B20中写一个字节的数,从低位开始*/
{
uchar i, j;
for(j=0; j8; j++)
{
DSPORT = 0;
i++;
DSPORT = dat 0x01; //与1相与的数等于其本身
i=6;
while(i--);
DSPORT = 1;
dat = 1;
}
}
//从18B20中读取一个字节的数
uchar Ds18b20ReadByte()
{
uchar byte, bi;
uchar i, j;
for(j=8; j0; j--)
{
DSPORT = 0; //将总线拉低1微秒以上
i++;
DSPORT = 1; //又把其拉高,开启读模式
i++; //延时,等待稳定
i++;
bi = DSPORT; //读取总线上的数据
byte = (byte 1) | (bi 7); //从低位开始读
i = 4;
while(i--); //延时,起读取下个数据前稳定
}
return byte;
}
/*调用前面的写函数,向DS18B20中写入各种命令,以使其获得
文档评论(0)