STM32F103ZET6按键4乘4并行驱动LCD1602计算器Keil5
时间: 2023-10-23 07:14:21 浏览: 89
LCD1602计算器
下面是一个简单的按键4乘4并行驱动LCD1602计算器的Keil5程序,供您参考:
```c
#include "stm32f10x.h"
#include "lcd1602.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
uint8_t keyVal;
uint8_t lastKeyVal = 0xFF;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// 初始化LCD1602
LCD1602_Init();
// 初始化按键输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 初始化按键输出引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while(1)
{
// 检测按键状态
keyVal = (GPIO_ReadInputData(GPIOA) >> 0) & 0x0F;
if(keyVal != lastKeyVal)
{
lastKeyVal = keyVal;
if(keyVal == 0x07)
{
// 按下等于键时进行计算
int result = calculate();
// 在LCD1602上显示计算结果
LCD1602_WriteString("Result: ");
LCD1602_WriteInt(result);
}
else
{
// 按下数字键时在LCD1602上显示数字
LCD1602_WriteInt(keyVal);
}
}
// 按键扫描
GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_SetBits(GPIOA, GPIO_Pin_4);
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x01 == 0) keyVal = 1;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x02 == 0) keyVal = 2;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x04 == 0) keyVal = 3;
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
GPIO_SetBits(GPIOA, GPIO_Pin_5);
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x01 == 0) keyVal = 4;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x02 == 0) keyVal = 5;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x04 == 0) keyVal = 6;
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
GPIO_SetBits(GPIOA, GPIO_Pin_6);
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x01 == 0) keyVal = 7;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x02 == 0) keyVal = 8;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x04 == 0) keyVal = 9;
GPIO_ResetBits(GPIOA, GPIO_Pin_6);
GPIO_SetBits(GPIOA, GPIO_Pin_7);
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x01 == 0) keyVal = 0;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x02 == 0) keyVal = 0;
if((GPIO_ReadInputData(GPIOA) >> 0) & 0x04 == 0) keyVal = 0;
GPIO_ResetBits(GPIOA, GPIO_Pin_7);
}
}
int calculate()
{
// 进行计算
return 0;
}
```
需要注意的是,以上代码只是一个简单的示例,仅供参考。如果您需要更加完整和准确的程序,建议您参考相关的嵌入式开发教程或者请专业的嵌入式开发工程师进行开发。
阅读全文