打印

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

[复制链接]
楼主: IceAge
手机看帖
扫描二维码
随时随地手机跟帖
41
古道热肠| | 2008-6-30 10:42 | 只看该作者 回帖奖励 |倒序浏览

回wxj1952

您说IcdAge的键盘处理程序不可用,但有两点值得肯定.做人不能光说不做呀!!!
1.采用结构体定义键盘变量
2.展示用状态机进行延时去抖,不空耗MCU的强大处理能力.

我没空也不会与您合作修改的,您还是独立完成吧.别动不动就赏银多少,不好玩,如果真想写个好的,去参考一下<<嵌入式系统构件>>,那本书写得真的很好.

使用特权

评论回复
42
jt4117| | 2008-6-30 11:51 | 只看该作者

这个帖子咋不置顶啊??

强烈建议置顶!!!

使用特权

评论回复
43
gyt| | 2008-6-30 12:31 | 只看该作者

进来看看

使用特权

评论回复
44
wxj1952| | 2008-6-30 16:34 | 只看该作者

回42楼版主

IceAge的键盘程序是高手写的程序。优点不止2个。可惜不是他写的!连程序缺陷一并抄来了。还不知道错在哪里。

我一共写了3、4个键盘程序,一点意思都没有。让我多写几个状态机没关系,我写的每个请版主挑挑错。谢了!可别说我总是出钱什么的。我要不出500元,怎么能看清一副说假话的人嘴脸?比较起国家花了几千万才揭出个周正龙,值了。
他离开论坛跟我没关系,四五十岁的高手怎么可能甘于输给学生?
    他实在是撑不下去了。他要晚走一天可就玩大了。他有这种预感。
    我现在想想真是一生难得与骗子面对面一场,真是买的没有卖的精,一直在疑惑,怎么造假的人比揭露他的人还要理直气壮?
    看周正龙:“如果虎照是假的,我把脑袋给你!”连院士都不敢和他玩了。描述自己拍虎照过程,有声有色。谁都不会怀疑。结果全是假的!把全世界都骗了!
    昨天他给我下的什么套,现在才想明白是什么,想想也真佩服玩假的人思虑周全,我昨天想了半天竟然没想到,佩服...
    问了心理学老师,他为什么要这么做,没必要呀。
    老师:韩国有句谚语,“越是自卑的人,表面越是自大。”一个极度自卑的人。

使用特权

评论回复
45
wxj1952| | 2008-6-30 16:39 | 只看该作者

我改好了。比较一下他的程序,为什么一看就知道是抄来的

#include <stdio.h>
#include <absacc.h>
#include <./Atmel/at89x52.h>
#include"STATE_N.H"  /* 内容:void state0();void state1();...void state4();*/

extern void start_t2imer(void);  // 见 timer.c 模块
extern int ScanKeyboard(void);  // 根据 keypress 及相应硬件编程

bit Timerout=0;  // 20ms 节拍超时标记
unsigned char state=0;
struct StructKey { bool pressed; int value; } key; 

void (code *functions[])( ) = { state0, state1, state2, ... stateN }; //code省略行吗

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


main(){
    IE=0X40;
    start_t2imer();
    EA=1;       /* Enable interrupts */
    while(1){
        if(Timerout){
            Timerout=0;
            keyboard( );
                }
             }
       }


void time2()interrupt 5 {    // base 20 ms
    TF2=0;
    Timerout=1;
     }

/********************************************************************************/

以下是各函数定义:

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

void state2() {        // 第二个20ms. 
  int temp = ScanKeyboard();  
  if (temp != 0) { 
    key.pressed = true;  // 有健按下
    key.value = temp;   // 读键值

    // use_code   按键处理,或再等待20ms/40ms/ 60ms.....后处理。

    state++;
  }
  else 
    state--;   // 是干扰,无效读。返回 state1 重新扫描按键。
}

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

void state4() { 
  if (ScanKeyboard() != 0) // 抖动。
    state--; 
  else 
   state = 0; 
}

/*****************************************************************************/

//另一模块

timer.c

#include <./Atmel/at89x52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#define FOSC12M

#ifdef  FOSC18432
    #define TIMER2H   0xc4 //10ms
    #define TIMER2L   0x00
#else
#ifdef  FOSC12M
    #define TIMER2H   0xB1 // 20ms
    #define TIMER2L   0xE0
#endif
#endif

void start_t2imer(void){
    T2CON=0X00;
    RCAP2L=TIMER2L; // 20ms
    TL2=TIMER2L;
    RCAP2H=TIMER2H;
    TH2=TIMER2H;
     ET2=1;//enable timer2 interrupt
    TR2=1;//start timer
}


使用特权

评论回复
46
makesoft| | 2008-7-1 13:32 | 只看该作者

哈哈,楼主为了和他斗气退出啊

只说一句,太不值得了

使用特权

评论回复
47
wxj1952| | 2008-7-1 19:57 | 只看该作者

刚要贴出第二篇论证,LZ 突然现身了。

先申明一下,从46 楼6月30日公开论证IceAge的键盘程序缺陷开始,IceAge所做的一切辩解无效。请遵守PK基本规则。特别是年长的人。

对于我刚贴出的修改程序,他突然回归解释说那是他的草稿,不到一分钟写出来的,没考虑周全。

********************************************************************
“我的用中断处理的键盘程序就放在那里,跑不走,由大家去做评论,这里绝大多数人都做过,我相信他们的眼光。
看到你贴出别人的程序而不是自己的,虽然你曾承诺过,事情怎么样,你是什么样的人,我想现在大家都心中有数了。”

“坦白的说:那个键盘程序是我信手写的,没有超过一分钟,目的只为展示 中断驱动+ 状态机 可以让设计多么简洁。”
*****************************************************************

哈!原来让大家去评论的“跑不走的状态机威力程序”是一个信手写来的草稿。原来拿出来要和人PK一番的用中断处理的键盘程序是不到一分钟就写出来糊弄人的,“我相信他们的眼光。”只能够看到你的程序精彩之处。当我指出了你的程序基本错误,你又出来辩解说没好好写!
几天前我就提醒过你程序有缺陷,连主框架都没有,给您足够的时间修改,您可是一直没动静。让我以为你不会再回来了,于是我开始帮你改,才改了三分之一部,你就现身啦。说那不是你的错,是只写了个大意。那你相信的是谁的眼光,让谁去作评论?!评论你不到一分钟写出的大意?你把大家当成什么了!“我知道他们写不出来。”“我知道他们看不出来。”玩弄民意。

使用特权

评论回复
48
wxj1952| | 2008-7-1 20:10 | 只看该作者

刚开始这2句就犯了个基本错误,还没看出来?

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

FUNTION_POINTER functions[] = { state0, state1, state2, ... stateN }; 

没关系,下面问题还多呢,慢慢论证。明天下午公开答案。如果在明天下午之前说不出原因,就不要在公开答案后辩解原因。辩解次数太多会令人怀疑你这个人怎么回事。现在已经辩解过多了:
“业有专攻;
我又不是学这个的;
我没有技术说明书;
我没有时间;
我看不上这么简单的问题;
我没好好写;
我那是不到一分钟写出来的;
我每天需要面对比这个复杂1000被的问题;.....”

再给你个机会,请问函数指针数组(*functions[state])()的另一种用法是什么?当然也是针对你的键盘程序的另一种或者2种程序写法,这回讲个大意就行,讲清楚点。

你不是说这是你的原创么,那么我问的问题你应该再清楚不过了。
给你2天时间。足够了吧,你不是一分钟就一个原创么。

使用特权

评论回复
49
jack.king| | 2008-7-1 21:11 | 只看该作者

顶!大谢们有时间跟我说说程序结构的问题

顶!大谢们有时间跟我说说程序结构的问题
   近来发现以前的程序都可以用但是好多都是有问题的!?

使用特权

评论回复
50
avocationA| | 2008-7-1 22:24 | 只看该作者

.

.

使用特权

评论回复
51
wxj1952| | 2008-7-2 08:35 | 只看该作者

纯技术问题:第一部分。

IceAge的键盘程序的前2条如下:
1、  void keyboard() { (*functions[state])();}
2、 FUNTION_POINTER functions[] = { state0, state1, state2, ... stateN }; // 声明并初始化函数指针数组。
 
有什么问题没有?
《C语言》内容:
函数指针最常见的两个用途是......( 注:IceAge在键盘程序中的应用是函数指针的用途之一。)
首先容我指出一个常见的错误,这是非常重要的。

int f(int);
int (*pf)( int )=f ;

在函数指针的初始化之前具有f 的原型是很重要的。否则编译器就无法检查f的类型是否与pf所指向的类型一致。

      声明并初始化一个函数指针数组(*functions[])(),唯一需要留心之处就是确保这些函数(state_n())的原型出现在这个数组的声明之前。

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

书上讲得很清楚了。可见IceAge 键盘程序的头2条,就犯了一个常见的初级错误。提示他快2天了,他没发现或者认为不算错。

“唯一需要留心之处就是确保...出现在...之前。”所以程序至少应该是这样写:


 FUNTION_POINTER functions[] = { state0, state1, state2, ... stateN }; 
  void keyboard() { (*functions[state])();}

谁在谁之前?顺序写反了!

请教授解释一下为什么要这样写?也许是我理解错了? “时间仓促?”那么现在您有足够的时间来再次检查您的程序。明天我贴出论证第二部分,请一定在明天之前修改好所有不完善的地方。

使用特权

评论回复
52
dld2| | 2008-7-2 08:50 | 只看该作者

好无聊

这里贴的代码一般都是示例。主要是交流思想,意思到了就行了。

象你这样抠字眼,真无聊。

使用特权

评论回复
53
zyok| | 2008-7-2 08:51 | 只看该作者

占位学习,IcdAge PK wxj1952

使用特权

评论回复
54
wxj1952| | 2008-7-2 09:46 | 只看该作者

马上见分晓。

 d1d2 主贴置顶的那个示例程序细看也无可挑剔,看上去就是概念清晰,更不可能看到任何常见错误。IceAge的示例程序怎么禁不起粗看?竟然是初学者犯的错?如何看出他是高手。d1d2做得到,IceAge怎么做不到?IceAge可是说他是编程高手:“把技术修炼到我这个程度,已经不需要.....”高手也犯低级错误?不知道函数原型说明/定义的作用域!

IceAge先生可从没说过我写个键盘程序示意就行,即使我贴出了完整的程序,他也一顿扁,说我只会抄书。还把我爹妈捎带到论坛里了。

好啊,人敬我一尺,我还人一寸。我现在论证的是为什么说这段程序是他抄来的。

才开始,别着急。   我求助他的2道题,连一道示例概要的影子都没看到。

第一部分显然是初级错误,关键是他看不出这种错误,即使经我提醒之后。所以,他是抄别人的。别人前面是有东西的。

再一道和IceAge教授的挑战题:马上可以看出IceAge的键盘程序是不是抄别人的:

注意:请象d1d2说的那样,概要地再写一个与第一个不同的状态机模式键盘输入程序(具体key_scan()可以忽略),高手“一分钟不到就能信手原创一个”,这应该不算什么难题。抄什么书都行,只要讲得清。

老规矩,IceAge先写;您写一个,我写2个(我已经贴出过2个,您至今一个正确的程序还都没有。)还有一天时间。如果今天写不出来,“一分钟不到就信手自创一个”的谎言自破。如果写得出来,没有BUG(抄袭别人的一下就能看出来)的,我将永远不上21ic论坛 !
    
     今天开始,我分三部分论证一下您所谓“信手写的键盘程序”为什么是抄来的。
     抄别人或书本上的没什么不可以,抄明白了就是学习。就怕抄了还弄的稀里糊涂,别人的精彩到了IceAge这反而一团糟,就像那个CALL RETI 。还反而说成是自己的原创,“不到一分钟,信手写的。” 那就是造假。
     造假就造假,只要不影响社会和他人。骂了人半天倒把自己折腾走了。
   

使用特权

评论回复
55
dld2| | 2008-7-2 09:50 | 只看该作者

晕!不要捆绑我,我闪。

使用特权

评论回复
56
wxj1952| | 2008-7-2 09:54 | 只看该作者

计时开始。

一天多了点,高手可是一分钟写一个!

限期早过了,也没点儿动静。“我知道他们写不出来。”

源程序结构来自哪本书已经查到。

不过不能再玩了,“自恋型人格障碍”,心理问题会发展的,(看得出有发展苗头。)谁都不希望发展到最后,那样一个人才就完了。

使用特权

评论回复
57
yixing2003| | 2008-7-2 10:15 | 只看该作者

不要嘲笑他人

repeat 属于keil 编译器里边的一个伪指令,如果大量使用专属宏,不但不方便一些对某类编译器没有深入研究的人的阅读,移植的时候也有问题。当然也有很多优点,况且个人习惯不同,对于少量的重复,我喜欢粘贴。

使用特权

评论回复
58
littgh1982| | 2008-7-2 11:06 | 只看该作者

关注下,呵呵

使用特权

评论回复
59
avocationA| | 2008-7-2 22:26 | 只看该作者

??

使用特权

评论回复
60
lhj200304| | 2008-8-6 14:02 | 只看该作者

留个记号

使用特权

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

本版积分规则