打印

我再为21Icbbs 做最后一点贡献. wxj1952 请进来

[复制链接]
楼主: IceAge
手机看帖
扫描二维码
随时随地手机跟帖
21
123654789| | 2008-6-28 20:19 | 只看该作者 回帖奖励 |倒序浏览

去探望他的儿子

使用特权

评论回复
22
nin124| | 2008-6-28 20:27 | 只看该作者

第二题,

第二题好像和<<C++沉思录>>第八章的例子差不多.

使用特权

评论回复
23
mikezhong| | 2008-6-28 20:39 | 只看该作者

1952能不能尽早现身.

招也出,不接招不是高手啊.

使用特权

评论回复
24
dai_weis| | 2008-6-28 21:09 | 只看该作者

等着看结果

wxj1952只要一出现就是高楼满天飞

使用特权

评论回复
25
xwj| | 2008-6-28 21:20 | 只看该作者

呵呵,老hot还没起床呢

那家伙是属僵尸的,每次都要半夜才会爬出来...

使用特权

评论回复
26
dld2| | 2008-6-28 21:22 | 只看该作者

呵呵,小心僵尸半夜来找你

使用特权

评论回复
27
huangqi412| | 2008-6-28 21:36 | 只看该作者

呵呵,现在僵尸也该出来了吧,天上月亮都没有.正好出来.

使用特权

评论回复
28
hotpower| | 2008-6-28 21:58 | 只看该作者

正在休眠

使用特权

评论回复
29
PowerAnts| | 2008-6-28 22:02 | 只看该作者

是在梦游吧

使用特权

评论回复
30
lifengtao| | 2008-6-28 23:19 | 只看该作者

o(∩_∩)o...

来个PK~ 吹牛皮谁都会,来点真格的东西才是硬道理。
看热闹不怕事大的,呵呵

使用特权

评论回复
31
soso| | 2008-6-29 06:45 | 只看该作者

热闹

玩开单挑了

使用特权

评论回复
32
wxj1952| | 2008-6-29 12:20 | 只看该作者

哈,好玩。

四五十岁的老教授要跟24岁的学生“单挑”?这种事也只能发生在我们中国吧。IceAge先把我1500元求助的题目解出来再说吧。否则这算什么事?学生的问题答不上来,就非要反出一道题为自己捞回面子。

  前几天非要学生写一个键盘程序:“我知道他们写不出来。”现在我写(或者说书上早有的)出来了,又来了个什么宏?有完没完?做完宏还有什么,一定要跟学生争个输赢,有劲么?

  “狗可以咬人,人能咬狗吗?”教授可以骂我爹妈,我能反过来骂教授他在西北的受人尊重的农民老母亲吗?还是学会尊重为您辛勤劳作以血汗供你上大学的老父母吧。

      做不出来我出的题,没什么。“业有专攻,我不是学这个的。”承认自己不懂专业就可以了。为什么非要争这口气赢一把捞回面子?


好啊。1500元继续有效,两道题过了20天了,继续做吧:

1、500元有偿求助:(20天过了减价啦。)

%DEFINE (_NOPX(a))(
%SET(count,a)
%WHILE(%count GT 0)
( NOP
)
)

不行的,什么地方不对?IceAge教授一看就知道。还请麻烦出手修改。您不是任何宏都玩的转么?


2、1,000元奖励(不是求助)(20天过了本人保留解释权)

   1,000元请教IceAge 一个问题。IBM的令牌环网用什么芯片实现的?在现场总线FB中能不能实现这种协议?
懂的人一天就进1000元,可以了吧。


愿意的话,也把您出的题标个有偿求助或奖励价格,让版主做中间人。别老免费,公平点。

使用特权

评论回复
33
古道热肠| | 2008-6-29 16:21 | 只看该作者

wxj1952您就闲话少说,出招吧

先弄个键盘处理程序让大家瞧瞧,想到一名话"是驴子是马,拉出来溜溜"

使用特权

评论回复
34
古道热肠| | 2008-6-29 16:26 | 只看该作者

把我自己常用的键盘程序贴一个,能用,效率不高

sbit Input_Left= P1^0;
sbit Input_Right= P1^1;
sbit Input_Close= P1^2;
sbit Input_Back= P1^3;


#define    KEY1_Pin Input_Left
#define KEY2_Pin Input_Right
#define KEY3_Pin Input_Close
#define KEY4_Pin Input_Back

#define c_KeyScan_ErrCode  0x00

#define K1_SCANCODE 0x01
#define K2_SCANCODE 0x02
#define K3_SCANCODE 0x04
#define K4_SCANCODE 0x08

#define c_Key_Left         K1_SCANCODE
#define c_Key_Right        K2_SCANCODE
#define c_Key_Close        K3_SCANCODE
#define c_Key_Back        K4_SCANCODE



#define c_LowLevel   0
#define c_HighLevel  1


/**************************************************
功能介绍:初始化键盘硬件
入口参数: 无
出口参数:  1表示有键按下,0表示无键按下。
备注:     
***************************************************/
bool InitKeyBoard(void)
{
    KEY1_Pin  = 1;
    KEY2_Pin  = 1;
    KEY3_Pin  = 1;
    KEY4_Pin  = 1;

    return true;
}
/**************************************************
功能介绍:实现检查是否有键按下.
入口参数: 无
出口参数:  1表示有键按下,0表示无键按下。
备注:     
***************************************************/
bool KbHit(void)
{
    bool bKeyPressFlag;
    

    InitKeyBoard();    
       bKeyPressFlag = false;

    if(KEY1_Pin == 0)
    {
        bKeyPressFlag = true;
    }
    if(KEY2_Pin == 0)
    {
        bKeyPressFlag = true;
    }
    if(KEY3_Pin == 0)
    {
        bKeyPressFlag = true;
    }
    if(KEY4_Pin == 0)
    {
        bKeyPressFlag = true;
    }

    return(bKeyPressFlag);    
}

uchar code ucSCANCodeTab[] = {    K1_SCANCODE,
                                K2_SCANCODE,
                            };

static uchar GetKeyScanCode(void)
{
    uchar ucScanCode;
    
    ucScanCode = 0;

    InitKeyBoard();    

    if(KEY1_Pin == 0)
    {
        ucScanCode    |= K1_SCANCODE;
    }

    if(KEY2_Pin == 0)
    {
        ucScanCode    |= K2_SCANCODE;
    }

    if(KEY3_Pin == 0)
    {
        ucScanCode    |= K3_SCANCODE;
    }

    if(KEY4_Pin == 0)
    {
        ucScanCode    |= K4_SCANCODE;
    }

    return ucScanCode;
}
    
/**************************************************
功能介绍:读取按键扫描码.
入口参数: 无
出口参数: 键盘按键的扫描码。
备注:     
***************************************************/
uchar KbGet(void)
{
      uchar ucKeyTemp; 
   
    if(KbHit()==0)                   //无键按下时,
    {
        return( c_KeyScan_ErrCode);                  //直接返回
    }
    else
    {
        ucKeyTemp = GetKeyScanCode();
        Delay_10MS(1);
   //      BeepShort();                   //响应按键
//      delay(10);                     //延时10ms去抖动。
    }

    if (ucKeyTemp != GetKeyScanCode())           //再次检测按键情况
    {
       return( c_KeyScan_ErrCode);                  //与前次检测值不相符时,是抖动时,返回。 
    }
       
  //  while(KbHit()) ;               //等待按键释放。

    return (ucKeyTemp);            //返回键码。  
}

使用特权

评论回复
35
wxj1952| | 2008-6-29 18:18 | 只看该作者

好啊,是骡子是马拉出来溜溜。

突然发现IceAge的键盘程序是糊弄人的!根本不能运行,只能算个设计参考,关键地方不写。拿出来唬人呢。根本不是他写的!

他留下一堆垃圾不管了,我倒有个建议。我和楼上古道热肠版主一起把它修改好,其实此程序设计思想对于进一步学习C语言挺好,(可惜不是他写的,他也不会修改。)(还有最终代码可能要比其他设计方法长,不愿意这样设计,把简单的事情复杂化,故意让学生看不懂。)但是不能用。连意思概要都算不上,因为程序连状态机的框架都没有。

如果我另外那贴上抄的国际教材上的范例程序不算数,那么看出并修改好IceAge的垃圾错误算不算溜了一圈?如果你认为不算?那我只好另写一个,当然还是参考教本上的,我不可能比书上还写得好。(别人思考过的问题我没必要重复思考。)IceAge的程序你来改,我写新的。都写完善,提供2个给学友作为键盘标准模块好不好?不过,中国人无论怎么做,都不如我已经贴出的那个英文键盘状态机简洁。那个才应该是设计应用典范。

2天?3天?反正IceAge 也不会改,咱们没什么着急的,慢慢来吧。你上面的程序是自己思考出来的?那不如看看书上怎么设计的。浪费这时间个人思考,没什么必要,书上都有。一天就设计出来了,自己想2星期?还不如用这时间来给自己多充电。


48楼IceAge: 一个键盘处理的例子,看看state machine 的威力 

假设 mcu 每20 ms 中断一次,每次执行 keyboard().

void keyboard() { (*functions[state])();}

FUNTION_POINTER functions[] = { state0, state1, state2, ... stateN }; 
struct StructKey { bool pressed; int value; } key; 

void state0() { key.pressed = false; state++; }
void state1() { if (ScanKeyboard() != 0) state++; } //如果有健按下则去下一状态,利用20ms 间隔去抖。

void state2() { 
  int temp = ScanKeyboard();  
  if (temp != 0) { 
    key.pressed = true;  //有健按下
    key.value = temp;
    state++;
  }
  else 
    state--;   //回 state1
}

void state3() { if (ScanKeyboard() == 0) state++; } //waiting for key releasing.

void state4() { 
  if (ScanKeyboard() != 0) 
    state--; 
  else 
   state = 0; 
}

  这回糗大了。

使用特权

评论回复
36
icecut| | 2008-6-29 21:31 | 只看该作者

1952你是不是又有地方买到好电子了?

啥都不说,就是你用钱用的比较是地方

使用特权

评论回复
37
wxj1952| | 2008-6-29 21:34 | 只看该作者

这家伙也真能撑,撑到最后还在骗。

这段键盘程序显然是从哪里抄来的。别人可以简约,IceAge却不知简约在哪里,全盘抄袭。细看全是疑点。
前面高手简约的影子可以理解。后面抄袭者就显得莫名其妙了。
例如“键处理程序在哪里?”简约到哪去了?至少应留有接口。就算有状态机框架,那么state3确认键值后就一直等待键释放state4?那不白按了?还有......

真遗憾没早点看。以前以为是他心理问题,没想到还真是说假话的高手。张口就来。他真的去写博客了么?鬼信!

使用特权

评论回复
38
跬步| | 2008-6-29 21:45 | 只看该作者

呵呵 ,关注中...

还不亮剑

使用特权

评论回复
39
wxj1952| | 2008-6-29 22:06 | 只看该作者

icecut我正想有求于你。

看了你对状态机的理解,真沉得住气。希望多关注,这次我不得不认真写一个完整的状态机模型程序了。我真是自找没劲,也好。

给我来邮件,有另事相求。

使用特权

评论回复
40
hq_y| | 2008-6-29 22:28 | 只看该作者

也就是21ic上才能看到这么热闹的PK场面

帮顶一下
网络上要有足够的抗击打能力~~~~~~~~

使用特权

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

本版积分规则