写一个c51代码要求如下:1、用Proteus软件画出电路原理图,在单片机上外接8个按键和一个四位一体的数码管2、要求在显示器上显示键盘的输入量3、要求键盘扫描和数码管显示设计成子程序,
时间: 2023-06-19 10:08:20 浏览: 238
51单片机+74LS245+数码管+矩阵键盘组成的动态扫描显示电路包含源代码和Proteus仿真
5星 · 资源好评率100%
以下是一个基本的C51代码,可以实现要求的功能:
```
#include <reg51.h>
#define KEYPAD P1 // 键盘连接到P1口
#define DIGIT P2 // 数码管连接到P2口
unsigned char key_code[4][4] = {{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}};
void delay_ms(unsigned int ms) // 延时函数
{
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 114; j++);
}
unsigned char scan_keypad() // 扫描键盘
{
unsigned char row, col, key;
KEYPAD = 0xf0; // 将列置高,行置低
row = KEYPAD; // 读取行
KEYPAD = 0x0f; // 将行置高,列置低
col = KEYPAD; // 读取列
if(col == 0x0f) // 没有按键按下
return 0;
else
{
col = col & 0x0f;
row = row & 0xf0;
key = key_code[row >> 4][col]; // 根据行列获取按键编码
return key;
}
}
void display_digit(unsigned char digit) // 显示数字
{
DIGIT = digit;
}
void display_num(unsigned int num) // 显示数字
{
unsigned char digit;
digit = num / 1000; // 千位
display_digit(digit);
delay_ms(5);
digit = (num % 1000) / 100; // 百位
display_digit(digit);
delay_ms(5);
digit = (num % 100) / 10; // 十位
display_digit(digit);
delay_ms(5);
digit = num % 10; // 个位
display_digit(digit);
delay_ms(5);
}
void main()
{
unsigned char key;
unsigned int num = 0;
while(1)
{
key = scan_keypad(); // 扫描键盘
if(key != 0)
{
display_digit(key); // 显示按键
delay_ms(100);
num = num * 10 + (key - '0'); // 将按键编码转换为数字
display_num(num); // 显示数字
}
}
}
```
注:以上代码仅供参考,具体实现可能需要根据具体硬件电路进行调整。
阅读全文