如何编写一个程序控制一个全局变量的加减
请教各位,我想用一个按键控制全局变量 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: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 ;
}
}
}
} voidkey(void)
{
if((PINB&0XF0)!=0xF0)//按下按键
{
{
while((PINB&0xF0)==0xE0) //按键1按下
{
} ;
if(!((PINB&0xF0)==0xE0))//按键1松开
{
k=k+1;
if ( k > 3) k= 0;
}
}
}
} if语句里面要是确定的数值就可以要是进行x=x+1就不行 不知道为什么 echo8537 发表于 2013-4-16 21:48 static/image/common/back.gif
if语句里面要是确定的数值就可以要是进行x=x+1就不行 不知道为什么
不过还是要谢谢您帮忙 -->return k;
k 是全局变量 !!
页:
[1]