哈工大(威海)
unsigned char a,b; unsigned char temp;
void main(void) {
while(1) {
temp=0xfe;
for(i=0;i<5;i++) {
if(P1_7==1) {
P0=table1[i]; } else {
P0=table2[i]; }
P2=temp;
a=temp<<(i+1); b=temp>>(7-i); temp=a|b;
for(a=4;a>0;a--) for(b=248;b>0;b--); } }
14. 4×4矩阵式键盘识别技术
1. 实验任务
如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。对应的按键的序号排列如图4.14.1所示
36
哈工大(威海)
图4.14.1
2. 硬件电路原理图
图4.14.2
3. 系统板上硬件连线
(1. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”
区域中的C1-C4 R1-R4端口上; (2. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态
数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,??,P0.7/AD7对应着h。
37
哈工大(威海)
4. 程序设计内容
(1. 4×4矩阵键盘识别处理
(2. 每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。矩
阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。 5. 程序框图
图4.14.3
38
哈工大(威海)
7. C语言源程序
#include
unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned char temp; unsigned char key; unsigned char i,j;
void main(void) {
while(1) {
P3=0xff; P3_4=0; temp=P3;
temp=temp & 0x0f; if (temp!=0x0f) {
for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3;
temp=temp & 0x0f; if (temp!=0x0f) {
temp=P3;
temp=temp & 0x0f; switch(temp) {
case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b: key=9; break; case 0x07: key=10; break; }
39
哈工大(威海)
temp=P3; P1_0=~P1_0; P0=table[key]; temp=temp & 0x0f; while(temp!=0x0f) {
temp=P3;
temp=temp & 0x0f; } } }
P3=0xff; P3_5=0; temp=P3;
temp=temp & 0x0f; if (temp!=0x0f) {
for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3;
temp=temp & 0x0f; if (temp!=0x0f) {
temp=P3;
temp=temp & 0x0f; switch(temp) {
case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break; }
temp=P3; P1_0=~P1_0; P0=table[key];
40
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库给初学单片机的40个实验0(8)在线全文阅读。
相关推荐: