51单片机如何在数码管按键输入2到4位的数字的代码
时间: 2024-02-05 12:11:02 浏览: 27
以下是一个简单的例子,使用 4 个数码管和 4 个按键,可以输入 2 到 4 位数字。
```
#include <reg51.h>
#define DIGIT_PORT P0 // 数码管端口
#define KEY_PORT P1 // 按键端口
// 数码管编码表
unsigned char code DIGIT_CODE[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F, // 9
0x00, // 空
};
void delay(unsigned int t) // 延时函数
{
unsigned int i;
for (i = 0; i < t; i++);
}
unsigned char get_key() // 获取按键值
{
unsigned char key_code = 0xFF;
unsigned char i;
KEY_PORT = 0x0F;
if (KEY_PORT != 0x0F) {
delay(1000);
if (KEY_PORT != 0x0F) {
key_code = KEY_PORT & 0x0F;
KEY_PORT = 0xF0;
key_code |= KEY_PORT;
key_code ^= 0xFF;
for (i = 0; i < 4; i++) {
if (key_code == (1 << i)) {
return i + 1;
}
}
}
}
return 0;
}
void display(unsigned char digit, unsigned char num) // 显示数字
{
DIGIT_PORT = DIGIT_CODE[num];
switch (digit) {
case 1: DIGIT_PORT |= 0x80; break;
case 2: DIGIT_PORT |= 0x40; break;
case 3: DIGIT_PORT |= 0x20; break;
case 4: DIGIT_PORT |= 0x10; break;
}
}
void main()
{
unsigned char i, j;
unsigned char digit, num;
unsigned char key_value[4];
while (1) {
digit = 4;
for (i = 0; i < 4; i++) {
key_value[i] = 0;
}
while (1) {
num = get_key();
if (num > 0 && digit > 0) {
key_value[4 - digit] = num;
digit--;
if (digit == 0) {
break;
}
}
for (j = 1; j <= 4; j++) {
display(j, key_value[j - 1]);
delay(100);
display(j, 10);
}
}
for (j = 1; j <= 4; j++) {
display(j, key_value[j - 1]);
}
}
}
```
注:以上代码仅为示例,具体实现可能需要根据实际情况进行调整。同时,按键的接法也需要注意,可以参考具体的开发板说明。