Загрузка данных


#include "mik32_hal_pcc.h"
#include "mik32_hal_gpio.h"
#include "uart_lib.h"
#include "xprintf.h"

#define d4_set() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_4, GPIO_PIN_HIGH)
#define d5_set() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_5, GPIO_PIN_HIGH)
#define d6_set() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_6, GPIO_PIN_HIGH)
#define d7_set() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_7, GPIO_PIN_HIGH)
#define d4_reset() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_4, GPIO_PIN_LOW)
#define d5_reset() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_5, GPIO_PIN_LOW)
#define d6_reset() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_6, GPIO_PIN_LOW)
#define d7_reset() HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_7, GPIO_PIN_LOW)

#define e1 HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_3, GPIO_PIN_HIGH) // установка линии E в 1
#define e0 HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_3, GPIO_PIN_LOW) // установка линии E в 0
#define rs1 HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_2, GPIO_PIN_HIGH) // установка линии RS в 1 (данные)
#define rs0 HAL_GPIO_WritePin(GPIO_2, GPIO_PIN_2, GPIO_PIN_LOW) // установка линии RS в 0 (команда)


void SystemClock_Config(void);
void GPIO_Init(void);
void LCD_ini(void);


int main()
{
    SystemClock_Config();
    GPIO_Init();
    LCD_ini();
    LCD_SendChar('K');
    LCD_SendChar('u');
    LCD_SendChar('d');
    LCD_SendChar('a');
    LCD_SendChar('n');
    LCD_SendChar('K');
    LCD_SendChar('i');
    LCD_SendChar('n');
    LCD_SendChar('Y');
    LCD_SendChar('a');
    LCD_SendChar('g');
    LCD_SendChar('u');
    LCD_SendChar('d');
    LCD_SendChar('i');
    LCD_SendChar('n');
    LCD_SendChar('a');

    while (1)
    {


    }
}

void GPIO_Init()
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    __HAL_PCC_GPIO_2_CLK_ENABLE();
    __HAL_PCC_GPIO_0_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
    GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT;
    GPIO_InitStruct.Pull = HAL_GPIO_PULL_UP;
    HAL_GPIO_Init(GPIO_2, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_3;
    GPIO_InitStruct.Mode = HAL_GPIO_MODE_GPIO_OUTPUT;
    GPIO_InitStruct.Pull = HAL_GPIO_PULL_NONE;
    HAL_GPIO_Init(GPIO_0, &GPIO_InitStruct);

}

void SystemClock_Config(void)
{
    PCC_InitTypeDef PCC_OscInit = {0};

    PCC_OscInit.OscillatorEnable = PCC_OSCILLATORTYPE_ALL;
    PCC_OscInit.FreqMon.OscillatorSystem = PCC_OSCILLATORTYPE_OSC32M;
    PCC_OscInit.FreqMon.ForceOscSys = PCC_FORCE_OSC_SYS_UNFIXED;
    PCC_OscInit.FreqMon.Force32KClk = PCC_FREQ_MONITOR_SOURCE_OSC32K;
    PCC_OscInit.AHBDivider = 0;
    PCC_OscInit.APBMDivider = 0;
    PCC_OscInit.APBPDivider = 0;
    PCC_OscInit.HSI32MCalibrationValue = 128;
    PCC_OscInit.LSI32KCalibrationValue = 8;
    PCC_OscInit.RTCClockSelection = PCC_RTC_CLOCK_SOURCE_AUTO;
    PCC_OscInit.RTCClockCPUSelection = PCC_CPU_RTC_CLOCK_SOURCE_OSC32K;
    HAL_PCC_Config(&PCC_OscInit);
}

void LCD_Data(uint8_t dt)

{
        rs1;
        LCD_WriteData(dt>>4);
        e1;
        HAL_DelayMs(200);
        e0;
        LCD_WriteData(dt);
        e1;
        HAL_DelayMs(200);
        e0;
}

void LCD_Clear(void)

{
        LCD_SendCommand4(0x01);
        HAL_DelayMs(200);
}

void LCD_SendChar(char ch)

{
        LCD_Data((uint8_t) ch);
        HAL_DelayMs(200);
}

void delay(void)

{
        uint16_t i;
        for(i=0;i<1000;i++)
 {

 }

}

void LCD_WriteData(uint8_t dt)

{
        if(((dt >> 3)&0x01)==1) {d7_set();} else {d7_reset();}
        if(((dt >> 2)&0x01)==1) {d6_set();} else {d6_reset();}
        if(((dt >> 1)&0x01)==1) {d5_set();} else {d5_reset();}
        if((dt&0x01)==1) {d4_set();} else {d4_reset();}
}

void LCD_Command(uint8_t dt)

{
        rs0;
        LCD_WriteData(dt>>4);
        e1;
        HAL_DelayMs(200);
        e0;
        LCD_WriteData(dt);
        e1;
        HAL_DelayMs(200);
        e0;
}

void LCD_ini(void)

{
	HAL_DelayMs(200);
	        rs0;
	        LCD_WriteData(1);
	        e1;
	        HAL_DelayMs(200);
	        e0;
	        HAL_DelayMs(200);
	        LCD_WriteData(12);
	        e1;
	        HAL_DelayMs(200);
	        e0;
	        HAL_DelayMs(200);
	        LCD_WriteData(12);
	        e1;
	        HAL_DelayMs(200);
	        e0;
	        HAL_DelayMs(200);
	        LCD_Command(0x28);//режим 4 бит, 2 линии (для нашего большого дисплея это 4 линии), шрифт 5х8
	        HAL_DelayMs(200);
	        LCD_Command(0x28);//еще раз для верности
	        HAL_DelayMs(200);
	        LCD_Command(0x0F);//дисплей включаем (D=1), также включаем пока все курсоры
	        HAL_DelayMs(200);
	        LCD_Command(0x01);//уберем мусор
	        HAL_DelayMs(200);
	        LCD_Command(0x06);//пишем влево.
	        HAL_DelayMs(200);
	        LCD_Command(0x02);//возврат курсора в нулевое положение
	        HAL_DelayMs(200);
}