首页  /  单片机教程  /  新按键程序  /  

新按键程序

点击打开在线编译器,边学边练

1.支持连按的书写

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

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

#include <reg52.h> 
#include <function.h>
#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<<i);
      
            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


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

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

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

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


本文固定URL:https://www.dotcpp.com/course/363

上一课:带返回值的函数 下一课:最终按键程序
第一章 单片机入门
第二章 LED
第三章 蜂鸣器
第四章 数码管
第五章 独立按键
第六章 多文件编程
第七章 外部中断
第八章 定时器
第九章 舵机与超声波模块
第十章 串口通信
第十一章 1602液晶屏
第十二章 IIC通信
第十三章 红外遥控与温度传感器
第十四章 AD与DA
第十五章 混合例程
第十六章 完结
Dotcpp在线编译      (登录可减少运行等待时间)