找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2180|回复: 5
收起左侧

STM32单片机温度传感器DS18B20仿真程序 LCD1602显示

[复制链接]
ID:1059945 发表于 2023-1-4 00:07 | 显示全部楼层 |阅读模式
STM32温度传感器DS18B20仿真LCD1602显示实验,使用proteus8.12版本

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
51hei截图_20230103235542.png

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp-lcd1602.h"
  3. #include "delay.h"
  4. #include "sys.h"

  5. #include "ds18b20.h"
  6. #include <stdio.h>
  7. #include "math.h"


  8. short tem,tem1;
  9. u8 a,b,c,t;
  10. #ifdef __GNUC__
  11. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  12. #else
  13. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  14. #endif


  15. void Delay_DS18B20(int num)
  16. {
  17.         while(num--) ;
  18. }


  19. int main(void)
  20.        
  21. {

  22.         SystemCoreClockUpdate ();
  23.         LCD1602_Init();
  24.         LCD1602_ShowStr(2,0,"tempe=000.0C",13);
  25. //        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  26. //        GPIO_InitTypeDef g;
  27. //        g.GPIO_Mode = GPIO_Mode_Out_PP;
  28. //        g.GPIO_Speed = GPIO_Speed_10MHz;
  29. //        g.GPIO_Pin = GPIO_Pin_8  ;
  30. //        GPIO_Init(GPIOB,&g);
  31. //         GPIO_SetBits(GPIOB,GPIO_Pin_8);    //输出1

  32.    t=DS18B20_DQ_IN;
  33. while(t){
  34.                 DS18B20_IO_OUT();         //SET PG11 OUTPUT

  35.     DS18B20_DQ_OUT=0;         //拉低DQ
  36.           Delay_DS18B20(750);             //拉低750us
  37.     DS18B20_DQ_OUT=1;         //DQ=1
  38.           Delay_DS18B20(15);             //15US
  39.                 DS18B20_IO_IN();        //SET PG11 INPUT         
  40.     Delay_DS18B20(100);
  41.                 t=DS18B20_DQ_IN;
  42. //                 LCD_ShowNum(13,0,t);
  43. }
  44. tem=DS18B20_Get_Temp();
  45.                 Delay_DS18B20(1000000);

  46. while(1)
  47.         {       
  48.     tem=DS18B20_Get_Temp();
  49.                 if(        tem>0)
  50.                 {        a=tem/100;
  51.                 b=tem%100/10;
  52.                 c=tem%10;
  53.                 LCD_ShowChar(8,0,'+');
  54.         LCD_ShowNum(9,0,a);       
  55.         LCD_ShowNum(10,0,b);
  56.         LCD_ShowNum(12,0,c);
  57.                           
  58.                 }
  59.         else
  60.         {       
  61. //                tem1=(int)tem;
  62. //                tem1=abs(tem1);
  63.                 tem1=-(tem);
  64.                 tem1=tem1+1;
  65.                 a=tem1/100;
  66.                 b=tem1%100/10;
  67.                 c=tem1%10;
  68.         LCD_ShowChar(8,0,'-');
  69.         LCD_ShowNum(9,0,a);       
  70.         LCD_ShowNum(10,0,b);
  71.         LCD_ShowNum(12,0,c);
  72.                
  73.         }
  74.         Delay_DS18B20(100000);
  75.   }



  76. }

复制代码

Keil代码与Proteus8.12仿真下载: 仿真程序.7z (282.97 KB, 下载次数: 159)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:978416 发表于 2023-1-6 21:25 | 显示全部楼层
//IO方向设置

#define DS18B20_IO_IN()  {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=8<<0;}
#define DS18B20_IO_OUT() {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=3<<0;}
////IO操作函数                                                                                          
#define        DS18B20_DQ_OUT PBout(8) //数据端口        PA0
#define        DS18B20_DQ_IN  PBin(8)  //数据端口        PA0

你好,这个程序我试了一下没有成功,暂时不知道怎么回事,有个问题想问一下GPIOB->CRH|=8<<0;这里左移0,不应该是 定义PBout(0)吗
回复

使用道具 举报

ID:1059945 发表于 2023-1-6 22:51 | 显示全部楼层
egsresrhtrhrtst 发表于 2023-1-6 21:25
//IO方向设置

#define DS18B20_IO_IN()  {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=8CRH|=3

端口配置高寄存器(GPIOx_CRH)CRH是高哦也就是PB8,你可能寄存器配置这端口没配好,用仿真可以说明没问题
回复

使用道具 举报

ID:1059945 发表于 2023-1-6 22:52 | 显示全部楼层
egsresrhtrhrtst 发表于 2023-1-6 21:25
//IO方向设置

#define DS18B20_IO_IN()  {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=8CRH|=3

CRH高位从PB8开始不是0
回复

使用道具 举报

ID:978416 发表于 2023-1-7 19:28 | 显示全部楼层
xiaozou1234 发表于 2023-1-6 22:52
CRH高位从PB8开始不是0

感谢回复,这个程序我照着我现有的硬件改了一下,改好了以后仿真确实没问题,但是实际的硬件确不行,我加了个led闪烁也长亮没反应,但是在仿真里就正常闪烁
回复

使用道具 举报

ID:978416 发表于 2023-1-8 11:51 | 显示全部楼层
xiaozou1234 发表于 2023-1-6 22:52
CRH高位从PB8开始不是0

我感觉应该是我这上拉的问题,我这个开发板上拉的5v
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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