最近学习51开发板例程,突然发现子函数放在主函数前面和后面有着不同的状况,例子:主函数放在前面:工作正常,主函数放在后面,工作不正常。下面是程序,很简单,大家分析下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit k1=P0^0;//按键1
sbit k2=P0^1;//按键2
void delay(unsigned int i);
unsigned char scan_key();
void process_key(unsigned char key_v);
main()
{
uchar key_s,key_v;
key_v=0x03;
P2=0xfe;
while(1)
{
key_s=scan_key();
if(key_s!=key_v)
{
delay(10);
key_s=scan_key(); //按键消抖
if(key_s!=key_v)
{
key_v=key_s;
process_key(key_v);
}
}
}
}
//这里未子函数和主函数界限
void delay(uint i)
{
uint j;
for(i;i>0;i--)
for(j=255;j>0;j--);
}
uchar scan_key()//扫描按键
{
uchar key_s;
key_s=0x00;
key_s|=k2;
key_s<<=1;
key_s|=k1;
return key_s;
}
void process_key(uchar key_v) //处理按键
{
if((key_v&0x01)==0)
{
P2=_cror_(P2,1);
}
else if((key_v&0x02)==0)
{
P2=_crol_(P2,1);
}
}
|