历史上的今天
返回首页

历史上的今天

今天是:2025年07月30日(星期三)

正在发生

2021年07月30日 | 学习笔记 从零开始学单片机(6) 键盘接口

2021-07-30 来源:eefocus

键盘工作原理还是使用都是比较简单的。下面是4×4的阵列键盘,行分别接P3.0-P3.3,列接P3.4-P3.7,没有接电源。


采用查询法判断那一个按键被按下。例如,令P3=0xFE,然后在将P3跟0xFE比较,如果相等,说明S6-S9没有被按下,否则在判断P3高四位哪一位等于0。例如P3.4=0 则说明S6被按下。


注意: 手工按下键盘到释放这个过程大概50ms左右,在按下开始到弹簧片稳定接触这段时间为5-10ms,从释放到弹簧片完全分开也是5-10ms,在到达稳定接触和完全分开的微观过程中,电平是时高时低的,因为单片机的速度相对比较快,所以人感觉到只按下一次,单片机却检测到按下多次。如果在单片机首次检测到键盘按下时延时10ms左右再去检测,就不会检测到抖动的毛刺电平了。这就是消抖的原理

的

明白原理了,写程序自然也简单了。接下来只要在每一个程序执行周期里面查询它就行了,暂且省略防抖代码。


#include

#include


void delay(unsigned int times); 

unsigned int scankeys(); 


void main()

{

 while(1)

 {

   scankeys();

  delay(100);

 }

}

void delay(unsigned int times)

{

 unsigned int i,j;

 for (i=0; i  for (j=0; j<100; j++)

   _nop_();

unsigned int scankeys()

{

 unsigned char temp;

 P3=0xFE;

 temp=P3;

 if(temp!=0xFE)

 {

  if(temp==0x7E)

      P1 = 3 ;

  else if(temp==0xBE)

   P1 = 2 ;

  else if(temp==0xDE)

   P1 = 1 ;

  else if(temp==0xEE)

   P1 = 0 ;

 }

 else

 {

  P3=0xFD;

  temp=P3;

  if(temp!=0xFD)

  {

   if(temp==0x7D)

       P1 = 7 ;

   else if(temp==0xBD)

       P1 = 6 ;

   else if(temp==0xDD)

       P1 = 5 ;

   else if(temp==0xED)

       P1 = 4 ;

  }

  else

  {

   P3=0xFB;

   temp=P3;

   if(temp!=0xFB)

   {

    if(temp==0x7B)

        P1 = 11 ;

    else if(temp==0xBB)

     P1 = 10 ;

    else if(temp==0xDB)

     P1 = 9 ;

    else if(temp==0xEB)

     P1 = 8 ;

   }

   else

   {

    P3=0xF7;

    temp=P3;

    if(temp!=0xF7)

    {

     if(temp==0x77)

         P1 = 15 ;

     else if(temp==0xB7)

      P1 = 14 ;

     else if(temp==0xD7)

      P1 = 13 ;

     else if(temp==0xE7)

      P1 = 12 ;

    }

   }

  }

 }

 return 0;

}


推荐阅读

史海拾趣

BOSER公司的发展小趣事

近年来,电子行业面临着诸多变革和挑战,如智能化、物联网等新技术的发展。BOSER公司积极应对这些变革,不断调整和优化产品结构,加大在智能化、物联网等领域的研发投入。同时,公司还加强与高校、科研机构的合作,共同推动电子行业的创新与发展。

Clulite公司的发展小趣事
  1. 创业初期
    • 描述Clulite公司的创始人或核心团队如何识别电子行业中的某个市场机遇。
    • 讲述他们是如何筹集初始资金,设立公司,并开发出第一款产品或解决方案的。
    • 可以提及公司在初创阶段面临的挑战,如技术难题、市场竞争等。
  2. 技术创新
    • 讲述Clulite如何通过研发创新,推出了一款颠覆性的产品或技术,从而获得了市场认可。
    • 详细描述这一创新过程,包括研发团队的努力、关键技术的突破等。
    • 提及这一创新如何帮助公司在市场上取得了竞争优势。
  3. 市场拓展
    • 描述Clulite如何逐步扩大市场份额,从地区市场走向全国乃至国际市场。
    • 可以讲述公司如何建立销售网络、与合作伙伴建立合作关系,以及参与行业展会等活动来推广品牌和产品。
    • 提及公司在市场拓展过程中遇到的挑战和应对策略。
  4. 品质管理
    • 讲述Clulite如何注重产品质量和客户体验,通过严格的质量控制流程来提升产品可靠性。
    • 描述公司如何建立完善的售后服务体系,为客户提供及时、专业的支持。
    • 提及这些举措如何帮助公司赢得了客户的信任和口碑。
  5. 可持续发展
    • 讲述Clulite如何关注环境保护和社会责任,推动公司的可持续发展。
    • 描述公司如何采取环保措施,减少生产过程中的污染排放。
    • 提及公司如何参与社会公益事业,回馈社会。

请注意,这些故事需要根据Clulite公司的实际情况进行调整和补充。如果你需要更具体的内容,建议查阅Clulite公司的官方网站、新闻报道或行业分析报告,以获取更详细的信息和数据。

AntennaHome公司的发展小趣事

随着5G技术的快速发展,电子行业迎来了新的变革。AntennaHome公司面临着来自行业内外的巨大挑战。为了应对这一变革,公司加大了对5G天线技术的研发力度,同时积极调整产品结构和市场策略。经过一段时间的努力,公司成功推出了多款适应5G时代需求的新型天线产品,为公司的持续发展奠定了坚实的基础。

Efficient Power Conversion公司的发展小趣事

在追求自身发展的同时,EPC公司也积极寻求与行业内其他企业的合作。通过与全球知名的汽车制造商、通信设备制造商以及消费电子企业建立合作关系,EPC公司将其氮化镓技术广泛应用于各个领域,推动了整个电子行业的发展。同时,EPC公司也积极参与行业标准的制定和推广工作,为行业的健康发展做出了积极贡献。

DETCO公司的发展小趣事

随着智能家居市场的兴起,ElectronicsCorp看到了巨大的潜力。公司投入大量资金研发智能家居设备和技术,并与多家知名家居品牌合作推出了一系列智能家居解决方案。这些解决方案不仅提供了便捷的智能家居体验,还注重用户隐私保护和数据安全。通过不断创新和优化产品体验,ElectronicsCorp在智能家居领域取得了显著突破,并成为全球智能家居市场的领军企业之一。

锋鸣电子(Fengming)公司的发展小趣事

福斯特(FIRST)公司在光伏封装材料领域取得了显著成就。自2003年公司前身杭州福斯特热熔胶膜有限公司成立以来,团队成功研发出EVA太阳能电池胶膜,正式进军光伏行业。此后,公司不断投入研发,扩大产能,光伏胶膜(EVA/POE胶膜)的设计产能已达10.51亿平米。至2020年,公司光伏胶膜销量达8.65亿平米,占据全球市场份额约55%-60%,大幅领先其他竞争对手。这一成就不仅巩固了福斯特在光伏胶膜市场的领导地位,还推动了整个行业的发展。

问答坊 | AI 解惑

整流二极管反向恢复时间与关断尖峰的关系(看高手的解释)

整流二极管反向恢复时间与关断尖峰的关系。    在一般的桥式整流电路中,整流后的电压波形是方波,工作中会有一个尖峰。现在问题是: 1、这个尖峰是如何产生的。 2、这个尖峰的大小跟二极管的反向恢复时间的关系是怎么样的? 3、如果 ...…

查看全部问答>

CE5 系统启动问题求助

ce5 系统镜像NK.nb0 是否一定要先加载到内存中才能运行?能否不加载到内存中,直接从flash中启动?…

查看全部问答>

Wince文件系统一个奇怪的现象

最近在做Wince5.0 SD卡的驱动,捣鼓了半个月,驱动做好了,文件的写入和读出都没问题,本来打算压力测试完毕后就结束这个工程,不料在进行压力测试的时候出现了错误,我的测试分为两种,分别为进行大文件写入读取和批量文件写入和读取,在做批量文件 ...…

查看全部问答>

想在wince的nk。nb0里添加自己做的应用程序,能给点提示吗

想在wince的nk。nb0里添加自己做的应用程序,能给点提示吗, 1.是不是添加自己的exe文件就可以了呢,给点提示好吗? 2.比如要查msdn的关键字是什么呢?…

查看全部问答>

wince驱动调试出现cxx0017错误,变量找不到怎么回事?

在进行wince串口驱动跟踪时在watch窗口出现cxx0017错误,有些变量找不到,提示symbol“pSerialHead”not find,还有其他几个变量也找不到,这是怎么回事?我看有些变量是可以找到的。断点设在下面的函数里。望各位高人指教。 HANDLE COM_Init( & ...…

查看全部问答>

如何完成设计文件

我编了个VHDL文件.在Quartus II 6.0里 1,建立新项目. 2,引入VHDL文件 3,编译时提示未定义顶层文件. 这是怎么回事?还需要建立什么样的文件?如何建?…

查看全部问答>

有对到AM/FM收音机芯片感兴趣的来

我公司代理的C8051F单片机,可以通过JTAG实现在线调试、仿真、下载。 调试方面,加密性好! 联系:021-61202632  岳小姐…

查看全部问答>

500元(不够可加)求文件驱动开发高手指点问题

问题很简单,我在irq_mj_read 中自己构造IRP 查询文件全路径,结果出错 0xc00000d 参数错误 请联系我:13791007364  张波, 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急…

查看全部问答>

请问哪位大侠有F427的中文资料

由于本人洋文很差,也不想再学了,看不了洋文资料,哪位大侠有的话提供个方便啊…

查看全部问答>

加密锁与云授权

加密锁与云授权     在中国,加密锁仍然是占主导地位的软件保护方式。近30年来,计算机硬件不知更新了多少代,软件技术也从上世纪90年代起进入了互联网时代,而加密锁保护方式却一直没有改变,顶多从原先的并口锁进化到US ...…

查看全部问答>