標(biāo)題:
STM8S105+SHT21溫濕度計(jì)源程序(編程平臺(tái)IAR)
[打印本頁(yè)]
作者:
trenlyn
時(shí)間:
2020-12-24 15:15
標(biāo)題:
STM8S105+SHT21溫濕度計(jì)源程序(編程平臺(tái)IAR)
本設(shè)計(jì)采用的是I2C總線,OLED屏、SHT21、DS1302連接在I2C總線上。一共使用了3個(gè)IO口,分別是PB5[I2C_SDA] ,PB4[I2C_SCL] ,PB3[用于DS1302的RET]。 硬件電路如圖。采用的是STM8S105K4最小系統(tǒng)板。
全部程序都在附件里,解壓后用IAR3.10版本以上可直接打開(kāi)。
制作出來(lái)的實(shí)物圖如下:
01.jpg
(147.49 KB, 下載次數(shù): 49)
下載附件
2020-12-24 15:06 上傳
單片機(jī)源程序如下:
#include <iostm8s105k4.h>
#include "delay.h"
#include "i2c.h"
#include "oled.h"
#include "sht2x.h"
#include "clock.h"
u8 year,month,date,hour,minute,second;
s16 sT;
u16 sRH;
u8 DATA[2];
void check_key(void);
void init_sys(void);
void HSE_CLK_INIT(void);
void Readclock(void);
void ShowTH(void);
void ShowClock(void);
void init_sys(void)
{
//------GPIO-----------------
PB_DDR_DDR3 = 1;
PB_CR1_C13 = 1;
PD_DDR_DDR5 = 1;
PD_CR1_C15 = 1;
//------UART-----------------
UART2_BRR1 = 0x34; //波特率9600 BRR = 0341H
UART2_BRR2 = 0x01; //
UART2_CR1 = 0x08; //一個(gè)起始位,8個(gè)數(shù)據(jù) UARTD=0;UART使能
UART2_CR2 = 0x08; //發(fā)送使能 TEN = 1;
UART2_CR3 = 0x00; //1個(gè)停止位 STOP[1:0]=00
}
void HSE_CLK_INIT(void) //外部時(shí)鐘使能
{
CLK_DeInit();
CLK_HSECmd(ENABLE);
while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY));
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
CLK_ClockSwitchCmd(ENABLE);
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO , CLK_SOURCE_HSE , DISABLE ,CLK_CURRENTCLOCKSTATE_ENABLE);
}
void Readclock(void)
{
uint8_t tmp;
tmp = DS1302Read(DS1302_SECOND_READ);
second = (tmp/16)*10+(tmp%16);
tmp = DS1302Read(DS1302_MINUTE_READ);
minute = (tmp/16)*10+(tmp%16);
tmp = DS1302Read(DS1302_HOUR_READ);
hour = (tmp/16)*10+(tmp%16);
tmp = DS1302Read(DS1302_DATE_READ);
date = (tmp/16)*10+(tmp%16);
tmp = DS1302Read(DS1302_MONTH_READ);
month = (tmp/16)*10+(tmp%16);
tmp = DS1302Read(DS1302_YEAR_READ);
year = (tmp/16)*10+(tmp%16);
}
void ShowTH(void)
{
u8 tmp;
OLED_ShowChinese(4, 0, 2, 16); //溫
OLED_ShowChinese(22, 0, 4, 16); //度
OLED_ShowChinese(104,0, 13,16); //℃
OLED_ShowChinese(4, 3, 3, 16); //濕
OLED_ShowChinese(22, 3, 4, 16); //度
OLED_ShowString (100,3,"%Rh",16); //%Rh
//顯示溫度值
if(sT>=100)
{
tmp = sT/10;
OLED_ShowString(52,0," ",16);
OLED_ShowNum(60,0,tmp,2,16);
OLED_ShowString(76,0,".",16);
tmp = sT%100;
OLED_ShowNum(84,0,tmp,1,16);
}
else
{
if(sT>=10)
{
tmp = sT/10;
OLED_ShowString(52,0," ",16);
OLED_ShowNum(68,0,tmp, 1,16);
OLED_ShowString(76,0,".",16);
tmp = sT%10;
OLED_ShowNum(84,0,tmp,1,16);
}
else
{
if(sT>=0)
{
tmp = sT*(-1);
OLED_ShowString(52,0," 0",16);
OLED_ShowString(76,0,".",16);
OLED_ShowNum(84,0,tmp,1,16);
}
else
{
if(sT>-10)
{
OLED_ShowString(60,0,"-",16);
tmp = 0;
OLED_ShowNum(68,0,tmp,1,16);
OLED_ShowString(76,0,".",16);
tmp = sT*(-1);
OLED_ShowNum(84,0,tmp,1,16);
}
else
{
if(sT>-100)
{
OLED_ShowString(60,0,"-",16);
tmp = sT/(-10);
OLED_ShowNum(68,0,tmp,1,16);
OLED_ShowString(76,0,".",16);
tmp = sT*(-1);
OLED_ShowNum(84,0,tmp,1,16);
}
else
{
OLED_ShowString(52,0,"-",16);
tmp = sT/(-10);
OLED_ShowNum(60,0,tmp,2,16);
OLED_ShowString(76,0,".",16);
tmp = sT%100*(-1);
OLED_ShowNum(84,0,tmp,1,16);
}
}
}
}
}
//顯示濕度值
tmp = sRH/10;
OLED_ShowNum (60,3,tmp,2,16);
OLED_ShowString(76,3,".", 16);
tmp = sRH%100;
OLED_ShowNum (84,3,tmp,1,16);
}
void ShowClock(void)
{
Readclock();
// (列,行,數(shù)字,位數(shù),大。
OLED_ShowNum(20,7,20, 2, 8);
OLED_ShowNum(32,7,year,2, 8);
OLED_ShowString(44,7,"/", 8);
OLED_ShowNum(50,7,month,2,8);
OLED_ShowString(62,7,"/", 8);
OLED_ShowNum(68,7,date,2, 8);
OLED_ShowNum(90,7,hour,2, 8);
OLED_ShowString(102,7,":",8);
OLED_ShowNum(108,7,minute,2,8);
}
void main(void)
{
init_sys();
HSE_CLK_INIT();
I2C_Initial();
Init_DS1302();
OLED_Init(); //初始化OLED
OLED_ColorTurn(0); //0正常顯示,1 反色顯示
OLED_DisplayTurn(0); //0正常顯示, 1 屏幕翻轉(zhuǎn)顯示
OLED_Clear();
SHT2x_SoftReset(); //溫濕度傳感器軟復(fù)位
rim();
while(1)
{
SHT2x_MeasurePoll(TEMP,DATA);
_delay_ms(10);
sT = SHT2x_CalcTemperatureC(DATA[0]<<8|DATA[1]);
_delay_ms(500);
SHT2x_MeasurePoll(HUMI,DATA);
_delay_ms(10);
sRH = SHT2x_CalcRH(DATA[0]<<8|DATA[1]);
ShowTH(); //顯示溫濕度
ShowClock(); //顯示日期時(shí)間
_delay_ms(500);
}
}
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有程序51hei提供下載:
溫濕度計(jì).7z
(721.68 KB, 下載次數(shù): 39)
2020-12-24 15:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1