国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

基于STM32實現的溫度控制系統OLED顯示程序

[復制鏈接]
樓主
路漫漫 發表于 2020-5-14 18:27:34 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
本系統采用STM32f103c8t6作為主控芯片,能對DS18B20采集到的信息進行解算,并將結果顯示在OLED顯示屏上面,并可以通過兩個按鍵實現設定溫度加減到設定溫度。
具體方案:
首先:OLED接線:CS:PA6  RST:PC15   RS:PA3  SCL:PB0   SDA:PB1   DS18B20接線:PC13  按鍵:PA2.PA4
完整代碼:
基于STM32實現的溫度控制系統OLED顯示.zip (358.47 KB, 售價: 2 E幣)
基于STM32實現的溫度控制系統OLED顯示程序 1.png

  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "LED.h"
  4. #include "oled.h"
  5. #include "ds18b20.h"
  6. #include "usart.h"
  7. #include "key.h"
  8. #include "stm32f10x_tim.h"


  9. unsigned int speed_count=0;//占空比計數器 50次一周期
  10. static void NVIC_TIM2Configuration(void)
  11. {
  12.     NVIC_InitTypeDef NVIC_InitStructure;

  13.     /* Set the Vector Table base address at 0x08000000 */
  14.     //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

  15.     /* Enable the TIM5 gloabal Interrupt */
  16.     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  17.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  18.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  19.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  20.     NVIC_Init(&NVIC_InitStructure);
  21. }
  22. void TIM2_Init(void)
  23. { TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  24.     /* TIM2 clock enable */
  25.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  26.     /* Time base configuration */
  27.     //這個就是自動裝載的計數值,由于計數是從0開始的,周期為100us
  28.     TIM_TimeBaseStructure.TIM_Period = (100 - 1);//10kHz
  29.     // 這個就是預分頻系數,當由于為0時表示不分頻所以要減1
  30.     TIM_TimeBaseStructure.TIM_Prescaler = (72 - 1);//1MHz
  31.     // 高級應用本次不涉及。定義在定時器時鐘(CK_INT)頻率與數字濾波器(ETR,TIx)
  32.     // 使用的采樣頻率之間的分頻比例
  33.     TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  34.     //向上計數
  35.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  36.     //初始化定時器5
  37.     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  38.     /* Clear TIM5 update pending flag[清除TIM5溢出中斷標志] */
  39.     TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

  40.     /* TIM IT enable */ //打開溢出中斷
  41.     TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

  42.     /* TIM5 enable counter */
  43.     TIM_Cmd(TIM2, ENABLE);  //計數器使能,開始工作

  44.     /* 中斷參數配置 */
  45.     NVIC_TIM2Configuration();
  46. }
  47. int main(void)
  48. {         
  49.         u8 a=0;u8 b=0; u8 c=0;         int temp=0;
  50.         u8 set=20;
  51.         u8 shiwei=0;
  52.         u8 gewei=0;
  53.         float temperature;
  54.         Init_LEDpin();
  55.         delay_init();
  56.         OLED_Init();                        //初始化OLED  
  57.     DS18B20_Init();         //PC13
  58.         uart_init(9600);
  59.         KEY_Init();//按鍵初始化PA2 PA4
  60.         TIM2_Init();//電機運動PWM定時器
  61. //         OLED_ShowString(0,0, "");  
  62.         OLED_ShowString(0,0,"     TEMP");  
  63.         OLED_ShowString(0,32,"Temp1:");   
  64.         OLED_ShowString(0,48,"Temp2:");
  65. //        OLED_ShowString(0,54,"TEMP");

  66.         OLED_Refresh_Gram();         
  67.   
  68.         while(1)
  69.         {      
  70.                
  71.       
  72.         if( !S1)
  73.                 {
  74.                         delay_ms(10);
  75.                         if(!S1)      
  76.                               
  77.                         {
  78.                                    while( !S1);
  79.                                    set+=1;      
  80.                                shiwei=set/10;
  81.                                    gewei=set%10;
  82.                                    OLED_ShowNum(63,48,shiwei,1,16);
  83.                                       OLED_ShowNum(71,48,gewei,1,16);
  84.                                    OLED_ShowChar(79,48,'.',16,1);
  85.                                    OLED_ShowNum(87,48,0,1,16);
  86.                                    OLED_ShowChar(95,48,'^',16,1);
  87.                                    OLED_ShowChar(103,48,'C',16,1);
  88.                                    OLED_Refresh_Gram();
  89.                                    printf("temp:");
  90.                         }
  91.                 }

  92.          if(!S2)
  93.                 {
  94.                         delay_ms(10);
  95.                         if(!S2)      
  96.                               
  97.                         {
  98.                                  while(!S2);
  99.                                    set-=1;      
  100.                                shiwei=set/10;
  101.                                    gewei=set%10;
  102.                                    OLED_ShowNum(63,48,shiwei,1,16);
  103.                                       OLED_ShowNum(71,48,gewei,1,16);
  104.                                    OLED_ShowChar(79,48,'.',16,1);
  105.                                    OLED_ShowNum(87,48,0,1,16);
  106.                                    OLED_ShowChar(95,48,'^',16,1);
  107.                                    OLED_ShowChar(103,48,'C',16,1);
  108.                                    OLED_Refresh_Gram();
  109.                                    printf("temp:");
  110.                         
  111.                                 }
  112.                         }
  113.       
  114.                     if( speed_count >= 500)
  115.                                         {
  116.                                                  speed_count = 0;
  117.                                                
  118.                                  
  119.                  temperature=DS18B20_Get_Temp();
  120.                         temp=(int)temperature;      
  121.                
  122.                                 a=temp/100;
  123.                                         b=(temp/10)%10;
  124.                                         c=temp%10;
  125.                                         OLED_ShowNum(63,32,a,1,16);
  126.                                       OLED_ShowNum(71,32,b,1,16);
  127.                                    OLED_ShowChar(79,32,'.',16,1);
  128.                                    OLED_ShowNum(87,32,c,1,16);
  129.                                    OLED_ShowChar(95,32,'^',16,1);
  130.                                    OLED_ShowChar(103,32,'C',16,1);
  131.                                                
  132.                                                
  133.                                                 OLED_ShowNum(63,48,a,1,16);
  134.                                       OLED_ShowNum(71,48,b,1,16);
  135.                                    OLED_ShowChar(79,48,'.',16,1);
  136.                                    OLED_ShowNum(87,48,c,1,16);
  137.                                    OLED_ShowChar(95,48,'^',16,1);
  138.                                    OLED_ShowChar(103,48,'C',16,1);
  139.                                                
  140.                                                
  141.                                    OLED_Refresh_Gram();
  142.                                printf("temperature=%.2f  \n",temperature/10);
  143.          
  144.                 }                                 
  145.          }

  146. }
  147. 詳細完整代碼見本文附件
復制代碼


您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 02:48

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表