📄 msp430ywqztry.c
字号:
/*incard_led = 1;*/
P5OUT&=~BIT0;
/*prep_led = 1;*/
P5OUT&=~BIT1;
/*test_led = 1;*/
P5OUT&=~BIT2;
/*testend_led = 1;*/
P5OUT&=~BIT3;
P3OUT&=~BIT0; //关断外部电源
P4OUT&=~BIT3; //关断外部电源
P4OUT&=~BIT2;
LPM4; //如果欠电超过2分钟,进入超低功耗状态
}
if(loatadbuf<3200) goto waitloop;
if((loatad>3200)&&(FLAG5&BIT4)!=0)
{
loatjsq=0; //欠压计数器清零
disp_lcd(0xd,0xd,0xd,0xd,0x0);
checkcard();
FLAG5&=~BIT4;
}
}
void xsjg(void)
{
a = IC_read(FYS_save0);
disp1 = a;
a = IC_read(FYS_save1);
disp2 = a>>4;
a = a<<4;
disp3 = a >> 4;
disp_lcd(0,disp1,disp2,disp3,0);
/*incard_led = 1;*/
//P5OUT&=~BIT0;
/*test_led = 1;*/
//P5OUT&=~BIT2;
/*incard_led = 1;*/
//P5OUT&=~BIT0;
/*testend_led = 0;*/
//P5OUT|=BIT3;
//P5OUT&=~BIT1;
}
void main(void)
{
/*bit firstnum;*/
tljish = 0;
msp430csh(); //MSP430进行初始化
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();
//}
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)
ADC12CTL0 |= ENC;
mainloop:
while(1)
{
delay(10);
checkcard();
mainloop1:
P3OUT&=~BIT0; //关断外部电源
m=0;
exitjsq=0;
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; //打开外部电源
m=0;
sound_s();
delay(200);
ywqzjsq=0x00;
exitjsq=0;
P2IFG=0X00;
FLAGTRY=0X55;
FLAG10=0x55;
/////////////////////////////
/*prep_led = 1;*/
P5OUT|=BIT1;
/*test_led = 0;*/ //测试开始
P5OUT&=~BIT2;
dotime = 0;
disp1 = 0;
disp2 = 0;
disp3 = 0;
IC_error = 0;
//int0f = 0;
FLAG&=~BIT6;
//int1f = 0;
FLAG&=~BIT7;
FLAG&=~BIT5; ///////////////////
sound_star();
//TAR=0X3caf; //初始化定时器内容
TAR=0XFC17;
/*ET0 = 1;
TR0 = 1;
IT0 = 1;
EX0 = 1;
IT0 = 1;
IT1 = 1;
EX1 = 1;
IT1 = 1;*/
//TACTL|=TAIE+MC1; //允许定时器中断,允许定时器开始工作
P2IE|=BIT6+BIT7; //开启外部中断
//firstnum = 0;
FLAG&=~BIT4;
//while (timeoverf == 0)
//while (timeoverf == 0)
exitjsq=0;
while((FLAGTRY==0X55)||(FLAGTRY==0Xaa))
{
if(FLAGTRY==0xaa)
{HEX_BCD(jishi1);
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],0);
}
delay(30);
}
endend:
//EX0 = 0;
//EX1 = 0;
FLAG&=~BIT3; /////////////////////
P2IE&=~(BIT6+BIT7);
b = jishi1;
/////////////////////////////
HEX_BCD(b);
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],0);
//test_led = 1;
//P5OUT&=~BIT2;
//testend_led = 0;
//P5OUT|=BIT3;
delay(255);
sound_s();
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
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);
}//
////////////////////////////////////////////////////////////
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);
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 = (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);
disp_end:
a = IC_read(FYS_save0);
disp1 = a;
a = IC_read(FYS_save1);
disp2 = a>>4;
a = a<<4;
disp3 = a >> 4;
disp_lcd(0,disp1,disp2,disp3,0);
sound_s();
/*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;
disp_lcd(0x0d,0x0d,0x0d,0x0d,0);
}
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -