⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfid_ft.c

📁 msp430fw42x读fm1702的程序
💻 C
字号:

#include  <msp430xw42x.h>
#include  <math.h>

//#define uchar unsigned char
//const unsigned char seg[]={0xeb,0x0a,0xc7,0xe5,0x6c,0xad,0xaf,0xe0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e};//段码表
const unsigned long hanzhi[]={0,478,899,1321,1741,2162,2582,3002,3422,3841,4261,4680,5099,5518,5967,6355,6774,7193,7611,8029,8448,8866,9284,9702,10120,10538,10956,11374,11792,12210,12628,13046,13463,13881,14299,14717,15135,15552,15970,16388,16806,17224,17641,18059,18477,18895,19313,19731,20149,20567,20985,21403,21821,22239,22657,23075,23494,23912,24330,24748,25167,25585,26004,26422,26841,27259,27678,28097,28515,28934,29353,29772,30191,30610,31029,31448,31868,32287,32706,33126,33545,33965,34385,34804,35224,35644,36064,36484,36904,37325,37745,38165,38584,39007,39427,39848,40269,40690,41111,41533,41954};
const unsigned long midu[]={0,10002,10002,10002,10002,10002,10002,10001,10001,10000,9999,9998,9997,9996,9995,9993,9992,9990,9988,9986,9984,9982,9980,9978,9975,9973,9970,9967,9965,9962,9959,9956,9953,9949,9946,9943,9939,9936,9932,9928,9924,9921,9917,9913,9909,9904,9900,9896,9891,9887,9883,9878,9873,9869,9864,9859,9854,9849,9844,9839,9834,9829,9824,9818,9813,9808,9802,9797,9791,9786,9780,9774,9768,9763,9757,9751,9745,9739,9733,9726,9720,9714,9708,9701,9695,9688,9682,9675,9669,9662,9655,9649,9642,9635,9628,9621,9614,9607,9600,9593,9586};
const unsigned char seg[]={0x7d,0x05,0x3e,0x7a,0x63,0x5b,0x5f,0x70,0x7f,0x7b,0x37,0x1f,0x75,0x1d,0x0d,0x06,0x02};
unsigned long ljrl,ljrl_3,ljll_5,ljll_cnt;
unsigned char dis_buff[]={0,0,0,0,0,0,0,0,0,0,0,0};//显示缓存单元
unsigned char kset_v=0,flag_ca=0,k,h,sifcount=0,opcl=1,read_buf1,siftp=0,siftp1=0,sec30s=0,sec2s,temp,temp1=0,temp2=0,temp3=0,nrfcnt=0;//键值缓存
unsigned long ljrl_30s=0,counter=0,ljll=0,ll=0,lj=0,scgl,ljgl,yl=260000,bz1=0,bz2=0,js=0,hs=0,js1=0,hs1=0,js_hz=0,hs_hz=0,bz=0,hz_cha=0,js_wendu=0,hs_wendu=0;
unsigned char recv[]={0,0,0,0,0,0,0,0,0};
unsigned char trans[]={0x08,0x43,0,0,0,0,0,0};
unsigned int cap_reg=0,cap_reg1=0,pt_js0=0,pt_js50=0,pt_js100=0,pt_hs0=0,pt_hs50=0,pt_hs100=0,js_ad=0,hs_ad=0;
char write_buf[12];
char read_buf[12];
double pt_ajs=0,pt_bjs=0,pt_ad0js=0,pt_ad50js=0,pt_ad100js=0,wendu_js=0;//进水参数
double pt_ahs=0,pt_bhs=0,pt_ad0hs=0,pt_ad50hs=0,pt_ad100hs=0,wendu_hs=0;//回水参数
//void delay(unsigned int v);
void delay(unsigned int v)
{
  while(v!=0)v--;
}
unsigned char tram_rfid(unsigned char iccard_temp)
{
  unsigned char iccard_cnt=0;
  sss:if((iccard_temp&0x80)!=0)
        P6OUT|=BIT7;//数据为1
      else
        P6OUT&=~BIT7;//数据为0
//      delay(3);
      P6OUT&=~BIT6;//时钟为1
      delay(3);
      P6OUT|=BIT6;//时钟为0
//      delay(3);
      iccard_cnt++;//循环8次
      iccard_temp=iccard_temp<<1;
      if(iccard_cnt<8)
        goto  sss;
      else return(0);

}

unsigned char read_rfid(void)
{
  unsigned char iccard_cnt=0,read_temp=0,read_buf1=0;
  readloop:P6OUT&=~BIT6;
  delay(3);
  P6OUT|=BIT6;
  if((P6IN&0X20)!=0)
    read_temp=1;
  else read_temp=0;
  read_temp=read_temp<<(7-iccard_cnt);
  read_buf1|=read_temp;

  iccard_cnt++;
  if(iccard_cnt<8)
    goto  readloop;

  return(read_buf1);
}
void main_rfid(void)
{
  P2OUT|=BIT3;
  delay(1000);
  P2OUT&=~BIT3;
  delay(1000);
  init1:P2OUT&=~BIT2;
  tram_rfid(0x82);
  temp=read_rfid();
  P2OUT|=BIT2;
  if(temp!=0)
  goto init1;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0);
  tram_rfid(0);
  P2OUT|=BIT2;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x22);
  tram_rfid(0x5b);
  P2OUT|=BIT2;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x1e);
  tram_rfid(7);
  P2OUT|=BIT2;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x56);
  tram_rfid(2);
  P2OUT|=BIT2;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x44);
  tram_rfid(3);
  P2OUT|=BIT2;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(18);
  tram_rfid(1);
  P2OUT|=BIT2;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x62);
  tram_rfid(0);
  P2OUT|=BIT2;

  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(4);
  tram_rfid(0x52);
  P2OUT|=BIT2;
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(2);
  tram_rfid(0x1e);
  P2OUT|=BIT2;
  delay(200);
  delay(2);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x88);
  temp=read_rfid();
  P2OUT|=BIT2;
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x84);
  temp1=read_rfid();
  tram_rfid(0x84);
  temp2=read_rfid();
  P2OUT|=BIT2;
  delay(100);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(4);
  tram_rfid(0x93);
  tram_rfid(0x20);
  P2OUT|=BIT2;
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(2);
  tram_rfid(0x1e);
  P2OUT|=BIT2;
  delay(100);
  P2OUT&=~BIT2;
  delay(5);
  tram_rfid(0x84);
  recv[0]=read_rfid();
  tram_rfid(0x84);
  recv[1]=read_rfid();
  tram_rfid(0x84);
  recv[2]=read_rfid();
  tram_rfid(0x84);
  recv[3]=read_rfid();
  tram_rfid(0x84);
  recv[4]=read_rfid();
  P2OUT|=BIT2;
  delay(20);
  P2OUT|=BIT3;
}
void dgdg(void)
{
  CACTL1=CARSEL+CAREF0+CAON;
      CACTL2=P2CA0;
      TACTL=TASSEL1+TACLR+MC1;
      CCR1=50000+TAR;
      CCTL1|=CCIE;

      P2OUT&=~BIT1;
      P1OUT&=~BIT5;
}
void dsds(void)
{
        cap_reg1=TAR;

          cap_reg1-=cap_reg;
          bz2=cap_reg1;
        CCTL1&=0;
          TACTL&=~MC1;
          TACTL|=TACLR;
          CACTL1&=~CAON;
}
void dada(void)
{
  CCTL1=CM1+CCIS0+CAP+CCIE;
      cap_reg=TAR;
}

void bzsj(void)
{
      dgdg();
//      P2OUT|=BIT2;
      LPM0;


      dada();
      P1OUT&=~BIT5;
      P2OUT|=BIT1;

      LPM0;

          dsds();
}
void jssj(void)
{
  dgdg();

//      P2OUT|=BIT3;

      LPM0;


      dada();

      P2OUT&=~BIT1;
      P1OUT|=BIT5;
      LPM0;

          dsds();
}
void hssj(void)
{
  dgdg();

//      P2OUT|=BIT4;
      LPM0;


     dada();
      P2OUT|=BIT1;
      P1OUT|=BIT5;

      LPM0;

          dsds();
}
unsigned char keycode(void)//键值子程序
{
  unsigned char x;

    x=(P1IN&0x10);


  return(x);
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1(void)//P1中断
{
if(keycode()==0)
  {
  delay(3000);

  if(keycode()==0)
    {

    kset_v++;
     if(kset_v>8)
     {
      kset_v=0;
     }



     }

   }
   if((P1IN&0x02)==0)
  {
    delay(3000);
    if((P1IN&0x02)==0)
    {

      ljll_cnt++;
      ljll=ljll_cnt*10;
      if(js_wendu>hs_wendu)
      {
        if((js_wendu-hs_wendu)>49)
        {
          js_hz=hanzhi[js_wendu/100];
          js_hz+=(((js_wendu%100)*420)/100);
          hs_hz=hanzhi[hs_wendu/100];
          hs_hz+=(((hs_wendu%100)*420)/100);
          ljrl_30s=((js_hz-hs_hz)*((midu[js_wendu/100]*10)/100))/10000;
          ljrl+=ljrl_30s;
          yl-=ljrl_30s;
          if(yl<300)
          {

          }
          lj=ljrl/1000;
        }

      }

     }
   }
  if((P1IN&0x04)==0)
  {
    delay(3000);
    if((P1IN&0x04)==0)
    {
      P6OUT|=BIT3;
      P6OUT|=BIT2;
      P6OUT&=~BIT4;
    }
  }
  if((P1IN&0x08)==0)
  {
    delay(3000);
    if((P1IN&0x08)==0)
    {
      P6OUT|=BIT3;
      P6OUT|=BIT2;
      P6OUT&=~BIT4;
    }
  }
  P1IFG&=~0x1e;
  LPM3_EXIT;
}
unsigned long disp_int(unsigned long ljtemp)//主显拆分子程序
{
  unsigned char ljjm;
  ljjm=ljtemp%10;
  dis_buff[7]=seg[ljjm];
  ljtemp=ljtemp/10;
  ljjm=ljtemp%10;
  dis_buff[6]=seg[ljjm];
  ljtemp=ljtemp/10;
  ljjm=ljtemp%10;
  dis_buff[5]=seg[ljjm];
  ljtemp=ljtemp/10;
  ljjm=ljtemp%10;
  dis_buff[4]=seg[ljjm];
  ljtemp=ljtemp/10;
  ljjm=ljtemp%10;
  dis_buff[3]=seg[ljjm];
  ljtemp=ljtemp/10;
  ljjm=ljtemp%10;
  dis_buff[2]=seg[ljjm];
  ljtemp=ljtemp/10;
  ljjm=ljtemp%10;
  dis_buff[1]=seg[ljjm];
  ljtemp=ljtemp/10;
  ljjm=ljtemp%10;
  dis_buff[0]=seg[ljjm];
  if(dis_buff[0]==0x7d)
  {
    dis_buff[0]=0x00;
    if(dis_buff[1]==0x7d)
    {
      dis_buff[1]=0x00;
      if(dis_buff[2]==0x7d)
      {
        dis_buff[2]=0x00;
        if(dis_buff[3]==0x7d)
        {
          dis_buff[3]=0x00;

        }
        ;
      }
      ;
    }
    ;
  }
  return(0);
}
void write_Flash(char *addr,char *buf,int len)
{
  unsigned int cnt;
  FCTL2=FWKEY+FSSEL0+FN0;
  FCTL1=FWKEY+ERASE;
  FCTL3=FWKEY;
  *addr=0;
  FCTL1=FWKEY+WRT;
  for(cnt=0;cnt<len;cnt++)
  {
    *(addr+cnt)=*(buf+cnt);
   }
  FCTL1=FWKEY;
  FCTL3=FWKEY+LOCK;
}
void read_Flash(char *addr,char *rbuf,int len)
{
  unsigned int cnt;
  for(cnt=0;cnt<len;cnt++)
  {
    *(rbuf+cnt)=*(addr+cnt);
  }
  FCTL3=FWKEY+LOCK;

}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer_A1(void)//TIMER1定时0.5S中断
{
  LPM3_EXIT;
//  halfsec=halfsec+1;
  sec30s=sec30s+1;
  sec2s+=1;
}

#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A0(void)
{
  switch(TAIV)
    {
      case 2:LPM0_EXIT;break;
      case 4:break;
      case 10:LPM0_EXIT;break;
      default:break;
    }
}


void main(void)
{
  int i;


  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  TA1CTL=TASSEL0+TACLR;   //timera1 initial
  TA1CCTL0=CCIE;
  TA1CCR0=16384;
  TA1CTL|=MC0;
  P1DIR=0xa0;
  P1IE|=BIT4;
  P1IES|=BIT4;
  P1IFG&=~BIT4;
  P1IE|=BIT1;
  P1IES|=BIT1;
  P1IFG&=~BIT1;
  P1IE|=BIT2;
  P1IES|=BIT2;
  P1IFG&=~BIT2;
  P1IE|=BIT3;
  P1IES|=BIT3;
  P1IFG&=~BIT3;
  P2DIR=0x7e;
  P2SEL=0x40;
  P2OUT=0X00;
  P2OUT|=BIT2;
  P2SEL |= 0x80;
  P2OUT|=BIT3;
  P6DIR=0xdc;
  P6OUT|=BIT3;
  P6OUT|=BIT2;
  P6OUT&=~BIT4;

  read_Flash((char*)0x1080,read_buf,12);
   pt_js0=read_buf[0];
   pt_js0=(pt_js0<<8);
   pt_js0|=read_buf[1];
   pt_ad0js=pt_js0;
   pt_js50=read_buf[2];
   pt_js50=(pt_js50<<8);
   pt_js50|=read_buf[3];
   pt_ad50js=pt_js50;
   pt_js100=read_buf[4];
   pt_js100=(pt_js100<<8);
   pt_js100|=read_buf[5];
   pt_ad100js=pt_js100;
   pt_hs0=read_buf[6];
   pt_hs0=(pt_hs0<<8);
   pt_hs0|=read_buf[7];
   pt_ad0hs=pt_hs0;
   pt_hs50=read_buf[8];
   pt_hs50=(pt_hs50<<8);
   pt_hs50|=read_buf[9];
   pt_ad50hs=pt_hs50;
   pt_hs100=read_buf[10];
   pt_hs100=(pt_hs100<<8);
   pt_hs100|=read_buf[11];
   pt_ad100hs=pt_hs100;
   pt_bjs=((pt_ad100js+pt_ad0js)-2*pt_ad50js)/(5000*pt_ad0js);
   pt_ajs=((pt_ad100js-pt_ad50js)-7500*pt_bjs*pt_ad0js)/(50*pt_ad0js);
   pt_bhs=((pt_ad100hs+pt_ad0hs)-2*pt_ad50hs)/(5000*pt_ad0hs);
   pt_ahs=((pt_ad100hs-pt_ad50hs)-7500*pt_bhs*pt_ad0hs)/(50*pt_ad0hs);


  _EINT();

//  delay(1000);
  while(1)
  {
  if(sec30s>19)
  {
    flag_ca=0;
    sec30s=0;
  }
  if(sec2s>5)
  {
    main_rfid();
    if((recv[0]==0x74)&&(recv[1]==0x70)&&(recv[2]==0x2b)&&(recv[3]==0xb5))
    {
      scgl=1000000;
      yl+=1000000;
      ljgl+=1000000;
      kset_v=6;
      if(opcl==0)
      {
      opcl=1;
      P6OUT|=BIT3;
      P6OUT&=~BIT2;
      P6OUT|=BIT4;
      }
    }
    if((recv[0]==0xe4)&&(recv[1]==0xcf)&&(recv[2]==0xed)&&(recv[3]==0xb4))
    {
      scgl=0;
      yl=0;
      kset_v=6;
      if(opcl==1)
      {
      opcl=0;
      P6OUT&=~BIT3;
      P6OUT&=~BIT2;
      P6OUT&=~BIT4;
      }
    }
    sec2s=0;
  }
   if(flag_ca==0)
     {

      P1IE&=~BIT4;
      P2OUT|=BIT5;


      bzsj();
      bz=bz2;
//      bbz=bz2;

      hssj();
      hs=bz2;
//      bbz2=hs2;
      jssj();
      js=bz2;
//      bbz1=js2;
      bzsj();
      bz1=bz2;
      jssj();
      js1=bz2;
      hssj();
      hs1=bz2;




     flag_ca=1;
     P2OUT&=~BIT5;
     P1IE|=BIT4;

       js_ad=(js+js1)*10000/(bz+bz1);
       hs_ad=(hs+hs1)*10000/(bz+bz1);
       wendu_js=js_ad;
       wendu_hs=hs_ad;
       wendu_js=(sqrt(pt_ajs*pt_ajs+4*pt_bjs*((wendu_js-pt_ad0js)/pt_ad0js))-pt_ajs)*100/(2*pt_bjs);
       js_wendu=wendu_js;
       wendu_hs=(sqrt(pt_ahs*pt_ahs+4*pt_bhs*((wendu_hs-pt_ad0hs)/pt_ad0hs))-pt_ahs)*100/(2*pt_bhs);
       hs_wendu=wendu_hs;
    flag_ca|=BIT0;


    }
   switch(kset_v)
    {
      case  0:
        {
          disp_int(ljrl);
          dis_buff[6]|=0x80;
          dis_buff[8]=0x02;


        }
        break;
      case  1:
      {
        disp_int(js_wendu);
        dis_buff[8]=0x52;
        P6OUT&=~BIT2;
            delay(1000);
            P1OUT|=BIT2;
            P1OUT|=BIT3;

      }
      break;
      case  2:
      {
        disp_int(hs_wendu);
        dis_buff[8]=0x62;
        P6OUT&=~BIT2;
            delay(1000);
            P1OUT&=~BIT2;
            P1OUT&=~BIT3;
      }
      break;
      case  3:
      {
        disp_int(ljll);

          dis_buff[0]|=0x80;
          dis_buff[1]|=0x80;
          dis_buff[3]|=0x80;
          dis_buff[8]=0x02;
      }
      break;

      case  4:
      {
        disp_int(lj);
        dis_buff[0]|=0x80;
        dis_buff[7]|=0x80;
        dis_buff[8]=0x02;
      }
      break;
      case 5:
      {
        disp_int(scgl);
        dis_buff[2]|=0x80;
        dis_buff[6]|=0x80;
        dis_buff[8]=0x02;

      }
      break;
      case  6:
      {
        disp_int(yl);
        dis_buff[5]|=0x80;
        dis_buff[6]|=0x80;
        dis_buff[8]=0x02;
      }
      break;
      case 7:
      {
        disp_int(ljgl);

          dis_buff[6]|=0x80;
          dis_buff[8]=0x82;
      }
      break;

      case  8:
      {
        if(opcl!=0)
        {
        dis_buff[0]=0x00;
        dis_buff[1]=0x00;
        dis_buff[2]=seg[0];
        dis_buff[3]=seg[10];
        dis_buff[4]=seg[11];
        dis_buff[5]=seg[12];
        dis_buff[6]=0x00;
        dis_buff[7]=0x00;
        dis_buff[8]=0x00;
        }
        else
        {
        dis_buff[0]=0x00;
        dis_buff[1]=0x00;
        dis_buff[2]=seg[13];
        dis_buff[3]=seg[14];
        dis_buff[4]=seg[0];
        dis_buff[5]=seg[5];
        dis_buff[6]=seg[11];
        dis_buff[7]=0x00;
        dis_buff[8]=0x00;
        }
      }
      break;
      default:break;
    }


  FLL_CTL0|=XCAP14PF;
  LCDCTL=LCDON+LCD4MUX+LCDP1;
  BTCTL=BTFRFQ1;
  P5SEL=0xfc;
  for(i=0;i<9;i++)
  LCDMEM[i]=dis_buff[i];

  LPM3;
 }
}







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -