利用8255A给单片机拓展一个4×4的键盘。当有键被摁下时,由与P3.0相连的喇叭响一声,编程实现该功能。
时间: 2023-06-20 13:09:47 浏览: 68
8255A是一种常用的并行输入输出接口芯片,它可以通过IO口与单片机进行通信。下面是一个基于8255A的4×4键盘输入程序示例:
```c
#include <reg51.h>
#define KEY_PRT P0
#define KEY_DDR P0
#define BUZZER P3
sbit ROW1 = KEY_DDR^0;
sbit ROW2 = KEY_DDR^1;
sbit ROW3 = KEY_DDR^2;
sbit ROW4 = KEY_DDR^3;
sbit COL1 = KEY_PRT^4;
sbit COL2 = KEY_PRT^5;
sbit COL3 = KEY_PRT^6;
sbit COL4 = KEY_PRT^7;
unsigned char key_press(void);
void main()
{
unsigned char key;
while(1)
{
key = key_press();
if(key != 0xFF)
{
BUZZER = 0;
delay(50);
BUZZER = 1;
}
}
}
unsigned char key_press(void)
{
unsigned char key = 0xFF;
KEY_DDR = 0xF0; // 行为高电平,列为低电平
KEY_PRT = 0x0F; // 列上拉,行输出低电平
if(COL1 == 0) // 判断第1列有无按键按下
{
delay(10);
if(COL1 == 0)
key = 0;
}
else if(COL2 == 0) // 判断第2列有无按键按下
{
delay(10);
if(COL2 == 0)
key = 1;
}
else if(COL3 == 0) // 判断第3列有无按键按下
{
delay(10);
if(COL3 == 0)
key = 2;
}
else if(COL4 == 0) // 判断第4列有无按键按下
{
delay(10);
if(COL4 == 0)
key = 3;
}
KEY_DDR = 0x0F; // 列为高电平,行为低电平
KEY_PRT = 0xF0; // 行上拉,列输出低电平
if(ROW1 == 0) // 判断第1行有无按键按下
{
delay(10);
if(ROW1 == 0)
key = key + 0;
}
else if(ROW2 == 0) // 判断第2行有无按键按下
{
delay(10);
if(ROW2 == 0)
key = key + 4;
}
else if(ROW3 == 0) // 判断第3行有无按键按下
{
delay(10);
if(ROW3 == 0)
key = key + 8;
}
else if(ROW4 == 0) // 判断第4行有无按键按下
{
delay(10);
if(ROW4 == 0)
key = key + 12;
}
return key;
}
```
说明:
1. ROW1~ROW4为行引脚,COL1~COL4为列引脚,按键通过行和列的交叉来实现输入。
2. 程序中先将行设为高电平,列设为低电平,然后读取列的电平状态,判断是否有按键按下。
3. 若有按键按下,则通过延时去抖动,再次检测该列是否有按键按下,并返回按键所在的列号。
4. 再将列设为高电平,行设为低电平,然后读取行的电平状态,判断是否有按键按下。
5. 若有按键按下,则通过延时去抖动,再次检测该行是否有按键按下,并返回按键所在的行号。
6. 最后返回按键所在的位置。
在程序中,当有按键按下时,由P3.0相连的喇叭会响一声。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)