(C51学习三)按键

1.独立按键

2.矩阵按键


1.独立按键

原理:

独立按键比较简单,先在单片机开发板的配套资料中找出案件的原理图,如下图:

K1为例,当K1按下时,P3.4就相当于接地GND,所以当K1按下时,P3.4为低电平。即P3.4=0


代码:

下面写一个按下K1就亮起LED0灯:

找出LED的原理图:

可以发现LED0对应的引脚为P1.0

#include<reg52.h>
sbit K1=P3^4;
sbit LED0=P1^0;

void main()
{
		while(1)
		{
			LED0=K1;
		}
}


2.矩阵键盘

为什么要用矩阵键盘:

因为矩阵键盘相对于独立键盘可以节省I/O口。例如16个按键,用独立键盘需要16个I/O口 ,而用矩阵键盘只需要 4X4这个矩阵,只需8个I/O。

同理,100个案件,独立键盘需要100个I/O口,而矩阵键盘只需要10X10这个矩阵,共20个I/O口。


原理:

先看原理图:

其中P3的8个端口,分成两组P3.0~P3.3作为输出端,P3.4~P3.7作为输入端。

矩阵键盘需要一行一行地检测,例如监测第一行(P3.0那一行),把P3设置为0xFE;P3.4~P3.7:1111 P3.0~P3.3:1110

由于第一行已经被设置为0,这时候当S1按下时,P3.4这个引脚就会是0,因此P3:0xEE,其他按键同理。

然后扫描完第一行,就扫描第二,三,四行(分别把P3.1,P3.2,P3.3设0)


代码:

16个按键,按下去后在数码管显示响应的数字10~16用ABCDEF代替

#include<reg52.h>
sbit DU=P2^6;
sbit WE=P2^7;

unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void display(unsigned char num)
{
	DU=1;
	P0=table[num];
	DU=0;
	
	WE=1;
	P0=0xfe;
	WE=0;
}

void main()
{
	while(1)
	{
		unsigned char temp;
		/*扫描第一行*/
		P3=0xfe;
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xfe)
		{
			temp=P3;
			switch(temp)
			{
				case 0xee:display(0);break;
				case 0xde:display(1);break;
				case 0xbe:display(2);break;
				case 0x7e:display(3);break;
			}
		}
		
		/*扫描第二行*/
		P3=0xfd;
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xfd)
		{
			temp=P3;
			switch(temp)
			{
				case 0xed:display(4);break;
				case 0xdd:display(5);break;
				case 0xbd:display(6);break;
				case 0x7d:display(7);break;
			}
		}
		
		/*扫描第三行*/
		P3=0xfb;
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xfb)
		{
			temp=P3;
			switch(temp)
			{
				case 0xeb:display(8);break;
				case 0xdb:display(9);break;
				case 0xbb:display(10);break;
				case 0x7b:display(11);break;
			}
		}
		
		/*扫描第四行*/
		P3=0xf7;
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xf7)
		{
			temp=P3;
			switch(temp)
			{
				case 0xe7:display(12);break;
				case 0xd7:display(13);break;
				case 0xb7:display(14);break;
				case 0x77:display(15);break;
			}
		}
	}
}

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值