2021-07-13

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

今天要做的是单键值显示任务

一、任务要求

对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();
		}
	}
}

总结

理清要实现任务的逻辑思路,认真一点便很简单的完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值