OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8947|回复: 10

基于STM32的温度记录仪,做一项课程设计,我只做出了温度显示,有没有大神能教我一下怎么弄温度记录。。

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-2
在线时间
0 小时
发表于 2015-1-2 21:10:51 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]RCC->APB2ENR|=1<<8; //使能PORTG口时钟 GPIOG->CRH&=0XFFFF0FFF;//PORTG.11 推挽输出 GPIOG->CRH|=0X00003000; GPIOG->ODR|=1<<11; DS18B20_Init(void) { RCC->APB2ENR|=1<<8; //使能PORTG口时钟 GPIOG->CRH&=0XFFFF0FFF;//PORTG.11 推挽输出 GPIOG->CRH|=0X00003000; GPIOG->ODR|=1<<11; //输出1 DS18B20_Rst(); return DS18B20_Check(); (2)DS18B20复位部分: void DS18B20_Rst(void) { DS18B20_IO_OUT(); //SET PA0 OUTPUT DS18B20_DQ_OUT=0; //拉低DQ delay_us(750); //拉低750us DS18B20_DQ_OUT=1; //DQ=1 delay_us(15); //15US } (3)检测是否有芯片部分: 返回1:未检测到DS18B20的存在 返回0:存在 u8 DS18B20_Check(void) { u8 retry=0; DS18B20_IO_IN();//SET PA0 INPUT while (DS18B20_DQ_IN&&retry<200) { retry++; delay_us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN&&retry<240) { retry++; delay_us(1); }; if(retry>=240)return 1; return 0; } (4)测量温度部分: 写一个字节到DS18B20 //dat:要写入的字节 void DS18B20_Write_Byte(u8 dat) { u8 j; u8 testb; DS18B20_IO_OUT();//SET PA0 OUTPUT; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_OUT=0;// Write 1 delay_us(2); DS18B20_DQ_OUT=1; delay_us(60); } else { DS18B20_DQ_OUT=0;// Write 0 delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); } } } //开始温度转换 void DS18B20_Start(void)// ds1820 start convert { DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0x44);// convert } (5)得到所测温度部分: short DS18B20_Get_Temp(void) { u8 temp; u8 TL,TH; short tem; DS18B20_Start (); // ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0xbe);// convert TL=DS18B20_Read_Byte(); // LSB TH=DS18B20_Read_Byte(); // MSB if(TH>7) { TH=~TH; TL=~TL; temp=0;//温度为负 }else temp=1;//温度为正 tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得底八位 tem=(float)tem*0.625;//转换 if(temp)return tem; //返回温度值 else return -tem; } (6)温度处理及显示部分: { if(t%10==0)//每100ms读取一次 { temperature=DS18B20_Get_Temp(); if(temperature<0) { LCD_ShowChar(60+40,150,'-',16,0); //显示负号 temperature=-temperature; //转为正数 }else LCD_ShowChar(60+40,150,' ',16,0); //去掉负号 LCD_ShowNum(60+40+8,150,temperature/10,2,16); //显示正数部分 LCD_ShowNum(60+40+32,150,temperature%10,1,16); //显示小数部分 } delay_ms(10); [/mw_shl_code]
这里是各个模块的设计,求助大神

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-1-2 22:38:32 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2011-1-20
在线时间
7 小时
发表于 2015-1-3 11:04:04 | 显示全部楼层
是否可通过串口把采集到的温度数据传给上位机,在上位机里用labview做曲线、记录等工作。这样如何?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-2
在线时间
0 小时
 楼主| 发表于 2015-1-3 11:52:03 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,我是这个学期刚学STM32的,对于各个模块还都不是很能非常熟练的运用和编程,求指导。
对于这个温度记录,我是想在实时温度显示的下一行,显示出比如说5秒之前的温度,这个怎么搞?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-2
在线时间
0 小时
 楼主| 发表于 2015-1-3 11:53:08 | 显示全部楼层
回复【3楼】master001:
---------------------------------
可是没学过labview  囧   ,我是这个学期刚开始学STM32的,好多东西不懂,能不能具体说说怎么实现。  

谢谢
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-2
在线时间
0 小时
 楼主| 发表于 2015-1-3 17:34:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,是用画线算法弄么?
回复

使用道具 举报

14

主题

225

帖子

3

精华

高级会员

Rank: 4

积分
623
金钱
623
注册时间
2014-7-8
在线时间
26 小时
发表于 2015-1-3 18:02:45 | 显示全部楼层
回复【4楼】Dictator:
---------------------------------
你又不用掉电保存。。。。直接一个数组装你最近几分钟的温度。。。不就行了。。。。这最简单
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-2
在线时间
0 小时
 楼主| 发表于 2015-1-3 18:13:03 | 显示全部楼层
回复【7楼】2013的弹子球:
---------------------------------
(⊙o⊙)…是在温度处理那里弄么?好难呀     囧
回复

使用道具 举报

14

主题

225

帖子

3

精华

高级会员

Rank: 4

积分
623
金钱
623
注册时间
2014-7-8
在线时间
26 小时
发表于 2015-1-3 21:58:17 | 显示全部楼层
回复【8楼】Dictator:
---------------------------------
不是啦,就存一个数你弄一个60个元素的数组,没装一个温度就丢掉一个。。就行了呗。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-1-4 00:54:10 | 显示全部楼层
回复【4楼】Dictator:
---------------------------------
一个个模块吃透,刚学就是要多多练习的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-1-14
在线时间
0 小时
发表于 2016-1-31 18:35:24 | 显示全部楼层
马上
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 03:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表