echo8537 发表于 2013-4-16 20:10:44

如何编写一个程序控制一个全局变量的加减

请教各位,我想用一个按键控制全局变量 K的加减,然后通过判断K的不同值来分别执行不同的子程序,
小弟初步写的程序如下,感觉按键按下是否有效是随机的,请大家帮忙看看,给点建议

#include <iom16v.h>
#include <macros.h>

#define uchar unsigned char
#define uint unsigned int

uint k=0,flag=0;

//uchar step_F={0x08,   0x09,      0x01,      0x03,      0x02,      0x06,      0x04,      0x0c};
//uchar step_F={0x01,   0x05,      0x04,      0x06,      0x02,      0x0A,      0x08,      0x09};
//ucharstep_F={0xf1,0xf5,0xf4,0xf6,0xf2,0xfa,0xf8,0xf9}; //两相四线码表正转
//uchar code mm[]={0xf9,0xf8,0xfa,0xf2,0xf6,0xf4,0xf5,0xf1};      //反转
void init_IO(void)
{
   
        DDRA=0XFF;
        PORTA=0X00;
    DDRB=0X0F;
        PORTB=0XFF;
}

void time0(void)
{
TCCR0 = 0x00;
OCR0= 255;
TCCR0 = 0x7B;
}


void delay(uint ms)
{
int i,j;

for(j=0;j<ms;j++)
for(i=0;i<1141;i++);

}


void go(void)
{
OCR0=20;
PORTA=0X01;
}

void back(void)
{
OCR0=20;
PORTA=0X02;
}
void left(void)
{
OCR0=20;
PORTA=0X03;
}
uintkey(void)
{
if((PINB&0XF0)!=0xF0)//按下按键
                {
                       if((PINB&0xF0)==0xE0)//按键1按下
                        {
                           if(!((PINB&0xF0)==0xE0))//按键1松开
                           {
                             k=k+1;
                                             
                           }
                       }
                }       
               
                return k;
                                                      
}





void main(void)
{

    flag=0;

        init_IO();
        time0();                                 
   
       
       
       
       while(1)                          
          {                                          
                key();
               
                if(k!=0)
                {
                  if(k==1)
                  go();
                  if(k==2)
                  back();
                  if(k==3)
                  left();
                  
                  }
                }
}

easier 发表于 2013-4-16 20:41:00

本帖最后由 easier 于 2013-4-16 20:48 编辑

voidkey(void)
{
static unsigned char key_on = 0 ;

//      if((PINB&0XF0)!=0xF0)//按下按键
                {
                        if ( key_on == 0)
                     {
                                 if((PINB&0xF0)==0xE0)//按键1按下
                              {
                                 key_on = 1 ;
                              }
                        }
                      else
                      {
                         if(!((PINB&0xF0)==0xE0))//按键1松开
                           {
                               k=k+1;
                              if ( k > 3) k= 0;
                              key_on = 0 ;               
                           }
                      }
                }      
               
                                                      
}

easier 发表于 2013-4-16 20:51:16

voidkey(void)
{
      if((PINB&0XF0)!=0xF0)//按下按键
                {
                     {
                                 while((PINB&0xF0)==0xE0) //按键1按下
                              {
                              } ;

                         if(!((PINB&0xF0)==0xE0))//按键1松开
                           {
                               k=k+1;
                              if ( k > 3) k= 0;
                           }
                      }
                }      
               
                                                      
}

echo8537 发表于 2013-4-16 21:48:09

if语句里面要是确定的数值就可以要是进行x=x+1就不行   不知道为什么

echo8537 发表于 2013-4-16 21:49:55

echo8537 发表于 2013-4-16 21:48 static/image/common/back.gif
if语句里面要是确定的数值就可以要是进行x=x+1就不行   不知道为什么

不过还是要谢谢您帮忙

easier 发表于 2013-4-17 09:00:32

   -->return k;

k 是全局变量 !!
页: [1]
查看完整版本: 如何编写一个程序控制一个全局变量的加减