您的位置 首页 制造

课程设计:矩阵键盘扫描显现(c51反转法)

//矩阵键盘扫描程序//采用翻转识别法(相对代码少一些)#includereg52.h>#defineucharunsignedchar#defineuintunsignedintuch…

//矩阵键盘扫描程序

//选用翻转辨认法(相对代码少一些)

#include

#define uchar unsigned char

#define uint unsigned int

uchar key=0;

//共阳数码管编码如下(0-15)

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

//函数声明

void display(uchar Duan_value);

void delay(uchar t);

void key_scan();

void main()

{

while(1)

{

display(key);//显现按键值

key_scan();//按键扫描

}

}

//延时函数

void delay(uchar t)

{

uchar x,y;

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

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

}

//数码管扫描函数

void display(uchar value)

{

P2=table[value];

}

//按键扫描函数

void key_scan()

{

uchar m0,m1;

uchar temp;

P1=0xf0;//这样设置是为了能使低四位将高四位拉低,开释时主动拉高高四位

temp=P1;

if(temp!=0xf0)

{

delay(10);//延时,去除颤动

if(temp!=0xf0)

{

m0=temp;//取得按键的列号

P1=0x0f;

temp=P1;

if(temp!=0x0f)

{

m1=temp;//取得按键的行号号

temp=m0|m1;//取得终究的号

}

switch(temp)

{

case 0xee:key=0;break;

case 0xde:key=1;break;

case 0xbe:key=2;break;

case 0x7e:key=3;break;

case 0xed:key=4;break;

case 0xdd:key=5;break;

case 0xbd:key=6;break;

case 0x7d:key=7;break;

case 0xeb:key=8;break;

case 0xdb:key=9;break;

case 0xbb:key=10;break;

case 0x7b:key=11;break;

case 0xe7:key=12;break;

case 0xd7:key=13;break;

case 0xb7:key=14;break;

case 0x77:key=15;break;

}

do{

temp=P1;//消除按起颤动

temp&=0X0f;

}while(temp!=0x0f);

}

}

}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部