📄 msp430ldty.c
字号:
FLAG2&=~BIT3;
//if((P2IN&BIT1)==0) m++; //如果按下确认键则m一直加一,否则m=0
//else m=0;
if(((P1IN&BIT2)==0)&&(exitjsq>100)) //如果插卡且时间超过600ms
{
//testend_led = 1;
P5OUT&=~BIT0;
/*prep_led = 0;*/
P5OUT|=BIT2;
FLAG|=BIT3; //////////建立插卡测试标志位
FLAG2&=~BIT3; //////////清除空闲标志
delay(200); //延时60ms
ycsjre64();
goto next_test;
}
}
m=0;
disp_lcd(0xd,0xd,0xd,0xd,0x0);
while((P1IN&BIT2)!=0)
{
FLAG2|=BIT3; //
//delay(200); //延时60ms
//if((P2IN&BIT1)==0) m++;
//else m=0; //如果按下确认键则m一直加一,否则m=0
P5OUT&=~BIT0;
P5OUT&=~BIT1;
P5OUT&=~BIT2;
P5OUT|=BIT3;
P5OUT&=~BIT1;
if(exitjsq>100)
{
disp_lcd(0,0,0,0,0);
//testend_led = 1;
P5OUT&=~BIT0;
/*prep_led = 0;*/
P5OUT&=~BIT1;
P5OUT&=~BIT3;
P5OUT|=BIT2;
FLAG2&=~BIT3; //////////清除空闲标志
FLAG&=~BIT3; //////////复位插卡测试标志位
delay(200); //延时60ms
ycsjre64();
goto next_test;
}
}
goto mainloop;
}
next_test: m=0;
//sound_s();
/*prep_led = 1;*/
P5OUT|=BIT1;
/*test_led = 0;*/ //测试开始
P5OUT&=~BIT2;
//delay(200);
//delay(200);
//delay(200);
for (c=1;c<4;c++)
{
disp_lcd(0,0,0,c,0);
sound_s();
//receive = 0;
P3OUT|=BIT4; //
delay(200);
delay(200);
delay(200);
delay(200);
delay(200);
delay(200);
delay(200);
delay(200);
delay(200);
delay(200);
//receive = 1;
P3OUT&=~BIT4; //
//disp_lcd(0,0,0,8,0);
//delay(20);
receivecon: while (1)
{
TBCTL|=TBIE;
//while((RI == 0)&&(card_sw==0));
while((IFG1&URXIFG0)==0)
{
if(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0)) goto testend;
if(exitjsq>700) goto testend;
//delay(200);
//delay(200);
//delay(200); //延时60ms
//if((P2IN&BIT1)==0) m++;
//else m=0;
//if(m>30) goto programbegin;
}
TBCTL&=~TBIE;
a=RXBUF0;
switch (a)
{
case 0xee:
disp_lcd(0x0c,0x0c,0x0c,0x0c,0);
sound_s();
delay(200);
delay(200);
delay(200);
disp_lcd(0,0,0,0,0);
break;
case 0xdd:
while((IFG1&URXIFG0)==0);
data1 = RXBUF0;
guancha1=RXBUF0;
while((IFG1&URXIFG0)==0);
data2 = RXBUF0;
guancha2=RXBUF0;
goto receivend;
}
}
receivend:
dis[c] = 0;
dis[c]=((dis[c]+data1)<<8)+data2;
HEX_BCD(dis[c]); //最大值
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],0);
sound_s();
if((c==1)&&((FLAG&BIT3)!=0))
{
////////////////////////////////////////////////////////////
ME2&=~URXE1;
delay(50);
lsbuf=(uint)(re1byte(0x00));
lsbuf=(uint)(lsbuf*256+re1byte(0x01));
if(lsbuf<2700)
{
readicid(); //读取卡号
result[0]=0x00;
result[1]=0x00;
result[2]=BCD[5];
result[3]=(BCD[6]<<4)+BCD[7];
//FLAG2|=BIT0; //置数据有标志,可进行发送
////disp_lcd(0x01,0x01,0x01,0x01,0);
//delay(200);
//delay(200);
//delay(200);
//delay(200);
//delay(200);
//FLAG2&=~BIT0;
lsbuf=(uint)(re1byte(0x00));
lsbuf=(uint)(lsbuf*256+re1byte(0x01));
for(ii=0;ii<8;ii++)
{
temp=icidbuf[ii];
wr1byte(0x40+12*lsbuf+ii,temp);
delay(50);
}
for(ii=0;ii<4;ii++)
{
temp=result[ii];
wr1byte(0x40+12*lsbuf+8+ii,temp);
delay(50);
}
lsbuf++;
at64count++;
temp=(uchar)(lsbuf/256);
wr1byte(0x00,temp);
delay(50);
temp=(uchar)(lsbuf%256);
wr1byte(0x01,temp);
delay(50);
}
////////////////////////////////////////////////////////////
}
if((c==2)&&((FLAG&BIT3)!=0))
{
////////////////////////////////////////////////////////////
delay(50);
lsbuf=(uint)(re1byte(0x00));
lsbuf=(uint)(lsbuf*256+re1byte(0x01));
if(lsbuf<2700)
{
readicid(); //读取卡号
result[0]=0x00;
result[1]=0x00;
result[2]=BCD[5];
result[3]=(BCD[6]<<4)+BCD[7];
//FLAG2|=BIT0; //置数据有标志,可进行发送
////disp_lcd(0x01,0x01,0x01,0x01,0);
//delay(200);
//delay(200);
//delay(200);
//delay(200);
//delay(200);
//FLAG2&=~BIT0;
lsbuf=(uint)(re1byte(0x00));
lsbuf=(uint)(lsbuf*256+re1byte(0x01));
lsbuf--;//////////////////////////////////////////////////////////
for(ii=0;ii<8;ii++)
{
temp=icidbuf[ii];
wr1byte(0x40+12*lsbuf+ii,temp);
delay(50);
}
for(ii=0;ii<4;ii++)
{
temp=result[ii];
wr1byte(0x40+12*lsbuf+8+ii,temp);
delay(50);
}
}
//lsbuf++;
//at64count++;
//temp=(uchar)(lsbuf/256);
//wr1byte(0x00,temp);
//delay(50);
//temp=(uchar)(lsbuf%256);
//wr1byte(0x01,temp);
//delay(50);
////////////////////////////////////////////////////////////
}
for (b=0;b<17;b++)
{
delay(255);
delay(255);
delay(255);
}
}
b = 2;
a = 1;
while(b != 4)
{
if(dis[a]>=dis[b])
++b;
else
{
a = b; ++b;
}
}
if((FLAG&BIT3)==0)
{
delay(255);
delay(200);
HEX_BCD(dis[a]);
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],0);/*显示*/
for(i=0;i<50;i++)
delay(200);
goto testend;
}
disp_lcd(0x0d,0x0a,0x0a,0x0d,0);
for(b=1;b<3;b++)
{//
delay(255);
delay(200);
disp_lcd(0x0e,0x0e,0x0e,0x0e,0);
delay(255);
delay(200);
disp_lcd(0x0d,0x0a,0x0a,0x0d,0);
}//
delay(255);
delay(200);
HEX_BCD(dis[a]);
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],0);/*显示*/
while(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0))
{
FK_error: disp_lcd(0x0d,0x0c,0x0c,0x0d,0);
//EA = 0;
_DINT();
sound_s();
//EA = 1;
_EINT();
delay(255);
delay(255);
delay(255);
a++;
if (a == 5)
{
disp_lcd(0,0,0,0,0);
delay(255);
delay(255);
delay(255);
goto testend;
}
}
IC_error = 0;
a = IC_read(0x00);
if(IC_error == 0xff)
{
sound_s();
goto FK_error; //卡查反
}
a = (BCD[6]<<4)+BCD[7];
IC_write(FYS_save1,a);
delay(20);
a = BCD[5];
IC_write(FYS_save0,a);
delay(20);
IC_write(FYS_flag,1);
delay(20);
sound_s();
a = IC_read(FYS_save0);
BCD[4] = a>>4;
a = a<<4;
BCD[5] = a>>4;
a = IC_read(FYS_save1);
BCD[6] = a>>4;
a = a<<4;
BCD[7] = a>>4;
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],0);
//------------------
a = IC_read(NUM0);
i = a;
i = i<<8;
a = IC_read(NUM1);
dis[0] = i+a;
//------------------
/*incard_led = 1;*/
P5OUT|=BIT0;
/*test_led = 1;*/
P5OUT&=~BIT3;
/*incard_led = 1;*/
P5OUT&=~BIT2;
/*testend_led = 0;*/
P5OUT&=~BIT1;
FLAG&=~BIT3;
goto mainloop1;
testend: /*incard_led = 1;*/
P5OUT|=BIT0;
/*test_led = 1;*/
P5OUT&=~BIT3;
/*incard_led = 1;*/
P5OUT&=~BIT2;
/*testend_led = 0;*/
P5OUT&=~BIT1;
FLAG&=~BIT3;
goto mainloop;
}
void checkcard(void)
{
if((P1IN&BIT2)== 0) //P1IN&BIT2为card_sw
{
delay(200);
IC_error = 0;
a = IC_read(PASS0);
i = a;
i = i<<8;
a = IC_read(PASS1);
i = i+a;
if ((IC_error == 0xff)||(i!=0x4a48)) //判卡:1。插反 2。误卡
{
//while(card_sw == 0)
while((P1IN&BIT2)== 0)
{
disp_lcd(0x0d,0x0c,0x0c,0x0d,0);
//EA = 0;
_DINT();
sound_s();
sound_s();
//EA = 1;
_EINT();
delay(100);
delay(100);
delay(100);
delay(100);
}
}
else
{
/*prep_led = 0;*/
//P5OUT|=BIT1;
/*incard_led = 1;*/
P5OUT&=~BIT0;
/*P5OUT|=BIT0; */
a = IC_read(NUM0);
i = a;
i = i<<8;
a = IC_read(NUM1);
i = i+a;
HEX_BCD(i);
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],0);//显示编号
sound_s();
delay(255);
delay(255);
delay(255);
delay(255);
readicid(); /*************读取卡号****************/
b = 0;
//EX0 = 0;
P2IE&=~BIT6;
prenum = 0;
a = IC_read(FYS_flag);
if (a!=0)
{
//repeatestf = 0xb0;
//goto disp_end; //已经测试,显示结果
/*prep_led = 0;*/
P5OUT|=BIT0;
/*incard_led = 1;*/
P5OUT&=~BIT3;
/*P5OUT|=BIT0; */
P5OUT&=~BIT1;
xsjg();
}
else
{
P5OUT&=~BIT3;
/*P5OUT|=BIT0; */
P5OUT&=~BIT0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -