国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
基于STM32實現的溫度控制系統OLED顯示程序
[打印本頁]
作者:
路漫漫
時間:
2020-5-14 18:27
標題:
基于STM32實現的溫度控制系統OLED顯示程序
本系統采用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幣)
2020-5-14 18:26 上傳
點擊文件名下載附件
售價: 2 E幣
[記錄]
[
購買
]
1.png
(601.75 KB)
下載附件
2020-5-14 18:22 上傳
#include "stm32f10x.h"
#include "delay.h"
#include "LED.h"
#include "oled.h"
#include "ds18b20.h"
#include "usart.h"
#include "key.h"
#include "stm32f10x_tim.h"
unsigned int speed_count=0;//占空比計數器 50次一周期
static void NVIC_TIM2Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Set the Vector Table base address at 0x08000000 */
//NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
/* Enable the TIM5 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM2_Init(void)
{ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* Time base configuration */
//這個就是自動裝載的計數值,由于計數是從0開始的,周期為100us
TIM_TimeBaseStructure.TIM_Period = (100 - 1);//10kHz
// 這個就是預分頻系數,當由于為0時表示不分頻所以要減1
TIM_TimeBaseStructure.TIM_Prescaler = (72 - 1);//1MHz
// 高級應用本次不涉及。定義在定時器時鐘(CK_INT)頻率與數字濾波器(ETR,TIx)
// 使用的采樣頻率之間的分頻比例
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
//向上計數
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//初始化定時器5
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* Clear TIM5 update pending flag[清除TIM5溢出中斷標志] */
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
/* TIM IT enable */ //打開溢出中斷
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
/* TIM5 enable counter */
TIM_Cmd(TIM2, ENABLE); //計數器使能,開始工作
/* 中斷參數配置 */
NVIC_TIM2Configuration();
}
int main(void)
{
u8 a=0;u8 b=0; u8 c=0; int temp=0;
u8 set=20;
u8 shiwei=0;
u8 gewei=0;
float temperature;
Init_LEDpin();
delay_init();
OLED_Init(); //初始化OLED
DS18B20_Init(); //PC13
uart_init(9600);
KEY_Init();//按鍵初始化PA2 PA4
TIM2_Init();//電機運動PWM定時器
// OLED_ShowString(0,0, "");
OLED_ShowString(0,0," TEMP");
OLED_ShowString(0,32,"Temp1:");
OLED_ShowString(0,48,"Temp2:");
// OLED_ShowString(0,54,"TEMP");
OLED_Refresh_Gram();
while(1)
{
if( !S1)
{
delay_ms(10);
if(!S1)
{
while( !S1);
set+=1;
shiwei=set/10;
gewei=set%10;
OLED_ShowNum(63,48,shiwei,1,16);
OLED_ShowNum(71,48,gewei,1,16);
OLED_ShowChar(79,48,'.',16,1);
OLED_ShowNum(87,48,0,1,16);
OLED_ShowChar(95,48,'^',16,1);
OLED_ShowChar(103,48,'C',16,1);
OLED_Refresh_Gram();
printf("temp:");
}
}
if(!S2)
{
delay_ms(10);
if(!S2)
{
while(!S2);
set-=1;
shiwei=set/10;
gewei=set%10;
OLED_ShowNum(63,48,shiwei,1,16);
OLED_ShowNum(71,48,gewei,1,16);
OLED_ShowChar(79,48,'.',16,1);
OLED_ShowNum(87,48,0,1,16);
OLED_ShowChar(95,48,'^',16,1);
OLED_ShowChar(103,48,'C',16,1);
OLED_Refresh_Gram();
printf("temp:");
}
}
if( speed_count >= 500)
{
speed_count = 0;
temperature=DS18B20_Get_Temp();
temp=(int)temperature;
a=temp/100;
b=(temp/10)%10;
c=temp%10;
OLED_ShowNum(63,32,a,1,16);
OLED_ShowNum(71,32,b,1,16);
OLED_ShowChar(79,32,'.',16,1);
OLED_ShowNum(87,32,c,1,16);
OLED_ShowChar(95,32,'^',16,1);
OLED_ShowChar(103,32,'C',16,1);
OLED_ShowNum(63,48,a,1,16);
OLED_ShowNum(71,48,b,1,16);
OLED_ShowChar(79,48,'.',16,1);
OLED_ShowNum(87,48,c,1,16);
OLED_ShowChar(95,48,'^',16,1);
OLED_ShowChar(103,48,'C',16,1);
OLED_Refresh_Gram();
printf("temperature=%.2f \n",temperature/10);
}
}
}
詳細完整代碼見本文附件
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0