init
This commit is contained in:
109
научка/code/pwm_motor_control/Interface/i2c_lcd.c
Normal file
109
научка/code/pwm_motor_control/Interface/i2c_lcd.c
Normal file
@@ -0,0 +1,109 @@
|
||||
#include "i2c_lcd.h"
|
||||
|
||||
extern unsigned tim1_cnt;
|
||||
|
||||
|
||||
//extern struct var_result VAR_RESULT;
|
||||
//LCD Delays (Delay1 - )
|
||||
|
||||
/**
|
||||
* @brief Initialization of LCD.
|
||||
* @note This called from main
|
||||
*/
|
||||
void LCD_Init(LCDI2C_HandleTypeDef *hlcd)
|
||||
{
|
||||
for (hlcd->Address = 0; hlcd->Address < 128; hlcd->Address++)
|
||||
{
|
||||
if(HAL_I2C_IsDeviceReady(hlcd->hi2c, hlcd->Address << 1, 1, HAL_MAX_DELAY)==HAL_OK) break; // scan i2c adresses
|
||||
}
|
||||
if (hlcd->Address >= 128)
|
||||
return;
|
||||
hlcd->Address = hlcd->Address << 1;
|
||||
|
||||
osDelay(500);
|
||||
LCD_Send_CMD(hlcd, 0x30);
|
||||
osDelay(5);
|
||||
LCD_Send_CMD(hlcd, 0x30);
|
||||
osDelay(1);
|
||||
LCD_Send_CMD(hlcd, 0x30);
|
||||
osDelay(10);
|
||||
LCD_Send_CMD(hlcd, 0x20); // 4bit mode
|
||||
osDelay(10);
|
||||
|
||||
//dislay initialisation
|
||||
LCD_Send_CMD(hlcd, 0x28); // display off
|
||||
osDelay(1);
|
||||
LCD_Send_CMD(hlcd, 0x08); // display off
|
||||
osDelay(50);
|
||||
LCD_Send_CMD(hlcd, 0x01); // clear display
|
||||
osDelay(10);
|
||||
osDelay(10);
|
||||
LCD_Send_CMD(hlcd, 0x06); // direction of cursor
|
||||
osDelay(1);
|
||||
LCD_Send_CMD(hlcd, 0x0C); // display on / cursor off
|
||||
|
||||
}
|
||||
|
||||
void LCD_Reinit(LCDI2C_HandleTypeDef *hlcd)
|
||||
{
|
||||
osDelay(1000);
|
||||
LCD_Init(hlcd);
|
||||
hlcd->LCD_REINIT=0;
|
||||
}
|
||||
void LCD_Check(LCDI2C_HandleTypeDef *hlcd)
|
||||
{
|
||||
if(hlcd->LCD_REINIT) LCD_Reinit(hlcd);
|
||||
}
|
||||
|
||||
void LCD_Send_CMD (LCDI2C_HandleTypeDef *hlcd, char cmd)
|
||||
{
|
||||
char data_up, data_low;
|
||||
uint8_t data_t[4];
|
||||
data_up = (cmd&0xf0);
|
||||
data_low=((cmd<<4)&0xf0);
|
||||
data_t[0]=data_up|0x0C; //en=1, rs=0
|
||||
data_t[1]=data_up|0x08; //en=0, rs=0
|
||||
data_t[2]=data_low|0x0C; //en=1, rs=0
|
||||
data_t[3]=data_low|0x08; //en=0, rs=0
|
||||
HAL_I2C_Master_Transmit(hlcd->hi2c, hlcd->Address, (uint8_t *)data_t, 4, HAL_MAX_DELAY);
|
||||
}
|
||||
|
||||
void LCD_Send_DATA (LCDI2C_HandleTypeDef *hlcd, char data)
|
||||
{
|
||||
char data_up, data_low;
|
||||
uint8_t data_t[4];
|
||||
data_up = (data&0xf0);
|
||||
data_low=((data<<4)&0xf0);
|
||||
data_t[0]=data_up|0x0D; //en=1, rs=1
|
||||
data_t[1]=data_up|0x09; //en=0, rs=1
|
||||
data_t[2]=data_low|0x0D; //en=1, rs=1
|
||||
data_t[3]=data_low|0x09; //en=0, rs=1
|
||||
HAL_I2C_Master_Transmit(hlcd->hi2c, hlcd->Address, (uint8_t *)data_t, 4, HAL_MAX_DELAY);
|
||||
}
|
||||
|
||||
void LCD_Send_STRING(LCDI2C_HandleTypeDef *hlcd, char *str)
|
||||
{
|
||||
while (*str)
|
||||
{
|
||||
LCD_Send_DATA (hlcd, *str++);
|
||||
osDelay(1);
|
||||
}
|
||||
}
|
||||
|
||||
void LCD_Send_INT(LCDI2C_HandleTypeDef *hlcd, int int_to_string, uint8_t size)
|
||||
{
|
||||
char string_from_int[10];
|
||||
if(size)
|
||||
sprintf(string_from_int, "%0*d", size, int_to_string);
|
||||
else
|
||||
sprintf(string_from_int, "%d", int_to_string);
|
||||
LCD_Send_STRING(hlcd, string_from_int);
|
||||
}
|
||||
|
||||
void LCD_Send_NUMB(LCDI2C_HandleTypeDef *hlcd, float numb_to_string, uint8_t size)
|
||||
{
|
||||
char string_from_numb[size];
|
||||
snprintf(string_from_numb, size+1, "%.2f", numb_to_string);
|
||||
LCD_Send_STRING(hlcd, string_from_numb);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user