用STC12C5A60S2单片机做矩阵键盘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用STC12C5A60S2单片机做矩阵键盘相关的知识,希望对你有一定的参考价值。

当然可以,与其他51单片机一样,没有区别,你的问题不是出在IO,出在延时上,最好数码管显示用定时器控制,这样才不会受延时程序的影响。 参考技术A stc12c5a60s2与51单片机区别:
1、同样晶振的情况下,stc12c5a60s2速度是普通51的8~12倍
对于at89c51,1个机器周期=12个震荡周期,对于stc12c5a60s2,1个机器周期=1个震荡周期;
2、stc12c5a60s2有8路10位ad;
3、stc12c5a60s2多了两个定时器,带pwm功能;
4、stc12c5a60s2有spi接口;
5、stc12c5a60s2有eeprom;
6、stc12c5a60s2有1k内部扩展ram;
7、stc12c5a60s2有watch_dog;
8、stc12c5a60s2多一个串口;
9、stc12c5a60s2的io口可以定义,有四种状态;
10、stc12c5a60s2中断优先级有四种状态可定义。

5152单片机使用矩阵键盘

为了学习矩阵键盘,先做个小小的实验目标 : 按下矩阵键盘后 ,数码管显示按下的是第几键。

我的矩阵键盘是4X4的,操作原理是先检测按下的键是哪行。再确定是哪列。这样就能识别是按的哪个键了。

首先看电路图,确定键盘是连CPU的哪个针。我的开发板上是连接的P1,具体是P10~P17,八个针对应逻辑的8位。

 (此处省略,直接贴代码)

#include<reg52.h>
void delay(int n);
void juzhen(void);
char duanxuan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
char keyveluetonumber[17]={0X0,0x77,0x7B,0X7D,0X7E,0XB7,0XBB,0XBD,0XBE,
0XD7,0XDB,0XDD,0XDE,0XE7,0XEB,0XED,0XEE};
int keyvelue=0;

int main(){
int j=0;
P2=0XFF;
while(1){
juzhen();
P0=duanxuan[keyvelue];
}
}


void juzhen(void){
int a=0,i;
char tempkey;
P1=0xf0;
if(P1!=0Xf0){
delay(10);
if(P1!=0Xf0){
tempkey=P1;
P1=0X0f;
tempkey|=P1;

for(i=1;i<=16;i++){ /*下面switch的优化代码 */
if(keyveluetonumber[i]==tempkey) {
keyvelue=i ;
break;
}
}
/* switch(tempkey){ //这个switch的对应关系更直观,但这么编程太2了,
所以用数组提前把下标和元素做好映射,直接查询即可。
不省时间,但省程序员的精力。

case 0x77 : keyvelue=1;break;
case 0x7B : keyvelue=2;break;
case 0X7D : keyvelue=3;break;
case 0X7E : keyvelue=4;break;
case 0XB7 : keyvelue=5;break;
case 0XBB : keyvelue=6;break;
case 0XBD : keyvelue=7;break;
case 0XBE : keyvelue=8;break;
case 0XD7 : keyvelue=9;break;
case 0XDB : keyvelue=10;break;
case 0XDD : keyvelue=11;break;
case 0XDE : keyvelue=12;break;
case 0XE7 : keyvelue=13;break;
case 0XEB : keyvelue=14;break;
case 0XED : keyvelue=15;break;
case 0XEE : keyvelue=16;break;
}
*/

}

}


return ;
}
void delay(int n){ //简陋的延时函数
int i;
while(n--)
for(i=110;i>0;i--);
}

 

以上是关于用STC12C5A60S2单片机做矩阵键盘的主要内容,如果未能解决你的问题,请参考以下文章

stc12c5a60s2的单片机与at89c51单片机有啥区别论文上面要用

STC12c5A60s2单片机 想通过片外EEPROM保存掉电信息!

STC12C5A60S2 12M 红外发射

烧录STC12C5A60S2时遇到的问题

STC12C5A60S2单片机复位方式都有哪些

12c5a60s2单片机ADC采样程序详解(每一句话都是啥意思)