手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

51单片机如何判断哪个矩阵按钮按下详细解释

时间:2024-10-24 01:12:47

1、下图是解释给定P3口的值集合unsigned char code givenP3Table[]={0xfe,0xfd,0xfb,0xf7};给定P3口后按下某个按钮响应的值集合unsigned char code implyP3Table[4][4]= {{0xee,0xde,0xbe,0x7e}, {0xed,0xdd,0xbd,0x7d}, {0xeb,0xdb,0xbb,0x7b}, {0xe7,0xd7,0xb7,0x77}};

51单片机如何判断哪个矩阵按钮按下详细解释

2、#include<reg51.h>sbit dula=P2^6;sbit wela=P2^7;void delay(unsigned char i){unsigned char j,k; for(j=i;j>0;j--) for(k=125;k>0;k--);}/*****按下了就返回0-15中对应的某个数,没按就返回16***开始*****/unsigned char code table[]={0x3f,0x06,0x5b,0x4f, //数码管0,1,2,3,0x66,0x6d,0x7d,0x07, //数码管4,5,6,7,0x7f,0x6f,0x77,0x7c, //数码管8,9,a,b,0x39,0x5e,0x79,0x71,}; //数码管c,d,e,f,给定P3口的值集合unsigned char code givenP3Table[]={0xfe,0xfd,0xfb,0xf7};给定P3口后按下某个按钮响应的值集合unsigned char code implyP3Table[4][4]={{0xee,0xde,0xbe,0x7e}, {0xed,0xdd,0xbd,0x7d}, {0xeb,0xdb,0xbb,0x7b}, {0xe7,0xd7,0xb7,0x77}};unsigned char code returnNumTable[4][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}};unsigned char ScanMatrix(){unsigned char row,column;unsigned char key;unsigned char temp;for(row=0;row<4;row++){P3=givenP3Table[row]; temp=P3; temp=temp&0xf0;if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3;for(column=0;column<4;column++) if(temp==implyP3Table[row][column]) { key=returnNumTable[row][column]; break;//有键按下就跳出for(column=0;column<4;column++)内循环} } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } break;//有键按下就跳出for(row=0;row<4;row++)外循环 } else key=16;}return key; }/*****按下了就返回0-15中对应的某个数,没按就返回16***结束*****/void display(unsigned char num){ P0=table[num]; dula=1; dula=0; P0=0xc0; wela=1; wela=0;}unsigned char ret,tmp;//主函数中不能定义局部变量void main(){ dula=0;//数码管什么都不显示 wela=0; tmp=16;//tmp初始值不能为0-15中某个数,会影响后面的判断 while(1) {ret=ScanMatrix(); if(ret!=tmp&&ret!=16){ tmp=ret; display(tmp);} }}

51单片机如何判断哪个矩阵按钮按下详细解释
© 手抄报圈