임베디드/고추건조기

SSD1306 코드분석

twoweeks-within 2024. 12. 17. 15:28

 

uint8_t SSD1306_Init (void) {

if (HAL_I2C_IsDeviceReady(&H_I2C, SSD1306_I2C_ADDR, 1, 20000) != HAL_OK) {
>
/* Send slave address */
hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);

deAddress > DR

 

DR 쪽에 값을 넣어주면 그 후부터는 Hardware가 처리

 

I2C_HandleTypeDef hi2c2;

{

I2C_TypeDef *Instance;

}

typedef struct

{

__IO uint32_t CR1;

__IO uint32_t CR2;

__IO uint32_t OAR1;

__IO uint32_t OAR2;

__IO uint32_t DR;

__IO uint32_t SR1;

__IO uint32_t SR2;

__IO uint32_t CCR;

__IO uint32_t TRISE;

} I2C_TypeDef;

 

 

SSD1306_WRITECOMMAND(0xAE);

>

 

 

10101110 > Display OFF

10101111 > Display ON

 

SSD1306_UpdateScreen(); //display

기존에 버퍼에 담았던걸  > SSD1306_WRITECOMMAND

>

/* Write data to DR */

hi2c->Instance->DR = *hi2c->pBuffPtr;

I2C 통신으로 ssd1306으로 보냄

/* Write multi data */

ssd1306_I2C_WriteMulti(SSD1306_I2C_ADDR, 0x40, &SSD1306_Buffer[SSD1306_WIDTH * m], SSD1306_WIDTH);

 

 

 

SSD1306_DrawBitmap(0,0,ojtubelog3,128,64,1);

내가만든 비트맵

>>

void SSD1306_DrawPixel(uint16_t x, uint16_t y, SSD1306_COLOR_t color) {

 

/* Set color */

if (color == SSD1306_COLOR_WHITE) {

SSD1306_Buffer[x + (y / 8) * SSD1306_WIDTH] |= 1 << (y % 8);

} else { // 검은색일때

SSD1306_Buffer[x + (y / 8) * SSD1306_WIDTH] &= ~(1 << (y % 8));

}

}

 >> 버퍼에담음 > SSD1306_UpdateScreen();  

 

 

 

>>

 

1. SSD1306_Init > slave 에게 주소 보내고

2. SSD1306_WRITECOMMAND > 데이터값 보냄

'임베디드 > 고추건조기' 카테고리의 다른 글

ADC  (1) 2024.12.24
완성 -1-  (0) 2024.12.18
I2C hello world :)  (0) 2024.12.17
I2C 구조  (0) 2024.12.15
코드 분해  (0) 2024.12.14