12.1 实验目的
1. 掌握单片机ATC52与矩阵键盘的接口技术。
2. 用protues实现该接口的电路设计和程序设计,并进行实时交互仿真。
3. ATC52单片机对4×4矩阵键盘进行动态扫描,当按完一次键盘时,可将相应按键值(0-F)实时显示在数码管上。
12.2 PROTUES电路设计
单片机与矩阵键盘的接口电路原理图如图12-1所示。
图 12-1 单片机与矩阵键盘的接口电路原理图
12.3 实验内容
键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的。
1.从PROTUES库中选取元器件
① ATC52:单片机;
② RES:电阻;
③ 7SEG-MPX2-CC-BLUE:七段共阴绿色数码管;
④ CAP/CAP-ELEC:电容、电解电容;
⑤ CRYSTAL:晶振;
⑥ BUTTON:按键。
2.放置元器件
3.放置电源和地(终端)
4.连线
5.元器件属性设置
6.电气检测
12.4 程序设计
1. 流程图
矩阵键盘操作程序流程图如图12-2所示。
图 12-2 矩阵键盘操作程序流程图
2.源程序设计
C程序设计:
#include #define uint unsigned int #define uchar unsigned char sbit we1=P1^0; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0}; uchar num,temp,num1; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar keyscan(); void display(uchar aa); void main() { num=17; while(1) { display(keyscan()); } } void display(uchar aa) { P2=table[aa-1]; we1=0; } uchar keyscan() { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3; break; case 0x7e:num=4; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:num=5; break; case 0xdd:num=6; break; case 0xbd:num=7; break; case 0x7d:num=8; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:num=9; break; case 0xdb:num=10; break; case 0xbb:num=11; break; case 0x7b:num=12; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7:num=13; break; case 0xd7:num=14; break; case 0xb7:num=15; break; case 0x77:num=16; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } return num; } 12.5 PROTUES仿真 矩阵键盘仿真图如图12-3所示。 图 12-3 矩阵键盘与单片机仿真片段图