void main( void ) { unsigned int ucState=0xffff; unsigned char test[10]; memset(test,'\0',10); int i=0; halBoardInit(); hal430SetSystemClock(); halButtonsInit(); Init_Uart(115200); Init_Lcd(); Msp430_ADC12_Init(); Write_NByte((unsigned char *)eeprom,10,0); Read_NByte_Randomaddress(test,10,0); printf("main %s\r\n",test); while(1) { if(flag==1) { //WDTCTL = WDTPW + WDTNMI + WDTTMSEL + WDTSSEL + WDTCNTCL; // Start watchdog timer //IE1 |= WDTIE; // Enable WDT interrupt printf("we are in active state\r\n"); //这里写自己的程序,把程序做在一个有限的循环里,这样做完之后就可以自动结束并关机。 for(i=0;i<1000;i++){ ucState = halButtonsPressed(); if(ucState!=0xffff) { i=0; send_wave(); hal_buzzer(2); Get_Power(); //printf("%x is pressed\r\n",ucState); switch(ucState) { case BUTTON_MATL: printf("matl is pressed\r\n"); break; case BUTTON_HARD: printf("hard is pressed\r\n"); break; case BUTTON_DIREC: printf("direc is pressed\r\n"); break; case BUTTON_TIMES: printf("times is pressed\r\n"); break; case BUTTON_SAVE: printf("save is pressed\r\n"); break; case BUTTON_UP: printf("up is pressed\r\n"); break; case BUTTON_DEL: printf("del is pressed\r\n"); break; case BUTTON_AVE: printf("ave is pressed\r\n"); break; case BUTTON_LEFT: printf("left is pressed\r\n"); break; case BUTTON_MENU: printf("menu is pressed\r\n"); break; case BUTTON_RIGHT: printf("right is pressed\r\n"); break; case BUTTON_BACKLIGHT: printf("backlight is pressed\r\n"); break; case BUTTON_ESC: printf("esc is pressed\r\n"); break; case BUTTON_DOWN: printf("down is pressed\r\n"); break; case BUTTON_ENTER: printf("enter is pressed\r\n"); break; default: break; } } //LPM3; Delay(100); } //如需定时,上边这个LPM3要被包括在那个有循环的循环体中,这样才能实现类似便携式仪表5分钟自动关机的效果。如果不使用定时也可以不要LPM3这句话。 //WDTCTL = WDTPW + WDTHOLD + WDTNMI; // Stop watchdog timer flag=0; } else { //如果周边设备在关机时有需要复位的或是关闭的在这里处理 printf("we are in power off state\r\n"); } hal_buzzer(0); printf("we going to LPM4\r\n"); LPM4; } }
//--------------------------------------------------------- bool CPoint_Trend_Surface::Get_Regression(CSG_Shapes *pPoints, int iAttribute) { //----------------------------------------------------- int i, j, Field; m_Names.Clear(); m_Names += pPoints->Get_Name(); for(i=1; i<=m_xOrder; i++) { m_Names += Get_Power(SG_T("x"), i); } for(i=1; i<=m_yOrder; i++) { m_Names += Get_Power(SG_T("y"), i); for(j=1; j<=m_xOrder && i<m_tOrder && j<m_tOrder; j++) { m_Names += Get_Power(SG_T("x"), j) + Get_Power(SG_T("y"), i); } } //----------------------------------------------------- CSG_Vector Y, xPow, yPow; CSG_Matrix X; Y.Create(pPoints->Get_Count()); X.Create(m_Names.Get_Count(), pPoints->Get_Count()); xPow.Create(m_xOrder + 1); yPow.Create(m_yOrder + 1); xPow[0] = 1.0; yPow[0] = 1.0; //----------------------------------------------------- for(int iShape=0; iShape<pPoints->Get_Count() && Set_Progress(iShape, pPoints->Get_Count()); iShape++) { CSG_Shape *pShape = pPoints->Get_Shape(iShape); if( !pShape->is_NoData(iAttribute) ) { double zShape = pShape->asDouble(iAttribute); TSG_Point Point = pShape->Get_Point(0); Y[iShape] = zShape; X[iShape][0] = 1.0; for(i=1, Field=1; i<=m_xOrder; i++) { X[iShape][Field++] = xPow[i] = xPow[i - 1] * Point.x; } for(i=1; i<=m_yOrder; i++) { X[iShape][Field++] = yPow[i] = yPow[i - 1] * Point.y; for(j=1; j<=m_xOrder && i<m_tOrder && j<m_tOrder; j++) { X[iShape][Field++] = xPow[j] * yPow[i]; } } } } //----------------------------------------------------- CSG_Matrix Xt, XtXinv; Xt = X; Xt .Set_Transpose(); XtXinv = Xt * X; XtXinv .Set_Inverse(); m_Coefficients = XtXinv * Xt * Y; return( true ); }