bios 发表于 2019-9-24 21:39:22

请教大家,我这个指针函数工作不正常,请指教

我把按键判断的代码,放在中断中,根据 keysta的状态,判断按键是不是按下去了
编写下面的指针函数,结果工作一直不正常,通过指针传递的值一直不对,我找不出哪里不正常,请大家指点,谢谢

void keydriver(unsigned char *p)
{
unsigned char i;
static unsigned char backup={1,1,1,1};
unsigned char keycode={0xff,0xff,0xff,0xff};

for (i=0;i<4;i++)
{
    if (backup != keysta)
          {
           if (backup!=0)
           {
          *p=keycode;
           }
          backup=keysta;
          }                    
}
}

haisens 发表于 2019-9-24 23:15:54

void keydriver(unsigned char *p)
{
unsigned char i;
static unsigned char backup={1,1,1,1};
unsigned char keycode={0xff,0xff,0xff,0xff};

for (i=0;i<4;i++)
{
    if (backup != keysta)
          {
         if (backup!=0)
         {
            *p=&keycode;//取keycode的地址。
         }
            backup=keysta;
          }                  
}
}
或是
void keydriver(unsigned char *p)
{
unsigned char i;
static unsigned char backup={1,1,1,1};
unsigned char keycode={0xff,0xff,0xff,0xff};

for (i=0;i<4;i++)
{
    if (backup != keysta)
          {
         if (backup!=0)
         {
            p=keycode;//指针变量赋值。
         }
            backup=keysta;
          }                  
}
}

dale 发表于 2019-9-24 23:47:00

*p 是位址, keycode 是字元(char), 你把字元指定給位址當然出錯了

ChrisLove 发表于 2019-9-24 23:54:14

这个函数都没必要用指针传参.直接通过全局变量交换就可以,中断里的全局变量加volatile修饰一下.
另外好像没看到消抖的处理,可能会不太稳定,用中断处理按键可以研究一下怎么写个简单的状态机,不判断长按只需要三个状态转移,判断长按的话四个就够了.非常简单,但对以后的编程思维会有不小的帮助

bios 发表于 2019-9-25 16:29:16

haisens 发表于 2019-9-24 23:15
void keydriver(unsigned char *p)
{
unsigned char i;


谢谢,这两种改法,编译都报错,无效的指针指向
我翻书学习一下:*p代表指针指向的地址的值,我原来那句应该没错啊。

bios 发表于 2019-9-25 16:33:10

ChrisLove 发表于 2019-9-24 23:54
这个函数都没必要用指针传参.直接通过全局变量交换就可以,中断里的全局变量加volatile修饰一下.
另外好像 ...

谢谢,您 的思路很好
我把消抖程序,加在中断中了

haisens 发表于 2019-9-25 17:50:14

bios 发表于 2019-9-25 16:29
谢谢,这两种改法,编译都报错,无效的指针指向
我翻书学习一下:*p代表指针指向的地址的值,我原来那 ...

不知道你这个函数怎么调用的,你再贴点代码,你是希望从*P返回KEY值吗?

zhxzhx 发表于 2019-10-1 16:29:43

haisens 发表于 2019-9-24 23:15
void keydriver(unsigned char *p)
{
unsigned char i;


unsigned char keydriver(void)
直接返回值不就完了

w6955 发表于 2019-10-1 16:49:38

单片机用指针?我认为是没事情干了给单片机找事情干的操作,慢!

bis 发表于 2019-10-1 19:55:37

清风碧雪 发表于 2019-10-1 22:27:34

建议你用状态方法编写按键程序,不要用教科书上介绍的延时方法。多看书,看看别人写的程序,多实践,以前没编写按键程序,看书觉得很容易,实际编写就不是那么回事了。
页: [1]
查看完整版本: 请教大家,我这个指针函数工作不正常,请指教