您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机AVR单片机IC卡程序 正文
AVR单片机IC卡程序

AVR单片机IC卡程序

点击数:7878 次   录入时间:03-04 11:33:32   整理:http://www.55dianzi.com   AVR单片机
     //以上处理小数点小数点左边第三位数字;
      if(B_Flag==1)
      {if(temp[9]==0) {temp[9]=0;B_Flag=0;}
       else temp[9]=temp[9]-1;}
     //以上对存在借位情况时对小数点左边第二位进行预处理;
      temp[9]=temp[9]-p[0];
     //以上处理小数点小数点左边第二位数字;
     
     WriteMainMemory(41,temp[9]);
     WriteMainMemory(42,temp[10]);
     WriteMainMemory(43,temp[11]);
     WriteMainMemory(44,temp[12]);
     WriteMainMemory(45,temp[13]);
    }
}
 
//*****************数码管显示函数********************//
void Display(uchar *p)
{uchar sel,i;
 sel=0x01;
 for(i=0;i<6;i++)
   {PORTA=table[p[i]];
    PORTB=sel;
    DelayMs(2);
    sel=sel<<1;}
}
 

//****************键盘扫描函数***********************//
uchar Key_SCAN(void)
{uchar sccode,recode;
 PORTC=0xf0;
 if((PINC&0xf0)!=0xf0)
     {DelayMs(10);
     if((PINC&0xf0)!=0xf0)
       {sccode=0xfe;
        while(sccode&0x10!=0x00)
         {PORTC=sccode; //对第一行键盘测试
          if((PINC&0xf0)!=0xf0)
           {recode=(PINC&0xf0)|0x0f;
            return((~sccode)+(~recode));}
          else 
           sccode=(sccode<<1)|0x01;
         }
       }
     }
 return(0x00);
}
         
//******************按键处理函数*******************//
void Key_Process(uchar *p)
{uchar temp,value;
 temp=Key_Scan();
 switch(temp)
  {case 0x11:value=9;Num_Flag=1;break;
   case 0x21:value=8;Num_Flag=1;break;
   case 0x41:value=7;Num_Flag=1;break;
   case 0x12:value=6;Num_Flag=1;break;
   case 0x22:value=5;Num_Flag=1;break;
   case 0x42:value=4;Num_Flag=1;break;
   case 0x14:value=3;Num_Flag=1;break;
   case 0x24:value=2;Num_Flag=1;break;
   case 0x44:value=1;Num_Flag=1;break;
   case 0x18:value=0;Num_Flag=1;break;
   case 0x28:Point_Flag=1;break;
   case 0x82:Add_Flag=1;Sub_Flag=0;Key_Flag=1;break;
   case 0x84:Sub_Flag=1;Add_Flag=0;Key_Flag=1;break;
   case 0x48:Repair_Flag=1;Key_Flag=1;break;
   case 0x81:Init_Flag=1;Key_Flag=1;break;
   case 0x88: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中断显示一次*******//
#pragma interrupt_handler TIMER1_INT:9 
void TIMER1_INT(void)
{uchar temp[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);}
   }
}

//*************系统初始化*************//
void Initial_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卡的内容
}
          
void main(void)
{uchar i,j;
 Initial_System();
 while(IC_Flag==1)
   {DelayMs(5);
    ResetIC(ICcode);
    i=Read_Card(ICcontent);
    if(i==0) {IC_Flag=0; Buzzle_Password();}    //显示EEEE,提示卡坏
    if((i==1)|(i==2)) {IC_Flag=1;Buzzle_Card();} //显示FFFF,提示非法卡
    if(i==3) 
      {if(ICcontent[12]<5)
         {IC_Flag=3;Buzzle_Money();}
       else 
         {do Key_Process(Money);
          while(Enter_Flag!=0);
          Enter_Flag=0;}
      }  
   }
}



上一页  [1] [2] [3] 


本文关键字:单片机  程序  AVR单片机单片机-工控设备 - AVR单片机