📄 msp430zt.c
字号:
P1OUT&=~BIT0; // P1.0=0复位
delay(255);
delay(255);
//IE2|=URXIE1; // 允许接收中断
_DINT(); //暂时关闭中断
//P4OUT|=BIT3; // P4.3=1打开电源
readuart(); //读取串口数据
FLAG4&=~BIT2; // 先清接收"FRIENDCOM....."正确位
for(i=0;i<20;i++)
{
delay(255); // 延时
if(r232buf[0]>=32) // 如果接收的数据大于等于32
{
for(r232buf[0]=1;r232buf[0]<32;r232buf[0]++)
{
if((r232buf[r232buf[0]+0]==0x0d)&&(r232buf[r232buf[0]+1]==0x0a))
if((r232buf[r232buf[0]+2]==0x46)&&(r232buf[r232buf[0]+3]==0x52))
if((r232buf[r232buf[0]+4]==0x49)&&(r232buf[r232buf[0]+5]==0x45))
{
FLAG4|=BIT2; // 接收"FRIENDCOM....."正确置位
goto mexitxh; // 跳出循环
}
}
}
}
mexitxh:
//ME2&=~URXE1;
tempmem= RXBUF1; //先暂时关闭串口接收
if((FLAG4&BIT2)!=0) //如果接收到正确"FRIENDCOM....."
{
delay(255); //延时一会
csszjc(ch); //
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=(pld&0x0f)+0x30; //将信道发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0a; //发送确认键
}
else goto mreloop; //如果没有正确接收"FRIENDCOM.....",则重新开始
delay(255);
ME2|=URXE1; //重新允许接收
P1OUT|=BIT0; //P1.0置位
P4OUT&=~BIT3; // P4.3=0关闭电源
delay(255);
delay(255);
P1OUT|=BIT0; //P1.0置位
P4OUT|=BIT3; // P4.3=1打开电源
delay(255);
delay(255);
UBR01 = 0xA0; // 3.58Mhz/9600 - 372
UBR11 = 0x01; // 4Mhz/9600 - 416.6666666667
UMCTL1 = 0x6B; //将UART1恢复到9600波特
}
void main(void)
{
/*bit firstnum;*/
disp_lcd(0x8,0x8,0x8,0x8,0x0);
tljish = 0;
P5OUT&=~BIT7; //关闭蜂鸣器
msp430csh(); //MSP430进行初始化
P5OUT&=~BIT7; //关闭蜂鸣器
wxmkcsh();
init(); //外部初始化
disp_lcd(0x8,0x8,0x8,0x8,0x0);
/*incard_led = 0;*/
P5OUT|=BIT3;
disp_lcd(0xd,0xd,0xd,0xd,0x0);
/////////////////////////////////////////////////////////////////////////////
IE2 &= ~UTXIE1;
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
IE2 |= URXIE1;
_EINT();
/////////////////////////////////////////////////////////////////////////////
//while(1)
//{
////while((IFG2&URXIFG1)==0); //如果没有接收到数据时,等待
////r232buf[0]=RXBUF1;
////while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
////TXBUF1=0x55;
////ycsjre64();
//IE2&=~URXIE1; //
//_DINT();
//delay(255);
//disp_lcd(0x0d,0x0d,0x0d,0x04,0); //显示---4表示清除存储器的全部数据
//delay(255);
//delay(255);
//flashmaintry();
//}
//changepld(0x01);
TBCTL|=TBIE;
//checkcard(); //首先进行IC卡的检查并进行相应的显示
P6SEL=0X20;
ADC12CTL0&=~ENC; //stop a/d change
ADC12CTL0 = ADC12ON+REFON+REF2_5V+SHT0_8;
ADC12CTL1 = SHP; // Use sampling timer
ADC12MCTL0 = SREF_1+INCH_5; // Vr+ = VeREF+ (external)
for (i=0;i<0x3600;i++) // 延时,使基准电压稳定
{
}
ADC12CTL0 |= ENC;
//changepld(0x01);
mainloop:
while(1)
{
delay(10);
checkcard();
mainloop1: P3OUT|=BIT0;
//P3OUT&=~BIT0; //关断外部电源
m=0;
exitjsq=0;
_EINT();
while((P1IN&BIT2)==0)
{
jcqy();
//P3OUT&=~BIT0; //关断外部电源
_EINT();
FLAG2|=BIT3; //
//delay(200); //延时60ms
ycsjre64();
//if((P2IN&BIT1)==0)
//m++;
//else m=0; //如果按下确认键则m一直加一,否则m=0
if(((P1IN&BIT2)==0)&&(exitjsq>100)) //如果插卡且时间超过600ms
{
disp_lcd(0,0,0,0,0);
tljish = 0;
//timeoverf = 0;
FLAG&=~BIT5;
//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)
{
jcqy();
//P3OUT&=~BIT0; //关断外部电源
FLAG2|=BIT3; //
P5OUT&=~BIT1;
//delay(200); //延时60ms
//if((P2IN&BIT1)==0)
//m++;
//else m=0; //如果按下确认键则m一直加一,否则m=0
P5OUT&=~BIT0;
P5OUT&=~BIT2;
P5OUT|=BIT3;
if(exitjsq>100)
{
disp_lcd(0,0,0,0,0);
tljish = 0;
//timeoverf = 0;
FLAG&=~BIT5;
//testend_led = 1;
P5OUT&=~BIT0;
P5OUT&=~BIT1;
P5OUT&=~BIT3;
/*prep_led = 0;*/
P5OUT|=BIT2;
FLAG2&=~BIT3; //////////清除空闲标志
FLAG&=~BIT3; //////////建立插卡测试标志位
delay(200); //延时60ms
ycsjre64();
goto next_test;
}
}
goto mainloop;
}
next_test: P3OUT|=BIT0; //打开外部电源
delay(200);
delay(200);
sound_s();
delay(200);
delay(200);
delay(200);
delay(200);
exitjsq=0;
while(((P2IN&BIT6)!=0)||((P2IN&BIT7)!=0))
{
//if(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0))
//{
if(exitjsq>700)
{
//TR0 = 0;
TACTL&=~MC1; //定时器暂停
tljish = 0;
goto testend;
}//
//}
}
delay(200);
delay(200);
while(((P2IN&BIT6)!=0)||((P2IN&BIT7)!=0))
{
//if(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0))
//{
if(exitjsq>700)
{
//TR0 = 0;
TACTL&=~MC1; //定时器暂停
tljish = 0;
goto testend;
}//
//}
}
sound_s();
/*prep_led = 1;*/
P5OUT|=BIT1;
/*test_led = 0;*/ //测试开始
P5OUT&=~BIT2;
IC_error = 0;
conwait:
TACTL&=~MC1; //定时器暂停
TAR=0XFC17; //
jishi1 = 0;
while(((P2IN&BIT6)==0)||((P2IN&BIT7)==0))
{
if(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0))
{
if(exitjsq>700)
{
//TR0 = 0;
TACTL&=~MC1; //定时器暂停
tljish = 0;
goto testend;
}//
}
}
//TR0 = 1;
//TACTL|=MC1; //定时器
TACTL|=TAIE+MC1; //允许定时器中断,允许定时器开始工作
delay(100);
delay(100);
delay(100);
if (((P1IN&BIT6)==0) || ((P1IN&BIT7)==0))
{//
goto conwait;
}
while(((P2IN&BIT6)!=0)||((P2IN&BIT7)!=0))
{
if(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0))
{
if(exitjsq>700)
{
//TR0 = 0;
TACTL&=~MC1; //定时器暂停
tljish = 0;
goto testend;
}//
}
}
TACTL&=~MC1; //定时器暂停
sound_s();
// jishi1=jishi1*1.15;
/////////////////////////////
b =(unsigned long) jishi1 * (unsigned long)jishi1 / 40 * 49 ;
/////////////////////////////
HEX_BCD(b);
disp_lcd(BCD[1],BCD[2],BCD[3],BCD[4],3);
delay(255);
sound_s();
delay(255);
delay(255);
FLAG&=~BIT3;
if((P1IN&BIT2) != 0)
{
/*incard_led = 1;*/
P5OUT|=BIT0;
/*test_led = 1;*/
P5OUT&=~BIT3;
/*incard_led = 1;*/
P5OUT&=~BIT2;
/*testend_led = 0;*/
P5OUT&=~BIT1;
for(i=0;i<50;i++)
delay(200);
goto testend;
}
delay(255);
delay(255);
delay(255);
delay(255);
//while (card_sw == 1)//是否插卡
FK_error1:
a=0;
while ((P1IN&BIT2) != 0)
{
FK_error:
disp_lcd(0x0c,0x0c,0x0c,0x0c,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; //卡查反
}
IC_error = 0;//
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);
}//
a = (BCD[3]<<4)+BCD[4];
IC_write(FYS_save1,a);
delay(20);
a = BCD[2];
IC_write(FYS_save0,a);
delay(20);
IC_write(FYS_flag,1);
delay(20);
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lsbuf=(uint)(re1byte(0x00));
lsbuf=(uint)(lsbuf*256+re1byte(0x01));
if(lsbuf>2700)
{
for(i=0;i<50;i++)
delay(200);
goto testend;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
////////////////////////////////////////////////////////////
_DINT();
delay(50);
readicid(); //读取卡号
result[0]=0x00;
result[1]=0x00;
result[2]=BCD[2];
result[3]=(BCD[3]<<4)+BCD[4];
FLAG2|=BIT0; //置数据有标志,可进行发送
//disp_lcd(0x01,0x01,0x01,0x01,0);
for(i=0;i<5;i++)
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);
////////////////////////////////////////////////////////////
a = IC_read(FYS_save0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -