请编写一个基于STC89C52RC/LE52RC的基于"4X4矩阵键盘+ OLED显示屏",实现一个计算器的代码,并使这个代码能够正确在keil上运行
时间: 2024-02-05 19:14:08 浏览: 91
很高兴为您提供代码。
首先,我们需要了解一下STC89C52RC/LE52RC的GPIO口和OLED显示屏的控制方式,以及4X4矩阵键盘的扫描方式。
在这个例子中,我们假设使用P1口作为矩阵键盘输入,使用P2口作为OLED显示屏的控制口。
以下是主要代码:
```C
#include "reg52.h"
#include "oled.h"
unsigned char key_scan(void); // 矩阵键盘扫描函数
void key_action(unsigned char key); // 按键响应函数
unsigned char key_value[] = {'7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', 'C', '0', '=', '+'}; // 键值表
unsigned char key_status[16] = {0}; // 记录键盘按下状态
unsigned char key_last[16] = {0}; // 记录上一次键盘按下状态
unsigned char buf[20] = {0}; // 显示缓冲区
unsigned char num1 = 0; // 第一个操作数
unsigned char num2 = 0; // 第二个操作数
unsigned char op = '+'; // 操作符
unsigned char result = 0; // 运算结果
void main(void)
{
unsigned char key = 0;
OLED_Init(); // OLED初始化
while(1)
{
key = key_scan(); // 扫描矩阵键盘
if(key != 0xFF) // 如果有按键按下
{
key_action(key); // 执行按键响应函数
}
sprintf(buf, "%d%c%d=%d", num1, op, num2, result); // 格式化显示字符串
OLED_ShowString(0, 0, buf); // 在OLED上显示结果
}
}
unsigned char key_scan(void)
{
unsigned char i = 0;
unsigned char key = 0xFF;
for(i = 0; i < 4; i++) // 扫描4行
{
P1 = (0x80 >> i); // 设置扫描行的输出电平
if((P1 & 0xF0) != 0xF0) // 检测列是否被按下
{
key_last[key] = key_status[key]; // 保存上一次状态
key_status[key] = 1; // 设置当前状态为按下
while((P1 & 0xF0) != 0xF0); // 等待按键释放
return key; // 返回键值
}
key++; // 下一个键
}
return 0xFF; // 没有按键按下
}
void key_action(unsigned char key)
{
if(key >= 0 && key <= 9) // 数字键
{
if(op == '+') // 第一个操作数
{
num1 = num1 * 10 + key;
}
else // 第二个操作数
{
num2 = num2 * 10 + key;
}
}
else if(key == 10 || key == 11 || key == 12 || key == 13) // 加减乘除键
{
op = key_value[key];
}
else if(key == 14) // 清除键
{
num1 = num2 = result = 0;
op = '+';
}
else if(key == 15) // 计算键
{
switch(op) // 根据操作符计算结果
{
case '+': result = num1 + num2; break;
case '-': result = num1 - num2; break;
case '*': result = num1 * num2; break;
case '/': result = num1 / num2; break;
}
}
while(key_scan() != 0xFF); // 等待按键释放
}
```
在这个代码中,我们使用了OLED显示屏和矩阵键盘。我们通过扫描矩阵键盘来获取用户输入,并在OLED上显示结果。
这个计算器支持加、减、乘、除、清除和计算操作,可以对整数进行四则运算。
在使用这个代码之前,您需要根据您的硬件设置修改GPIO口和OLED显示屏的控制方式。同时,您还需要添加OLED库和头文件到您的工程中。
希望这个代码能够帮助到您!
阅读全文