pic16f877a利用I/O直接扩展键盘,利用PORTB连接普通键盘和矩阵式键盘,使用查询工作方式检测按键动作,自定义按键的键号并将结果通过七段数码显示器显示出来。要求使用查询方式和中断方式两种方法实现按键动作的检测。代码
时间: 2024-03-26 20:34:18 浏览: 16
以下是利用PIC16F877A进行I/O直接扩展键盘的代码,其中使用PORTB连接普通键盘和矩阵式键盘,使用查询工作方式检测按键动作,自定义按键的键号并将结果通过七段数码显示器显示出来,同时使用查询方式和中断方式两种方法实现按键动作的检测。
```
#include <xc.h>
#include <stdio.h>
#define _XTAL_FREQ 20000000
unsigned char key[4][4]={{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
unsigned char col,row;
char keypress;
void main(void)
{
TRISB=0xF0;
TRISD=0x00;
PORTB=0x0F;
PORTD=0x00;
INTCON=0xA0;
OPTION_REG=0x00;
while(1)
{
PORTB=0x0E;
asm("NOP");
col=(PORTB & 0xF0)>>4;
if(col!=0x0F)
{
row=0;
while(1)
{
row++;
PORTB<<=1;
asm("NOP");
col=(PORTB & 0xF0)>>4;
if(col!=0x0F)
break;
}
if(col==0x0E) keypress=key[row-1][0];
if(col==0x0D) keypress=key[row-1][1];
if(col==0x0B) keypress=key[row-1][2];
if(col==0x07) keypress=key[row-1][3];
while((PORTB & 0xF0)!=0xF0);
{
PORTD=keypress;
}
}
}
}
void interrupt ISR()
{
if(INTF)
{
INTF=0;
asm("NOP");
col=(PORTB & 0xF0)>>4;
if(col!=0x0F)
{
row=0;
while(1)
{
row++;
PORTB<<=1;
asm("NOP");
col=(PORTB & 0xF0)>>4;
if(col!=0x0F)
break;
}
if(col==0x0E) keypress=key[row-1][0];
if(col==0x0D) keypress=key[row-1][1];
if(col==0x0B) keypress=key[row-1][2];
if(col==0x07) keypress=key[row-1][3];
while((PORTB & 0xF0)!=0xF0);
{
PORTD=keypress;
}
}
}
}
```
注:由于本代码没有提供七段数码显示器的具体连接方式,因此需要根据具体的硬件连接方式进行修改。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)