打印

搞出火*味了啊

[复制链接]
4340|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘前辈|  楼主 | 2009-5-19 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
highgear大堂主输给俺菜鸟一回,极力要挽回堂主的面子,追着俺纠缠不放。
唉,俺找了一个为大堂主挽回面子的事情:

LastNew请教各位高手:下面他写的键盘程序,有什么不妥?哪里需要改进?
highgear不是一直宣称自己R&D大堂主玩键盘小菜吗?您不是希望挽回自己堂主的声誉吗?这不是机会来了。

帮我们小辈初手仔细分析讲解一下下面的键盘功能程序原理,哪里不妥,哪里可以简化,这岂不是获得论坛人人敬仰,功名留坛之举?

虽然有点屈才,但总比和俺这样非专业菜鸟PK强吧,万一输了,本来就晚景凄惨了,不好办啦。本来心理就极度脆弱了,会不会有什么极端行为发生?万一真的发生了,可真让俺一生都内疚了。
换一种方式找回大堂主的尊严,这样好。


#define    _keyscan_h_

#include <keyscan.h>

void KeyInit(void)
{
    keyread_index=0;
    keywaiting_index=0;
    key_counter=0;
    key_ok=0;
    KeybuffCount=0;
}

void KeyScan(unsigned char * key)
{
    unsigned char key_temp=0x00;

    if (KeyPressed(&key_temp))    //有键按下    //键扫描,获得键值
    {
        if (key_temp == last_key)
        {
            key_counter++;
            if (key_counter>=KEYDELAY)                //连续键
            {
                *key=key_temp+0x80;                //连续键码值在单键基础上加0x80
                key_counter-=KEYLOOP;

                key_ok=1;
            }
        }
        else
        {
            key_counter=0;
            last_key=key_temp;
        }
    }
    else                            //键抬起
    {
        if ((key_counter>=3)&&(key_counter<(KEYDELAY-KEYLOOP)))
        {
            key_ok=1;
            *key=last_key;            //step key decode    //单键解码
        }
        key_counter=0;
    }

}

void KeyUpdate(void)
{
    unsigned char key;

    KeyScan(&key);

    if(key_ok==0)
        return;

    key_ok=0;
    
    if(KeybuffCount<KEYPAD_RECV_BUFFERF_LENGTH+1)
    {
        KeybuffCount++;
        
        keyrev_buff[keywaiting_index++]=key;    
    
        if(keywaiting_index>KEYPAD_RECV_BUFFERF_LENGTH)
        {
            keywaiting_index=0;
        }
    }
    else
    {
        keyrev_buff[keywaiting_index]=key;        
    }
}

bit GetKeyCode(unsigned char *  key)
{
    KeyUpdate();

    if(KeybuffCount)
    {
        *key=keyrev_buff[keyread_index++];

        if(keyread_index>KEYPAD_RECV_BUFFERF_LENGTH)
        {
            keyread_index=0;
        }

        KeybuffCount--;
        return 1;
    }
    return 0;
}

bit KeyPressed(unsigned char *  getkey)
{
//  bit fgKeyRelease = 1;
  unsigned char bKeySatus = 0;

  //init KEY1-KEY4
  KEY1 = 1;KEY2 = 1;KEY3 = 1;KEY4 = 1;
  
//KEY:4/3/2/1
if (KEY1 == 0)
     {
     bKeySatus = 1;
     }
else if (KEY2 == 0)
     {
     bKeySatus = 2;
     }
else if (KEY3 == 0)
     {
     bKeySatus = 3;
     }
else if (KEY4 == 0)
     {
     bKeySatus = 4;
     }
else
     {
    //KEY:1-2/1-3/1-4
    //init KEY1-KEY4
    KEY1 = 0;KEY2 = 1;KEY3 = 1;KEY4 = 1;

    if (KEY2 == 0)
        {
        bKeySatus = 5;
        }
    else if (KEY3 == 0)
        {
        bKeySatus = 6;
        }
    else if (KEY4 == 0)
        {
        bKeySatus = 7;
        }

    //KEY: 2-3/2-4
    //init KEY1-KEY4
    KEY1 = 1;KEY2 = 0;KEY3 = 1;KEY4 = 1;
    
    if (KEY3 == 0)
        {
        bKeySatus = 8;
        }
    else if (KEY4 == 0)
        {
        bKeySatus = 9;
        }

    //KEY: 3-4/
    //init KEY1-KEY4
    KEY1 = 1;KEY2 = 1;KEY3 = 0;KEY4 = 1;
    
    if (KEY4 == 0)
        {
        bKeySatus = 10;
        }
     }

  if (bKeySatus != 0)
   {    
    *getkey=bKeySatus ;
     return 1;
  }
  return 0;
}

LastNew:
一直按着同一按键的问题,00、xwy还有路过的前辈教教我 

做了个键盘,有按键缓冲,想做长按键功能
于是有了关于这方面的问题:
    (此时暂不考虑缓冲的必要性问题,即默认有缓冲情况下)
如果做成加速键,那么多长时间重发一次比较合适,如果是100ms的样子,那缓冲会不会很快就满了?
如果做成长按键,那如果一直按着不放,怎么样处理比较合适使它不重复发长按键?(也就是只在第一次长按有效,要不很别扭啊;这个问题普通键也有吧,因为有的情况下可能复用的键没有安排长按功能)

好了,还有个问题就是缓冲究竟有没有必要?因为这就是个很简单的系统,实时的任务只有遥控,连串口通讯都没有

最普遍的方法应该就是最好的方法吧(对于这些常见问题)

 

相关帖子

沙发
sz_kd| | 2009-5-19 11:23 | 只看该作者

占位听课~~~~~~~~~~~~~~~

使用特权

评论回复
板凳
刘前辈|  楼主 | 2009-5-19 11:24 | 只看该作者

占位

让俺来讲,大堂主不怕再丢面子?

使用特权

评论回复
地板
耕在此行| | 2009-5-19 20:02 | 只看该作者

程序太多了 我想看流程图

使用特权

评论回复
5
huangqi412| | 2009-5-19 20:12 | 只看该作者

哎,又看热闹拉...............

使用特权

评论回复
6
czha1| | 2009-5-19 20:54 | 只看该作者

!!

尺有所长,寸有所短

使用特权

评论回复
7
ningling_21| | 2009-5-19 21:01 | 只看该作者

想听听讲课

占个位子

使用特权

评论回复
8
highgear| | 2009-5-19 21:23 | 只看该作者

请发誓,保证以上程序是你自己独立完成的

1)你我二人,谁的程序如果不是自己做的,或是让人提供了帮助,谁是太监。

2)我说过,我不是你爹,我没有义务解答你的问题,也不想看别人的程序。

3)是你自己提出的打赌,我迎战,并加入附加条件,我已如数完成,你到如今还在逃避。

4)纠缠不放是因为一个星期过去了,到现在你仍然没有完成你的赌约。我只好叫你刘公公了。

5)你用这种伎俩,不就是为了转移视线。“俺这样非专业菜鸟“,当初你何必这么张狂呢?如果你不能做或者是不想做了,很简单的一个条件:请以后技术问题就谈技术,不要再唧唧歪歪,男人就应该拿出男人的样子出来。


下面是一个2s后每1s一次按键的处理过程。是pk程序的一部分,分别用c51, VC++, VB和C# 实现。

struct KeyStatus
{
    char key;
    char pressedKey;
    char keyState;
    char keyTimer;
    char keyEventHandled;
}
m_KeyStatus;

//Run this in every 20 milliseconds.
void DetectKeyPress()
{
    Scankeyboard();   //Put the pressed key in m_KeyStatus.pressedKey
    switch (m_KeyStatus.keyState) {
       case 0:
           if (m_KeyStatus.pressedKey != NOKEY)
               m_KeyStatus.keyState++;    //debounce delay
           break;
       case 1:
           if (m_KeyStatus.pressedKey == NOKEY)
               m_KeyStatus.keyState--;
           else {
               m_KeyStatus.key = m_KeyStatus.pressedKey;
               m_KeyStatus.keyEventHandled = false;
               m_KeyStatus.keyTimer = MILLISECOND(2000);                                     //2 seconds
               m_KeyStatus.keyState++;
           }
           break;
       case 2:
           if (m_KeyStatus.key != m_KeyStatus.pressedKey) {
               m_KeyStatus.keyState = 0;
               m_KeyStatus.key = NOKEY;
           }
           else {
               if (--m_KeyStatus.keyTimer == 0) {
                   m_KeyStatus.keyTimer = MILLISECOND(1000);                              // 1 second
                   m_KeyStatus.keyEventHandled = false;
               }
           }
           break;
       default:
           m_KeyStatus.keyState = 0;
    }
}

程序当简洁易懂。

使用特权

评论回复
9
zyboy| | 2009-5-19 22:07 | 只看该作者

顶刘前辈

谢谢了帮助我解决了一个问题。我觉得没什么好争得,退一步海阔天空。技术不是全部,快乐研发,快乐生活!

使用特权

评论回复
10
刘前辈|  楼主 | 2009-5-20 10:21 | 只看该作者

帮助他人就是快乐。

可是有一种人,看着别人快乐他就不高兴。

例如论坛上,俺也许无意中看出9楼程序不足点,指出来是很平常的事情。

可是没想到有那么一种心理病态之人,红眼:“有什么了不起,我早就看出来了。不屑说罢了。一帮菜鸟.....,”

前两天好像谁说过“我是你爹,不稀罕回答你。”(理解为“儿子挑战老爹”不算造谣吧。)

这是阿Q来了?(拿起鞭子将你打....)

论坛上有这么一个到处要找人PK的天才阿Q,也增添了不少论坛的热闹气氛。

挺好玩的。

想想也有点不道德。看他有点歇斯底里,意识不清了,如今做事有点老年人那样健忘、固执,刚说过的话会忘。

“退一步海阔天空。”

还有一句,刘墉:

“穷寇莫追。”

做事给人留面子。是吧。

使用特权

评论回复
11
刘前辈|  楼主 | 2009-5-20 10:25 | 只看该作者

也给自己留面子。

 highgear 发表于 2009-2-25 02:03 侃单片机 ←返回版面    

31楼: 学生D真不愧是脑袋进过水 

...... 这就是说,你和你那同伙冷漠想说计算机不能证明一下哥德巴赫猜想,.......你蠢, 不等于计算机也蠢。你难道不会用 google 找一个源代码么?
**********************************************************

佩服数学天才!  highgear准备从google上找一个证明哥德巴赫猜想的源代码?

或者认为1976年以前就有了计算机计算的CRC程序?还是不知道CRC技术是应用在同步通信技术当中的?

highgear堂堂R&D大堂主如今只知道计算机通信是按字节一个一个发送的?忘了上次所长被人轰出CAN招聘会的事情;你师父都不行,就你?

还到处找人要PK?师徒俩输了多少回啦。

使用特权

评论回复
12
刘前辈|  楼主 | 2009-5-20 10:47 | 只看该作者

尺有所短,寸有所长。

highgear 又追杀到俺的楼盘里来啦?

highgea以为俺会对你师徒、父子2人联手追杀的行为感兴趣?haha,服气,咱对52岁老所长师徒组成的(讲习所)团队PK俺25岁80后的行为,只感到嗤笑。(真是尺有“所长”领队,寸有所短躲避。 )


“尺有所短,寸有所长。”高手输几回笑笑过后不丢面子。死要捞回面子反而更难看。

所以,歇歇吧,所长团队。

*********************************************************

电视剧《潜伏》里有句话:

“要想提高自己,只能找高手过招。”

“天天和菜鸟挑战,虽然总赢,但一生都只是菜鸟。”

使用特权

评论回复
13
冷漠| | 2009-5-20 16:06 | 只看该作者

前辈息怒。俺不再给这种人留面子。(本来已经平静了的事

前辈问得好:师徒俩输了多少回?还死要捞回面子。
有些论坛历史事件highgear要逼人追述往事?刘前辈不知道,俺来罗列一下。
讲习所师徒俩至少输给学长4次。咱慢慢欣赏:

1、学长“一道题”至今让所长大为光火;装懂了半天,最后还是错了。至今闷闷不乐:修炼了那么多年,21IC论坛上的“超级大国”,怎么就让1952这么一个80后小毛孩给涮了呢。
   这叫自寻其辱。

2、学长的第二道题:

      定义一个char  matr[3][2]二维数组,将0x34写入matr[2][2];(错误,边界之外了。)

    这道题把highgear父子2人弄了个头大。尤其highgear,听从所长旨意,兴奋地出1,000元赌资:
highgear 发表于 2008-9-19 23:37 侃单片机 ←返回版面    

  “你少来转移视线那一套,我悬赏1000让你给大家讲讲matr[2][2]怎么跑到matr[3][2]边界之外的?别跑啊”

   “好吧,就算你是蔡鸟,总该会数数吧?算上你的手指,哦,忘了你没手指。那好吧,[3][2]共6个,[2][2]才4个, 4 小于6。来,摇个尾巴,表示你记住了。掰指头好好数数。”

“真是天意啊,帮师傅报仇的机会来了,这下可算抓住1952的尾巴了....”

*********************************************************************
    
     哈哈:21IC论坛上最难忘的一幕。自己开的赌资,结果,父子2人一起跑了。有小半年时间都没在论坛上出现。逃债?

    这叫自食其果。

使用特权

评论回复
14
冷漠| | 2009-5-20 16:11 | 只看该作者

精彩贴!

 wxj1952 发表于 2008-9-20 16:16 侃单片机 ←返回版面    

168楼: 自己打了自己的脸! 

精彩帖:,[3][2]共6个,[2][2]才4个, 4 小于6。来,摇个尾巴,表示你记住了。

到底是4还是7还是9?!来,摇个尾巴,好好算算。

使用特权

评论回复
15
highgear| | 2009-5-20 21:19 | 只看该作者

哈哈,wxj1952烧饼们又倾巢出动了。

**********************************************************************
highgear 发表于 2009-2-25 02:03 侃单片机 ←返回版面   举报该贴 

***你用计算机证明一下哥德巴赫猜想试试?***  这就是说,你和你那同伙想说计算机不能证明一下哥德巴赫猜想,所以不能计算crc? 你蠢,计算不出crc, 不等于计算机也蠢。你难道不会用 google 找一个源代码么?

***CRC循环码技术是硬件电路领域的研究,跟计算机软件有什么关系***?一种智商优越感油然而生,哈哈,你到底活在哪个年代?”
*********************************************************************

对照wxj1952烧饼们的谎言,就可以知道它们的rp, 刘公公,你到底有没有勇气承认自己是说谎,是个太监?

wxj1952烧饼们一通歪曲诬蔑造谣中伤,无非是想做一件事:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!抵赖掉wxj1952烧饼们自己提出的挑!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

正如一个前辈icage提出pk, wxj1952烧饼们吓得p滚niao流,夹着尾巴逃走了一样一样。

wxj1952烧饼们崇洋媚外,实为不忠;辱骂前辈老人,是为不孝;用意险恶,此乃不仁;中伤热心帮助它们之人,不义;不会数数,此乃不智,见pk逃之夭夭,实为不勇;百般撒泼抵赖自己提出的PK,为无信。

wxj1952尔等不忠不孝不仁不义不智不勇且无信,有何面目立于世上?阿弥陀佛,我佛慈悲,普度众生。

使用特权

评论回复
16
刘前辈|  楼主 | 2009-5-20 21:29 | 只看该作者

这种人....自以为得计。

俺看了一年前wxj1952的帖子。所长太有失50岁年长之人风范了.....

所长和highgear 还真是关系微妙,原来早在一年前就联手狼狈关系了。

真是一人在前台疯狂跳骂,一人在后台阴险操纵。好一场傀儡表演。结果还是让年轻人把2人损了个大花脸,尊严丢尽退出论坛了。

这么卑劣手法的2个年长之人,竟也输给wxj1952一个年轻人4次?论年龄,论学识,论人数力量都说不过去呀。正所谓心里有鬼吧。

    尽丢4次尊严的人现在又联手追杀找俺PK来了?俺是菜鸟,俺不敢和所长对阵,更别说所长师徒2人一起上了,俺怕,闪了。

    有本事找高手过招去,老缠着俺菜鸟算什么本事。

使用特权

评论回复
17
czha1| | 2009-5-21 08:39 | 只看该作者

要看长处

讨论问题要看到人家的长处,不要看人家短处。
每个人都会有自己忽略的地方。
人们不是从昆虫那里学到不少技巧吗。
有时一个人水平不高,但能综合利用,也能达到很好的效果。

使用特权

评论回复
18
flead| | 2009-5-21 09:03 | 只看该作者

消消气

何必如此呢?

论坛不久一个虚拟社区嘛!
现实中不能活的潇洒,虚拟中也不能?

各位前辈,都冷静点吧,免得别人看笑话!

使用特权

评论回复
19
冷漠| | 2009-5-21 09:09 | 只看该作者

highgear 师徒俩的第3次出丑。

3、关于CRC。这是highgear与学生D的一场PK。

   昔日,学生D与HOT正在热论CRC问题,highgear也要插进来装懂,结果被网友喝斥,弄了个灰溜溜。回去向所长讨教一番,又回来卖弄啦。

   他自以为是,以为只有所长才是高手。别人什么都不懂。这次主动向学生D挑战起了CRC技术最基本的知识——长除法。

   没想到班门弄斧了。也不看看学生D是谁,连HOT还要敬重他三分,highgear不知天高地厚地跑专家面前充大拿?闹半天自己都不会长除法,让学生D一道最简单的题目噎了个半死:帮HOT老师算算一线序号:

     00 00 00 00 FD C5 2D 01/x8 + x5 + x4 + 1

  不用提醒highgear 今年的往事了吧。学生D(一个残疾人)的一句话,冷漠永远记得:“算不出来的是猪——!”
   
    结果,残疾人学生D让不懂装懂的健康人,R&D大堂主 highgear 结结实实地当了一回——猪。
    
    这叫咎由自取。

使用特权

评论回复
20
928315| | 2009-5-21 10:24 | 只看该作者

搞出火*味了啊

想不到21IC争论最热闹的是侃单片机。。。。
多点和气。。不是每个人你什么都懂得,每个人都有自己擅长的一方面。只有在跟别人比较时,看到自己不足,才能进步。人外有人,天外有天。。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

1038

帖子

4

粉丝