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

📄 msp430zt.c

📁 tiMSP430F147体能监测设备源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	        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 + -