提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
今天要做的是单键值显示任务
一、任务要求
对16个按键进行0—f编号,按下任意按键,数码管显示对应的按键值
二、硬件电路
1.引入库
先来判断有无按键按下,若没有则继续判断有键盘按下则进行键盘行列扫描。确定按下键盘的行列坐标并赋予相应的键值,完成按键编码。显示键值
大体函数分布
采用双重循环的方式进行矩阵行列扫描
proteus
#include<reg51.h>
sbit row0=P1^0;
sbit row1=P1^1;
sbit row2=P1^2;
sbit row3=P1^3;
sbit colomn0=P1^4;
sbit colomn1=P1^5;
sbit colomn2=P1^6;
sbit colomn3=P1^7;
int n;//存放按键值
int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0-f共阳极七段码
void key1();//判断按键是否按下
void key2();//行列扫描确定按键位置并赋值
void delay( int i){
int k,j;
for(k=0;k<i;k++)
for(j=0;j<300;j++);
}
void key1()
{
while(1)
{
P1=0x0f;
if(P1!=0x0f);
delay(10);
if(P1!=0x0f)
{
break;
}
}
}
void key2()
{
P1=0xff;
colomn0=0;
if(row0==0)n=0;
if(row1==0)n=1;
if(row2==0)n=2;
if(row3==0)n=3;
P1=0xff;
colomn1=0;
if(row0==0)n=4;
if(row1==0)n=5;
if(row2==0)n=6;
if(row3==0)n=7;
P1=0xff;
colomn2=0;
if(row0==0)n=8;
if(row1==0)n=9;
if(row2==0)n=10;
if(row3==0)n=11;
P1=0xff;
colomn3=0;
if(row0==0)n=12;
if(row1==0)n=13;
if(row2==0)n=14;
if(row3==0)n=15;
}
void display(){
P2=0xfe;
P0=seg[n];
}
void main(){
{
while(1)
{
key1();
key2();
display();
}
}
}
总结
理清要实现任务的逻辑思路,认真一点便很简单的完成了