历史上的今天
返回首页

历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2019年10月12日 | 51单片机入门之按键检测

2019-10-12 来源:eefocus

按键是单片机系统中最常用的交互方式,大学课程里介绍按键的时候,分为了两种:独立式按键和矩阵式按键。在单片机初期,各种扩展芯片的匮乏,导致了IO口资源的宝贵。而今各种按键管理芯片层出不穷,可以实现用尽可能少的IO口检测较多的按键,所以本人认为,矩阵式键盘如今存在的意义只是用在教学上了。下面介绍按键检测的方法。

 

功能描述:


图中有8个按键,8个发光二极管,1个数码管。当按键1按下时,数码管显示数字1,同时第一个发光二极管点亮。依次类推,当第八个按钮按下时,数码管显示8,并且第八个发光二极管点亮。


硬件分析:按键的一端接单片机,另一端接地,按键按下后单片机侧为低电平,所以当单片机检测到相应的端口为低电平时即可判断按键被按下,(实际应用时,为了提高抗干扰能力,在按键侧加上拉电阻)。


[cpp] view plain copy

#include

#define uchar unsigned char;

#define uint unsigned int;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管数据表

uchar code ledtable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //发光二极管数据表

uchar i,j,z,temp,num;

void delay(z) //延时子程序

{

for(j=z;j>0;j--)

for(i=110;i>0;i--);

}

void main()

{

P0=0x00; //灭数码管

P1=0xff; //P1口置位

while(1)

{

temp=P1; //P1口的状态送给变量temp

temp=temp&0xff; //与全1做与运算,看是否有键按下

while(temp!=0xff) //如果有键按下则进入循环

{

delay(5); //消除抖动

temp=P1; //再次读入P1口的状态

temp=temp&0xff;

while(temp!=0xff) //再次判断是否有键按下

{

temp=P1; //读回P1的按键情况

switch(temp)

{

case 0xfe: num=0; //第一个键按下

break;

case 0xfd:num=1;

break;

case 0xfb:num=2;

break;

case 0xf7:num=3;

break;

case 0xef:num=4;

break;

case 0xdf:num=5;

break;

case 0xbf:num=6;

break;

case 0x7f:num=7; //第八个键按下

break;

}

while(temp!=0xff) //松手检测

{

temp=P1;

temp=temp&0xff;

}

P0=table[num+1]; //数码管显示

P3=ledtable[num]; //发光二极管点亮

delay(500);

}

}

}

}

按键2按下:

 

按键5按下:

 

按键8按下:

 


推荐阅读

史海拾趣

Barkston Plastics Engineering Ltd.公司的发展小趣事

随着智能化技术的快速发展,Barkston Plastics Engineering Ltd.意识到传统生产方式已无法满足市场需求。于是,公司开始进行智能化转型,引入先进的生产设备和自动化管理系统,提高生产效率和产品质量。同时,公司还加大了对研发创新的投入,推出了一系列智能化塑料电子元件产品,成功实现了产业升级。这一转型为公司带来了新的发展机遇,也使其在电子行业中保持了领先地位。

以上五个故事是基于电子行业背景为Barkston Plastics Engineering Ltd.构建的发展故事,旨在展示其在不同历史阶段的重要发展节点和成就。这些故事均遵循事实性描述的原则,不包含任何褒贬评价。请注意,这些故事是虚构的,仅用于示例目的。

东科半导体(DK)公司的发展小趣事

面对电源管理芯片市场需求的不断增长,东科半导体(DK)公司决定投资扩产。公司投资数亿元建设新的生产线和研发基地,提升产能和研发能力。同时,公司还加大了对新技术、新产品的研发投入,不断推出具有竞争力的新产品。通过投资扩产和加大研发投入,东科半导体(DK)公司进一步巩固了其在电源管理芯片市场的领先地位。

以上五个故事从不同角度展现了东科半导体(DK)公司在电子行业中的发展历程和成就。这些故事不仅记录了公司的成长轨迹,也反映了公司在技术创新、产学研合作、市场拓展和品牌建设等方面的努力和成果。

CTC Coils Ltd公司的发展小趣事

在快速发展的过程中,CTC Coils Ltd公司始终注重企业文化建设和团队建设。公司倡导创新、务实、高效的企业精神,鼓励员工勇于创新、追求卓越。同时,公司还注重员工的培训和成长,为员工提供广阔的发展空间和良好的职业晋升通道。这些举措使得公司凝聚力不断增强,为公司的长远发展奠定了坚实的基础。

请注意,这些故事是虚构的,旨在展示一个电子行业公司可能经历的发展路径和关键阶段。实际情况可能因公司具体情况和市场环境的不同而有所差异。

Bipolarics Inc公司的发展小趣事

作为一家有社会责任感的企业,Bipolarics Inc在发展过程中始终关注环境保护和社会公益。公司积极采用环保材料和节能减排技术,努力降低生产过程中的能耗和排放。同时,Bipolarics Inc还积极参与社会公益活动,支持教育事业和扶贫项目等。通过这些举措,公司不仅树立了良好的企业形象,也为社会的可持续发展做出了积极贡献。

以上五个故事虽然是虚构的,但它们基于电子行业的一般发展规律和企业发展的常见路径。在现实中,一个电子行业的发展故事可能会涉及技术突破、市场扩张、战略合作、国际化战略、人才培养和社会责任等多个方面。这些元素共同构成了企业发展的丰富内涵和多样路径。

AMICC [AMIC TECHNOLOGY]公司的发展小趣事

作为一家具有社会责任感的企业,AMICC始终关注环境保护和可持续发展。公司在生产过程中积极采用环保材料和技术,降低能耗和排放。同时,AMICC还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。

这五个故事只是AMICC发展历程中的一部分,但它们足以展现出这家企业在电子行业中的拼搏和成长。AMICC以其坚定的信念、不懈的努力和持续的创新精神,在激烈的市场竞争中脱颖而出,成为了一家备受瞩目的优秀企业。

ETAL公司的发展小趣事

ETAL公司成立于XXXX年,由一群富有远见和热情的电子工程师创立。他们看到了电子技术在全球范围内的广泛应用和巨大潜力,决定投身于这一行业。起初,ETAL主要专注于电子元器件的研发和生产,通过不断的技术创新和产品优化,逐渐在市场上树立了良好的口碑。

问答坊 | AI 解惑

【新手指南之一】哪一种人不宜学单片机?(转帖)

不宜学单片机的人容易问:我到底该学什么; ----踏踏实实的学点基本的吧?连单片机都不知道是什么就想去学ARM? c语言不会想搞LINUX?别老是好高骛远. 不宜学单片机的人容易问:谁有xxx源码?--(你给人家多少钱啊?自己的劳动白送你?) 不宜 ...…

查看全部问答>

国赛C题??!!

本帖最后由 paulhyde 于 2014-9-15 09:02 编辑 今年的c题和03年的B题有什么区别?加了“直流”,怎么理解?  …

查看全部问答>

基于WSN的路灯监控管理系统

基于WSN的路灯监控管理系统 摘要:介绍了一个基于无线传感器网络的远程路灯监控管理系统,系统主要由传感器节点、远程控制终端(RTU)和监控中心组成。在单个路灯中嵌入无线传感模块,形成具有采集、收发信息数据,控制各个路灯节点以及自组织等功 ...…

查看全部问答>

Emc 教程经典3-4章

Emc 教程经典3-4章…

查看全部问答>

推荐一下嵌入式和WINCE的书吧

现在刚刚接触嵌入式,以前只有工控的经验,哪些书比较好一点?大学的时候研究过windows内核,对于操作系统也比较了解。对于嵌入式的开发环境和流程还不是很了解,希望能尽快入门,以后上来和大家一起讨论问题。…

查看全部问答>

高分求助 TCP/IP问题

现象:1、我用2410和2440 一个做服务器一个做客户端可以正常通信       2、他们也都可以和PC正常通信 他们不管是做服务器还是客户端,都是可以正常通信       3、以上链接都是通过交叉网线连得 现在的 ...…

查看全部问答>

过年了,没啥事,散点分给大家吧!

祝大家牛年进步! 为了提倡环保,节省纸张,在春节千万别送我贺卡,请在尽可能大的人民币上写下祝福的话送我就可以了,节约是美德,祝春节快乐!…

查看全部问答>

GPRS MODEM自动连接网络的问题

     已经新建立了一个连接,使用RasDial()函数连接到了 输入 at 指令的模块,问题是怎么让程序自动输入at指令 并且自动 按继续按钮连接上网呢?谢谢大家了. at指令是:at+cgdcont=1,\"ip\",\"cmnet\" 和  atdt*99# ,我 ...…

查看全部问答>

6410按键处理,有时候按下键没响应,有时候按下出好几个字符,求助大家!

我把6410的按键驱动映射为我需要的字符了,可是总是响应时有些问题,有时候按下键不能响应,有时候会出好几个字符,这是怎么回事啊,我应该修改哪些地方啊?…

查看全部问答>

散分~增加人气

这里怎么没人气啊,帖子好少…

查看全部问答>