c51在keil编程,全局变量没错,变成局部就显示未定义

#include<intrins.h>
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit PSB = P0^5;
sbit RESET = P0^6;
sbit CS = P0^2;
sbit SID = P0^3;
sbit SCLK =P0^4;
uchar i,temp1,temp2,temp3;
uchar data1,data2,data3,a;
void init(void);
void write_command(uchar w1);
void write_data(uchar w2);
void main(void)
{
	
}
void init(void)
{
	PSB=0;
	RESET=1;	
}
void write_command(uchar w1)//写指令
{
	CS=1;

	temp1=0xf8;
	for(i=0;i<8;i++)
	{
		SID=(temp1&0x80);
		SCLK=0;
		SCLK=1;
		temp1=(temp1<<1);
	}
	temp2=w1;
	temp2=(temp2&0xf0);
	for(i=0;i<8;i++)
	{
		SID=(w1&0x80);
		SCLK=0;
		SCLK=1;
		temp2=(temp2<<1);
	}
	temp3=w1;
	temp3=(temp3&0x0f);
	for(i=0;i<8;i++)
	{
		SID=(temp3&0x80);
		SCLK=0;
		SCLK=1;
		temp3=(temp3<<1);
	}
}
void write_data(uchar w2)//写数据
{
	CS=1;
	
	data1=0xfa;
	for(a=0;a<8;a++)	
	{
		SID=(data1&0x80);
		SCLK=0;
		SCLK=1;
		data1=(data1<<1);
	}
	data2=(w2&0xf0);
	for(i=0;i<8;i++)
	{
		SID=(data2&0x80);
		SCLK=0;
		SCLK=1;
		data2=(data2<<1);
	}
	data3=(w2&0x0f);
	for(i=0;i<8;i++)
	{
		SID=(data3&0x80);
		SCLK=0;
		SCLK=1;
		data3=(data3<<1);
	}
}
	

这是将局部变量全挪到全局的样子,如果移回自己的函数就会出现未定义变量的提示。
    

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^