parent
e562e43699
commit
c470ec2102
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"board_config.h": "c",
|
||||||
|
"mxc_sys.h": "c",
|
||||||
|
"mxc_delay.h": "c",
|
||||||
|
"system_func.h": "c",
|
||||||
|
"ssd1306_i2c.h": "c",
|
||||||
|
"font.h": "c"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,257 @@
|
|||||||
|
#include "app_gpio_i2c.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define APP_GPIO_I2C_SDA_PORT PORT_0
|
||||||
|
#define APP_GPIO_I2C_SDA_PIN PIN_9
|
||||||
|
#define APP_GPIO_I2C_SDA_OUTPUT App_Gpio_I2C_Port_Output(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN)
|
||||||
|
#define APP_GPIO_I2C_SDA_INPUT App_Gpio_I2C_Port_Input(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN)
|
||||||
|
#define APP_GPIO_I2C_SDA_H App_Gpio_I2C_Port_H(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN)
|
||||||
|
#define APP_GPIO_I2C_SDA_L App_Gpio_I2C_Port_L(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN)
|
||||||
|
#define APP_GPIO_I2C_READ App_Gpio_I2C_Port_Read(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN)
|
||||||
|
|
||||||
|
#define APP_GPIO_I2C_SCL_PORT PORT_0
|
||||||
|
#define APP_GPIO_I2C_SCL_PIN PIN_8
|
||||||
|
#define APP_GPIO_I2C_SCL_H App_Gpio_I2C_Port_H(APP_GPIO_I2C_SCL_PORT, APP_GPIO_I2C_SCL_PIN)
|
||||||
|
#define APP_GPIO_I2C_SCL_L App_Gpio_I2C_Port_L(APP_GPIO_I2C_SCL_PORT, APP_GPIO_I2C_SCL_PIN)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Gpio_I2C_Port_Output(uint32_t Port, uint32_t Pin);
|
||||||
|
static void App_Gpio_I2C_Port_Input(uint32_t Port, uint32_t Pin);
|
||||||
|
static bool App_Gpio_I2C_Port_Read(uint32_t Port, uint32_t Pin);
|
||||||
|
|
||||||
|
static void App_Gpio_I2C_Port_H(uint32_t Port, uint32_t Pin);
|
||||||
|
static void App_Gpio_I2C_Port_L(uint32_t Port, uint32_t Pin);
|
||||||
|
static void App_Gpio_I2C_Delay(void);
|
||||||
|
|
||||||
|
|
||||||
|
static uint32_t DelayCount;
|
||||||
|
|
||||||
|
|
||||||
|
void App_Gpio_I2C_Initialization(uint32_t Frequency)
|
||||||
|
{
|
||||||
|
SYS_ClockEnable(SYS_PERIPH_CLOCK_GPIO0);
|
||||||
|
App_Gpio_I2C_Port_Output(APP_GPIO_I2C_SDA_PORT, APP_GPIO_I2C_SDA_PIN);
|
||||||
|
App_Gpio_I2C_Port_Output(APP_GPIO_I2C_SCL_PORT, APP_GPIO_I2C_SCL_PIN);
|
||||||
|
|
||||||
|
APP_GPIO_I2C_SDA_H;
|
||||||
|
APP_GPIO_I2C_SCL_H;
|
||||||
|
|
||||||
|
DelayCount = (1000000 / Frequency) + 1;
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void App_Gpio_I2C_Start(void)
|
||||||
|
{
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SDA_H;
|
||||||
|
APP_GPIO_I2C_SCL_H;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SDA_L;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SCL_L;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool App_Gpio_I2C_WriteData(uint8_t TxData)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
bool bRet;
|
||||||
|
APP_GPIO_I2C_SDA_OUTPUT;
|
||||||
|
|
||||||
|
for(i = 0 ; i < 8 ; i++)
|
||||||
|
{
|
||||||
|
if((TxData & 0x80)==0x80)
|
||||||
|
{
|
||||||
|
APP_GPIO_I2C_SDA_H;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
APP_GPIO_I2C_SDA_L;
|
||||||
|
}
|
||||||
|
TxData<<=1;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SCL_H;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SCL_L;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
}
|
||||||
|
APP_GPIO_I2C_SDA_INPUT;
|
||||||
|
APP_GPIO_I2C_SCL_H;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
bRet = APP_GPIO_I2C_READ;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SCL_L;
|
||||||
|
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool App_Gpio_I2C_ReadData(uint8_t* pRxData, bool isAck)
|
||||||
|
{
|
||||||
|
bool bRet;
|
||||||
|
uint8_t i;
|
||||||
|
uint8_t Ret = 0x00;
|
||||||
|
|
||||||
|
APP_GPIO_I2C_SDA_INPUT;
|
||||||
|
|
||||||
|
for(i = 0 ; i < 8 ; i++)
|
||||||
|
{
|
||||||
|
APP_GPIO_I2C_SCL_H;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
Ret <<= 1;
|
||||||
|
if(APP_GPIO_I2C_READ != 0)
|
||||||
|
{
|
||||||
|
Ret |= 0x01;
|
||||||
|
}
|
||||||
|
APP_GPIO_I2C_SCL_L;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
}
|
||||||
|
|
||||||
|
APP_GPIO_I2C_SDA_OUTPUT;
|
||||||
|
|
||||||
|
if(isAck == true)
|
||||||
|
{
|
||||||
|
APP_GPIO_I2C_SDA_L;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
APP_GPIO_I2C_SDA_H;
|
||||||
|
}
|
||||||
|
|
||||||
|
APP_GPIO_I2C_SCL_H;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SCL_L;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
void App_Gpio_I2C_Stop(void)
|
||||||
|
{
|
||||||
|
APP_GPIO_I2C_SDA_L;
|
||||||
|
APP_GPIO_I2C_SDA_OUTPUT;
|
||||||
|
APP_GPIO_I2C_SDA_L;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SCL_H;
|
||||||
|
App_Gpio_I2C_Delay();
|
||||||
|
APP_GPIO_I2C_SDA_H;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool App_Gpio_I2C_Write(uint8_t Address, uint8_t* pWriteData, uint32_t TxSize)
|
||||||
|
{
|
||||||
|
bool bRet;
|
||||||
|
uint16_t i;
|
||||||
|
App_Gpio_I2C_Start();
|
||||||
|
bRet = App_Gpio_I2C_WriteData(Address << 1);
|
||||||
|
|
||||||
|
if(bRet == false)
|
||||||
|
{
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = 0 ; i < TxSize ; i++)
|
||||||
|
{
|
||||||
|
bRet = App_Gpio_I2C_WriteData(pWriteData[i]);
|
||||||
|
if(bRet == false)
|
||||||
|
{
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool App_Gpio_I2C_Read(uint8_t Address, uint8_t* pReadData, uint32_t RxSize)
|
||||||
|
{
|
||||||
|
bool bRet;
|
||||||
|
|
||||||
|
uint16_t i;
|
||||||
|
App_Gpio_I2C_Start();
|
||||||
|
bRet = App_Gpio_I2C_WriteData((Address << 1) | 1);
|
||||||
|
if(bRet == false)
|
||||||
|
{
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for(i = 0 ; i < RxSize-1 ; i++)
|
||||||
|
{
|
||||||
|
bRet = App_Gpio_I2C_ReadData(&pReadData[i], true);
|
||||||
|
if(bRet == false)
|
||||||
|
{
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bRet = App_Gpio_I2C_ReadData(&pReadData[i], false);
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Gpio_I2C_Port_Output(uint32_t Port, uint32_t Pin)
|
||||||
|
{
|
||||||
|
gpio_cfg_t gpio_out;
|
||||||
|
|
||||||
|
gpio_out.port = Port;
|
||||||
|
gpio_out.mask = Pin;
|
||||||
|
gpio_out.pad = GPIO_PAD_NONE;
|
||||||
|
gpio_out.func = GPIO_FUNC_OUT;
|
||||||
|
GPIO_Config(&gpio_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void App_Gpio_I2C_Port_Input(uint32_t Port, uint32_t Pin)
|
||||||
|
{
|
||||||
|
gpio_cfg_t gpio_out;
|
||||||
|
|
||||||
|
gpio_out.port = Port;
|
||||||
|
gpio_out.mask = Pin;
|
||||||
|
gpio_out.pad = GPIO_PAD_NONE;
|
||||||
|
gpio_out.func = GPIO_FUNC_IN;
|
||||||
|
GPIO_Config(&gpio_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void App_Gpio_I2C_Port_H(uint32_t Port, uint32_t Pin)
|
||||||
|
{
|
||||||
|
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(Port);
|
||||||
|
gpio->out_set = Pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void App_Gpio_I2C_Port_L(uint32_t Port, uint32_t Pin)
|
||||||
|
{
|
||||||
|
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(Port);
|
||||||
|
gpio->out_clr = Pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool App_Gpio_I2C_Port_Read(uint32_t Port, uint32_t Pin)
|
||||||
|
{
|
||||||
|
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(Port);
|
||||||
|
return (gpio->in & Pin) ? false : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Gpio_I2C_Delay(void)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
for(i = 0 ; i < DelayCount ; i++)
|
||||||
|
asm("NOP");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
/** \file app_gpio_i2c.h */
|
||||||
|
#if !defined(APP_GPIO_I2C_H__735764A1_7403_4365_8691_3F84C6129F50__INCLUDED_)
|
||||||
|
#define APP_GPIO_I2C_H__735764A1_7403_4365_8691_3F84C6129F50__INCLUDED_
|
||||||
|
|
||||||
|
#include "board_config.h"
|
||||||
|
|
||||||
|
void App_Gpio_I2C_Initialization(uint32_t Frequency);
|
||||||
|
void App_Gpio_I2C_Start(void);
|
||||||
|
bool App_Gpio_I2C_WriteData(uint8_t TxData);
|
||||||
|
bool App_Gpio_I2C_ReadData(uint8_t* pRxData, bool isAck);
|
||||||
|
void App_Gpio_I2C_Stop(void);
|
||||||
|
bool App_Gpio_I2C_Write(uint8_t Address, uint8_t* pWriteData, uint32_t TxSize);
|
||||||
|
bool App_Gpio_I2C_Read(uint8_t Address, uint8_t* pReadData, uint32_t RxSize);
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,126 @@
|
|||||||
|
#include "app_gpio_led.h"
|
||||||
|
#include "sw_timer.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Led_Output_Process(void);
|
||||||
|
static void App_Led_Off(APP_LED_LIST app_led_index);
|
||||||
|
static void App_Led_On(APP_LED_LIST app_led_index);
|
||||||
|
|
||||||
|
|
||||||
|
typedef void (*APP_LED_ON_OFF_FUNC)(APP_LED_LIST gpio_led_index);
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t Port;
|
||||||
|
uint32_t Pin;
|
||||||
|
gpio_pad_t Pull_updown;
|
||||||
|
|
||||||
|
APP_LED_MODE Mode;
|
||||||
|
bool isLedOn;
|
||||||
|
uint32_t nCheckTime;
|
||||||
|
uint32_t nOnTime;
|
||||||
|
uint32_t nOffTime;
|
||||||
|
|
||||||
|
APP_LED_ON_OFF_FUNC LedOnFunction;
|
||||||
|
APP_LED_ON_OFF_FUNC LedOffunction;
|
||||||
|
}APP_STATE_LED_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
static APP_STATE_LED_INFO App_Led_Ctrl_Info[APP_LED_MAX] =
|
||||||
|
{
|
||||||
|
{PORT_0, PIN_13, GPIO_PAD_NONE, APP_LED_MODE_OFF, false, 0, 0, 0, App_Led_On, App_Led_Off},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Led_On(APP_LED_LIST app_led_index);
|
||||||
|
static void App_Led_Off(APP_LED_LIST app_led_index);
|
||||||
|
|
||||||
|
void App_Led_Initialization(void)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
gpio_cfg_t gpio_out;
|
||||||
|
|
||||||
|
SYS_ClockEnable(SYS_PERIPH_CLOCK_GPIO0);
|
||||||
|
|
||||||
|
for(i = 0 ; i < APP_LED_MAX ; i++)
|
||||||
|
{
|
||||||
|
gpio_out.port = App_Led_Ctrl_Info[i].Port;
|
||||||
|
gpio_out.mask = App_Led_Ctrl_Info[i].Pin;
|
||||||
|
gpio_out.pad = App_Led_Ctrl_Info[i].Pull_updown;
|
||||||
|
gpio_out.func = GPIO_FUNC_OUT;
|
||||||
|
GPIO_Config(&gpio_out);
|
||||||
|
App_Led_Off((APP_LED_LIST)i);
|
||||||
|
}
|
||||||
|
|
||||||
|
SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 1, App_Led_Output_Process);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void App_Led_OutputSet(APP_LED_LIST app_led_index, APP_LED_MODE app_led_mode, uint32_t OnTime, uint32_t OffTime)
|
||||||
|
{
|
||||||
|
App_Led_Ctrl_Info[app_led_index].Mode = app_led_mode;
|
||||||
|
App_Led_Ctrl_Info[app_led_index].isLedOn = true;
|
||||||
|
App_Led_Ctrl_Info[app_led_index].nCheckTime = millis();
|
||||||
|
App_Led_Ctrl_Info[app_led_index].nOnTime = OnTime;
|
||||||
|
App_Led_Ctrl_Info[app_led_index].nOffTime = OffTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
static void App_Led_Output_Process(void)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
APP_STATE_LED_INFO* pControlInfo;
|
||||||
|
for(i = 0 ; i < APP_LED_MAX ; i++)
|
||||||
|
{
|
||||||
|
pControlInfo = &App_Led_Ctrl_Info[i];
|
||||||
|
switch (pControlInfo->Mode)
|
||||||
|
{
|
||||||
|
case APP_LED_MODE_OFF:
|
||||||
|
pControlInfo->LedOffunction((APP_LED_LIST)i);
|
||||||
|
break;
|
||||||
|
case APP_LED_MODE_ON:
|
||||||
|
pControlInfo->LedOnFunction((APP_LED_LIST)i);
|
||||||
|
break;
|
||||||
|
case APP_LED_MODE_TOGGLE:
|
||||||
|
if(pControlInfo->isLedOn == true)
|
||||||
|
{
|
||||||
|
if((millis() - pControlInfo->nCheckTime) > pControlInfo->nOnTime )
|
||||||
|
{
|
||||||
|
pControlInfo->nCheckTime = millis();
|
||||||
|
pControlInfo->isLedOn = false;
|
||||||
|
}
|
||||||
|
pControlInfo->LedOnFunction((APP_LED_LIST)i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if((millis() - pControlInfo->nCheckTime) > pControlInfo->nOffTime )
|
||||||
|
{
|
||||||
|
pControlInfo->nCheckTime = millis();
|
||||||
|
pControlInfo->isLedOn = true;
|
||||||
|
}
|
||||||
|
pControlInfo->LedOffunction((APP_LED_LIST)i);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void App_Led_On(APP_LED_LIST app_led_index)
|
||||||
|
{
|
||||||
|
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(App_Led_Ctrl_Info[app_led_index].Port);
|
||||||
|
gpio->out_set = App_Led_Ctrl_Info[app_led_index].Pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void App_Led_Off(APP_LED_LIST app_led_index)
|
||||||
|
{
|
||||||
|
mxc_gpio_regs_t *gpio = MXC_GPIO_GET_GPIO(App_Led_Ctrl_Info[app_led_index].Port);
|
||||||
|
gpio->out_clr = App_Led_Ctrl_Info[app_led_index].Pin;
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
/** \file app_gpio_led.h */
|
||||||
|
#if !defined(APP_GPIO_LED_H__2317E4D0_AD00_4A5E_A3DE_D2D8A0546351__INCLUDED_)
|
||||||
|
#define APP_GPIO_LED_H__2317E4D0_AD00_4A5E_A3DE_D2D8A0546351__INCLUDED_
|
||||||
|
|
||||||
|
#include "board_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
APP_LED_1,
|
||||||
|
APP_LED_MAX,
|
||||||
|
}APP_LED_LIST;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
APP_LED_MODE_OFF,
|
||||||
|
APP_LED_MODE_ON,
|
||||||
|
APP_LED_MODE_TOGGLE,
|
||||||
|
}APP_LED_MODE;
|
||||||
|
|
||||||
|
|
||||||
|
void App_Led_Initialization(void);
|
||||||
|
void App_Led_OutputSet(APP_LED_LIST app_led_index, APP_LED_MODE app_led_mode, uint32_t OnTime, uint32_t OffTime);
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,114 @@
|
|||||||
|
#include "app_ring_buffer.h"
|
||||||
|
|
||||||
|
// 큐 초기화
|
||||||
|
bool RingBuffer_Initialization(RING_BUFFER* pRingbuffer, bool isOverWrite, uint32_t buffer_size, uint8_t* pBuffer)
|
||||||
|
{
|
||||||
|
if(buffer_size == 0 || pRingbuffer == NULL || pBuffer == NULL)
|
||||||
|
return false;
|
||||||
|
pRingbuffer->pBuffer = pBuffer;
|
||||||
|
pRingbuffer->BufferSize = buffer_size;
|
||||||
|
pRingbuffer->isOverWrite = isOverWrite;
|
||||||
|
pRingbuffer->front = -1;
|
||||||
|
pRingbuffer->rear = -1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RingBuffer_Clear(RING_BUFFER* pRingbuffer)
|
||||||
|
{
|
||||||
|
if(pRingbuffer == NULL || pRingbuffer->BufferSize == 0 || pRingbuffer->pBuffer == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
pRingbuffer->front = -1;
|
||||||
|
pRingbuffer->rear = -1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RingBuffer_isEmpty(RING_BUFFER* pRingbuffer)
|
||||||
|
{
|
||||||
|
return (pRingbuffer->front == -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RingBuffer_isFull(RING_BUFFER* pRingbuffer)
|
||||||
|
{
|
||||||
|
return ((pRingbuffer->front == 0 && pRingbuffer->rear == (pRingbuffer->BufferSize - 1)) || (pRingbuffer->front == (pRingbuffer->rear + 1)));
|
||||||
|
}
|
||||||
|
// 큐에 요소를 추가 (enqueue)
|
||||||
|
bool RingBuffer_Enqueue(RING_BUFFER* pRingbuffer, uint8_t value)
|
||||||
|
{
|
||||||
|
uint8_t temp;
|
||||||
|
if (RingBuffer_isFull(pRingbuffer))
|
||||||
|
{
|
||||||
|
if(pRingbuffer->isOverWrite == false)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
RingBuffer_Dequeue(pRingbuffer, &temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pRingbuffer->front == -1)
|
||||||
|
{
|
||||||
|
pRingbuffer->front = 0;
|
||||||
|
}
|
||||||
|
pRingbuffer->rear = (pRingbuffer->rear + 1) % pRingbuffer->BufferSize;
|
||||||
|
pRingbuffer->pBuffer[pRingbuffer->rear] = value;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 큐에서 요소를 제거하고 반환 (dequeue)
|
||||||
|
bool RingBuffer_Dequeue(RING_BUFFER* pRingbuffer, uint8_t* pRetValue)
|
||||||
|
{
|
||||||
|
if (RingBuffer_isEmpty(pRingbuffer))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*pRetValue = pRingbuffer->pBuffer[pRingbuffer->front];
|
||||||
|
if (pRingbuffer->front == pRingbuffer->rear)
|
||||||
|
{
|
||||||
|
pRingbuffer->front = -1;
|
||||||
|
pRingbuffer->rear = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pRingbuffer->front = (pRingbuffer->front + 1) % pRingbuffer->BufferSize;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RingBuffer_GetData(RING_BUFFER* pRingbuffer, uint8_t* pRetValue)
|
||||||
|
{
|
||||||
|
*pRetValue = pRingbuffer->pBuffer[pRingbuffer->front];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RingBuffer_PopData(RING_BUFFER* pRingbuffer)
|
||||||
|
{
|
||||||
|
if (pRingbuffer->front == pRingbuffer->rear)
|
||||||
|
{
|
||||||
|
pRingbuffer->front = -1;
|
||||||
|
pRingbuffer->rear = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pRingbuffer->front = (pRingbuffer->front + 1) % pRingbuffer->BufferSize;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t RingBuffer_Get_DataSize(RING_BUFFER* pRingbuffer)
|
||||||
|
{
|
||||||
|
if (RingBuffer_isEmpty(pRingbuffer))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (pRingbuffer->front <= pRingbuffer->rear)
|
||||||
|
{
|
||||||
|
return (pRingbuffer->rear - pRingbuffer->front + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (pRingbuffer->BufferSize - pRingbuffer->front + pRingbuffer->rear + 1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
/** \file ring_buffer.h */
|
||||||
|
#if !defined(APP_RING_BUFFER_H__002F3B3E_9C40_4947_A8EE_139D5ADFF045__INCLUDED_)
|
||||||
|
#define APP_RING_BUFFER_H__002F3B3E_9C40_4947_A8EE_139D5ADFF045__INCLUDED_
|
||||||
|
|
||||||
|
#include "define.h"
|
||||||
|
#include "board_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ring_buffer
|
||||||
|
{
|
||||||
|
uint8_t* pBuffer;
|
||||||
|
uint32_t BufferSize;
|
||||||
|
bool isOverWrite;
|
||||||
|
int32_t front, rear;
|
||||||
|
}RING_BUFFER;
|
||||||
|
|
||||||
|
bool RingBuffer_Initialization(RING_BUFFER* pRingbuffer, bool isOverWrite, uint32_t buffer_size, uint8_t* pBuffer);
|
||||||
|
bool RingBuffer_Clear(RING_BUFFER* pRingbuffer);
|
||||||
|
bool RingBuffer_isEmpty(RING_BUFFER* pRingbuffer);
|
||||||
|
bool RingBuffer_isFull(RING_BUFFER* pRingbuffer);
|
||||||
|
bool RingBuffer_Enqueue(RING_BUFFER* pRingbuffer, uint8_t value) ;
|
||||||
|
bool RingBuffer_Dequeue(RING_BUFFER* pRingbuffer, uint8_t* pRetValue);
|
||||||
|
bool RingBuffer_GetData(RING_BUFFER* pRingbuffer, uint8_t* pRetValue);
|
||||||
|
bool RingBuffer_PopData(RING_BUFFER* pRingbuffer);
|
||||||
|
uint32_t RingBuffer_Get_DataSize(RING_BUFFER* pRingbuffer);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,159 @@
|
|||||||
|
#include "app_uart.h"
|
||||||
|
#include "app_ring_buffer.h"
|
||||||
|
#include "sw_timer.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static uart_req_t App_Uart_Read_Req;;
|
||||||
|
|
||||||
|
|
||||||
|
static uint8_t TxBuffer[APP_UART_TX_BUFFER_SIZE];
|
||||||
|
static uint8_t RxBuffer[APP_UART_RX_BUFFER_SIZE];
|
||||||
|
static uint8_t RxData;
|
||||||
|
|
||||||
|
static RING_BUFFER Tx_RingBuffer;
|
||||||
|
static RING_BUFFER Rx_RingBuffer;
|
||||||
|
static int32_t UartError = E_NO_ERROR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Uart_Interrupt_Handler(void);
|
||||||
|
static void App_Uart_Data_Transmit_Check(void);
|
||||||
|
static void App_Uart_Read_Callback_Initialization(void);
|
||||||
|
static void App_Uart_Read_Callback(uart_req_t* req, int error);
|
||||||
|
|
||||||
|
|
||||||
|
int fputc( int ch, FILE* f )
|
||||||
|
{
|
||||||
|
RingBuffer_Enqueue(&Tx_RingBuffer, ch);
|
||||||
|
//UART_WriteByte(UART_App_INSTANCE, ch);
|
||||||
|
return( ch );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int32_t App_Uart_Initialization(void)
|
||||||
|
{
|
||||||
|
mxc_uart_regs_t* uart = APP_UART_INSTANCE;
|
||||||
|
const sys_cfg_uart_t sys_uart_cfg =
|
||||||
|
{
|
||||||
|
APP_UART_ALTERNATE,
|
||||||
|
UART_FLOW_DISABLE,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Initialize the UART */
|
||||||
|
uart_cfg_t cfg;
|
||||||
|
cfg.parity = UART_PARITY_DISABLE;
|
||||||
|
cfg.size = UART_DATA_SIZE_8_BITS;
|
||||||
|
cfg.stop = UART_STOP_1;
|
||||||
|
cfg.flow = UART_FLOW_CTRL_DIS;
|
||||||
|
cfg.pol = UART_FLOW_POL_DIS;
|
||||||
|
cfg.baud = APP_UART_BUADRATE;
|
||||||
|
|
||||||
|
while (!(uart->status & MXC_F_UART_STATUS_TX_EMPTY))
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize the UART
|
||||||
|
if ((UartError = UART_Init(uart, &cfg, &sys_uart_cfg)) != E_NO_ERROR)
|
||||||
|
{
|
||||||
|
return UartError;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(uart == MXC_UART0)
|
||||||
|
{
|
||||||
|
NVIC_ClearPendingIRQ(UART0_IRQn);
|
||||||
|
NVIC_DisableIRQ(UART0_IRQn);
|
||||||
|
NVIC_SetVector(UART0_IRQn, App_Uart_Interrupt_Handler);
|
||||||
|
NVIC_EnableIRQ(UART0_IRQn);
|
||||||
|
}
|
||||||
|
else if(uart == MXC_UART1)
|
||||||
|
{
|
||||||
|
NVIC_ClearPendingIRQ(UART1_IRQn);
|
||||||
|
NVIC_DisableIRQ(UART1_IRQn);
|
||||||
|
NVIC_SetVector(UART1_IRQn, App_Uart_Interrupt_Handler);
|
||||||
|
NVIC_EnableIRQ(UART1_IRQn);
|
||||||
|
}
|
||||||
|
|
||||||
|
UART_ClearFlags (uart, 0xFFFFFFFF);
|
||||||
|
//MXC_UART_EnableInt (uart, MXC_F_UART_REVA_INT_EN_RX_FIFO_THRESH|MXC_F_UART_REVA_INT_EN_TX_FIFO_ALMOST_EMPTY);
|
||||||
|
|
||||||
|
RingBuffer_Initialization(&Tx_RingBuffer, true, APP_UART_TX_BUFFER_SIZE, TxBuffer);
|
||||||
|
RingBuffer_Initialization(&Rx_RingBuffer, true, APP_UART_RX_BUFFER_SIZE, RxBuffer);
|
||||||
|
|
||||||
|
App_Uart_Read_Callback_Initialization();
|
||||||
|
|
||||||
|
SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 0, App_Uart_Data_Transmit_Check);
|
||||||
|
return E_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Uart_Read_Callback_Initialization(void)
|
||||||
|
{
|
||||||
|
App_Uart_Read_Req.data = &RxData;
|
||||||
|
App_Uart_Read_Req.len = 1;
|
||||||
|
App_Uart_Read_Req.callback = App_Uart_Read_Callback;
|
||||||
|
UART_ReadAsync(APP_UART_INSTANCE, &App_Uart_Read_Req);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void App_Uart_Interrupt_Handler(void)
|
||||||
|
{
|
||||||
|
UART_Handler(APP_UART_INSTANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void App_Uart_Read_Callback(uart_req_t* req, int error)
|
||||||
|
{
|
||||||
|
RingBuffer_Enqueue(&Rx_RingBuffer, RxData);
|
||||||
|
RingBuffer_Enqueue(&Tx_RingBuffer, RxData);
|
||||||
|
App_Uart_Read_Callback_Initialization();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void App_Uart_Data_Transmit_Check(void)
|
||||||
|
{
|
||||||
|
if(RingBuffer_Get_DataSize(&Tx_RingBuffer) != 0 && UART_Busy(APP_UART_INSTANCE) == E_NO_ERROR)
|
||||||
|
{
|
||||||
|
uint8_t TxData;
|
||||||
|
RingBuffer_GetData(&Tx_RingBuffer, &TxData);
|
||||||
|
UART_WriteByte(APP_UART_INSTANCE, TxData);
|
||||||
|
RingBuffer_PopData(&Tx_RingBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32_t App_Uart_Transmit(uint8_t TxData)
|
||||||
|
{
|
||||||
|
RingBuffer_Enqueue(&Tx_RingBuffer, TxData);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t App_Uart_Get_Last_Error(void)
|
||||||
|
{
|
||||||
|
return UartError;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool App_Uart_Get_Recv_Data(uint8_t* pRxData)
|
||||||
|
{
|
||||||
|
if(RingBuffer_Get_DataSize(&Rx_RingBuffer) == 0)
|
||||||
|
return false;
|
||||||
|
return RingBuffer_Dequeue(&Rx_RingBuffer, pRxData);
|
||||||
|
}
|
||||||
|
|
||||||
|
int printf_none(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
/** \file debug.h */
|
||||||
|
#if !defined(APP_UART_H__815DE511_1438_4F94_A151_A4D6CC5F96F8__INCLUDED_)
|
||||||
|
#define APP_UART_H__815DE511_1438_4F94_A151_A4D6CC5F96F8__INCLUDED_
|
||||||
|
|
||||||
|
#include "board_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
int32_t App_Uart_Initialization(void);
|
||||||
|
int32_t App_Uart_Transmit(uint8_t TxData);
|
||||||
|
int32_t App_Uart_Transmit_Len(uint8_t* pTxBuffer, uint16_t TxLen);
|
||||||
|
int32_t App_Uart_Get_Last_Error(void);
|
||||||
|
bool App_Uart_Get_Recv_Data(uint8_t* pRxData);
|
||||||
|
|
||||||
|
int printf_none(const char *fmt, ...);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,134 @@
|
|||||||
|
/**
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @desc LCD FONT 5x8
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @source
|
||||||
|
* Copyright (C) 2020 Marian Hrinko.
|
||||||
|
* Written by Marian Hrinko (mato.hrinko@gmail.com)
|
||||||
|
*
|
||||||
|
* @author Marian Hrinko
|
||||||
|
* @date 08.12.2020
|
||||||
|
* @update 08.12.2022
|
||||||
|
* @file font.h
|
||||||
|
* @version 1.0
|
||||||
|
* @tested AVR Atmega328p
|
||||||
|
*
|
||||||
|
* @depend
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @descr LCD pixel fonts
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @usage Display characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FONT_H__
|
||||||
|
#define __FONT_H__
|
||||||
|
|
||||||
|
// includes
|
||||||
|
|
||||||
|
|
||||||
|
// Characters definition
|
||||||
|
// -----------------------------------
|
||||||
|
// number of columns for chars
|
||||||
|
#define CHARS_COLS_LENGTH 5
|
||||||
|
|
||||||
|
// @const Characters
|
||||||
|
const uint8_t FONTS[][CHARS_COLS_LENGTH] = {
|
||||||
|
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 20 space
|
||||||
|
{ 0x81, 0x81, 0x18, 0x81, 0x81 }, // 21 !
|
||||||
|
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // 22 "
|
||||||
|
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // 23 #
|
||||||
|
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // 24 $
|
||||||
|
{ 0x23, 0x13, 0x08, 0x64, 0x62 }, // 25 %
|
||||||
|
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // 26 &
|
||||||
|
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // 27 '
|
||||||
|
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // 28 (
|
||||||
|
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // 29 )
|
||||||
|
{ 0x14, 0x08, 0x3e, 0x08, 0x14 }, // 2a *
|
||||||
|
{ 0x08, 0x08, 0x3e, 0x08, 0x08 }, // 2b +
|
||||||
|
{ 0x00, 0x50, 0x30, 0x00, 0x00 }, // 2c ,
|
||||||
|
{ 0x08, 0x08, 0x08, 0x08, 0x08 }, // 2d -
|
||||||
|
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // 2e .
|
||||||
|
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // 2f /
|
||||||
|
{ 0x3e, 0x51, 0x49, 0x45, 0x3e }, // 30 0
|
||||||
|
{ 0x00, 0x42, 0x7f, 0x40, 0x00 }, // 31 1
|
||||||
|
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 32 2
|
||||||
|
{ 0x21, 0x41, 0x45, 0x4b, 0x31 }, // 33 3
|
||||||
|
{ 0x18, 0x14, 0x12, 0x7f, 0x10 }, // 34 4
|
||||||
|
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 35 5
|
||||||
|
{ 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // 36 6
|
||||||
|
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 37 7
|
||||||
|
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 38 8
|
||||||
|
{ 0x06, 0x49, 0x49, 0x29, 0x1e }, // 39 9
|
||||||
|
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // 3a :
|
||||||
|
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // 3b ;
|
||||||
|
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // 3c <
|
||||||
|
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // 3d =
|
||||||
|
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // 3e >
|
||||||
|
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // 3f ?
|
||||||
|
{ 0x32, 0x49, 0x79, 0x41, 0x3e }, // 40 @
|
||||||
|
{ 0x7e, 0x11, 0x11, 0x11, 0x7e }, // 41 A
|
||||||
|
{ 0x7f, 0x49, 0x49, 0x49, 0x36 }, // 42 B
|
||||||
|
{ 0x3e, 0x41, 0x41, 0x41, 0x22 }, // 43 C
|
||||||
|
{ 0x7f, 0x41, 0x41, 0x22, 0x1c }, // 44 D
|
||||||
|
{ 0x7f, 0x49, 0x49, 0x49, 0x41 }, // 45 E
|
||||||
|
{ 0x7f, 0x09, 0x09, 0x09, 0x01 }, // 46 F
|
||||||
|
{ 0x3e, 0x41, 0x49, 0x49, 0x7a }, // 47 G
|
||||||
|
{ 0x7f, 0x08, 0x08, 0x08, 0x7f }, // 48 H
|
||||||
|
{ 0x00, 0x41, 0x7f, 0x41, 0x00 }, // 49 I
|
||||||
|
{ 0x20, 0x40, 0x41, 0x3f, 0x01 }, // 4a J
|
||||||
|
{ 0x7f, 0x08, 0x14, 0x22, 0x41 }, // 4b K
|
||||||
|
{ 0x7f, 0x40, 0x40, 0x40, 0x40 }, // 4c L
|
||||||
|
{ 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // 4d M
|
||||||
|
{ 0x7f, 0x04, 0x08, 0x10, 0x7f }, // 4e N
|
||||||
|
{ 0x3e, 0x41, 0x41, 0x41, 0x3e }, // 4f O
|
||||||
|
{ 0x7f, 0x09, 0x09, 0x09, 0x06 }, // 50 P
|
||||||
|
{ 0x3e, 0x41, 0x51, 0x21, 0x5e }, // 51 Q
|
||||||
|
{ 0x7f, 0x09, 0x19, 0x29, 0x46 }, // 52 R
|
||||||
|
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // 53 S
|
||||||
|
{ 0x01, 0x01, 0x7f, 0x01, 0x01 }, // 54 T
|
||||||
|
{ 0x3f, 0x40, 0x40, 0x40, 0x3f }, // 55 U
|
||||||
|
{ 0x1f, 0x20, 0x40, 0x20, 0x1f }, // 56 V
|
||||||
|
{ 0x3f, 0x40, 0x38, 0x40, 0x3f }, // 57 W
|
||||||
|
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // 58 X
|
||||||
|
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // 59 Y
|
||||||
|
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // 5a Z
|
||||||
|
{ 0x00, 0x7f, 0x41, 0x41, 0x00 }, // 5b [
|
||||||
|
{ 0x02, 0x04, 0x08, 0x10, 0x20 }, // 5c backslash
|
||||||
|
{ 0x00, 0x41, 0x41, 0x7f, 0x00 }, // 5d ]
|
||||||
|
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // 5e ^
|
||||||
|
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // 5f _
|
||||||
|
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // 60 `
|
||||||
|
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // 61 a
|
||||||
|
{ 0x7f, 0x48, 0x44, 0x44, 0x38 }, // 62 b
|
||||||
|
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // 63 c
|
||||||
|
{ 0x38, 0x44, 0x44, 0x48, 0x7f }, // 64 d
|
||||||
|
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // 65 e
|
||||||
|
{ 0x08, 0x7e, 0x09, 0x01, 0x02 }, // 66 f
|
||||||
|
{ 0x0c, 0x52, 0x52, 0x52, 0x3e }, // 67 g
|
||||||
|
{ 0x7f, 0x08, 0x04, 0x04, 0x78 }, // 68 h
|
||||||
|
{ 0x00, 0x44, 0x7d, 0x40, 0x00 }, // 69 i
|
||||||
|
{ 0x20, 0x40, 0x44, 0x3d, 0x00 }, // 6a j
|
||||||
|
{ 0x7f, 0x10, 0x28, 0x44, 0x00 }, // 6b k
|
||||||
|
{ 0x00, 0x41, 0x7f, 0x40, 0x00 }, // 6c l
|
||||||
|
{ 0x7c, 0x04, 0x18, 0x04, 0x78 }, // 6d m
|
||||||
|
{ 0x7c, 0x08, 0x04, 0x04, 0x78 }, // 6e n
|
||||||
|
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // 6f o
|
||||||
|
{ 0x7c, 0x14, 0x14, 0x14, 0x08 }, // 70 p
|
||||||
|
{ 0x08, 0x14, 0x14, 0x14, 0x7c }, // 71 q
|
||||||
|
{ 0x7c, 0x08, 0x04, 0x04, 0x08 }, // 72 r
|
||||||
|
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // 73 s
|
||||||
|
{ 0x04, 0x3f, 0x44, 0x40, 0x20 }, // 74 t
|
||||||
|
{ 0x3c, 0x40, 0x40, 0x20, 0x7c }, // 75 u
|
||||||
|
{ 0x1c, 0x20, 0x40, 0x20, 0x1c }, // 76 v
|
||||||
|
{ 0x3c, 0x40, 0x30, 0x40, 0x3c }, // 77 w
|
||||||
|
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // 78 x
|
||||||
|
{ 0x0c, 0x50, 0x50, 0x50, 0x3c }, // 79 y
|
||||||
|
{ 0x44, 0x64, 0x54, 0x4c, 0x44 }, // 7a z
|
||||||
|
{ 0x00, 0x08, 0x36, 0x41, 0x00 }, // 7b {
|
||||||
|
{ 0x00, 0x00, 0x7f, 0x00, 0x00 }, // 7c |
|
||||||
|
{ 0x00, 0x41, 0x36, 0x08, 0x00 }, // 7d }
|
||||||
|
{ 0x10, 0x08, 0x08, 0x10, 0x08 }, // 7e ~
|
||||||
|
{ 0x00, 0x00, 0x00, 0x00, 0x00 } // 7f
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,135 @@
|
|||||||
|
/**
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @desc LCD FONT 5x8
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @source https://github.com/basti79/LCD-fonts/blob/master/5x8_vertikal_LSB_1.h
|
||||||
|
* Copyright (C) 2020 Marian Hrinko.
|
||||||
|
* Written by Marian Hrinko (mato.hrinko@gmail.com)
|
||||||
|
*
|
||||||
|
* @author Marian Hrinko
|
||||||
|
* @date 08.12.2020
|
||||||
|
* @update 08.12.2022
|
||||||
|
* @file font5x8.h
|
||||||
|
* @version 1.0
|
||||||
|
* @tested AVR Atmega328p
|
||||||
|
*
|
||||||
|
* @depend
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @descr LCD pixel fonts
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @usage Display characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FONT5x8_H__
|
||||||
|
#define __FONT5x8_H__
|
||||||
|
|
||||||
|
// includes
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
// Characters definition
|
||||||
|
// -----------------------------------
|
||||||
|
// number of columns for chars
|
||||||
|
#define CHARS_COLS_LENGTH 5
|
||||||
|
|
||||||
|
// @author basti79
|
||||||
|
// @source https://github.com/basti79/LCD-fonts/blob/master/5x8_vertikal_LSB_1.h
|
||||||
|
static const uint8_t FONTS[][CHARS_COLS_LENGTH] PROGMEM = {
|
||||||
|
{0x00,0x00,0x00,0x00,0x00}, // 0x20
|
||||||
|
{0x00,0x00,0x2F,0x00,0x00}, // 0x21
|
||||||
|
{0x00,0x03,0x00,0x03,0x00}, // 0x22
|
||||||
|
{0x34,0x1C,0x36,0x1C,0x16}, // 0x23
|
||||||
|
{0x00,0x26,0x7F,0x32,0x00}, // 0x24
|
||||||
|
{0x32,0x0D,0x1E,0x2C,0x13}, // 0x25
|
||||||
|
{0x18,0x26,0x2D,0x12,0x28}, // 0x26
|
||||||
|
{0x00,0x00,0x03,0x00,0x00}, // 0x27
|
||||||
|
{0x00,0x1C,0x22,0x41,0x41}, // 0x28
|
||||||
|
{0x41,0x41,0x22,0x1C,0x00}, // 0x29
|
||||||
|
{0x00,0x0A,0x05,0x0A,0x00}, // 0x2A
|
||||||
|
{0x00,0x10,0x38,0x10,0x00}, // 0x2B
|
||||||
|
{0x00,0x80,0x60,0x00,0x00}, // 0x2C
|
||||||
|
{0x00,0x08,0x08,0x08,0x00}, // 0x2D
|
||||||
|
{0x00,0x00,0x20,0x00,0x00}, // 0x2E
|
||||||
|
{0x00,0x60,0x18,0x06,0x01}, // 0x2F
|
||||||
|
{0x00,0x1E,0x21,0x21,0x1E}, // 0x30
|
||||||
|
{0x00,0x22,0x3F,0x20,0x00}, // 0x31
|
||||||
|
{0x00,0x31,0x29,0x26,0x00}, // 0x32
|
||||||
|
{0x00,0x25,0x25,0x1A,0x00}, // 0x33
|
||||||
|
{0x00,0x0C,0x0A,0x3F,0x08}, // 0x34
|
||||||
|
{0x00,0x27,0x25,0x19,0x00}, // 0x35
|
||||||
|
{0x00,0x1E,0x25,0x25,0x18}, // 0x36
|
||||||
|
{0x00,0x01,0x39,0x05,0x03}, // 0x37
|
||||||
|
{0x00,0x1A,0x25,0x25,0x1A}, // 0x38
|
||||||
|
{0x00,0x06,0x29,0x29,0x1E}, // 0x39
|
||||||
|
{0x00,0x00,0x24,0x00,0x00}, // 0x3A
|
||||||
|
{0x00,0x80,0x64,0x00,0x00}, // 0x3B
|
||||||
|
{0x00,0x08,0x08,0x14,0x22}, // 0x3C
|
||||||
|
{0x00,0x14,0x14,0x14,0x14}, // 0x3D
|
||||||
|
{0x00,0x22,0x14,0x08,0x08}, // 0x3E
|
||||||
|
{0x00,0x01,0x29,0x05,0x02}, // 0x3F
|
||||||
|
{0x3C,0x42,0x59,0x55,0x5E}, // 0x40
|
||||||
|
{0x30,0x1C,0x12,0x1C,0x30}, // 0x41
|
||||||
|
{0x00,0x3E,0x2A,0x36,0x00}, // 0x42
|
||||||
|
{0x00,0x1C,0x22,0x22,0x22}, // 0x43
|
||||||
|
{0x00,0x3E,0x22,0x22,0x1C}, // 0x44
|
||||||
|
{0x00,0x3E,0x2A,0x2A,0x00}, // 0x45
|
||||||
|
{0x00,0x3E,0x0A,0x0A,0x00}, // 0x46
|
||||||
|
{0x00,0x1C,0x22,0x2A,0x3A}, // 0x47
|
||||||
|
{0x00,0x3E,0x08,0x08,0x3E}, // 0x48
|
||||||
|
{0x00,0x22,0x3E,0x22,0x00}, // 0x49
|
||||||
|
{0x00,0x22,0x22,0x1E,0x00}, // 0x4A
|
||||||
|
{0x00,0x3E,0x08,0x14,0x22}, // 0x4B
|
||||||
|
{0x00,0x3E,0x20,0x20,0x20}, // 0x4C
|
||||||
|
{0x3E,0x04,0x18,0x04,0x3E}, // 0x4D
|
||||||
|
{0x00,0x3E,0x04,0x08,0x3E}, // 0x4E
|
||||||
|
{0x1C,0x22,0x22,0x22,0x1C}, // 0x4F
|
||||||
|
{0x00,0x3E,0x0A,0x0A,0x04}, // 0x50
|
||||||
|
{0x1C,0x22,0x22,0x62,0x9C}, // 0x51
|
||||||
|
{0x00,0x3E,0x0A,0x14,0x20}, // 0x52
|
||||||
|
{0x00,0x24,0x2A,0x12,0x00}, // 0x53
|
||||||
|
{0x02,0x02,0x3E,0x02,0x02}, // 0x54
|
||||||
|
{0x00,0x1E,0x20,0x20,0x1E}, // 0x55
|
||||||
|
{0x00,0x0E,0x30,0x30,0x0E}, // 0x56
|
||||||
|
{0x0E,0x30,0x0C,0x30,0x0E}, // 0x57
|
||||||
|
{0x22,0x14,0x08,0x14,0x22}, // 0x58
|
||||||
|
{0x02,0x04,0x38,0x04,0x02}, // 0x59
|
||||||
|
{0x00,0x32,0x2A,0x2A,0x26}, // 0x5A
|
||||||
|
{0x00,0x00,0x7F,0x41,0x00}, // 0x5B
|
||||||
|
{0x01,0x06,0x18,0x60,0x00}, // 0x5C
|
||||||
|
{0x00,0x41,0x7F,0x00,0x00}, // 0x5D
|
||||||
|
{0x18,0x06,0x01,0x06,0x18}, // 0x5E
|
||||||
|
{0x40,0x40,0x40,0x40,0x40}, // 0x5F
|
||||||
|
{0x00,0x01,0x02,0x00,0x00}, // 0x60
|
||||||
|
{0x00,0x34,0x34,0x38,0x20}, // 0x61
|
||||||
|
{0x00,0x3F,0x24,0x24,0x18}, // 0x62
|
||||||
|
{0x00,0x18,0x24,0x24,0x00}, // 0x63
|
||||||
|
{0x18,0x24,0x24,0x3F,0x00}, // 0x64
|
||||||
|
{0x00,0x18,0x2C,0x28,0x00}, // 0x65
|
||||||
|
{0x00,0x04,0x3E,0x05,0x05}, // 0x66
|
||||||
|
{0x00,0x58,0x54,0x54,0x3C}, // 0x67
|
||||||
|
{0x00,0x3F,0x08,0x04,0x38}, // 0x68
|
||||||
|
{0x00,0x04,0x3D,0x00,0x00}, // 0x69
|
||||||
|
{0x00,0x44,0x44,0x3D,0x00}, // 0x6A
|
||||||
|
{0x00,0x3F,0x08,0x14,0x20}, // 0x6B
|
||||||
|
{0x00,0x01,0x3F,0x00,0x00}, // 0x6C
|
||||||
|
{0x3C,0x08,0x3C,0x08,0x3C}, // 0x6D
|
||||||
|
{0x00,0x3C,0x08,0x04,0x38}, // 0x6E
|
||||||
|
{0x00,0x18,0x24,0x24,0x18}, // 0x6F
|
||||||
|
{0x00,0x7C,0x24,0x24,0x18}, // 0x70
|
||||||
|
{0x18,0x24,0x24,0x7C,0x00}, // 0x71
|
||||||
|
{0x00,0x3C,0x08,0x04,0x00}, // 0x72
|
||||||
|
{0x00,0x28,0x2C,0x14,0x00}, // 0x73
|
||||||
|
{0x00,0x04,0x1E,0x24,0x04}, // 0x74
|
||||||
|
{0x00,0x1C,0x20,0x10,0x3C}, // 0x75
|
||||||
|
{0x00,0x0C,0x30,0x30,0x0C}, // 0x76
|
||||||
|
{0x0C,0x30,0x1C,0x30,0x0C}, // 0x77
|
||||||
|
{0x00,0x24,0x18,0x18,0x24}, // 0x78
|
||||||
|
{0x40,0x4C,0x70,0x30,0x0C}, // 0x79
|
||||||
|
{0x00,0x34,0x2C,0x2C,0x00}, // 0x7A
|
||||||
|
{0x00,0x08,0x36,0x41,0x00}, // 0x7B
|
||||||
|
{0x00,0x00,0x7F,0x00,0x00}, // 0x7C
|
||||||
|
{0x00,0x41,0x36,0x08,0x00}, // 0x7D
|
||||||
|
{0x10,0x08,0x08,0x10,0x08}, // 0x7E
|
||||||
|
{0x00,0x3C,0x22,0x3C,0x00}, // 0x7F
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,135 @@
|
|||||||
|
/**
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @desc LCD FONT 6x8
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @source https://github.com/basti79/LCD-fonts/blob/master/6x8_vertikal_LSB_1.h
|
||||||
|
* Copyright (C) 2020 Marian Hrinko.
|
||||||
|
* Written by Marian Hrinko (mato.hrinko@gmail.com)
|
||||||
|
*
|
||||||
|
* @author Marian Hrinko
|
||||||
|
* @date 08.12.2020
|
||||||
|
* @update 08.12.2022
|
||||||
|
* @file font6x8.h
|
||||||
|
* @version 1.0
|
||||||
|
* @tested AVR Atmega328p
|
||||||
|
*
|
||||||
|
* @depend
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @descr LCD pixel fonts
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @usage Display characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FONT6x8_H__
|
||||||
|
#define __FONT6x8_H__
|
||||||
|
|
||||||
|
// includes
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
// Characters definition
|
||||||
|
// -----------------------------------
|
||||||
|
// number of columns for chars
|
||||||
|
#define CHARS_COLS_LENGTH 6
|
||||||
|
|
||||||
|
// @author basti79
|
||||||
|
// @source https://github.com/basti79/LCD-fonts/blob/master/6x8_vertikal_LSB_1.h
|
||||||
|
static const uint8_t FONTS[][CHARS_COLS_LENGTH] PROGMEM = {
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00}, // 0x20
|
||||||
|
{0x00,0x00,0x06,0x5F,0x06,0x00}, // 0x21
|
||||||
|
{0x00,0x07,0x03,0x00,0x07,0x03}, // 0x22
|
||||||
|
{0x00,0x24,0x7E,0x24,0x7E,0x24}, // 0x23
|
||||||
|
{0x00,0x24,0x2B,0x6A,0x12,0x00}, // 0x24
|
||||||
|
{0x00,0x63,0x13,0x08,0x64,0x63}, // 0x25
|
||||||
|
{0x00,0x36,0x49,0x56,0x20,0x50}, // 0x26
|
||||||
|
{0x00,0x00,0x07,0x03,0x00,0x00}, // 0x27
|
||||||
|
{0x00,0x00,0x3E,0x41,0x00,0x00}, // 0x28
|
||||||
|
{0x00,0x00,0x41,0x3E,0x00,0x00}, // 0x29
|
||||||
|
{0x00,0x08,0x3E,0x1C,0x3E,0x08}, // 0x2A
|
||||||
|
{0x00,0x08,0x08,0x3E,0x08,0x08}, // 0x2B
|
||||||
|
{0x00,0x00,0xE0,0x60,0x00,0x00}, // 0x2C
|
||||||
|
{0x00,0x08,0x08,0x08,0x08,0x08}, // 0x2D
|
||||||
|
{0x00,0x00,0x60,0x60,0x00,0x00}, // 0x2E
|
||||||
|
{0x00,0x20,0x10,0x08,0x04,0x02}, // 0x2F
|
||||||
|
{0x00,0x3E,0x51,0x49,0x45,0x3E}, // 0x30
|
||||||
|
{0x00,0x00,0x42,0x7F,0x40,0x00}, // 0x31
|
||||||
|
{0x00,0x62,0x51,0x49,0x49,0x46}, // 0x32
|
||||||
|
{0x00,0x22,0x49,0x49,0x49,0x36}, // 0x33
|
||||||
|
{0x00,0x18,0x14,0x12,0x7F,0x10}, // 0x34
|
||||||
|
{0x00,0x2F,0x49,0x49,0x49,0x31}, // 0x35
|
||||||
|
{0x00,0x3C,0x4A,0x49,0x49,0x30}, // 0x36
|
||||||
|
{0x00,0x01,0x71,0x09,0x05,0x03}, // 0x37
|
||||||
|
{0x00,0x36,0x49,0x49,0x49,0x36}, // 0x38
|
||||||
|
{0x00,0x06,0x49,0x49,0x29,0x1E}, // 0x39
|
||||||
|
{0x00,0x00,0x6C,0x6C,0x00,0x00}, // 0x3A
|
||||||
|
{0x00,0x00,0xEC,0x6C,0x00,0x00}, // 0x3B
|
||||||
|
{0x00,0x08,0x14,0x22,0x41,0x00}, // 0x3C
|
||||||
|
{0x00,0x24,0x24,0x24,0x24,0x24}, // 0x3D
|
||||||
|
{0x00,0x00,0x41,0x22,0x14,0x08}, // 0x3E
|
||||||
|
{0x00,0x02,0x01,0x59,0x09,0x06}, // 0x3F
|
||||||
|
{0x00,0x3E,0x41,0x5D,0x55,0x1E}, // 0x40
|
||||||
|
{0x00,0x7E,0x11,0x11,0x11,0x7E}, // 0x41
|
||||||
|
{0x00,0x7F,0x49,0x49,0x49,0x36}, // 0x42
|
||||||
|
{0x00,0x3E,0x41,0x41,0x41,0x22}, // 0x43
|
||||||
|
{0x00,0x7F,0x41,0x41,0x41,0x3E}, // 0x44
|
||||||
|
{0x00,0x7F,0x49,0x49,0x49,0x41}, // 0x45
|
||||||
|
{0x00,0x7F,0x09,0x09,0x09,0x01}, // 0x46
|
||||||
|
{0x00,0x3E,0x41,0x49,0x49,0x7A}, // 0x47
|
||||||
|
{0x00,0x7F,0x08,0x08,0x08,0x7F}, // 0x48
|
||||||
|
{0x00,0x00,0x41,0x7F,0x41,0x00}, // 0x49
|
||||||
|
{0x00,0x30,0x40,0x40,0x40,0x3F}, // 0x4A
|
||||||
|
{0x00,0x7F,0x08,0x14,0x22,0x41}, // 0x4B
|
||||||
|
{0x00,0x7F,0x40,0x40,0x40,0x40}, // 0x4C
|
||||||
|
{0x00,0x7F,0x02,0x04,0x02,0x7F}, // 0x4D
|
||||||
|
{0x00,0x7F,0x02,0x04,0x08,0x7F}, // 0x4E
|
||||||
|
{0x00,0x3E,0x41,0x41,0x41,0x3E}, // 0x4F
|
||||||
|
{0x00,0x7F,0x09,0x09,0x09,0x06}, // 0x50
|
||||||
|
{0x00,0x3E,0x41,0x51,0x21,0x5E}, // 0x51
|
||||||
|
{0x00,0x7F,0x09,0x09,0x19,0x66}, // 0x52
|
||||||
|
{0x00,0x26,0x49,0x49,0x49,0x32}, // 0x53
|
||||||
|
{0x00,0x01,0x01,0x7F,0x01,0x01}, // 0x54
|
||||||
|
{0x00,0x3F,0x40,0x40,0x40,0x3F}, // 0x55
|
||||||
|
{0x00,0x1F,0x20,0x40,0x20,0x1F}, // 0x56
|
||||||
|
{0x00,0x3F,0x40,0x3C,0x40,0x3F}, // 0x57
|
||||||
|
{0x00,0x63,0x14,0x08,0x14,0x63}, // 0x58
|
||||||
|
{0x00,0x07,0x08,0x70,0x08,0x07}, // 0x59
|
||||||
|
{0x00,0x71,0x49,0x45,0x43,0x00}, // 0x5A
|
||||||
|
{0x00,0x00,0x7F,0x41,0x41,0x00}, // 0x5B
|
||||||
|
{0x00,0x02,0x04,0x08,0x10,0x20}, // 0x5C
|
||||||
|
{0x00,0x00,0x41,0x41,0x7F,0x00}, // 0x5D
|
||||||
|
{0x00,0x04,0x02,0x01,0x02,0x04}, // 0x5E
|
||||||
|
{0x80,0x80,0x80,0x80,0x80,0x80}, // 0x5F
|
||||||
|
{0x00,0x00,0x03,0x07,0x00,0x00}, // 0x60
|
||||||
|
{0x00,0x20,0x54,0x54,0x54,0x78}, // 0x61
|
||||||
|
{0x00,0x7F,0x44,0x44,0x44,0x38}, // 0x62
|
||||||
|
{0x00,0x38,0x44,0x44,0x44,0x28}, // 0x63
|
||||||
|
{0x00,0x38,0x44,0x44,0x44,0x7F}, // 0x64
|
||||||
|
{0x00,0x38,0x54,0x54,0x54,0x08}, // 0x65
|
||||||
|
{0x00,0x08,0x7E,0x09,0x09,0x00}, // 0x66
|
||||||
|
{0x00,0x18,0xA4,0xA4,0xA4,0x7C}, // 0x67
|
||||||
|
{0x00,0x7F,0x04,0x04,0x78,0x00}, // 0x68
|
||||||
|
{0x00,0x00,0x00,0x7D,0x40,0x00}, // 0x69
|
||||||
|
{0x00,0x40,0x80,0x84,0x7D,0x00}, // 0x6A
|
||||||
|
{0x00,0x7F,0x10,0x28,0x44,0x00}, // 0x6B
|
||||||
|
{0x00,0x00,0x00,0x7F,0x40,0x00}, // 0x6C
|
||||||
|
{0x00,0x7C,0x04,0x18,0x04,0x78}, // 0x6D
|
||||||
|
{0x00,0x7C,0x04,0x04,0x78,0x00}, // 0x6E
|
||||||
|
{0x00,0x38,0x44,0x44,0x44,0x38}, // 0x6F
|
||||||
|
{0x00,0xFC,0x44,0x44,0x44,0x38}, // 0x70
|
||||||
|
{0x00,0x38,0x44,0x44,0x44,0xFC}, // 0x71
|
||||||
|
{0x00,0x44,0x78,0x44,0x04,0x08}, // 0x72
|
||||||
|
{0x00,0x08,0x54,0x54,0x54,0x20}, // 0x73
|
||||||
|
{0x00,0x04,0x3E,0x44,0x24,0x00}, // 0x74
|
||||||
|
{0x00,0x3C,0x40,0x20,0x7C,0x00}, // 0x75
|
||||||
|
{0x00,0x1C,0x20,0x40,0x20,0x1C}, // 0x76
|
||||||
|
{0x00,0x3C,0x60,0x30,0x60,0x3C}, // 0x77
|
||||||
|
{0x00,0x6C,0x10,0x10,0x6C,0x00}, // 0x78
|
||||||
|
{0x00,0x9C,0xA0,0x60,0x3C,0x00}, // 0x79
|
||||||
|
{0x00,0x64,0x54,0x54,0x4C,0x00}, // 0x7A
|
||||||
|
{0x00,0x08,0x3E,0x41,0x41,0x00}, // 0x7B
|
||||||
|
{0x00,0x00,0x00,0x77,0x00,0x00}, // 0x7C
|
||||||
|
{0x00,0x00,0x41,0x41,0x3E,0x08}, // 0x7D
|
||||||
|
{0x00,0x02,0x01,0x02,0x01,0x00}, // 0x7E
|
||||||
|
{0x00,0x3C,0x26,0x23,0x26,0x3C}, // 0x7F
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,133 @@
|
|||||||
|
/**
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @desc LCD FONT 6x8
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @source https://github.com/basti79/LCD-fonts/blob/master/8x8_vertikal_LSB_1.h
|
||||||
|
* Copyright (C) 2020 Marian Hrinko.
|
||||||
|
* Written by Marian Hrinko (mato.hrinko@gmail.com)
|
||||||
|
*
|
||||||
|
* @author Marian Hrinko
|
||||||
|
* @date 08.12.2020
|
||||||
|
* @update 08.12.2022
|
||||||
|
* @file font6x8.h
|
||||||
|
* @version 1.0
|
||||||
|
* @tested AVR Atmega328p
|
||||||
|
*
|
||||||
|
* @depend
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @descr LCD pixel fonts
|
||||||
|
* -------------------------------------------------------------------------------------+
|
||||||
|
* @usage Display characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FONT8x8_H__
|
||||||
|
#define __FONT8x8_H__
|
||||||
|
|
||||||
|
|
||||||
|
// Characters definition
|
||||||
|
// -----------------------------------
|
||||||
|
// number of columns for chars
|
||||||
|
#define CHARS_COLS_LENGTH 8
|
||||||
|
|
||||||
|
// @author basti79
|
||||||
|
// @source https://github.com/basti79/LCD-fonts/blob/master/8x8_vertikal_LSB_1.h
|
||||||
|
static const uint8_t FONTS[][CHARS_COLS_LENGTH] = {
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0x20
|
||||||
|
{0x00,0x06,0x5F,0x5F,0x06,0x00,0x00,0x00}, // 0x21
|
||||||
|
{0x00,0x07,0x07,0x00,0x07,0x07,0x00,0x00}, // 0x22
|
||||||
|
{0x14,0x7F,0x7F,0x14,0x7F,0x7F,0x14,0x00}, // 0x23
|
||||||
|
{0x24,0x2E,0x6B,0x6B,0x3A,0x12,0x00,0x00}, // 0x24
|
||||||
|
{0x46,0x66,0x30,0x18,0x0C,0x66,0x62,0x00}, // 0x25
|
||||||
|
{0x30,0x7A,0x4F,0x5D,0x37,0x7A,0x48,0x00}, // 0x26
|
||||||
|
{0x04,0x07,0x03,0x00,0x00,0x00,0x00,0x00}, // 0x27
|
||||||
|
{0x00,0x1C,0x3E,0x63,0x41,0x00,0x00,0x00}, // 0x28
|
||||||
|
{0x00,0x41,0x63,0x3E,0x1C,0x00,0x00,0x00}, // 0x29
|
||||||
|
{0x08,0x2A,0x3E,0x1C,0x1C,0x3E,0x2A,0x08}, // 0x2A
|
||||||
|
{0x08,0x08,0x3E,0x3E,0x08,0x08,0x00,0x00}, // 0x2B
|
||||||
|
{0x00,0xA0,0xE0,0x60,0x00,0x00,0x00,0x00}, // 0x2C
|
||||||
|
{0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, // 0x2D
|
||||||
|
{0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00}, // 0x2E
|
||||||
|
{0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // 0x2F
|
||||||
|
{0x3E,0x7F,0x59,0x4D,0x7F,0x3E,0x00,0x00}, // 0x30
|
||||||
|
{0x42,0x42,0x7F,0x7F,0x40,0x40,0x00,0x00}, // 0x31
|
||||||
|
{0x62,0x73,0x59,0x49,0x6F,0x66,0x00,0x00}, // 0x32
|
||||||
|
{0x22,0x63,0x49,0x49,0x7F,0x36,0x00,0x00}, // 0x33
|
||||||
|
{0x18,0x1C,0x16,0x13,0x7F,0x7F,0x10,0x00}, // 0x34
|
||||||
|
{0x27,0x67,0x45,0x45,0x7D,0x39,0x00,0x00}, // 0x35
|
||||||
|
{0x3C,0x7E,0x4B,0x49,0x79,0x30,0x00,0x00}, // 0x36
|
||||||
|
{0x03,0x63,0x71,0x19,0x0F,0x07,0x00,0x00}, // 0x37
|
||||||
|
{0x36,0x7F,0x49,0x49,0x7F,0x36,0x00,0x00}, // 0x38
|
||||||
|
{0x06,0x4F,0x49,0x69,0x3F,0x1E,0x00,0x00}, // 0x39
|
||||||
|
{0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00}, // 0x3A
|
||||||
|
{0x00,0xA0,0xEC,0x6C,0x00,0x00,0x00,0x00}, // 0x3B
|
||||||
|
{0x08,0x1C,0x36,0x63,0x41,0x00,0x00,0x00}, // 0x3C
|
||||||
|
{0x14,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, // 0x3D
|
||||||
|
{0x00,0x41,0x63,0x36,0x1C,0x08,0x00,0x00}, // 0x3E
|
||||||
|
{0x02,0x03,0x51,0x59,0x0F,0x06,0x00,0x00}, // 0x3F
|
||||||
|
{0x3E,0x7F,0x41,0x5D,0x5D,0x1F,0x1E,0x00}, // 0x40
|
||||||
|
{0x7C,0x7E,0x13,0x13,0x7E,0x7C,0x00,0x00}, // 0x41
|
||||||
|
{0x41,0x7F,0x7F,0x49,0x49,0x7F,0x36,0x00}, // 0x42
|
||||||
|
{0x1C,0x3E,0x63,0x41,0x41,0x63,0x22,0x00}, // 0x43
|
||||||
|
{0x41,0x7F,0x7F,0x41,0x63,0x7F,0x1C,0x00}, // 0x44
|
||||||
|
{0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63,0x00}, // 0x45
|
||||||
|
{0x41,0x7F,0x7F,0x49,0x1D,0x01,0x03,0x00}, // 0x46
|
||||||
|
{0x1C,0x3E,0x63,0x41,0x51,0x73,0x72,0x00}, // 0x47
|
||||||
|
{0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00,0x00}, // 0x48
|
||||||
|
{0x00,0x41,0x7F,0x7F,0x41,0x00,0x00,0x00}, // 0x49
|
||||||
|
{0x30,0x70,0x40,0x41,0x7F,0x3F,0x01,0x00}, // 0x4A
|
||||||
|
{0x41,0x7F,0x7F,0x08,0x1C,0x77,0x63,0x00}, // 0x4B
|
||||||
|
{0x41,0x7F,0x7F,0x41,0x40,0x60,0x70,0x00}, // 0x4C
|
||||||
|
{0x7F,0x7F,0x06,0x0C,0x06,0x7F,0x7F,0x00}, // 0x4D
|
||||||
|
{0x7F,0x7F,0x06,0x0C,0x18,0x7F,0x7F,0x00}, // 0x4E
|
||||||
|
{0x1C,0x3E,0x63,0x41,0x63,0x3E,0x1C,0x00}, // 0x4F
|
||||||
|
{0x41,0x7F,0x7F,0x49,0x09,0x0F,0x06,0x00}, // 0x50
|
||||||
|
{0x1E,0x3F,0x21,0x71,0x7F,0x5E,0x00,0x00}, // 0x51
|
||||||
|
{0x41,0x7F,0x7F,0x19,0x39,0x6F,0x46,0x00}, // 0x52
|
||||||
|
{0x26,0x67,0x4D,0x59,0x7B,0x32,0x00,0x00}, // 0x53
|
||||||
|
{0x03,0x41,0x7F,0x7F,0x41,0x03,0x00,0x00}, // 0x54
|
||||||
|
{0x7F,0x7F,0x40,0x40,0x7F,0x7F,0x00,0x00}, // 0x55
|
||||||
|
{0x1F,0x3F,0x60,0x60,0x3F,0x1F,0x00,0x00}, // 0x56
|
||||||
|
{0x7F,0x7F,0x30,0x18,0x30,0x7F,0x7F,0x00}, // 0x57
|
||||||
|
{0x63,0x77,0x1C,0x08,0x1C,0x77,0x63,0x00}, // 0x58
|
||||||
|
{0x07,0x4F,0x78,0x78,0x4F,0x07,0x00,0x00}, // 0x59
|
||||||
|
{0x67,0x73,0x59,0x4D,0x47,0x63,0x71,0x00}, // 0x5A
|
||||||
|
{0x00,0x7F,0x7F,0x41,0x41,0x00,0x00,0x00}, // 0x5B
|
||||||
|
{0x01,0x03,0x06,0x0C,0x18,0x30,0x60,0x00}, // 0x5C
|
||||||
|
{0x00,0x41,0x41,0x7F,0x7F,0x00,0x00,0x00}, // 0x5D
|
||||||
|
{0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00}, // 0x5E
|
||||||
|
{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, // 0x5F
|
||||||
|
{0x00,0x00,0x03,0x07,0x04,0x00,0x00,0x00}, // 0x60
|
||||||
|
{0x20,0x74,0x54,0x54,0x3C,0x78,0x40,0x00}, // 0x61
|
||||||
|
{0x41,0x3F,0x7F,0x44,0x44,0x7C,0x38,0x00}, // 0x62
|
||||||
|
{0x38,0x7C,0x44,0x44,0x6C,0x28,0x00,0x00}, // 0x63
|
||||||
|
{0x30,0x78,0x48,0x49,0x3F,0x7F,0x40,0x00}, // 0x64
|
||||||
|
{0x38,0x7C,0x54,0x54,0x5C,0x18,0x00,0x00}, // 0x65
|
||||||
|
{0x48,0x7E,0x7F,0x49,0x03,0x02,0x00,0x00}, // 0x66
|
||||||
|
{0x98,0xBC,0xA4,0xA4,0xF8,0x7C,0x04,0x00}, // 0x67
|
||||||
|
{0x41,0x7F,0x7F,0x08,0x04,0x7C,0x78,0x00}, // 0x68
|
||||||
|
{0x00,0x44,0x7D,0x7D,0x40,0x00,0x00,0x00}, // 0x69
|
||||||
|
{0x40,0xC4,0x84,0xFD,0x7D,0x00,0x00,0x00}, // 0x6A
|
||||||
|
{0x41,0x7F,0x7F,0x10,0x38,0x6C,0x44,0x00}, // 0x6B
|
||||||
|
{0x00,0x41,0x7F,0x7F,0x40,0x00,0x00,0x00}, // 0x6C
|
||||||
|
{0x7C,0x7C,0x0C,0x18,0x0C,0x7C,0x78,0x00}, // 0x6D
|
||||||
|
{0x7C,0x7C,0x04,0x04,0x7C,0x78,0x00,0x00}, // 0x6E
|
||||||
|
{0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,0x00}, // 0x6F
|
||||||
|
{0x84,0xFC,0xF8,0xA4,0x24,0x3C,0x18,0x00}, // 0x70
|
||||||
|
{0x18,0x3C,0x24,0xA4,0xF8,0xFC,0x84,0x00}, // 0x71
|
||||||
|
{0x44,0x7C,0x78,0x44,0x1C,0x18,0x00,0x00}, // 0x72
|
||||||
|
{0x48,0x5C,0x54,0x54,0x74,0x24,0x00,0x00}, // 0x73
|
||||||
|
{0x00,0x04,0x3E,0x7F,0x44,0x24,0x00,0x00}, // 0x74
|
||||||
|
{0x3C,0x7C,0x40,0x40,0x3C,0x7C,0x40,0x00}, // 0x75
|
||||||
|
{0x1C,0x3C,0x60,0x60,0x3C,0x1C,0x00,0x00}, // 0x76
|
||||||
|
{0x3C,0x7C,0x60,0x30,0x60,0x7C,0x3C,0x00}, // 0x77
|
||||||
|
{0x44,0x6C,0x38,0x10,0x38,0x6C,0x44,0x00}, // 0x78
|
||||||
|
{0x9C,0xBC,0xA0,0xA0,0xFC,0x7C,0x00,0x00}, // 0x79
|
||||||
|
{0x4C,0x64,0x74,0x5C,0x4C,0x64,0x00,0x00}, // 0x7A
|
||||||
|
{0x08,0x08,0x3E,0x77,0x41,0x41,0x00,0x00}, // 0x7B
|
||||||
|
{0x00,0x00,0x00,0x77,0x77,0x00,0x00,0x00}, // 0x7C
|
||||||
|
{0x41,0x41,0x77,0x3E,0x08,0x08,0x00,0x00}, // 0x7D
|
||||||
|
{0x02,0x03,0x01,0x03,0x02,0x03,0x01,0x00}, // 0x7E
|
||||||
|
{0x78,0x7C,0x46,0x43,0x46,0x7C,0x78,0x00}, // 0x7F
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,40 @@
|
|||||||
|
#include "ssd1306_i2c.h"
|
||||||
|
#include "app_gpio_i2c.h"
|
||||||
|
|
||||||
|
int8_t TWI_MT_Start (void)
|
||||||
|
{
|
||||||
|
App_Gpio_I2C_Start();
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int8_t TWI_MT_Send_SLAW (uint8_t address)
|
||||||
|
{
|
||||||
|
bool bRet;
|
||||||
|
bRet = App_Gpio_I2C_WriteData(address << 1);
|
||||||
|
if(bRet == false)
|
||||||
|
return FAIL;
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int8_t TWI_MT_Send_Data (uint8_t data)
|
||||||
|
{
|
||||||
|
bool bRet;
|
||||||
|
bRet = App_Gpio_I2C_WriteData(data);
|
||||||
|
if(bRet == false)
|
||||||
|
return FAIL;
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int8_t TWI_MR_Send_SLAR (uint8_t address)
|
||||||
|
{
|
||||||
|
bool bRet;
|
||||||
|
bRet = App_Gpio_I2C_WriteData(((address << 1) | 0x01));
|
||||||
|
if(bRet == false)
|
||||||
|
return FAIL;
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TWI_Stop (void)
|
||||||
|
{
|
||||||
|
App_Gpio_I2C_Stop();
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
/** \file ssd1306_i2c.h */
|
||||||
|
#if !defined(SSD1306_I2C_H__AF936065_D874_4AA4_A7D4_296DA996C6F3__INCLUDED_)
|
||||||
|
#define SSD1306_I2C_H__AF936065_D874_4AA4_A7D4_296DA996C6F3__INCLUDED_
|
||||||
|
|
||||||
|
#include "board_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
int8_t TWI_MT_Start (void);
|
||||||
|
int8_t TWI_MT_Send_SLAW (uint8_t address);
|
||||||
|
int8_t TWI_MT_Send_Data (uint8_t data);
|
||||||
|
int8_t TWI_MR_Send_SLAR (uint8_t address);
|
||||||
|
void TWI_Stop (void);
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,85 @@
|
|||||||
|
#include "sw_timer.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _timer_callback_info
|
||||||
|
{
|
||||||
|
SW_TIMER_CALLBACK_TYPE SW_Callback_Type;
|
||||||
|
uint32_t SW_Timer_StartTick;
|
||||||
|
uint32_t SW_Timer_PeriodCount;
|
||||||
|
SW_TIMER_CALLBACK_FN SW_Timer_CallbackFunction;
|
||||||
|
}SW_TIMER_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
static SW_TIMER_INFO SW_Timer_Info[MAX_SW_TIMER_REGISTER_COUNT];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool SW_Timer_Callback_Register(SW_TIMER_CALLBACK_TYPE type, uint32_t PeriodTime, SW_TIMER_CALLBACK_FN pTimerCallback)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++)
|
||||||
|
{
|
||||||
|
if(SW_Timer_Info[i].SW_Timer_CallbackFunction == NULL)
|
||||||
|
{
|
||||||
|
SW_Timer_Info[i].SW_Callback_Type = type;
|
||||||
|
SW_Timer_Info[i].SW_Timer_StartTick = millis();
|
||||||
|
SW_Timer_Info[i].SW_Timer_PeriodCount = PeriodTime;
|
||||||
|
SW_Timer_Info[i].SW_Timer_CallbackFunction = pTimerCallback;
|
||||||
|
ret = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SW_Timer_Callback_UnRegister(SW_TIMER_CALLBACK_FN pSwTimerCallbackFunc)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++)
|
||||||
|
{
|
||||||
|
if(SW_Timer_Info[i].SW_Timer_CallbackFunction == pSwTimerCallbackFunc)
|
||||||
|
{
|
||||||
|
SW_Timer_Info[i].SW_Callback_Type = SW_TIMER_RUN_NONE;
|
||||||
|
SW_Timer_Info[i].SW_Timer_CallbackFunction = NULL;
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SW_Timer_Callback_Process(void)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
uint32_t nowTickCount = millis();
|
||||||
|
|
||||||
|
for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++)
|
||||||
|
{
|
||||||
|
if(SW_Timer_Info[i].SW_Timer_CallbackFunction != NULL &&
|
||||||
|
SW_Timer_Info[i].SW_Callback_Type != SW_TIMER_RUN_NONE)
|
||||||
|
{
|
||||||
|
if((nowTickCount - SW_Timer_Info[i].SW_Timer_StartTick) >= SW_Timer_Info[i].SW_Timer_PeriodCount)
|
||||||
|
{
|
||||||
|
if(SW_Timer_Info[i].SW_Callback_Type == SW_TIMER_RUN_ONNY_ONCE)
|
||||||
|
{
|
||||||
|
SW_Timer_Info[i].SW_Timer_StartTick = 0xFFFFFFFF;
|
||||||
|
SW_Timer_Info[i].SW_Callback_Type = SW_TIMER_RUN_NONE;
|
||||||
|
SW_Timer_Info[i].SW_Timer_CallbackFunction();
|
||||||
|
SW_Timer_Info[i].SW_Timer_CallbackFunction = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SW_Timer_Info[i].SW_Timer_CallbackFunction();
|
||||||
|
SW_Timer_Info[i].SW_Timer_StartTick = nowTickCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,25 @@
|
|||||||
|
/** \file sw_timer.h */
|
||||||
|
#if !defined(SW_TIMER_H__8AF06FDD_AC0A_4693_88C3_8ACCF1AB4372__INCLUDED_)
|
||||||
|
#define SW_TIMER_H__8AF06FDD_AC0A_4693_88C3_8ACCF1AB4372__INCLUDED_
|
||||||
|
|
||||||
|
#include "define.h"
|
||||||
|
#include "board_config.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_SW_TIMER_REGISTER_COUNT 10
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SW_TIMER_RUN_NONE,
|
||||||
|
SW_TIMER_RUN_ONNY_ONCE,
|
||||||
|
SW_TIMER_RUN_CONTINUE,
|
||||||
|
}SW_TIMER_CALLBACK_TYPE;
|
||||||
|
|
||||||
|
typedef void (*SW_TIMER_CALLBACK_FN) (void);
|
||||||
|
|
||||||
|
|
||||||
|
bool SW_Timer_Callback_Register(SW_TIMER_CALLBACK_TYPE type, uint32_t PeriodTime, SW_TIMER_CALLBACK_FN pTimerCallback);
|
||||||
|
bool SW_Timer_Callback_UnRegister(SW_TIMER_CALLBACK_FN pSwTimerCallbackFunc);
|
||||||
|
void SW_Timer_Callback_Process(void);
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
|
||||||
|
|
||||||
|
<component name="EventRecorderStub" version="1.0.0"/> <!--name and version of the component-->
|
||||||
|
<events>
|
||||||
|
</events>
|
||||||
|
|
||||||
|
</component_viewer>
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue