您的当前位置:首页正文

单片机矩阵键盘及Protues仿真

来源:帮我找美食网


单片机4*4矩阵键盘程序及Protues仿真

1、截图如下

2、键盘及显示程序

#include

#define uchar unsigned char

#define uint unsigned int

#define key P1

sbit ledle=P3^0;

sbit lede=P3^1;

void delay(uint z)//延迟函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=112;y>0;y--);

}

uchar code table[]={ //显示数据编码

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,

0x76,0x79,0x38,0x3f,0};

//#include

uchar keyboard1()//带返回值的子程序:键盘扫描的子程序

{

uchar temp,num;

key=0xfe; //扫描要经过四个过程段,0xfe,0xfd,0xfb,0xf,

temp=key; //读取P3口的信心

temp=temp&0xf0; // 位与,为下面的判断提供条件

while(temp!=0xf0)//判断P3口(即键盘)有无被按下,若是,则temp不等于0xf0,否则等于

{

delay(5); // 延时再做一次判断,消抖、防抖动

temp=key;

temp=temp&0xf0;

while(temp!=0xf0)

{ //确定有按键被按下,进入判断阶段,以判断那一个键被按下

temp=key;

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=0xf0;即跳过该while循环,若否,重新取P3口值,再做判断

{

temp=key;

temp=temp&0xf0;

}

}

}

key=0xfd;

temp=key;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=key;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=key;

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=key;

temp=temp&0xf0;

}

}

}

key=0xfb;

temp=key;

temp=temp&0xf0;

while(temp!=0xf0)

{ delay(5);

temp=key;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=key;

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=key;

temp=temp&0xf0;

}

}

}

key=0xf7;

temp=key;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=key;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=key;

switch(temp)

{

case 0xe7: num=13;

break;

case 0xd7: num=14;

break;

case 0xb7: num=15;

break;

case 0x7e: num=16;

break;

}

while(temp!=0xf0)

{

temp=key;

temp=temp&0xf0;

}

}

}

return num; //返回值,

}

void main()

{

lede=0;

ledle=1;

while(1)

{

P2=table[keyboard1()];

//P2=table[4];

delay(5);

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top