Skip to content

lvv630/Temperature-detection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Temperature-detection

Student'course design [main.c](https://github.com/user-attachments/files/27131091/main[24cxx.c](https://github.com/user-attachments/files/27131201/24cxx.c) .c) OLED.c DS18B20.c

#include "OLED.h" #include "delay.h"

typedef struct {

char c;
uint8_t d[6];

} Font6x8Item;

static const Font6x8Item g_font6x8[] = { {' ', {0x00,0x00,0x00,0x00,0x00,0x00}}, {'(', {0x00,0x1C,0x22,0x41,0x00,0x00}}, {')', {0x00,0x41,0x22,0x1C,0x00,0x00}}, {'-', {0x08,0x08,0x08,0x08,0x08,0x00}}, {'.', {0x00,0x00,0x60,0x60,0x00,0x00}}, {':', {0x00,0x36,0x36,0x00,0x00,0x00}}, {'0', {0x3E,0x51,0x49,0x45,0x3E,0x00}}, {'1', {0x00,0x42,0x7F,0x40,0x00,0x00}}, {'2', {0x42,0x61,0x51,0x49,0x46,0x00}}, {'3', {0x21,0x41,0x45,0x4B,0x31,0x00}}, {'4', {0x18,0x14,0x12,0x7F,0x10,0x00}}, {'5', {0x27,0x45,0x45,0x45,0x39,0x00}}, {'6', {0x3C,0x4A,0x49,0x49,0x30,0x00}}, {'7', {0x01,0x71,0x09,0x05,0x03,0x00}}, {'8', {0x36,0x49,0x49,0x49,0x36,0x00}}, {'9', {0x06,0x49,0x49,0x29,0x1E,0x00}}, {'B', {0x7F,0x49,0x49,0x49,0x36,0x00}}, {'C', {0x3E,0x41,0x41,0x41,0x22,0x00}}, {'D', {0x7F,0x41,0x41,0x22,0x1C,0x00}}, {'E', {0x7F,0x49,0x49,0x49,0x41,0x00}}, {'F', {0x7F,0x09,0x09,0x09,0x01,0x00}}, {'L', {0x7F,0x40,0x40,0x40,0x40,0x00}}, {'M', {0x7F,0x02,0x0C,0x02,0x7F,0x00}}, {'N', {0x7F,0x06,0x08,0x30,0x7F,0x00}}, {'O', {0x3E,0x41,0x41,0x41,0x3E,0x00}}, {'P', {0x7F,0x09,0x09,0x09,0x06,0x00}}, {'R', {0x7F,0x09,0x19,0x29,0x46,0x00}}, {'S', {0x26,0x49,0x49,0x49,0x32,0x00}}, {'T', {0x01,0x01,0x7F,0x01,0x01,0x00}}, {'a', {0x20,0x54,0x54,0x54,0x78,0x00}}, {'b', {0x7F,0x48,0x44,0x44,0x38,0x00}}, {'d', {0x38,0x44,0x44,0x48,0x7F,0x00}}, {'e', {0x38,0x54,0x54,0x54,0x18,0x00}}, {'m', {0x7C,0x04,0x18,0x04,0x78,0x00}}, {'o', {0x38,0x44,0x44,0x44,0x38,0x00}}, {'p', {0x7C,0x14,0x14,0x14,0x08,0x00}}, {'r', {0x7C,0x08,0x04,0x04,0x08,0x00}}, {'t', {0x04,0x3F,0x44,0x40,0x20,0x00}}, {'u', {0x3C,0x40,0x40,0x20,0x7C,0x00}}, {'v', {0x1C,0x20,0x40,0x20,0x1C,0x00}} };

static void I2C_Start(void); static void I2C_Stop(void); static void I2C_WriteByte(uint8_t data); static uint8_t I2C_WaitAck(void); static void OLED_WriteCmd(uint8_t cmd); static void OLED_WriteData(uint8_t data); static void OLED_SetPos(uint8_t x, uint8_t y); static void OLED_ShowChar6x8(uint8_t x, uint8_t y, char ch);

static void I2C_Start(void) { GPIO_SetBits(OLED_GPIO_PORT, OLED_SDA_PIN | OLED_SCL_PIN); delay_us(5); GPIO_ResetBits(OLED_GPIO_PORT, OLED_SDA_PIN); delay_us(5); GPIO_ResetBits(OLED_GPIO_PORT, OLED_SCL_PIN); }

static void I2C_Stop(void) { GPIO_ResetBits(OLED_GPIO_PORT, OLED_SDA_PIN); delay_us(5); GPIO_SetBits(OLED_GPIO_PORT, OLED_SCL_PIN); delay_us(5); GPIO_SetBits(OLED_GPIO_PORT, OLED_SDA_PIN); }

static void I2C_WriteByte(uint8_t data) { uint8_t i; for (i = 0; i < 8; i++) { if (data & 0x80U) { GPIO_SetBits(OLED_GPIO_PORT, OLED_SDA_PIN); } else { GPIO_ResetBits(OLED_GPIO_PORT, OLED_SDA_PIN); } data <<= 1; delay_us(2); GPIO_SetBits(OLED_GPIO_PORT, OLED_SCL_PIN); delay_us(4); GPIO_ResetBits(OLED_GPIO_PORT, OLED_SCL_PIN); delay_us(2); } GPIO_SetBits(OLED_GPIO_PORT, OLED_SDA_PIN); }

static uint8_t I2C_WaitAck(void) { uint8_t ack; GPIO_InitTypeDef gpio;

gpio.GPIO_Pin = OLED_SDA_PIN;
gpio.GPIO_Mode = GPIO_Mode_IPU;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(OLED_GPIO_PORT, &gpio);

GPIO_SetBits(OLED_GPIO_PORT, OLED_SCL_PIN);
delay_us(4);
ack = (GPIO_ReadInputDataBit(OLED_GPIO_PORT, OLED_SDA_PIN) == Bit_RESET) ? 1U : 0U;
GPIO_ResetBits(OLED_GPIO_PORT, OLED_SCL_PIN);

gpio.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(OLED_GPIO_PORT, &gpio);
return ack;

}

static void OLED_WriteCmd(uint8_t cmd) { I2C_Start(); I2C_WriteByte(OLED_I2C_ADDR); I2C_WaitAck(); I2C_WriteByte(0x00); I2C_WaitAck(); I2C_WriteByte(cmd); I2C_WaitAck(); I2C_Stop(); }

static void OLED_WriteData(uint8_t data) { I2C_Start(); I2C_WriteByte(OLED_I2C_ADDR); I2C_WaitAck(); I2C_WriteByte(0x40); I2C_WaitAck(); I2C_WriteByte(data); I2C_WaitAck(); I2C_Stop(); }

static void OLED_SetPos(uint8_t x, uint8_t y) { OLED_WriteCmd(0xB0U + y); OLED_WriteCmd(((x & 0xF0U) >> 4) | 0x10U); OLED_WriteCmd(x & 0x0FU); }

void OLED_Clear(void) { uint8_t page; uint8_t col; for (page = 0; page < 8; page++) { OLED_SetPos(0, page); for (col = 0; col < 128; col++) { OLED_WriteData(0x00); } } }

void OLED_ClearLine(uint8_t y) { uint8_t col; OLED_SetPos(0, y); for (col = 0; col < 128; col++) { OLED_WriteData(0x00); } }

static void OLED_ShowChar6x8(uint8_t x, uint8_t y, char ch) { uint8_t i; uint8_t found = 0; for (i = 0; i < (uint8_t)(sizeof(g_font6x8) / sizeof(g_font6x8[0])); i++) { if (g_font6x8[i].c == ch) { OLED_SetPos(x, y); OLED_WriteData(g_font6x8[i].d[0]); OLED_WriteData(g_font6x8[i].d[1]); OLED_WriteData(g_font6x8[i].d[2]); OLED_WriteData(g_font6x8[i].d[3]); OLED_WriteData(g_font6x8[i].d[4]); OLED_WriteData(g_font6x8[i].d[5]); found = 1; break; } } if (!found) { OLED_SetPos(x, y); for (i = 0; i < 6; i++) { OLED_WriteData(0x00); } } }

void OLED_ShowString(uint8_t x, uint8_t y, const char *str) { while ((*str != '\0') && (x <= 122U)) { OLED_ShowChar6x8(x, y, *str); x += 6U; str++; } }

void OLED_Init(void) { GPIO_InitTypeDef gpio; RCC_APB2PeriphClockCmd(OLED_GPIO_RCC, ENABLE);

gpio.GPIO_Pin = OLED_SCL_PIN | OLED_SDA_PIN;
gpio.GPIO_Mode = GPIO_Mode_Out_OD;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(OLED_GPIO_PORT, &gpio);
GPIO_SetBits(OLED_GPIO_PORT, OLED_SCL_PIN | OLED_SDA_PIN);

delay_ms(100);
OLED_WriteCmd(0xAE);
OLED_WriteCmd(0x20);
OLED_WriteCmd(0x10);
OLED_WriteCmd(0xB0);
OLED_WriteCmd(0xC8);
OLED_WriteCmd(0x00);
OLED_WriteCmd(0x10);
OLED_WriteCmd(0x40);
OLED_WriteCmd(0x81);
OLED_WriteCmd(0x7F);
OLED_WriteCmd(0xA1);
OLED_WriteCmd(0xA6);
OLED_WriteCmd(0xA8);
OLED_WriteCmd(0x3F);
OLED_WriteCmd(0xA4);
OLED_WriteCmd(0xD3);
OLED_WriteCmd(0x00);
OLED_WriteCmd(0xD5);
OLED_WriteCmd(0xF0);
OLED_WriteCmd(0xD9);
OLED_WriteCmd(0x22);
OLED_WriteCmd(0xDA);
OLED_WriteCmd(0x12);
OLED_WriteCmd(0xDB);
OLED_WriteCmd(0x20);
OLED_WriteCmd(0x8D);
OLED_WriteCmd(0x14);
OLED_WriteCmd(0xAF);
OLED_Clear();

}

#include "DS18B20.h" #include "delay.h"

static void DS18B20_PinOutOD(void) { GPIO_InitTypeDef gpio; gpio.GPIO_Pin = DS18B20_PIN; gpio.GPIO_Mode = GPIO_Mode_Out_OD; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DS18B20_PORT, &gpio); }

static void DS18B20_PinInPU(void) { GPIO_InitTypeDef gpio; gpio.GPIO_Pin = DS18B20_PIN; gpio.GPIO_Mode = GPIO_Mode_IPU; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DS18B20_PORT, &gpio); }

static uint8_t DS18B20_Reset(void) { uint8_t presence; DS18B20_PinOutOD(); GPIO_ResetBits(DS18B20_PORT, DS18B20_PIN); delay_us(500);

DS18B20_PinInPU();
delay_us(70);
presence = (GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN) == Bit_RESET) ? 1U : 0U;
delay_us(430);
return presence;

}

static void DS18B20_WriteBit(uint8_t bit) { DS18B20_PinOutOD(); GPIO_ResetBits(DS18B20_PORT, DS18B20_PIN); delay_us(2); if (bit) { DS18B20_PinInPU(); } delay_us(60); DS18B20_PinInPU(); delay_us(2); }

static uint8_t DS18B20_ReadBit(void) { uint8_t bit; DS18B20_PinOutOD(); GPIO_ResetBits(DS18B20_PORT, DS18B20_PIN); delay_us(2); DS18B20_PinInPU(); delay_us(10); bit = (GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN) == Bit_SET) ? 1U : 0U; delay_us(50); return bit; }

static void DS18B20_WriteByte(uint8_t dat) { uint8_t i; for (i = 0; i < 8; i++) { DS18B20_WriteBit(dat & 0x01U); dat >>= 1; } }

static uint8_t DS18B20_ReadByte(void) { uint8_t i; uint8_t dat = 0; for (i = 0; i < 8; i++) { dat >>= 1; if (DS18B20_ReadBit()) { dat |= 0x80U; } } return dat; }

void DS18B20_Init(void) { RCC_APB2PeriphClockCmd(DS18B20_RCC, ENABLE); DS18B20_PinInPU(); }

float DS18B20_ReadTemp(void) { uint8_t tempL; uint8_t tempH; int16_t raw;

if (!DS18B20_Reset()) {
    return -1000.0f;
}
DS18B20_WriteByte(0xCC);
DS18B20_WriteByte(0x44);
delay_ms(750);

if (!DS18B20_Reset()) {
    return -1000.0f;
}
DS18B20_WriteByte(0xCC);
DS18B20_WriteByte(0xBE);
tempL = DS18B20_ReadByte();
tempH = DS18B20_ReadByte();

raw = (int16_t)(((uint16_t)tempH << 8) | tempL);
return (float)raw * 0.0625f;

}

About

Student'course design

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors