历史上的今天
返回首页

历史上的今天

今天是:2025年06月22日(星期日)

2018年06月22日 | 51单片机矩阵键盘响应程序

2018-06-22 来源:eefocus

51单片机矩阵键盘响应程序

#include

// P0端口接LED
// P0端口接数码管
// P3端口接矩阵键盘


#define LED P0
#define KEY P3
#define DIG P0
unsigned char GetKey(void);
void delay10ms(void);
// 独立数码管的段码表
unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
void main(void)
{
unsigned char key = 0;
while (1)
{
key = GetKey();
if (key != 0)
{
DIG = val[key];
}
}
}
unsigned char GetKey(void)
{
unsigned char hang = 0, lie = 0;
unsigned char keyvalue = 0;
// 第1回合第1步
KEY = 0x0f;  // 从IO口输出,写IO口
if (KEY != 0x0f)// 从IO口输入,读IO口
{
// 读出的不是0x0f说明有按键被按下
// 第1回合第2步:读出端口从读出值来判断是哪一行
 delay10ms();
// 第一回合中算出行号
switch (KEY)
{
case 0x0e:hang = 1;break;
case 0x0d:  hang = 2; break;
case 0x0b:  hang = 3; break;
case 0x07:  hang = 4; break;
default: break;
}
// 第2回合第1步
KEY = 0xf0;
if (KEY != 0xf0)
{
 switch (KEY)
{
case 0xe0:lie = 1;break;
case 0xd0:  lie = 2; break;
case 0xb0:  lie = 3; break;
case 0x70:  lie = 4; break;
default: break;
}
// 经过2个回合后hang和lie都知道了,然后根据hang和lie去计算键值即可
keyvalue = (hang - 1) * 4 + lie;
return keyvalue;
}
}
return 0;
}
void delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=248;a>0;a--);
}


推荐阅读

史海拾趣

ESTEK公司的发展小趣事

ESTEK公司自创立之初,就专注于电子产品的技术创新。在早期的市场竞争中,公司研发团队通过不懈努力,成功研发出一款具有革命性意义的电子元件。这款元件不仅性能卓越,而且成本远低于同类产品,使得ESTEK公司迅速在市场上脱颖而出。随着这款元件的广泛应用,ESTEK公司的知名度逐渐提升,为公司的后续发展奠定了坚实基础。

ACCUTEK公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,ACCUTEK公司开始将目光投向国际市场。公司积极参加国际电子展会和技术交流活动,与全球多家知名企业建立了合作关系。同时,公司还在海外设立了多个分支机构,以便更好地服务当地客户。这些举措不仅提升了公司的国际影响力,也为公司的长远发展注入了新的活力。

Accetek公司的发展小趣事

随着电子技术的飞速发展,Accetek公司意识到只有不断创新才能在市场中立于不败之地。因此,公司加大了对技术研发的投入,建立了一支高素质的研发团队。经过无数次的试验和失败,团队终于取得了重大突破,成功开发出了一种新型的数控雕刻机,具有更高的精度和更稳定的性能。这一创新成果不仅为公司赢得了更多的客户和市场份额,也为公司的长远发展奠定了坚实的基础。

联智(Celfras)公司的发展小趣事

江西联智集成电路有限公司(简称联智)自2016年成立以来,始终致力于无线充电技术的研发和创新。公司凭借其先进的无线充电TX/RX芯片解决方案,迅速在行业内崭露头角。联智不仅拥有由多名高校博士和高级研发人员组成的核心研发团队,还在中国及韩国设立了研发中心,确保技术的领先性和市场竞争力。

Embedded Artists公司的发展小趣事

随着嵌入式技术的不断发展,Embedded Artists公司不断投入研发,推出了一系列创新产品。其中,一款基于恩智浦处理器的嵌入式开发板因其高性能、低功耗和易用性,受到了市场的热烈欢迎。这款产品不仅为公司带来了可观的收入,还提高了公司在行业中的知名度。

台湾双羽公司的发展小趣事

在成为全球领先的电子企业之后,富士通并没有停下脚步。公司开始积极拓展海外市场,将先进的技术和产品带到世界各地。通过在全球各地设立分支机构、与当地企业建立合作关系等方式,富士通成功地将自己的业务版图扩展到了全球60多个国家和地区。这一过程中,富士通不仅为当地市场带来了先进的技术和产品,也促进了全球电子产业的交流与合作。

问答坊 | AI 解惑

FPGA引脚感应出倍频信号

使用altera cycloneIII, 外接20M晶振,接内部一个1:1的PLL(PLL输入20M, 输出也是20M), 在许多引脚上都感应出40M的脉冲波形,是什么原因啊?  …

查看全部问答>

DSP 2812中断

有这样一个语句:PieVectTable.T1PINT=&tim_isr//将中断的入口地址写到向量表的起始位置 也就是说tim_isr()成了中断服务程序。 我有个疑问:PieVectTable是PIE_VECT_TABLE的结构体变量,他要对PIE_VECT_TABLE结构体中定义的T1PINT成员进行访问 ...…

查看全部问答>

pic秒表的问题!!!!急求!!!

#include #define uchar unsigned char #define uint unsigned long int #define RS RB4 #define E RE2 #define UPKEY RB1 #define DOWNKEY  RB2 #define CLRKEY  RB5 uchar table[]=\"  000:000:000  ...…

查看全部问答>

谁会用msp430调pcf8574啊?跪求

谁会用msp430调pcf8574啊?跪求 我自己写了一个,可惜不知什么原因,就是8574死活没有反应,无语了…

查看全部问答>

wince usb 识别问题,紧急求助~!!

手持设备,操作系统为WINCE,当USB接口接上电脑的时候为手持设备为disk mode,而接上带USB接口的充电器就充电, 现在的问题是:我怎样区分插上的另一头连接计算机的USB线,还是另一头个就是AC供电器的线。wince usb驱动里面 怎样标志他们的不同呢 ...…

查看全部问答>

Microsoft ActiveSync 方式复制文档到wince与通过SD Card复制到wince有区别吗?

Microsoft ActiveSync 方式复制文档到wince与通过SD Card复制到wince有区别吗? 问题正如标题! 我今天才发现的,我通过SD CARD复制一个应用程序文档到winCE,发现不能运行,提示错误,具体内容忘记了,类似不可以识别之类。 后来我通过Microsof ...…

查看全部问答>

STM32F103正交编码器问题

                                 STM32F103 最多能接多少个正交编码器?…

查看全部问答>

9B96的EPI模块能用于并行接口的AD吗?

如题,9B96的EPI模块能用于访问并行接口的AD吗? EPI模块为什么要强调地址总线,还有EPI时钟,这些好像不是为AD这样的东西准备的吧,那是不是说EPI模块就不能用于访问并行接口的AD呢? 完全不懂,请大家不要见笑,多多指教我哦………

查看全部问答>