0% found this document useful (0 votes)
81 views

Include

The document contains C code for initializing and controlling an LCD display and other peripherals on a microcontroller. It includes function definitions for initializing the LCD, writing characters and commands to the LCD, reading button input, and controlling stepper motors. The main function initializes the system clock, GPIO pins, USART communication and calls the LCD initialization function before entering a loop that reads button input and displays characters on the LCD.

Uploaded by

Fawaz Hanif
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
81 views

Include

The document contains C code for initializing and controlling an LCD display and other peripherals on a microcontroller. It includes function definitions for initializing the LCD, writing characters and commands to the LCD, reading button input, and controlling stepper motors. The main function initializes the system clock, GPIO pins, USART communication and calls the LCD initialization function before entering a loop that reads button input and displays characters on the LCD.

Uploaded by

Fawaz Hanif
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

#include "main.

h"

/* Private includes ----------------------------------------------------------*/


/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/


/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/


/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/


/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/


UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/


void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
/* USER CODE BEGIN PFP */
void LCD_init(void);
void LCD(uint8_t val_1, uint8_t cmd);
void LCD_str(unsigned char *str1);

unsigned char key_press(void);


unsigned char check_clm(unsigned char pin_var);
void Disp_pass_key(unsigned char key_var);

void stepper_forward(unsigned int steps);


void stepper_reverse(unsigned int steps);
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/


/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
unsigned char var1;
unsigned char arr[] = "Welcome";
/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */


SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */


MX_GPIO_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
LCD_init();
LCD_str(&arr[0]);
HAL_Delay(1000);
LCD(0x80, 0);
LCD_str("Enter password");
LCD(0xC0, 0);
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */


HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_Delay(150);
var1 = key_press();
Disp_pass_key(var1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_Delay(150);
}
/* USER CODE END 3 */
}

/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Configure the main internal regulator output voltage


*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 16;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)


{
Error_Handler();
}
}

/**
* @brief USART2 Initialization Function
* @param None
* @retval None
*/
static void MX_USART2_UART_Init(void)
{

/* USER CODE BEGIN USART2_Init 0 */

/* USER CODE END USART2_Init 0 */

/* USER CODE BEGIN USART2_Init 1 */

/* USER CODE END USART2_Init 1 */


huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART2_Init 2 */

/* USER CODE END USART2_Init 2 */

/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};

/* GPIO Ports Clock Enable */


__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|LD2_Pin
|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9
|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15,
GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
|GPIO_PIN_15|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);

/*Configure GPIO pin : B1_Pin */


GPIO_InitStruct.Pin = B1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pins : PC0 PC1 PC2 PC3


PC4 PC5 PC6 PC7
PC8 PC9 PC10 PC11
PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/*Configure GPIO pins : PA0 PA1 PA4 LD2_Pin


PA6 PA7 PA8 PA9
PA10 PA11 PA12 PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|LD2_Pin
|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9
|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/*Configure GPIO pins : PB0 PB1 PB2 PB4 */


GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pins : PB10 PB12 PB13 PB14


PB15 PB5 PB6 PB7
PB8 PB9 */
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
|GPIO_PIN_15|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pin : PD2 */


GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

}
/* USER CODE BEGIN 4 */
void LCD_init(void)
{
LCD(0x38, 0); //2 lines, 5*7 matrix
//LCD(0x0C, 0); //Display on, cursor off
LCD(0x0E, 0); //Display on, cursor blinking
LCD(0x06, 0); //Increment cursor (shift cursor to right)
LCD(0x01, 0); //Clear display screen
LCD(0x80, 0); //Force cursor to beginning ( 1st line)
}

void LCD(uint8_t val_1, uint8_t cmd)


{
uint8_t data1;

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, cmd); //set RS = cmd;


(cmd=0) => Command; (cmd=1) => Data

data1 = val_1 & 0x01;


//mask bit and assign it to GPIO 0
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, data1);

data1 = (val_1>>1) & 0x01;


//mask bit and assign it to GPIO 1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, data1);

data1 = (val_1>>2) & 0x01;


//mask bit and assign it to GPIO 2
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, data1);

data1 = (val_1>>3) & 0x01;


//mask bit and assign it to GPIO 3
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, data1);

data1 = (val_1>>4) & 0x01;


//mask bit and assign it to GPIO 4
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, data1);

data1 = (val_1>>5) & 0x01;


//mask bit and assign it to GPIO 5
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, data1);

data1 = (val_1>>6) & 0x01;


//mask bit and assign it to GPIO 6
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, data1);

data1 = (val_1>>7) & 0x01;


//mask bit and assign it to GPIO 7
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, data1);

//---------------------------------------------//
// Enable Pulse //
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
}

void LCD_str(unsigned char *str1)


{
while(*str1 != 0)
{
LCD(*str1, 1);
str1++;
}
}

unsigned char key_press(void)


{
unsigned char clm_var;
unsigned char key_arr[] = {7, 8, 9, 15, 4, 5, 6, 14, 1, 2, 3, 13, 10, 0, 11,
12};
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8,
GPIO_PIN_RESET);
/*LCD(0xC0, 0);
LCD_str("KPC :");*/

if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0)
{
clm_var = check_clm(GPIO_PIN_0);
return key_arr[clm_var-1];
}
else if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0)
{
clm_var = check_clm(GPIO_PIN_1);
return key_arr[clm_var+3];
}
else if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0)
{
clm_var = check_clm(GPIO_PIN_2);
return key_arr[clm_var+7];
}
else if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4) == 0)
{
clm_var = check_clm(GPIO_PIN_4);
return key_arr[clm_var+11];
}
else
return 16;
}

unsigned char check_clm(unsigned char pin_var)


{
unsigned char clm;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8,
GPIO_PIN_SET); //Set all columns to logic 1 ie connected to Vcc

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);


//set first column to Gnd
if(HAL_GPIO_ReadPin(GPIOB, pin_var) == 0)
clm = 1;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
//set second column to Gnd
if(HAL_GPIO_ReadPin(GPIOB, pin_var) == 0)
clm = 2;

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);


HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
//set third column to Gnd
if(HAL_GPIO_ReadPin(GPIOB, pin_var) == 0)
clm = 3;

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);


HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
//set fourth column to Gnd
if(HAL_GPIO_ReadPin(GPIOB, pin_var) == 0)
clm = 4;

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8,
GPIO_PIN_RESET); //Set all columns to logic 0 ie connected to GND
return clm;
}

void Disp_pass_key(unsigned char key_var)


{
static unsigned char pass_var1 = 0;
static unsigned char key_arr[5];
unsigned char enter_key[5] = {"12345"};
unsigned char i;

if(key_var != 16)
{
key_arr[pass_var1] = key_var + 48;
LCD('*', 1);
//LCD(key_var + 48, 1);
pass_var1++;
if(pass_var1 == 5)
{
LCD(0xC0, 0);
for(i=0;i<5;i++)
{
if(key_arr[i] != enter_key[i])
{
LCD_str("Re-enter pw");
HAL_Delay(100);
pass_var1 = 0;
break;
}
}
if(i == 5)
{
LCD_str("Welcome!!!!");
stepper_forward(10);
HAL_Delay(100);
stepper_reverse(10);
}
pass_var1 = 0;
LCD(0x01, 0);
LCD(0x80, 0);
LCD_str("Enter password:");
LCD(0xC0, 0);
}

}
}

void stepper_forward(unsigned int steps)


{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3,
GPIO_PIN_RESET);

for(steps; steps!=0; steps--)


{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0 | GPIO_PIN_2, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2,
GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_Delay(20);
}
}

void stepper_reverse(unsigned int steps)


{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3,
GPIO_PIN_RESET);

for(steps; steps!=0; steps--)


{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0 | GPIO_PIN_3, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3,
GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_Delay(20);
}
}
/* USER CODE END 4 */

/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy