【zz】4*4键盘矩阵程序[PIC16F877A+PICC]
时间: 2024-02-28 13:54:50 浏览: 86
好的,下面是一个基于 PIC16F877A 和 PICC 的 4*4 键盘矩阵程序的代码:
```c
#include <16F877A.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#define ROW1 PIN_D0
#define ROW2 PIN_D1
#define ROW3 PIN_D2
#define ROW4 PIN_D3
#define COL1 PIN_D4
#define COL2 PIN_D5
#define COL3 PIN_D6
#define COL4 PIN_D7
char key[4][4] = {{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
void colscan(){
output_high(COL1);
output_low(COL2);
output_low(COL3);
output_low(COL4);
if(input(ROW1)==0) printf(key[0][0]);
if(input(ROW2)==0) printf(key[1][0]);
if(input(ROW3)==0) printf(key[2][0]);
if(input(ROW4)==0) printf(key[3][0]);
output_low(COL1);
output_high(COL2);
output_low(COL3);
output_low(COL4);
if(input(ROW1)==0) printf(key[0][1]);
if(input(ROW2)==0) printf(key[1][1]);
if(input(ROW3)==0) printf(key[2][1]);
if(input(ROW4)==0) printf(key[3][1]);
output_low(COL2);
output_high(COL3);
output_low(COL4);
output_low(COL1);
if(input(ROW1)==0) printf(key[0][2]);
if(input(ROW2)==0) printf(key[1][2]);
if(input(ROW3)==0) printf(key[2][2]);
if(input(ROW4)==0) printf(key[3][2]);
output_low(COL3);
output_high(COL4);
output_low(COL1);
output_low(COL2);
if(input(ROW1)==0) printf(key[0][3]);
if(input(ROW2)==0) printf(key[1][3]);
if(input(ROW3)==0) printf(key[2][3]);
if(input(ROW4)==0) printf(key[3][3]);
output_low(COL4);
}
void main(){
output_low(COL1);
output_low(COL2);
output_low(COL3);
output_low(COL4);
while(TRUE){
colscan();
delay_ms(50);
}
}
```
这个程序可以检测 4x4 键盘矩阵中按下的按键,并通过串口输出相应的字符。你可以根据自己的需要进行修改和扩展。
阅读全文