void thread_entry(void *arg) { THREAD_ARG_T *the_arg = (THREAD_ARG_T *)arg; my_sem_down (the_arg->sem); while (1) { int cur_ticks = tt_get_ticks (); if (cur_ticks % 1024 < 4) { my_sem_up (the_arg->sem); //tt_thread_yield (); //tt_sleep(1); tt_msleep(rand()%64); my_sem_down (the_arg->sem); } if(cur_ticks % 64 < 32) DrvGPIO_SetBit(the_arg->gpio_group, the_arg->gpio_bit); /* Turn off LED */ else DrvGPIO_ClrBit(the_arg->gpio_group, the_arg->gpio_bit); /* Turn on LED */ } }
int main(void) { DrvUART_Close(UART_PORT0); //------------------ Init(); Initial_pannel(); clr_all_pannal(); while(1) { seg_display(hitung); /*UNLOCKREG(); SYSCLK->PWRCON.XTL12M_EN = 1;//Enable 12MHz Crystal SYSCLK->CLKSEL0.HCLK_S = 0; LOCKREG();*/ servo_tutup(); //DrvSYS_Delay(10); Initial_pannel(); DrvGPIO_ClrBit(E_GPD, 14); print_lcd(0,"Selamat Datang"); print_lcd(1,"1. Kumpul Borang"); print_lcd(2,"2. Absen Doang"); print_lcd(3," > Silakan Tekan:"); //DrvSYS_Delay(10000); key=Scankey(); while(key==4){ bacarfid(); } while(key==1){ kumpul(); } while (key==2){ absen(); print_lcd(2,"3. ADC="); DrvADC_StartConvert(); adc=DrvADC_GetConversionData(7); Show_Word(3,5,adc/1000+'0'); Show_Word(3,6,adc%1000/100+'0'); Show_Word(3,7,adc%100/10+'0'); Show_Word(3,8,adc%10+'0'); } DrvGPIO_SetBit(E_GPC,12); DrvSYS_Delay(1000); } }
int main() { int i; /* The clock frequency of systick may be changed by user's application. Please change the value of SYSTICK_CLOCK according to real situration */ #define TT_SYSTICK_CLOCK 22118400 /* Initialize TinyThread */ tt_init(TT_SYSTICK_CLOCK); /* Open LED GPIO for testing */ DrvGPIO_Open(LED_GPIO_GREEN_GRP, LED_GPIO_GREEN_BIT, E_IO_OUTPUT); DrvGPIO_Open(LED_GPIO_RED_GRP, LED_GPIO_RED_BIT, E_IO_OUTPUT); DrvGPIO_Open(LED_GPIO_ISP_GRP, LED_GPIO_ISP_BIT, E_IO_OUTPUT); DrvGPIO_Open(LED_GPIO_ICE_GRP, LED_GPIO_ICE_BIT, E_IO_OUTPUT); /* Create and run thread */ arg[0].gpio_group = LED_GPIO_RED_GRP; arg[1].gpio_group = LED_GPIO_ISP_GRP; arg[2].gpio_group = LED_GPIO_ICE_GRP; arg[0].gpio_bit = LED_GPIO_RED_BIT; arg[1].gpio_bit = LED_GPIO_ISP_BIT; arg[2].gpio_bit = LED_GPIO_ICE_BIT; for (i = 0; i < THREAD_NUM; ++i) { tt_sem_init (&join_sem[i], 0); arg[i].join_sem = &join_sem[i]; thread[i] = tt_thread_create("thread", /* thread Name */ 0, /* thread priority */ stack[i], /* stack pointer */ sizeof(stack[i]), /* stack size */ thread_entry, /* thread entry function */ (void *)&arg[i] /* argument for thread entry function */ ); } /* Join threads. * TinyThread does not support build-in tt_thread_join() * since it is easy to emulate by a semaphore. */ for (i = 0; i < THREAD_NUM; ++i) tt_sem_down (&join_sem[i]); /* Set LED to indicate that run to here */ DrvGPIO_SetBit(LED_GPIO_RED_GRP, LED_GPIO_RED_BIT); /* OFF */ DrvGPIO_SetBit(LED_GPIO_ISP_GRP, LED_GPIO_ISP_BIT); /* OFF */ DrvGPIO_SetBit(LED_GPIO_ISP_GRP, LED_GPIO_ISP_BIT); /* OFF */ DrvGPIO_ClrBit(LED_GPIO_GREEN_GRP, LED_GPIO_GREEN_BIT); /* ON */ while(1); }
void absen(){ uint8_t hasiluart[8]; clr_all_pannal(); while(key==2){ DrvGPIO_ClrBit(E_GPC,12); DrvSYS_Delay(10000); print_lcd(0,"Tap Kartu Anda"); print_lcd(1,"Pada Reader"); bacarfid(); DrvUART_Read(UART_PORT0,hasiluart,1); if(hasiluart[0]=='B'){ clr_all_pannal(); print_lcd(0,"Terima Kasih :)"); print_lcd(1,"Tito Alvi"); hitungabsen++; DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); print_lcd(0,"Terima Kasih :)"); DrvSYS_Delay(5000000); main(); } if(hasiluart[0]!='B'){ clr_all_pannal(); print_lcd(0,"Maaf :("); print_lcd(1,"Nama kamu gak"); print_lcd(2,"Ada di Basis Data"); print_lcd(3,"COBA LAGI !!!"); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(500000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(500000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); delay(5000000); DrvSYS_Delay(2000000); absen(); } } }
void RX_Mode(void) { DrvGPIO_ClrBit(E_GPB, 0x01); nrf_writebuf(W_REGISTER+TX_ADDR,(uchar*)TxAddr,5);//写TX节点地址 nrf_writebuf(W_REGISTER+RX_ADDR_P0,(uchar*)RxAddr,5); //设置TX节点地址,主要为了使能ACK nrf_write(W_REGISTER + EN_AA, 0x01); // Enable Auto.Ack:Pipe0 nrf_write(W_REGISTER + EN_RXADDR, 0x01); // Enable Pipe0 nrf_write(W_REGISTER + RF_CH, 40); // Select RF channel 40 nrf_write(W_REGISTER + RX_PW_P0, 4); nrf_write(W_REGISTER + RF_SETUP, 0x0f); nrf_write(W_REGISTER + CONFIG, 0x0f); // Set PWR_UP bit, enable CRC(2 bytes) DrvGPIO_SetBit(E_GPB,1); // This device is now ready to receive one packet of 16 bytes payload from a TX device // '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and }
void thread_entry(void *arg) { THREAD_ARG_T *the_arg = (THREAD_ARG_T *)arg; while(1) { int i; int value; /* Show LED so that users know that the thread is running. */ int cur_ticks = tt_get_ticks (); if(cur_ticks % 64 < 32) DrvGPIO_SetBit(the_arg->gpio_group, the_arg->gpio_bit); /* Turn off LED */ else DrvGPIO_ClrBit(the_arg->gpio_group, the_arg->gpio_bit); /* Turn on LED */ /* Lock the mutex */ tt_rmutex_lock(the_arg->mutex); /* Update value */ for(i = 0; i < THREAD_NUM; ++i) ++the_arg->value[i]; /* (Recursive) Lock the mutex again */ tt_rmutex_lock(the_arg->mutex); /* Check the lock operation by checking value */ value = the_arg->value[0]; for(i = 0; i < THREAD_NUM; ++i) { if(the_arg->value[i] != value) { /* To run to here indicates that the test for mutex lock has been failed. */ tt_printf("Failed\n"); while(1); } } /* (Recursive) Unlock the mutex */ tt_rmutex_unlock(the_arg->mutex); /* Unlock the mutex */ tt_rmutex_unlock(the_arg->mutex); } }
void LCMInit(void) //LCM初始化 { DrvGPIO_ClrBit(E_GPC,5 ); DrvSYS_Delay(6000); DrvGPIO_SetBit(E_GPC,5 ); WriteLCM(0,0x30) ; //设接口数据位数(DL),显示行数(L),及字型(F) DrvSYS_Delay(6000); WriteLCM(0,0x01) ; //清屏指令 DrvSYS_Delay(6000); WriteLCM(0,0x0c) ; //设整体显示开关(D),光标开关关(C),及光标位的字符不闪耀(B) DrvSYS_Delay(6000); WriteLCM(0,0x06) ; //7设光标移动方向并指定整体显示是否移动 DrvSYS_Delay(6000); WriteLCM(0,0x01) ; //清屏指令 DrvSYS_Delay(6000); WriteLCM(0,0x80) ; //设DDRAM地址,设置后DDRAM数据被发送和接收 }
/*****************NRF????????????******************************/ void NRFSetTxMode(uchar *TxDate) {//???? char ret; DrvGPIO_ClrBit(E_GPB, 1); nrf_writebuf(W_REGISTER+TX_ADDR,(uchar*)TxAddr,5);//写TX节点地址 nrf_writebuf(W_REGISTER+RX_ADDR_P0,(uchar*)TxAddr,5); //设置TX节点地址,主要为了使能ACK ret=nrf_read(STATUS); delay_s(); nrf_write(W_REGISTER+STATUS,0x10); //使能通道0的自动应答 ret=nrf_read(STATUS); nrf_write(W_REGISTER+EN_AA,0x01); //使能通道0的自动应答 nrf_write(W_REGISTER+EN_RXADDR,0x01); //使能通道0的接收地址 nrf_write(W_REGISTER+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次 nrf_write(W_REGISTER+RF_CH,40); //设置RF通道为40 nrf_write(W_REGISTER+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 nrf_write(W_REGISTER+CONFIG,0x0e); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断 DrvGPIO_SetBit(E_GPB,1); // This device is now ready to receive one packet of 16 bytes payload from a TX device }
void thread_entry(void *arg) { THREAD_ARG_T *the_arg = (THREAD_ARG_T *)arg; int start_ticks = tt_get_ticks (); #define THREAD_RUN_MSEC 3000 while (1) { int cur_ticks = tt_get_ticks (); if (tt_ticks_to_msec (cur_ticks - start_ticks) >= THREAD_RUN_MSEC) break; if(cur_ticks % 64 < 32) DrvGPIO_SetBit(the_arg->gpio_group, the_arg->gpio_bit); /* Turn off LED */ else DrvGPIO_ClrBit(the_arg->gpio_group, the_arg->gpio_bit); /* Turn on LED */ } tt_sem_up (the_arg->join_sem); }
void init_SPI3(void) { DrvGPIO_Open(E_GPB, 9, E_IO_OUTPUT); DrvGPIO_Open(E_GPB, 7, E_IO_OUTPUT); DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT); DrvGPIO_Open(E_GPD, 14, E_IO_OUTPUT); DrvGPIO_ClrBit(E_GPD, 14); DrvGPIO_InitFunction(E_FUNC_SPI3); /* Configure SPI3 as a master, Type1 waveform, 8-bit transaction */ DrvSPI_Open(eDRVSPI_PORT3, eDRVSPI_MASTER, eDRVSPI_TYPE1, 8); /* MSB first */ DrvSPI_SetEndian(eDRVSPI_PORT3, eDRVSPI_MSB_FIRST); /* Disable the automatic slave select function of SS0. */ DrvSPI_DisableAutoSS(eDRVSPI_PORT3); /* Set the active level of slave select. */ DrvSPI_SetSlaveSelectActiveLevel(eDRVSPI_PORT3, eDRVSPI_ACTIVE_LOW_FALLING); /* SPI clock rate 20MHz */ DrvSPI_SetClockFreq(eDRVSPI_PORT3, 25000000, 0); SPI_CS_SET; }
/*************************************************************************//** * @brief Delay 1 second exactly with timer. * @param None * @return None *****************************************************************************/ void Delay1Sec(void) { UNLOCKREG(); SYSCLK->PWRCON.XTL12M_EN = 1; /* Waiting for 12M Xtal stable */ while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1); /*Configure gpio p3.6 as OUTPUT for led*/ DrvGPIO_Open(E_PORT3, E_PIN6, E_IO_OUTPUT); /* Example code */ DrvTIMER_Init(); DrvTIMER_Open(E_TMR0, 1000, E_PERIODIC_MODE); DrvTIMER_EnableInt(E_TMR0); DrvTIMER_Start(E_TMR0); /* Start counting */ while (1) { DrvGPIO_SetBit(E_PORT3, E_PIN6); DrvTIMER_Delay(E_TMR0, 1000); /*Delay 1000/1000 Sec*/ DrvGPIO_ClrBit(E_PORT3, E_PIN6); DrvTIMER_Delay(E_TMR0, 1000); } }
unsigned char NRF24L01_TxPacket(unsigned char *txbuf) { unsigned char sta; DrvGPIO_ClrBit(E_GPB, 1); nrf_writebuf(W_TX_PAYLOAD,txbuf,TX_DATA_WITDH);//写数据到TX BUF 32个字节 DrvGPIO_SetBit(E_GPB,1); // This device is now ready to receive one packet of 16 bytes payload from a TX device while(DrvGPIO_GetBit(E_GPB, 2)!=0);//等待发送完成 sta=nrf_read(STATUS); //读取状态寄存器的值 nrf_write(W_REGISTER+STATUS,sta); //清除TX_DS或MAX_RT中断标志 if(sta&0x10)//达到最大重发次数 { nrf_wf(FLUSH_TX);//清除TX FIFO寄存器 nrf_write(W_REGISTER+STATUS,sta); //清除TX_DS或MAX_RT中断标志 sta=nrf_read(STATUS); //读取状态寄存器的值 return 0x10; } if(sta&0x20)//发送完成 { return 0x20; } return 0xff;//其他原因发送失败 }
int main(void) { uint8_t buffer[32] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; /* Unlock the protected registers */ UNLOCKREG(); /* Enable the 12MHz oscillator oscillation */ DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); /* Waiting for 12MHz Xtal stable */ DrvSYS_Delay(5000); /* HCLK clock source. 0: external 12MHz. */ DrvSYS_SelectHCLKSource(0); LOCKREG(); DrvSYS_SetClockDivider(E_SYS_HCLK_DIV, 0); /* HCLK clock frequency = HCLK clock source / (HCLK_N + 1) */ nrf_init(); nrf_detect(); //nrf_rx_mode_no_aa(addr,5,16,40); //nrf_rx_mode(addr,5,16,40); nrf_rx_mode_dual(addr,5,40); nrf_test_reg(); DrvGPIO_Open(E_GPA, 2, E_IO_OUTPUT); DrvGPIO_Open(E_GPA, 3, E_IO_OUTPUT); DrvGPIO_Open(E_GPA, 4, E_IO_OUTPUT); DrvGPIO_Open(E_GPA, 5, E_IO_OUTPUT); { uint8_t status = nrf_read_reg(NRF_STATUS); nrf_write_reg(NRF_WRITE_REG|NRF_STATUS,status); // clear IRQ flags nrf_write_reg(NRF_FLUSH_RX, 0xff); nrf_write_reg(NRF_FLUSH_TX, 0xff); } while(1) { uint8_t buffer[32]; if(tx_done) { static uint8_t yy = 0; yy++; if(yy&1) { DrvGPIO_SetBit(E_GPA,2); } else { DrvGPIO_ClrBit(E_GPA,2); } if(tx_done == 1) { } else { } buffer[0] = tx_done; tx_done = 0; } if(rx_done) { static uint8_t xx = 0; rx_done = 0; xx++; if(xx & 1) DrvGPIO_SetBit(E_GPA,5); else DrvGPIO_ClrBit(E_GPA,5); //nrf_ack_packet(0,buffer, (xx&15) + 1); nrf_ack_packet(0,rx_buffer, rx_len); } } while(1) { static uint8_t cnt = 0; if(cnt&1) { DrvGPIO_SetBit(E_GPA,2); } else { DrvGPIO_ClrBit(E_GPA,2); } DrvSYS_Delay(50000*2); cnt++; //nrf_tx_packet(buffer, 16); //buffer[0]++; if(nrf_rx_packet(buffer,16) == NRF_RX_OK) { static uint8_t xx = 0; xx++; if(xx & 1) DrvGPIO_SetBit(E_GPA,5); else DrvGPIO_ClrBit(E_GPA,5); } } return 0; }
//***************************************************************************** // //! \brief GPIO test. //! //! \param None //! //! \return None // //***************************************************************************** void GpioTest(void) { int32_t i32Err; UNLOCKREG(); // // Enable high external clock and use it as system clock (HCLK) // DrvSYS_Open(XTL_CLK); // // Waiting for 12M Xtal stable // while (DrvSYS_GetChipClockSourceStatus(XTL_CLK) != 1); // // Configure Bit0 in Port1 to Output pin and Bit4 in Port3 to Input // pin then close it // DrvGPIO_Open(E_PORT1, E_PIN0, E_IO_OUTPUT); DrvGPIO_Open(E_PORT3, E_PIN4, E_IO_INPUT); i32Err = 0; DrvGPIO_ClrBit(E_PORT1, E_PIN0); if (DrvGPIO_GetBit(E_PORT3, E_PIN4) != 0) { i32Err = 1; } DrvGPIO_SetBit(E_PORT1, E_PIN0); if (DrvGPIO_GetBit(E_PORT3, E_PIN4) != 1) { i32Err = 1; } DrvGPIO_Close(E_PORT1, E_PIN0); DrvGPIO_Close(E_PORT3, E_PIN4); // // GPIO Interrupt Test:P15, P22, P32(INT0) and P52(INT1) are used to test // interrupt and control LEDs(P30) // // //Configure P30 for LED control // DrvGPIO_Open(E_PORT3, E_PIN0, E_IO_OUTPUT); // //Configure P15 as general GPIO interrupt // DrvGPIO_Open(E_PORT1, E_PIN5, E_IO_INPUT); // //The Quasi-bidirection mode could be used as input with pull up enable // DrvGPIO_Open(E_PORT2, E_PIN2, E_IO_QUASI); // // Configure general interrupt callback function for P0/P1 and P2/P3/P4 // DrvGPIO_SetIntCallback(P0P1Callback, P2P3P4Callback, P5Callback); DrvGPIO_EnableInt(E_PORT1, E_PIN5, E_IO_RISING, E_MODE_EDGE); // // IO_FALLING means low level trigger if it is in level trigger mode. // DrvGPIO_EnableInt(E_PORT2, E_PIN2, E_IO_FALLING, E_MODE_LEVEL); DrvGPIO_SetDebounceTime(0, E_DBCLKSRC_HCLK); DrvGPIO_EnableDebounce(E_PORT1, E_PIN5); DrvGPIO_EnableDebounce(E_PORT2, E_PIN2); DrvGPIO_EnableDebounce(E_PORT3, E_PIN2); DrvGPIO_EnableDebounce(E_PORT5, E_PIN2); // // Configure external interrupt. // DrvGPIO_InitFunction(FUNC_EXTINT0); DrvGPIO_InitFunction(FUNC_EXTINT1); DrvGPIO_EnableEINT(E_EINT0_PIN, E_IO_FALLING, E_MODE_EDGE, EINT0Callback); DrvGPIO_EnableEINT(E_EINT1_PIN, E_IO_BOTH_EDGE, E_MODE_EDGE, EINT1Callback); }
void WriteLCM(int32_t data_comm,int32_t in_com) //1 for data,0 for comm { int32_t com,i,j,std; DrvSYS_Delay(100); com = in_com; DrvGPIO_ClrBit( E_GPC,3); //LCD_EN = 0; DrvGPIO_SetBit(E_GPC,2);//LCD_STD = 1; for(i=5;i>0;i--) { DrvGPIO_SetBit( E_GPC,3); //LCD_EN = 1; DrvGPIO_ClrBit( E_GPC,3); //LCD_EN = 0; } DrvGPIO_ClrBit(E_GPC,2);//LCD_STD = 0; DrvGPIO_SetBit( E_GPC,3); //LCD_EN = 1; DrvGPIO_ClrBit( E_GPC,3); //LCD_EN = 0; if(data_comm==1) DrvGPIO_SetBit(E_GPC,2);//LCD_STD = 1; 11111010 else DrvGPIO_ClrBit(E_GPC,2);//LCD_STD = 0; 11111000 DrvGPIO_SetBit( E_GPC,3); //LCD_EN = 1; DrvGPIO_ClrBit( E_GPC,3); //LCD_EN = 0; DrvGPIO_ClrBit(E_GPC,2);//LCD_STD = 0; DrvGPIO_SetBit( E_GPC,3); //LCD_EN = 1; DrvGPIO_ClrBit( E_GPC,3); //LCD_EN = 0; for(j=2;j>0;j--) { for(i=4;i>0;i--) { std=com&0x80; if(std==0x80) DrvGPIO_SetBit(E_GPC,2); //LCD_STD = 1; else DrvGPIO_ClrBit(E_GPC,2); //LCD_STD = 0; com=com<<1; DrvGPIO_SetBit( E_GPC,3); //LCD_EN = 1; DrvGPIO_ClrBit( E_GPC,3); //LCD_EN = 0; } DrvGPIO_ClrBit(E_GPC,2); //LCD_STD = 0; for(i=4;i>0;i--) { DrvGPIO_SetBit( E_GPC,3); //LCD_EN = 1; DrvGPIO_ClrBit( E_GPC,3); //LCD_EN = 0; } } }
void kumpul(){ clr_all_pannal(); uint8_t hasiluart[8]; while(key==1){ DrvGPIO_ClrBit(E_GPC,12); DrvSYS_Delay(10000); DrvGPIO_ClrBit(E_GPB,0); print_lcd(0,"Tap Kartu Anda"); print_lcd(1,"Pada Reader"); print_lcd(2,"Tekan Button"); print_lcd(3,"untuk Kembali"); if(DrvGPIO_GetBit(E_GPB,15)==0){ main();} bacarfid(); DrvUART_Read(UART_PORT0,hasiluart,1); if(hasiluart[0]=='B'){ DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); clr_all_pannal(); goto benar; } if(hasiluart[0]!='B'){ SYSCLK->PWRCON.XTL12M_EN = 1;//Enable 12MHz Crystal SYSCLK->CLKSEL0.HCLK_S = 0; LOCKREG(); clr_all_pannal(); print_lcd(0,"Maaf :("); print_lcd(1,"Nama kamu gak"); print_lcd(2,"Ada di Basis Data"); print_lcd(3,"COBA LAGI !!!"); DrvGPIO_ClrBit(E_GPB,11); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(500000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(500000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); delay(5000000); kumpul(); } //key2=Scankey(); /*if(key2==2){ DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); clr_all_pannal(); }*/ //mennu harus diubah klo uart dah jadi benar: while(hasiluart[0]=='B'){ print_lcd(0,"Silakan Masukkan"); print_lcd(1,"Borang Kamu"); SYSCLK->PWRCON.XTL12M_EN = 1;//Enable 12MHz Crystal SYSCLK->CLKSEL0.HCLK_S = 0; LOCKREG(); servo_buka(); DrvSYS_Delay(10); Scankey(); if(DrvGPIO_GetBit(E_GPA,0)==0){ clr_all_pannal(); print_lcd(0,"Terima Kasih :)"); print_lcd(1,"Tito Alvi"); hitung++; DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); print_lcd(0,"Terima Kasih :)"); DrvSYS_Delay(2000000); main(); } while(DrvGPIO_GetBit(E_GPA,0)==0){ //sensor cahaya = GPA0 - SIG main();} } } }