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

📄 msp430sgtz.c

📁 tiMSP430F147体能监测设备源码
💻 C
📖 第 1 页 / 共 5 页
字号:

}

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 + -