CCS PICC实现的矩阵键盘扫描
网上关于CCS PICC矩阵键盘扫描的参考程序较少,本人近来做了此类实验,这里将把程序公开至此以便和学习CCS PICC的网友交流!
例:
unsigned char key()
{
#use fast_io(C)
unsigned char k1,k2,k3;
set_tris_c(0x00);
output_c(0x0f);
set_tris_c(0x0f);
k1=input_c()0x0f;
set_tris_c(0x00);
output_c(0xf0);
set_tris_c(0xf0);
k2=input_c()0xf0;
k3=k1|k2;
return(k3);
}//此程序只是最基本的矩阵扫描,忽略了抖键、干扰和多键同时按下的情况!
/*需要注意的是:CCS PICC中库函数output_x()、input_x()都会整个的将TRIS端口方向控制寄存器改为输出或输入,而矩阵键盘扫描时要求:端口输出0x0f,然后高四位设置为输出低四位设置为输入,结果和0x0f相与屏蔽无效位,检测是否有0出现,如果有,即有按键按下,转到扫描处理,如果没有,低四位应该为0x0f。接着端口输出0xf0,然后高四位设置为输入低四位设置为输出,结果和0xf0相与屏蔽无效位,检测是否有0出现,如果有,即有按键按下,转到扫描处理,如果没有,高四位应该为0xf0。PIC单片机与51系列单片机不同,如果使用过程中不注意设置端口方向,将得不到正确的值。CCS PICC中库函数output_x()、input_x()能自动将整个TRIS端口方向控制寄存器改为输出或输入,但在矩阵扫描中,需要手动设置方向控制寄存器,本例中就使用#use fast_io(C)、set_tris_x()这些语句来设置方向控制寄存器。本人在这个例子中走了不少弯路。*/
评论