📄 msp430sgtz.c
字号:
}
void xsjg1(void) //显示结果
{
/*incard_led = 1;*/
//P5OUT&=~BIT0;
/*test_led = 1;*/
//P5OUT&=~BIT2;
/*incard_led = 1;*/
//P5OUT&=~BIT0;
/*testend_led = 0;*/
//P5OUT|=BIT3;
//P5OUT&=~BIT1;
a = IC_read(SG_save0);
bcdb4 = a>>4;
a = a<<4;
bcdb5 = a>>4;
a = IC_read(SG_save1);
bcdb6 = a>>4;
a = a<<4;
bcdb7 = a>>4;
a = IC_read(TZ_save0);
bcd4 = a>>4;
a = a<<4;
bcd5 = a>>4;
a = IC_read(TZ_save1);
bcd6 = a>>4;
a = a<<4;
bcd7 = a>>4;
}
void jcqy(void)
{
unsigned long su=0;
loatad=0;
loatjsq=0; //欠压计数器清零
waitloop:
su=0;
for(ii=0;ii<250;ii++)
{
ADC12CTL0|=ADC12SC;
while ((ADC12IFG & ADC12BUSY)==0); // ADC12BUSY?
loatad=ADC12MEM0;
loatadbuf=loatad;
su=su+loatad;
}
loatad=su/250;
if(loatad>3270)P4OUT&=~BIT2;
else P4OUT|=BIT2;
if(loatad<3200)
{
disp_lcd(0x08,0x08,0x08,0x08,0);
sound_s();
delay(255);
delay(255);
FLAG5|=BIT4;
}
if(loatjsq>65500)
{
disp_lcd(0x0e,0x0e,0x0e,0x0e,0);
P5OUT&=~BIT7; //关闭蜂鸣器
/*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;
}
}
uint ad_111(void) //A/D变化
{ uchar i=0;
uint aa1=0,a2=0;
for(i=0;i<2;i++)
{
aa1=ad_result();
a2=a2+aa1;
}
a2=a2/2;
return a2;
}
uint ad_result() //求出A/D结果
{
ulong su=0;
uint i=0;
uint aa=0;
for(i=0;i<2000;i++)
{ aa=adc_test();
su=su+aa;
}
su=su/2000;
su=su*366/1000;
aa=(uint)su;
return(aa);
}
void main(void) //主程序
{
tljish = 0;
//EX0 = 0;
P2IE&=~BIT6; //
/*bit firstnum;*/
msp430csh(); //MSP430进行初始化
init(); //外部初始化
disp_lcd(0x8,0x8,0x8,0x8,0x0);
/*incard_led = 0;*/
P5OUT|=BIT3;
wxmkcsh(); //无线初始化
//////////////////////////////////////////////////////////////////
ADC12CTL0&=~ENC; //stop a/d change
P6SEL |= 0x80; // Enable A/D channel A0
ADC12CTL0 = ADC12ON+REFON+REF2_5V+SHT0_8; // ADC12ON,REFON,2_5VON,MEM0 SHT0_8;
ADC12CTL1 = SHP; // Use sampling timer
ADC12MCTL0 = SREF_1+INCH_7; // Vr+ = VeREF+ (external)
ADC12CTL0 |= ENC;
/////////////////////////////////////////////////////////////////
disp_lcd(0xd,0xd,0xd,0xd,0x0); //显示----
delay(255);
delay(255);
delay(255);
delay(255);
for(b=0;b<3;b++)
tz = tz+get100da();
data_int = tz/3;
//changepld(1);
//while(1)
//{
// tz=ad_111();
// HEX_BCD4(tz);
// disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],3);
// delay(255);
// delay(255);
// delay(255);
//}
///////////////////////////////////////////////////////////////////////////////////////////
delay(255);
delay(255);
init_ad=ad_111(); //求出空秤A/D
IE2 &= ~UTXIE1; //禁止发送中断
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
IE2 |= URXIE1; //允许接收中断
_EINT(); //开中断
TBCTL|=TBIE; //定时器B中断允许
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; //启动A/D转换
mainloop:
while(1)
{
checkcard(); //检测插卡
mainloop1: P3OUT&=~BIT0; //关断外部电源
delay(10);
_EINT(); //中断允许
TBCTL|=TBIE;
m=0;
exitjsq=0; //计数器清零
//jcqy(); //检测欠压
sxjsq=0;
while((P1IN&BIT2)==0) //如果插卡
{
//while(1) jcqy();
TBCTL|=TBIE;
P3OUT&=~BIT0; //关断外部电源
_EINT();
FLAG2|=BIT3; //
//delay(200); //延时60ms
ycsjre64(); //远程升级判断
//jcqy();
//P5OUT&=~BIT0;
//P5OUT|=BIT3;
//if((P2IN&BIT1)==0)
//m++;
//else m=0; //如果按下确认键则m一直加一,否则m=0
if((FLAG5&BIT1)!=0)
{
if(sxjsq==1000)
{
disp_lcd(bcdb4,bcdb5,bcdb6,bcdb7,3);
}
if(sxjsq==2000)
{
sxjsq=0;
disp_lcd(bcd4,bcd5,bcd6,bcd7,3);
}
}
if(((P1IN&BIT2)==0)&&(exitjsq>80)) //如果插卡且时间超过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(20); //延时60ms
ycsjre64();
goto next_test;
}
}
m=0;
disp_lcd(0xd,0xd,0xd,0xd,0x0);
while((P1IN&BIT2)!=0) //无插卡处理
{
TBCTL|=TBIE;
P3OUT&=~BIT0; //关断外部电源
FLAG2|=BIT3; //
P5OUT&=~BIT0;
P5OUT&=~BIT1;
P5OUT&=~BIT2;
P5OUT|=BIT3;
//jcqy();
//delay(200); //延时60ms
//if((P2IN&BIT1)==0)
//m++;
//else m=0; //如果按下确认键则m一直加一,否则m=0
if(exitjsq>80)
{
disp_lcd(0,0,0,0,0);
tljish = 0;
//timeoverf = 0;
FLAG&=~BIT5;
//testend_led = 1;
P5OUT&=~BIT3;
P5OUT&=~BIT1;
P5OUT&=~BIT0;
/*prep_led = 0;*/
P5OUT|=BIT2;
FLAG2&=~BIT3; //////////清除空闲标志
delay(200); //延时60ms
ycsjre64();
FLAG&=~BIT3; //////////建立插卡测试标志位
FLAG5&=~BIT1; ////拔掉IC卡,清IC卡有测试数据标志
goto next_test;
}
}
goto mainloop;
}
next_test: sound_s(); //进入测试状态
ADC12CTL0&=~ENC; //stop a/d change
ADC12MCTL0&=0xf0; // Vr+ = VeREF+ (external)
ADC12MCTL0=SREF_1+INCH_7; // Vr+ = VeREF+ (external)
ADC12CTL0|=ENC;
ADC12CTL0|=ADC12SC;
/*prep_led =1;*/
P5OUT|=BIT2;
/*incard_led =1;*/
P5OUT&=~BIT3;
delay(200);
delay(200);
while(1)
{
tz = 0;
a = 0;
//goto loop;
while(a != 10)
{
//tz = get100da();
tz=ad_111();
//HEX_BCD4(tz);
//disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],3);
//delay(255);
if (tz<=data_int)
{
a = 0;
continue;
}
tz = tz-data_int;
if(tz>TZstart_data)
a++;
else
a = 0;
delay(255);
}
if(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0))
goto testend;
sound_s();
/*prep_led = 1;*/
P5OUT|=BIT1;
/*test_led = 0;*/ //测试开始
P5OUT&=~BIT2;
/***********************/
//体重测试////////////////////////////////
delay(255);
delay(255);
tz = 0;
//for(b=0;b<3;b++)
// tz = tz+get100da();
//tz = tz/3;
//if(tz>data_int)
// tz = (tz-data_int)*3663;//4884;
//else
// tz = 0;
////tz=tz-50000;
loop:
tz=ad_111();
if(tz<=init_ad) tz=0;
else tz=tz-init_ad;
aaa=tz;
//aaa=aaa*400/385;
//aaa=aaa*400/305*400/413;
aaa=aaa*200/tzxishu;
tz=aaa;
HEX_BCD4(tz);
disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],3);
//HEX_BCD(tz);
//disp_lcd(BCD[0],BCD[1],BCD[2],BCD[3],3);
//goto loop;
delay(255);
delay(255);
delay(255);
while(((P1IN&BIT2)!=0)&&((FLAG&BIT3)!=0))
{
FK_error1: 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;
}
}
if((P1IN&BIT2)==0)
{
IC_error = 0;
a = IC_read(0x00);
if (IC_error == 0xff)
{
sound_s();
goto FK_error1; //卡查反
}
a = (BCD[6]<<4)+BCD[7];
IC_write(TZ_save1,a);
result[3]=a; ///体重的低位
delay(20);
a = (BCD[4]<<4)+BCD[5];
IC_write(TZ_save0,a);
result[2]=a; ///体重的高位
delay(20);
IC_write(TZ_flag,1);
////a = 0;
//temp1=IC_read(0x07);
//temp2= IC_read(0x08);
////stand = (stand<<8)+a;
////stand =(uint)(temp1*256+temp2);
//prenum = stand;
//HEX_BCD(stand);
//disp_lcd(BCD[4],BCD[5],BCD[6],BCD[7],3);
}
//sg_start=0;
P3OUT|=BIT4; //
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
//sg_start=1;
P3OUT&=~BIT4;
_DINT();
stand=sgxishu;
a=0;
l_p: m=0;
//while((IFG1&URXIFG0)==0);
while(((IFG1&URXIFG0)==0)&&(m<50000))
m++;
if(m>=50000)
goto sgok;
//a=SBUF;
a=RXBUF0;
m=0;
//RI=0;
if(a!=0xbb)
goto l_p;
while(((IFG1&URXIFG0)==0)&&(m<9600)) //dat1
m++;
if(m>=9600)
goto sgok;
dat1=RXBUF0;
m=0;
//RI=0;
while(((IFG1&URXIFG0)==0)&&(m<9600)) //dat2
m++;
if(m>=9600)
goto sgok;
dat2=RXBUF0;
m=0;
//RI=0;
b=dat1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -