單片機矩陣鍵盤線性反轉法( if 版 和 switch 版)

單片機矩陣鍵盤線性反轉法( if 版 和 switch 版)

這種方法據我所知是全網首發 有類似但不一樣 我這版較好理解

歡迎學友們一起探討

51和52是一樣的 這裡用的52

數碼管是用的共陰極CC

------------------if版---------------------

需要多佔用一個埠存儲變數

#include "reg52.h"

char x[]={

0xfc,0x60,0xda,0xf2,

0x66,0xb6,0xbe,0xe0,

0xfe,0xf6,

};//段選

char z[]={0x7f,0xbf};//位選

void ys()//延時函數

{

char i;

for(i=0;i<20;i++);

}

void xx(char s)//顯示函數

{

char s1,s2;

s1=s/10;

s2=s%10;

if(s1!=0)

{

P2=z[0];

P1=x[s1];

ys();

}

P2=z[1];

P1=x[s2];

ys();

}

void main()

{

char w;

while(1)

{

P3=0xf0;

if(P3!=0xf0)

{

P0=P3;//這為什麼需要存儲到埠上 存到變數上卻不行(大霧)

P3=0x0f;

w=P3;

if(P0==0xe0 && w==0x0e)xx(1);

if(P0==0xd0 && w==0x0e)xx(2);

if(P0==0xb0 && w==0x0e)xx(3);

if(P0==0x70 && w==0x0e)xx(4);//第一行

if(P0==0xe0 && w==0x0d)xx(5);

if(P0==0xd0 && w==0x0d)xx(6);

if(P0==0xb0 && w==0x0d)xx(7);

if(P0==0x70 && w==0x0d)xx(8);//第二行

if(P0==0xe0 && w==0x0b)xx(9);

if(P0==0xd0 && w==0x0b)xx(10);

if(P0==0xb0 && w==0x0b)xx(11);

if(P0==0x70 && w==0x0b)xx(12);//第三行

if(P0==0xe0 && w==0x07)xx(13);

if(P0==0xd0 && w==0x07)xx(14);

if(P0==0xb0 && w==0x07)xx(15);

if(P0==0x70 && w==0x07)xx(16);//第四行

}

else xx(0);//歸零

}

}

--------------------swatch版-----------------------

不需要多佔用埠存儲

#include "reg52.h"

char x[]={

0xfc,0x60,0xda,0xf2,

0x66,0xb6,0xbe,0xe0,

0xfe,0xf6,

};//段選

char z[]={0x7f,0xbf};//位選

void ys()//延時函數

{

char i;

for(i=0;i<20;i++);

}

void xx(int s)//顯示函數

{

char s1,s2;

s1=s/10;

s2=s%10;

if(s1!=0)

{

P2=z[0];

P1=x[s1];

ys();

}

P2=z[1];

P1=x[s2];

ys();

}

void main()

{

char q,w,e;

while(1)

{

P3=0xf0;

if(P3!=0xf0)

{

e=P3;

P3=0x0f;

w=P3;

q=e+w;//把行值和列值合併

}

switch(q)

{

case 0xee:xx(1);break;

case 0xde:xx(2);break;

case 0xbe:xx(3);break;

case 0x7e:xx(4);break;

case 0xed:xx(5);break;

case 0xdd:xx(6);break;

case 0xbd:xx(7);break;

case 0x7d:xx(8);break;

case 0xeb:xx(9);break;

case 0xdb:xx(10);break;

case 0xbb:xx(11);break;

case 0x7b:xx(12);break;

case 0xe7:xx(13);break;

case 0xd7:xx(14);break;

case 0xb7:xx(15);break;

case 0x77:xx(16);break;

default :xx(0);

}

}

}


推薦閱讀:

軟體工程結構2----代碼層級
學習單片機的過程
ARM和單片機的區別
電腦還能這麼小?指甲蓋大小的電腦也能控制機器人!
學習單片機的幾個誤區

TAG:單片機 | 51單片機 |