找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1632|回复: 1
打印 上一主题 下一主题
收起左侧

分享一个按键扫描程序,支持延时连发

[复制链接]
跳转到指定楼层
楼主
ID:335637 发表于 2018-5-22 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <GetKeyValue.h>
#include "STC15W408AS.h"

sbit key_power=P1^5;

unsigned char key_delay_put=0;
unsigned char key_delay_counter=0;

//°′¼üé¨Ãèoˉêy
unsigned char key_board_scan(void)
{
        unsigned int        ii,zz=0;
       
        P14 = 0;
        ii = P3;                //¶áè¡¶Ë¿ú×′ì¬

        switch(ii)
        {
                case 0xfe: zz=1; break;                //¡°K1¡±±»°′ÏÂ
                case 0xfd: zz=2; break;                //¡°K2¡±±»°′ÏÂ
                case 0xfb: zz=3; break;                //"K3"±»°′ÏÂ
                case 0xf7: zz=5; break;                //¡±K4¡°±»°′ÏÂ
                case 0xef: zz=7; break;                //¡°K1¡±±»°′ÏÂ
                case 0xdf: zz=4; break;                //¡°K2¡±±»°′ÏÂ
                case 0xbf: zz=6; break;                //"K3"±»°′ÏÂ
                case 0x7f: zz=8; break;                //¡±K4¡°±»°′ÏÂ
                default:break;
        }

        if(zz==0)
        {
                if(key_power==0)  zz=9;                        
        }

        P14 = 1;

        return zz;
}

//¸ù¾Y¼üÖμé¨ÃèoˉêyμĽá1û½øDDÏû¶¶μè×ÛoÏ′|àíμÄoˉêy
unsigned char ReadKeyboard(void)
{        
//        static unsigned char         key_state =0,key_value1,key_value2,key_value3,key_value4;
        static unsigned char         key_state =0,key_value1,key_value2,key_value3;
        static unsigned char         key_time =0;        //Ô-Ï趨òåμÄêÇuintDí£¬êμ¼êéÏ2»DèòaÕaÃ′3¤μÄêy¾YààDí£¡
        unsigned char                         key_return =0,key_return1 =0;

       
        switch(key_state)
    {
                case 0:                // ÅD¶ÏêÇ·ñóD¼ü°′ÏÂ
                        if(key_board_scan() != 0) { key_state = 1; }        // óD°′¼ü£¬×aÏû¶¶è·èÏ×′ì¬
                        key_delay_put=0;
                break;
               
                case 1:                // Ïû¶¶′|àí
                if(++key_time >= 1)                        // ¸Ä±äÅD¶Ïìõ¼t¿é¸Ä±ä¼üÅìáéÃô¶è
                {           
                        key_value1 = key_board_scan();
                        if(key_value1 != 0) { key_state = 2; }
                        else { key_state = 0; key_time =0; }
                        key_delay_put=0;
                }
                break;
               
                case 2:                // è·èϰ′¼ü,í¬×′ì¬1±è½Ï
                key_value2 = key_board_scan();
                key_delay_put=0;
                if(key_value2 == key_value1)        // Ôù′Îé¨Ãè
                {        
                        key_return1 = key_value2;
                        key_state =3;                                // ×aèëμè′y°′¼üêí·Å×′ì¬
                        key_time =0;                                // Çå0°′¼üê±¼ä¼ÆêyÆ÷
                }               
                else { key_state = 0; key_time =0;}        // á½′ÎáDμçÆ½2»í¬·μ»Ø×′ì¬0£¨Ïû¶¶′|àí£©
                break;

                case 3:                // ¼Æêy1,(°′1.28S,ᬷ¢ÅD¶Ï)                  
                key_value3 = key_board_scan();               
                if(key_value3 == 0) { key_state = 0; key_delay_put=0;}        // °′¼üòÑêí·Å£¬×a»»μ½°′¼ü3õê¼ì¬
//                else if((key_value3 == S2)||(key_value3 == S3))        // ¸Ä±ä′ËÅD¶Ïìõ¼t,¿éòÔè·¶¨
                else
                {                                                                                                                                        // ÄÄD©¼ü¾ß±¸¼óËù1|Äü,3#,4#óD¼óËù1|Äü
                        if(key_value3 == KEY_TONGSUO)        key_delay_counter=20;
                        else if((key_value3 == KEY_GONGLV)||(key_value3 == KEY_SHEZHI)||(key_value3 == KEY_SHUIMIAN)||(key_value3 == KEY_DINGSHIKAI)||(key_value3 == KEY_DINGSHIGUAN))        key_delay_counter=130;

                        else        key_delay_counter=30;               
                        if(++key_time >= key_delay_counter)                        // 3#¡¢4#°′¼üò»Ö±°′×ÅûËé¿a£¬Ôò×î3¤30*15=0.45Soó£¬Ö±½ó·μ»Ø¸Ã¼üÖμ£¡
                                                                                        // Ôú1.28SÄú2»»áóDèÎoμüÖμ·μ»Ø£¨ËüμļüÖμÔú×′ì¬2½áêøêÇòѾ-·μ»Ø1yáË£©
                        {                                                                // Çò¿éòÔ½øèë×′ì¬4£¬Æô¶ˉᬷ¢1|Äü£¡
//                                key_state = 4;                                // èô°′ÏÂμÄêÇ4#¼ü£¬ÔòÔúμèμ½ËüËé¿aǰ£¬2»»áÔù·μ»ØèÎoμüÖμ(ËüμļüÖμÔú×′ì¬2ê±òѾ-·μ»Øò»′ÎáË)£¡
                                key_delay_put=1;
                                key_time = 0;                                // Çå°′¼ü¼ÆêyÆ÷
                                key_return1 = key_value3;
                        }
                }
                break;

                case 4:                                                                        // ¼Æêy2,ᬷ¢1|Äü           
                        key_value4 =key_board_scan();  
                               
                                             
                        if(key_value4 == 0) { key_state=0;}        // °′¼üòÑêí·Å£¬×a»»μ½°′¼ü3õê¼ì¬
                        else if(++key_time >= 5)                                // 1.5Soó£¬Ã¿1y5*15mS=0.075S·μ»Øò»′μüÖ죬¼′ᬷ¢1|Äü£¡
                        {                                                                                // £¡£¡£¡£¡£¡£¡»1¿éòÔ½øò»2½×aμ½±èèç×′ì¬5¡¢6μ裬½øò»2½¼ó¿ìᬷ¢μÄËù¶è£¡£¡£¡£¡£¡£¡
                                key_time = 0;                                                // Çå°′¼ü¼ÆêyÆ÷
                                key_return1 = key_value4;                        // êä3ö¡°á¬·¢¡±
                        }
                break;
        }

        return key_return1;

}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:337808 发表于 2018-5-29 00:38 | 只看该作者
注释汉字我是一个也没看到呀,读了半天,不知道放在哪里进行驱动。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表