利用protues仿真温度采集系统,可以显示温度
元件清单:
序号 元器件 型号 标志
1 LCD1602液晶 LCD1602 LCD1
2 电阻 10K R1
3 STM32核心板 STM32_CORE U1
4 DS18B20温度芯片 DS18B20 U2
5 电位器 10k RP1
5 六脚自锁开关 / U3
6 覆铜板或万用板 / /
7 普通USB线_大头 / /
8 导线(只万用板有) / /
9 焊锡 / /
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
电路原理图如下:
单片机源程序如下:
- #include "stm32f10x.h"
- #include "bsp-lcd1602.h"
- #include "delay.h"
- #include "sys.h"
- #include "ds18b20.h"
- #include <stdio.h>
- #include "math.h"
- short tem,tem1;
- u8 a,b,c,t;
- #ifdef __GNUC__
- #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
- #else
- #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
- #endif
- void Delay_DS18B20(int num)
- {
- while(num--) ;
- }
- int main(void)
-
- {
- SystemCoreClockUpdate ();
- LCD1602_Init();
- LCD1602_ShowStr(2,0,"tempe=000.0C",13);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitTypeDef g;
- g.GPIO_Mode = GPIO_Mode_Out_PP;
- g.GPIO_Speed = GPIO_Speed_10MHz;
- g.GPIO_Pin = GPIO_Pin_8 ;
- GPIO_Init(GPIOB,&g);
- GPIO_SetBits(GPIOB,GPIO_Pin_8); //输出1
- t=DS18B20_DQ_IN;
- while(t){
- DS18B20_IO_OUT(); //SET PG11 OUTPUT
- DS18B20_DQ_OUT=0; //拉低DQ
- Delay_DS18B20(750); //拉低750us
- DS18B20_DQ_OUT=1; //DQ=1
- Delay_DS18B20(15); //15US
- DS18B20_IO_IN(); //SET PG11 INPUT
- Delay_DS18B20(100);
- t=DS18B20_DQ_IN;
- // LCD_ShowNum(13,0,t);
- }
- tem=DS18B20_Get_Temp();
- Delay_DS18B20(1000000);
- while(1)
- {
- tem=DS18B20_Get_Temp();
- if( tem>0)
- { a=tem/100;
- b=tem%100/10;
- c=tem%10;
- LCD_ShowChar(8,0,'+');
- LCD_ShowNum(9,0,a);
- LCD_ShowNum(10,0,b);
- LCD_ShowNum(12,0,c);
-
- }
- else
- {
- // tem1=(int)tem;
- // tem1=abs(tem1);
- tem1=-(tem);
- tem1=tem1+1;
- a=tem1/100;
- b=tem1%100/10;
- c=tem1%10;
- LCD_ShowChar(8,0,'-');
- LCD_ShowNum(9,0,a);
- LCD_ShowNum(10,0,b);
- LCD_ShowNum(12,0,c);
-
- }
- Delay_DS18B20(100000);
- }
- }
复制代码
所有资料51hei提供下载:
STM32 温度传感器DS18B20仿真.7z
(454.03 KB, 下载次数: 180)
|