找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3214|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

STM32單片機(jī)溫度傳感器DS18B20仿真程序 LCD1602顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
STM32溫度傳感器DS18B20仿真LCD1602顯示實(shí)驗(yàn),使用proteus8.12版本

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機(jī)源程序如下:
  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. }

復(fù)制代碼

Keil代碼與Proteus8.12仿真下載: 仿真程序.7z (282.97 KB, 下載次數(shù): 171)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:978416 發(fā)表于 2023-1-6 21:25 | 只看該作者
//IO方向設(shè)置

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

你好,這個(gè)程序我試了一下沒有成功,暫時(shí)不知道怎么回事,有個(gè)問題想問一下GPIOB->CRH|=8<<0;這里左移0,不應(yīng)該是 定義PBout(0)嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:1059945 發(fā)表于 2023-1-6 22:51 | 只看該作者
egsresrhtrhrtst 發(fā)表于 2023-1-6 21:25
//IO方向設(shè)置

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

端口配置高寄存器(GPIOx_CRH)CRH是高哦也就是PB8,你可能寄存器配置這端口沒配好,用仿真可以說明沒問題
回復(fù)

使用道具 舉報(bào)

地板
ID:1059945 發(fā)表于 2023-1-6 22:52 | 只看該作者
egsresrhtrhrtst 發(fā)表于 2023-1-6 21:25
//IO方向設(shè)置

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

CRH高位從PB8開始不是0
回復(fù)

使用道具 舉報(bào)

5#
ID:978416 發(fā)表于 2023-1-7 19:28 | 只看該作者
xiaozou1234 發(fā)表于 2023-1-6 22:52
CRH高位從PB8開始不是0

感謝回復(fù),這個(gè)程序我照著我現(xiàn)有的硬件改了一下,改好了以后仿真確實(shí)沒問題,但是實(shí)際的硬件確不行,我加了個(gè)led閃爍也長(zhǎng)亮沒反應(yīng),但是在仿真里就正常閃爍
回復(fù)

使用道具 舉報(bào)

6#
ID:978416 發(fā)表于 2023-1-8 11:51 | 只看該作者
xiaozou1234 發(fā)表于 2023-1-6 22:52
CRH高位從PB8開始不是0

我感覺應(yīng)該是我這上拉的問題,我這個(gè)開發(fā)板上拉的5v
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表