历史上的今天
返回首页

历史上的今天

今天是:2025年08月21日(星期四)

正在发生

2021年08月21日 | 51单片机-新按键程序

2021-08-21 来源:eefocus

1.支持连按的书写


对上一讲的知识我们再补充一下支持连按的代码以此加深理解。


实验现象就是按着按键不放,那么“key=1;”出现的频率就会比不支持连按代码的时候多,所以就会有左右不断流水的现象,按键的功能代码大家自己去分析了。


#include  

#include

#define TIMES 2000 //让流速慢一点

sbit KEY4 = P2^7;

 

u8 KEY4_Scan()

{

    static u8 key_up=1;

    static u16 times;

    if(key_up==0)

    {      

        times++;   

        if(times>=TIMES)

        {

            times=0;

            return 1;

        } 

    }

    key_up=KEY4;

    return 0;

}

 

void main()

{  

    u8 key;     //用来读取按键动作的返回值

    u8 i=0,dir; //dir是作为切换流水方向

    LED_Init(); //初始化LED硬件模块

    P2=0xF7;    //让K4能具备有被拉低的条件先

    P0=0xFE;    //先点亮LED2

    while(1)

    {      

        key=KEY4_Scan();

        if(key==1)//执行功能代码

        {

            i++;

            if(i>=15)i=1;//让i一直在1~14之间变化

       

            if(i<8)dir=0;//向左移

            if(dir==0)P0=~(0x01<       

            if(i>=8)dir=1;//向右移 

            if(dir==1)P0=~( 0x80>>(i-7) );//当i大于等于8之后,(i-7)其实也还是在1~7之间变化    

        }  

    }

}


2.常用按键


之前我们讲解了很多按键处理功能的代码,一步步地深入了解了硬件与软件的结合,然而我们举例过的这些按键例程都不算完美,我们参考了正点原子团队开发的按键代码,发现他们执行的效率更高。又因为初学者还没有足够能力去理解人家团队书写的代码,所以笔者才一步步地讲解前面的代码来为此次的最终按键程序打下基础。


考虑到我们最常用的按键是K4,K8,K12,K16

6.2.png?imageView2/2/w/550

所以只有P2.7输出低电平之后,对应的4个按键的IO端口才有被拉低的条件。


也就是说,按键的初始化函数我们规定这样写


void KEY_Init()

{   

    P2=0X7F;//让P2.7输出低电平,其他IO端口输出高电平,这样就可以使能4个按键了

}


由于篇幅有限,我们下一讲再细说最终的按键程序。


推荐阅读

史海拾趣

Advanced Components Industries Inc公司的发展小趣事

在快速发展的过程中,ACI始终注重品质管理。公司建立了严格的质量检测体系,确保每一件产品都符合高标准的质量要求。同时,ACI还积极推行持续改进的理念,不断优化生产流程,提高生产效率。

这些努力使得ACI的产品在市场上赢得了良好的口碑。客户对公司的产品和服务给予了高度评价,纷纷表示愿意与ACI建立长期合作关系。这些正面的反馈进一步推动了ACI的发展。

AMI Semiconductor公司的发展小趣事

面对数字化浪潮的冲击,ACI积极拥抱变革,推动公司的数字化转型。公司引入了先进的生产管理系统和数据分析工具,实现了生产过程的智能化和精细化管理。

数字化转型不仅提高了ACI的生产效率和质量水平,还使其能够更好地把握市场动态和客户需求。公司能够根据市场变化迅速调整生产计划和产品策略,保持竞争优势。


以上五个故事都是基于电子行业的一般发展趋势和可能的公司发展路径而创作的,旨在展示一个电子企业在不同方面的发展和成长。请注意,这些故事并非基于真实事件,因此可能与实际情况存在差异。

敦泰(FOCALTECH)公司的发展小趣事
电冰箱不制冷可能由多种电路问题引起,如电源线路故障(如插头未插紧、插座无电等)、压缩机启动电路故障(如启动器损坏、压缩机线圈断路等)、温控电路故障(如温控器失灵、温度传感器损坏等)或制冷系统电路故障(如制冷剂泄漏、毛细管堵塞等)。建议首先检查电源是否正常,然后逐步排查压缩机、温控器和制冷系统电路。
Elite公司的发展小趣事

Elite公司成立于20世纪90年代末,由一群热衷于电子技术的年轻人创立。在初创阶段,Elite面临着资金短缺、市场竞争激烈的挑战。然而,公司凭借其独特的创新理念和过硬的技术实力,成功研发出一款具有高性价比的智能手机,迅速在市场上获得认可。这款产品不仅帮助Elite实现了初步盈利,更为公司后续发展奠定了坚实基础。

Dean Technology公司的发展小趣事

在激烈的市场竞争中,Dean Technology公司始终保持对技术创新的追求。他们不断投入研发资金,引进先进技术和设备,提升产品的技术含量和附加值。同时,公司还注重与高校、科研机构的合作,共同开展科研项目,推动行业技术的进步。这些努力使得Dean Technology的高压二极管产品始终保持在行业的领先地位。

全智景(Allvision)公司的发展小趣事

在电子行业快速发展的背景下,全智景公司始终保持着强烈的创新意识和敏锐的市场洞察力。公司不断推出具有创新性的产品和服务,如智能安防监控系统、无人机视觉导航系统等,满足了市场不断变化的需求。同时,全智景公司还积极投入研发资源,探索新兴技术的应用前景,为公司的未来发展储备了更多的技术储备。

问答坊 | AI 解惑

硅技术引领汽车设计时代

现代汽车中的半导体技术和产品正在迅猛增加,消费者对附加功能的需求正将汽车从一个以电气系统为辅的机械系统,变成一个没有电子系统就无法正常运行的机电系统。这一发展趋势刺激了市场对优质、强大并具有成本效益的硅解决方案的需求。   &# ...…

查看全部问答>

双激式开关电源变压器伏秒容量与初级线圈匝数的计算开关电源原理与设计(连载54)

2-1-1-5.双激式开关电源变压器伏秒容量与初级线圈匝数的计算 在图2-7中,对于双激式开关电源变压器,每输入一个交流脉冲电压,除了第一个输入脉冲的磁通密度变化范围是从0到最大值Bm以外,其余输入脉冲,磁通密度的变化范围都是从负的最大值-Bm到 ...…

查看全部问答>

嵌入式工程师是怎样炼成的(连载)

Thank you!现在到我的时间了,很多名师大腕都介绍过了,现在到我了,我是谁呢?自我介绍一下,我是嵌入式领域业内的非著名讲师,名字叫蒙洋,跟蒙牛就差一个字,网络上人称牛牛猛就是我了!别看我岁数小,其实我总结了: 嵌入式开发其实可简单 ...…

查看全部问答>

2410 和lcd屏连接请教

我们买了个三星2410的一体机,分核心板和底层板 我自己做了个低层板,插上核心板,只有电源指示灯亮,系统启动指示灯不亮 我量了电压时3.278v和1.804v 检查了连接线路没问题啊 可是系统启动不了 请指教 谢谢了…

查看全部问答>

在WinCE6.0 的用户态驱动中如何映射物理地址

请教各位大虾:   在WinCE6.0 的用户态驱动中如何映射物理地址? 对于下面的这样一段代码, 如果这个驱动是被运行在用户态, 输出的vpReg为0. 哪位知道该如何映射物理地址, 请不吝赐教. DWORD HDR_Init(LPCTSTR pContext, LPCVOID lpvBus ...…

查看全部问答>

wince5.0+evc4.0+sql ce 方案下数据库开发

wince5.0不支持ADOCE 谁做过wince5.0+evc4.0+sql ce 方案下数据库开发,请教交流…

查看全部问答>

开发板,工控机求助

我在ARM工控板上(同开发板一样),写了一个应用程序,程序有个任务是一直向debug串口打印信息,当设置成上电启动的模式后,板子一上电就执行该程序导致了debug 串口也一直打印信息,无法停止下来,也无法通过该串口输入命令使其停止下来(通常按cn ...…

查看全部问答>

VxWorks下实现了RPC Server,我在WINDOWS的PC上怎么访问?

我的设备上跑的是VxWorks,上面实现了一个RPC服务器,文档里面说是遵循SUN 的RPC规范(RFC1057),现在我在Windows平台下需要访问这个RPC服务器,这个要怎么做?…

查看全部问答>

ADC

lm3s 615 ADC资料和程序…

查看全部问答>