使用STC89C52RC/LE52RC的LCD1602实现用按键或者按键矩阵输入一任意4位数(不为0),并通过LCD1602进行显示
时间: 2024-03-26 08:34:33 浏览: 84
好的,我来解答您的问题。
首先,您需要准备以下材料:
- STC89C52RC/LE52RC单片机
- LCD1602液晶显示屏
- 按键或按键矩阵
- 电容
- 电阻
- 杜邦线
- 电源
接下来,您可以按照以下步骤进行操作:
1. 连接电路
将LCD1602的引脚分别连接至STC89C52RC/LE52RC单片机的对应引脚。按键或按键矩阵的引脚连接至单片机的输入引脚。电容和电阻用于稳定电路。
2. 编写程序
下面是一个示例程序,可以实现您的要求:
```c
#include <reg52.h>
#define LCD1602_DB P0
sbit LCD1602_RS = P2^0;
sbit LCD1602_RW = P2^1;
sbit LCD1602_E = P2^2;
void delay(unsigned int t) {
while (t--);
}
void writeCommand(unsigned char command) {
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_E = 1;
delay(5);
LCD1602_DB = command;
delay(5);
LCD1602_E = 0;
}
void writeData(unsigned char data) {
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_E = 1;
delay(5);
LCD1602_DB = data;
delay(5);
LCD1602_E = 0;
}
void initLCD() {
writeCommand(0x38);
writeCommand(0x08);
writeCommand(0x01);
writeCommand(0x06);
writeCommand(0x0c);
}
void displayNumber(unsigned int num) {
unsigned char i;
unsigned char numChar[5];
if (num == 0) {
writeData('0');
return;
}
for (i = 0; num != 0; i++) {
numChar[i] = num % 10;
num /= 10;
}
for (i--; i >= 0; i--) {
writeData(numChar[i] + '0');
}
}
unsigned int getKey() {
unsigned int key;
P1 = 0xff;
while (P1 == 0xff);
delay(1000);
if (P1 != 0xff) {
P1 = 0xff;
switch (P1) {
case 0xfe: key = 1; break;
case 0xfd: key = 2; break;
case 0xfb: key = 3; break;
case 0xf7: key = 4; break;
default: break;
}
}
return key;
}
void main() {
unsigned int num = 0;
unsigned int key;
initLCD();
while (1) {
key = getKey();
if (key != 0 && num < 10000) {
num = num * 10 + key;
displayNumber(num);
}
}
}
```
3. 烧录程序
将编写好的程序烧录进单片机中。
4. 运行程序
按下按键或按键矩阵中的任意键,LCD1602屏幕上会显示输入的数字。可以继续输入数字,直到四位数为止。
希望这个回答对您有所帮助!
阅读全文