微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 课程设计:矩阵键盘扫描显示(c51反转法)

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

时间:11-18 来源:互联网 点击:

//矩阵键盘扫描程序

//采用翻转识别法(相对代码少一些)

#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);

}

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top