Jmjmjm 发表于 2009-10-23 09:45:40

proteus的又一个小bug。。。。。。。。。。。

用了proteus自带的4*4键盘,按键扫描。用了如下的程序,始终调不通,后来发现系统的4*4按键尽然在高4bit,低4bit翻转时会失效。。。。。
于是自己用了16个按键,搭了4*4按键,程序通过。
呵呵,这个破东西搞了我一天。
另外,我以前用另外一种方法按键扫描是可以。
只是,这次用如下程序,系统4*4按键才会失效。。。。。。。。。
大家,看看。。。。。。。。
我觉得应该是proteus的bug了。。。。。。。。。

unsigned char KeyBord_Scan()
{
        unsigned char key=0;
//-------set low 4 bits   read high 4 bits --------       
        PORTA=0X00;
        PORTE=0X00;
        TRISA=0X30;
        TRISE=0X03;
        PORTA=0X30;
        PORTE=0X03;
        DelayUs(10);
        DelayUs(1);
        if(RA4==1)
                key=key|(1<<4);
        else
                key=key&(~(1<<4));
        if(RA5==1)
                key=key|(1<<5);
        else
                key=key&(~(1<<5));
        if(RE0==1)
                key=key|(1<<6);
        else
                key=key&(~(1<<6));
        if(RE1==1)
                key=key|(1<<7);
        else
                key=key&(~(1<<7));
        DelayMs(5);
//--------set high 4bitsread low 4bits------       
        DelayUs(1);
        PORTA=0X0;
        PORTE=0X0;
        TRISA=0X0F;       
        TRISE=0;
        PORTA=0X0F;
        PORTE=0X0;
        DelayUs(10);
        if(RA3==1)
                key=key|(1<<3);
        else
                key=key&(~(1<<3));
        if(RA2==1)
                key=key|(1<<2);
        else
                key=key&(~(1<<2));
        if(RA1==1)
                key=key|(1<<1);
        else
                key=key&(~(1<<1));
        if(RA0==1)
                key=key|(1<<0);
        else
                key=key&(~(1<<0));
        DelayMs(5);
        return key;
}

JQ_Lin 发表于 2009-10-23 12:51:41

到底是不是proteus的bug,两说呢。
我所遇到的许多许多不能仿真的情况,大都是我自己的不当或失误。
当然,proteus的挑剔也是常见的。

Jmjmjm 发表于 2009-10-23 14:49:25

http://cache.amobbs.com/bbs_upload782111/files_20/ourdev_495034.JPG
(原文件名:KEYPAD.JPG)

使用proteus的按键有错(高4位,低4位只有一半是对的),使用右边自己搭的就可以。。。。。。。。。

JQ_Lin 发表于 2009-10-23 16:24:13

编程总是必须同按键接线方式相关联。
自己搭的就可以,那是因为关联正确。
那么多的别人使用它,那么多的例程使用它,没有说不行的啊。
当编程者想像的接线方式同 Proteus 的 4x4 按键的默认接线方式不一致时,出现问题是必然的。
所以,不要一出问题,就说是 BUG 。

millwood0 发表于 2009-10-23 18:40:35

"所以,不要一出问题,就说是 BUG 。 "

but it is a lot easier to blame others than to blame oneself.

Jmjmjm 发表于 2009-10-23 20:42:21

难道4*4还有多种连法?这是明显bug……如果不服,请编出程序来……前提是用我的扫描按健方式………

Jmjmjm 发表于 2009-10-23 20:45:59

别人可以那是因为别人的方式可以,可是扫描按健是有很多方式的……

zhangyihua 发表于 2009-10-31 10:58:02

我也发现有这样的BUG,用这个键盘不行,但自己用按键搭了一个就没问题,4*4的才有这个问题,3*4好像不会
我的扫描代码
unsigned char Key_Scan()
{
        unsigned char temp=0;
        P1=0x0F;
        Delay_ms(1);
        if(P1!=0x0F)
        {
                Delay_ms(5);
                if(P1!=0x0F)
                {
                        P1=0xFE;
                        Delay_ms(1);
                        switch(P1)
                        {
                                case 0xEE:while(P1==0xEE); temp=0x36;break;
                                case 0xDE:while(P1==0xDE); temp=0x48;break;
                                case 0xBE:while(P1==0xBE); temp=0x88;break;
                                case 0x7E:while(P1==0x7E); temp=0x0A;break;
                        }
                       
                        P1=0xFD;
                        Delay_ms(1);
                        switch(P1)
                        {
                                case 0xED:while(P1==0xED); temp=0;break;
                                case 0xDD:while(P1==0xDD); temp=0x50;break;
                                case 0xBD:while(P1==0xBD); temp=0;break;
                                case 0x7D:while(P1==0x7D); temp=0x32;break;
                        }

                        P1=0xFB;
                        Delay_ms(1);
                        switch(P1)
                        {
                                case 0xEB:while(P1==0xEB); temp=0xC2;break;
                                case 0xDB:while(P1==0xDB); temp=0x40;break;
                                case 0xBB:while(P1==0xBB); temp=0x80;break;
                                case 0x7B:while(P1==0x7B); temp=0x2A;break;
                        }

                        P1=0xF7;
                        Delay_ms(1);
                        switch(P1)
                        {
                                case 0xE7:while(P1==0xE7); temp=0xF0;break;
                                case 0xD7:while(P1==0xD7); temp=0x60;break;
                                case 0xB7:while(P1==0xB7); temp=0xE2;break;
                                case 0x77:while(P1==0x77); temp=0;break;
                        }
                       
                }
               
        }
        return temp;
}

liang_work 发表于 2009-10-31 12:48:15

不一定是proteus的bug,有可能是破解不完全,我就试过,pic的ccp在用某个破解文件来破解时用不了,而用另一个版本的破解文件就可以用,楼主你也可以试试,除非你是用正版,那就没有话说.

Jmjmjm 发表于 2009-10-31 18:01:12

呵呵…确实是盗版软件……不过,pic的ccp是什么?是不是ccs?

millwood0 发表于 2009-10-31 18:48:49

"确实是盗版软件…"

just because you aren't smart enough to get it work doesn't mean it doesn't work.

http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_498093.PNG
(原文件名:Proteus keypad.PNG)

canjany 发表于 2009-11-1 20:51:38

不见得吧。
我看别人用自带的那个键盘做的计算器,用的好好的啊 。

Jmjmjm 发表于 2009-11-3 21:10:09

晕…不看全别人的帖子…我已经说了是多种扫描方式中的一种下会出错…

millwood0 发表于 2009-11-4 00:59:37

"我已经说了是多种扫描方式中的一种下会出错…"

you cannot call your PC buggy just because it wouldn't clean your laundry for you.

devices are designed to be used in certain ways and they usually don't work if you don't use them the right way.

that's not because the devices are buggy, but the designers who misuse those devices are dumb.

Jmjmjm 发表于 2009-11-4 11:10:02

晕。。。。竟然有人冒充老外。。。。。。。。

JQ_Lin 发表于 2009-11-4 15:46:36

晕什么呀?

millwood0 是坛子里的老朋友。今年网站被攻击前,他的注册名是 millwood 。
他一直用英文发帖,且帖子质量挺高。
跟着他学习、熟练一下英文,不是挺好的吗?可惜我当初不是学英文的。

Jmjmjm 发表于 2009-11-4 23:03:24

报歉,因为看英文有些吃力,所以发唠叨……不好意思,这段时间工作不太顺利,所以有些急…
页: [1]
查看完整版本: proteus的又一个小bug。。。。。。。。。。。