case0x22:value=5;Num_Flag=1;break;
case0x42:value=4;Num_Flag=1;break;
case0x14:value=3;Num_Flag=1;break;
case0x24:value=2;Num_Flag=1;break;
case0x44:value=1;Num_Flag=1;break;
case0x18:value=0;Num_Flag=1;break;
case0x28:Point_Flag=1;break;
case0x82:Add_Flag=1;Sub_Flag=0;Key_Flag=1;break;
case0x84:Sub_Flag=1;Add_Flag=0;Key_Flag=1;break;
case0x48:Repair_Flag=1;Key_Flag=1;break;
case0x81:Init_Flag=1;Key_Flag=1;break;
case0x88:Enter_Flag=1;Key_Flag=0;break;
default:NOP();
}
if(Num_Flag==1){p[4]=p[3];p[3]=p[2];p[2]=p[1];p[1]=value;Num_Flag=0;}
if(Point_Flag==1){p[0]=value;Point_Flag=0;}
if(Add_Flag==1){Add_Flag=1;Sub_Flag=0;}
if(Sub_Flag==1){Sub_Flag=1;Add_Flag=0;}
if(Init_Flag==1){Init_Flag=1;}
if(Repair_Flag==1){Repair_Card();Repair_Flag=0;}
if(Enter_Flag==1)
{if(Add_Flag==1){Add_Card(p);Enter_Flag=0;Add_Flag=0;}
if(Sub_Flag==1){Sub_Card(p);Enter_Flag=0;Sub_Flag=0;}
if(Init_Flag==1){Initial_Card(p);Init_Flag=0;}}
}
//***************中断处理********************//
//**********定时器2:16ms中断显示一次*******//
#pragmainterrupt_handlerTIMER1_INT:9
voidTIMER1_INT(void)
{uchartemp[5],i;
for(i=0;i《5;i++)
temp[i]=ICcontent[9+i];
if(IC_Flag==0)Display(EEEEE);
if(IC_Flag==1)Display(FFFFF);
if(IC_Flag==3)
{if(Key_Flag==1)//显示此次操作金额;
{Money[1]|=0x80;//显示时加上小数点;
Display(Money);}
else//显示卡内余额;
{temp[4]|=0x80;
Display(temp);}
}
}
//*************系统初始化*************//
voidInitial_System(void)
{//系统初始化
//SPL=0x5f;//AT90S8535的堆栈指针指向最高RAM地址;
//SPH=0x02;
//IO口初始化;
DDRA=0xff;//A口输出高电平
PORTA=0xff;
DDRB=0xff;//B口输出低电平
PORTB=0x00;
DDRC=0x0f;//C口高四位输入(不带上拉电阻)低四位输出0
PORTC=0xf0;
DDRD=0xff;//D口输出低电平
PORTD=0x00;
//中断系统初始化(定时器1中断)
SREG=SREG|0x80;//I(SREG^7)全局中断使能置位
TIMSK=TIMSK|0x40;//TOIE1(TIMSK^2)T/C1溢出中断使能置位
TIFR=TIFR|0x40;//TOV1(TIFR^2)T/C1溢出中断标志位写“1”清0
//定时器初始化
TCCR1B=TCCR1B|0x20;//定时器时钟分频=CLK/8(1uS计数)
TCNT1H=0xc1;//需要计数16000=0x3E80次,
TCNT1L=0x7f;//计数初值0xff-0x3e80=0xc17f;
//显示系统初始化
IC_Flag=0;//如果IC卡没有上电,则显示的是8.8.8.8.,否则显示IC卡的内容
}
voidmain(void)
{uchari,j;
Initial_System();
while(IC_Flag==1)