您的位置 首页 新品

课程设计:矩阵键盘(c51,运用扫描法完成)

//可以比较一下和以前发表的一篇用反转法实现的不同(感觉一下那个更简单)//这种方法是用只用P3口的前高四位来比较,看改变了么(由于比较仓…

//能够比较一下和曾经宣布的一篇用反转法完成的不同(感觉一下那个更简略)

//这种办法是用只用P3口的前高四位来比较,看改变了么(因为比较匆促,没有proteus仿真,不过这是个比较经典的办法,网上有许多这个代码,源自郭天祥的视频和书本)

#include

#define uchar unsigned char

#define uint unsigned int

sbit wela=P2^7;

sbit dula=P2^6;

uchar num,num1;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint xms)

{

uint x,y;

for(x=xms;x>0;x–)

for(y=111;y>0;y–);

}

void display(uchar num)

{

dula=1;

P1=table[num];

dula=0;

//delay(10);

}

void matrixkeyscan()

{

uchar temp,key;

P3=0xfe;//榜首行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xee:

key=0;

break;

case 0xde:

key=1;

break;

case 0xbe:

key=2;

break;

case 0x7e:

key=3;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

P3=0xfd;//第二行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xed:

key=4;

break;

case 0xdd:

key=5;

break;

case 0xbd:

key=6;

break;

case 0x7d:

key=7;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

P3=0xfb;//第三行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xeb:

key=8;

break;

case 0xdb:

key=9;

break;

case 0xbb:

key=10;

break;

case 0x7b:

key=11;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

P3=0xf7;//第四行

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xe7:

key=12;

break;

case 0xd7:

key=13;

break;

case 0xb7:

key=14;

break;

case 0x77:

key=15;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

}

void main()

{

dula=0;

wela=1;

P1=0x00;

wela=0;

//dula=0;

while(1)

{//dula=0;

matrixkeyscan();

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/266743.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部