单片机编程keil错误,新手,急求帮忙~~missing ';' before 'keyscan'
#include "reg52.h" //引用头部文件
void delay(void);
uchar keyscan();
void timer0_int(void) interrupt 1;
void timer1_int(void) interrupt 3;
uchar getcode(uchar i);
void display();
bit pwcmp(void);
uchar digbit;
uchar wordbuf[6];
uchar tlcount;
uchar count;
uchar pw[6];
uchar pwbuf[6];
bit enterflag;
bit pwflag;
bit showflag;
bit green=p3^0;
sbit red=p3^1;
main()
{
uchar j,key;
P2=0x0;
TMOD=0X11;
//2ms 定时设置
THO=-2000/256;
TLO=-2000%256;
//50ms定时设置
THO=-50000/256;
TLO=-20000%256;
//启动计数器0,关闭计数器1
TRO=1;
ETO=1;
TR1=0;
ET1=1;
EA=1;
count=0;
enterflag=0;
pwflag=0;
green=1;
red=1;
//假设内定密码为845231
pw[0]=8;
pw[1]=4;
pw[2]=5;
pw[3]=2;
pw[4]=3;
pw[5]=1;
showflag=1;
//刚加电时,显示888888
for(j=0;j<6;j++)
wordbuf[j]=8;
digbit=0x01;
while(1)
{
key=keyscan();
switch(key)
{
case 0x11:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 0;
count++;
}
break;
case 0x21:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 1;
count++;
}
break;
case 0x41:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 2;
count++;
}
break;
case 0x81:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 3;
count++;
}
break;
case 0x12:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 4;
count++;
}
break;
case 0x22:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 5;
count++;
}
break;
case 0x42:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 6;
count++;
}
break;
case 0x82:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 7;
count++;
}
break;
case 0x14:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 8;
count++;
}
break;
case 0x24:
if(count<6)
{
wordbuf[count]= 0x0f;
pwbuf[count]= 9;
count++;
}
break;
case 0x44:
enterflag=1;
if(count==6)
pwflag=pwcmp();
else
pwflag= 0;
break;
case 0x84:
count=0;
for(j=0;j<6;j++)
{
wordbuf[j]=8;
pwbuf[j]=0x0f;
}
break;
default: break;
}
if(enterflag==1)
{
enterflag=0;
count=0;
//用FFFFFF清除已经输入的密码
for(j=0;j<6;j++)
pwbuf[j]=0x0f;
showflag=0;
TR1=1;
tlcount=0;
if(pwflag==1)
green=0;
else
red=0;
}
}
//按键消抖延时函数
void delay(void)
{
uchar i;
for(i=300;i>0;i--)
}
//按键扫描函数
uchar keyscan (void)
{
uchar scancode,tmpcode;
P1=0xf0;
if ((P1&0xf0)!=0xf0)
{
delay ();
if( (P1&0xf0)!=0xf0)
{
scancode=0xfe;
while((scancode & 0x10)!=0)
{
P1=scancode;
if ((P1 & 0xf0)!=0xf0)
{
tmpcode=(P1 & 0xf0)|0x0f;
//返回特征字节码,为1的位即对应于行和列
return((~scancode)+(~tmpcode));
}
else scancode=(scancode<<1)|0x01;//行扫描码左移一位
}
}
}
return (0);
}
//定时器0终端服务子程序,2ms定时动态扫描显示
void time0_int(void)interrupt1
{
//重置2ms定时
THO=-2000/256;
TLO=-5000&256;
if(showflag==1)
display();
}
//定时器1中断服务子程序,50ms定是动态扫描显示
void time1_int(void)interrupt3
{
uchar k;
//重置50ms定时
THO=-50000/256;
TLO=-50000&256;
if(tlcount<20)
{
tlcount ++;
}
else
{
TR1=0;
Tlcount=0;
green =1;
red=1;
showflag=1;
digbit=0x01;
for(k=0;k<6;k++)
wordbuf[k]=8;
}
}
//根据共阴极自行编码表获取0-9,A-B字型代码
uchar getcode(uchar i)
{
uchar p;
swith (i);
{
case0: p=0x3f; break; //0
case1: p=0x06; break; //1
case2: p=0x5B; break; //2
cade3: p=0x4F; break;
case4: p=0x66; break;
case5: p=0x6D; break;
case6: p=0x7D; break;
case7: p=0x07; break;
case8: p=0x7F; break;
case9: p=0x67; break;
case10: p=0x77; break;
case11: p=0x7C; break;
case12: p=0x39; break;
case13: p=0x5E; break;
case14: p=0x79; break;
case15: p=0x71; break;
default;
}
return(p);
}
// 数码管显示函数
void display(void)
{
uchar i;
switch (digbit)
{
case1: i=0;break;
case1: i=0;break;
case1: i=0;break;
case1: i=0;break;
case1: i=0;break;
case1: i=0;break;
case1: i=0;break;
}
P2 =0x0;
P0 =getcode( wordbuf [i]);
P2 =digbit;
if(digbit<0x20)
digbit=digbit<<1;
else
digbit=0x01;
//密码比较函数
bit pwcmp(void)
{
bit flag;
uchar i;
for(i=0;i<6;i++)
{
if (pw[i]==pwbuf[i])
flag=1;
else
{
flag=0;
i=6;
}
}
return(flag);
}