蓝桥开发板(CT107D)学习记录———6.数码管显示键值

题目要求:
设计一个4*4矩阵键盘(S4-S19),双数码管显示,其键值对应为“00~15”。按下按键后,数码管显示相应的键值。

/*数码管显示相应的键值,00-15*/
#include <STC15F2K60S2.H>
#include"intrins.h"
#define uchar unsigned char 
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管
uchar code key_table[]={0x81,0x41,0x21,0x11,0x82,0x42,0x22,0x12,0x84,0x44,0x24,0x14,0x88,0x48,0x28,0x18};//矩阵键值,这里要注意,和普通的行列扫描得到的数组不一样
uchar cont ,Trg,n,i,num;
void init()//消影,关蜂鸣器
{
	P2=0xa0;P0=0x00;P2=0x00;
	P2=0x80;P0=0xff;P2=0x00;
}
void Delay2ms()		//@11.0592MHz
{
	unsigned char i, j;
	_nop_();
	_nop_();
	i = 22;
	j = 128;
	do
	{
		while (--j);
	} while (--i);
}
void readkey()
{
	uchar ReadData,keypress;
	P3=0xf0;
	P42=1;  P44=1;
	P36=P42;P37=P44;//行置低,列置高,读取列数
	
	keypress=P3;//暂存列数
	P3=0x0f;
	P42=0;  P44=0;//行置高,列置低,读取行数
	//和独立键盘类似的读取
	ReadData=(P3|keypress)^0xff;
	Trg=ReadData&(ReadData^cont);
	cont=ReadData;
}
void display(uchar n)
{
	P2=0xc0;P0=0x40;P2=0x00;//选位,十位
	P2=0xe0;P0=table[n/10];P2=0x00;
	Delay2ms();
	
	P2=0xc0;P0=0x80;P2=0x00;//选位,个位
	P2=0xe0;P0=table[n%10];P2=0x00;
	Delay2ms();
}
void main()
{
	init();
	 while(1)
	 {
		 readkey();
		 for(i=0;i<16;i++)//循环判断键值对应的数字
		 {
			 if(Trg==key_table[i])//和独立键盘不同的是不能用&,只能用==判断
			 {
				 num=i;
				 break;
			 }
		 }
		 display(num);
	 }
}

矩阵按键经常用到,使用前,要在断电的情况下换跳帽。这里需要特别注意,STC15F2K60S2,的引脚和c51的不同,15系列有P4口,首先要添加对应的文件。
下面看看矩阵键盘的引脚图
在这里插入图片描述
行列扫描时,要特殊处理P42和P44

void readkey()
{
	uchar ReadData,keypress;
	P3=0xf0;
	P42=1;  P44=1;
	P36=P42;P37=P44;//行置低,列置高,读取列数
	
	keypress=P3;//暂存列数
	P3=0x0f;
	P42=0;  P44=0;//行置高,列置低,读取行数
	//和独立键盘类似的读取
	ReadData=(P3|keypress)^0xff;
	Trg=ReadData&(ReadData^cont);
	cont=ReadData;
}

此外,对应的键值数组要改变
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值