proteus仿真stm32103r6,實現18B20溫度值在1602上顯示,可測量正負溫度。程序及仿真工程已上傳附件,利用proteus仿真18b20溫度為0和-0.1時返回值均為零,新手上路,請多指教。使用proteus8.8版本進行仿真。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
%XPQSU}YQ$WLI]QI9]4M4)9.png (24.3 KB, 下載次數: 179)
下載附件
原理圖
2019-5-16 00:23 上傳
4}M66@FAWRTRX4`BL{S9A02.png (106.74 KB, 下載次數: 120)
下載附件
時序
2019-5-16 00:23 上傳
H]WAD60E_4T[Q@3}}U%SGB6.png (25.55 KB, 下載次數: 136)
下載附件
原理圖
2019-5-16 00:23 上傳
單片機部分程序如下:
#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+1602+18B20.7z
(327.43 KB, 下載次數: 1805)
2019-5-16 05:31 上傳
點擊文件名下載附件
工程 下載積分: 黑幣 -5
|