void st7565_init(void){ SIU.PCR[PIN_GLCD_CS].R = OUTPUT; SIU.PCR[PIN_GLCD_RST].R = OUTPUT; SIU.PCR[PIN_GLCD_AO].R = OUTPUT; SIU.PCR[PIN_GLCD_SID].R = OUTPUT; SIU.PCR[PIN_GLCD_SCLK].R = OUTPUT; if(PIN_GLCD_CS > 0) GPIO_SetState(PIN_GLCD_CS, LOW); GPIO_SetState(PIN_GLCD_RST, LOW); sdelay(1); GPIO_SetState(PIN_GLCD_RST, HIGH); // LCD bias select st7565_command(CMD_SET_BIAS_7); // ADC select st7565_command(CMD_SET_ADC_NORMAL); // SHL select st7565_command(CMD_SET_COM_NORMAL); // Initial display line st7565_command(CMD_SET_DISP_START_LINE); // turn on voltage converter (VC=1, VR=0, VF=0) st7565_command(CMD_SET_POWER_CONTROL | 0x4); // wait for 50% rising mdelay(200); // turn on voltage regulator (VC=1, VR=1, VF=0) st7565_command(CMD_SET_POWER_CONTROL | 0x6); // wait >=50ms mdelay(200); // turn on voltage follower (VC=1, VR=1, VF=1) st7565_command(CMD_SET_POWER_CONTROL | 0x7); // wait mdelay(40); // set lcd operating voltage (regulator resistor, ref voltage resistor) st7565_command(CMD_SET_RESISTOR_RATIO | 0x6); // initial display line // set page address // set column address // write display data updateBoundingBox(0, 0, LCDWIDTH-1, LCDHEIGHT-1); }
int sonarGetDistance(void){ static int distanceValue[9]={ 9999,9999,9999,9999,9999,9999,9999,9999,9999 }; static const int ch =0; unsigned long int tempDistance,temp; volatile int i,distance; int tempData[9]; switch(sonarStatus){ case SONAR_WAIT_RISING: //sonar trigger GPIO_SetState(SONAR0_CONTROL_CH,1); for(i=0;i<110;i++); GPIO_SetState(SONAR0_CONTROL_CH,0); SIU.IRER.R = 0x00000001; //set rising temp = SIU.IREER.R; temp |= (1<<ch); SIU.IREER.R = temp; temp = SIU.IFEER.R; temp &= ~(1<<ch); SIU.IFEER.R = temp; break; case SONAR_WAIT_END: sonarStatus = SONAR_WAIT_RISING; break; } tempDistance = counter; distance = counterToDistance(tempDistance); //shift for(i=8;i>0;i--) distanceValue[i] = distanceValue[i-1]; distanceValue[0] = distance; for(i=0;i<9;i++) tempData[i] = distanceValue[i]; //median filter distance = medianFilter(tempData,9,5); return distance; }
int main(void) { volatile T_ULONG lul_InfLoop = 0; volatile T_ULONG lul_Validate = 0; volatile T_ULONG lul_ValidateUp = 0; volatile T_ULONG lul_ValidateDw = 0; T_UWORD luw_SwDwState; T_UWORD luw_SwUpState; WL_initModesAndClock(); WL_EIRQ_Init(); WL_STM_init(); WL_GPIO_Init(); init_ext_ints(); init_PIT(); asm(" wrteei 1"); INTC_InstallINTCInterruptHandler(WL_A_Pinch,EIRQ_2,1); /* vector 32 for STM[2] */ INTC.CPR.R = 0; /* Loop forever */ for (;;) { /*------------------------------*/ luw_SwDwState = GPIO_GetState(SW_DOWN); if (luw_SwDwState == 1) { lul_Validate = WL_CheckValid(); if (lul_Validate == 1) { lul_ValidateDw = WL_CheckAutoManualDw(); } else { /*DO NOTHING*/ } } else { /*DO NOTHING*/ } while (luw_SwDwState == 1){ if (lul_ValidateDw == 1) { WL_WinMDw(); } else { /*DO NOTHING*/ } if (lul_ValidateDw == 0) { WL_WinADw(); } else { /*DO NOTHING*/ } luw_SwDwState = GPIO_GetState(SW_DOWN); } /*------------------------------*/ luw_SwUpState = GPIO_GetState(SW_UP); if (luw_SwUpState == 1) { lul_Validate = WL_CheckValid(); if (lul_Validate == 1) { lul_ValidateUp = WL_CheckAutoManualUp(); } else { /*DO NOTHING*/ } } else { /*DO NOTHING*/ } while (luw_SwUpState == 1){ if (lul_ValidateUp == 1) { WL_WinMUp(); } else { /*DO NOTHING*/ } if (lul_ValidateUp == 0) { WL_WinAUp(); } else { /*DO NOTHING*/ } luw_SwUpState = GPIO_GetState(SW_UP); } GPIO_SetState(LED_DOWN, 0); GPIO_SetState(LED_UP, 0); lul_InfLoop++; WL_SetState(); } }