STM32設計交通燈控制系統
實現東西南北方向同時倒計時
且按鍵可分別控制東西、南北方向通行時間
主要實驗程序 #include "system.h" #include "SysTick.h" #include "led.h" #include "usart.h" #include "tftlcd.h" #include "time.h" #include "key.h" void color_n_change(unsigned int clo) { LCD_Fill(110,130,130,150,clo);//1_deng_color LCD_Fill(110,210,130,230,clo);//2 } void color_e_change(unsigned int clo) { LCD_Fill(70,170,90,190,clo);//3 LCD_Fill(150,170,170,190,clo);//4 } int main() { u8 key; u8 north; u8 northg; u8 norths; u8 mmm; u8 eath; u8 eaths; u8 eathg; u8 i=0; u8 buf[20]; u8 flag=1; u8 time; u8 timen; u8 timee; u8 timen1; u8 timen2; u8 timee1; u8 timee2; SysTick_Init(168); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); LED_Init(); KEY_Init(); TIM4_Init(10000-1,8400-1); TIM3_Init(10000-1,8400-1); USART1_Init(9600); TFTLCD_Init(); FRONT_COLOR=BLACK; LCD_DrawLine(90,60 , 90, 150);//1_hua xian LCD_DrawLine(150,60 , 150, 150);//2 LCD_DrawLine(30,150 , 90, 150);//3 LCD_DrawLine(150,150 , 210, 150);//4 LCD_DrawLine(30,210 , 90, 210);//5 LCD_DrawLine(150,210 , 210, 210);//6 LCD_DrawLine(90,210 , 90, 300);//7 LCD_DrawLine(150,210 , 150, 300);//8 LCD_DrawRectangle(110,130,130,150);//1_hua_deng LCD_DrawRectangle(110,210,130,230);//2 LCD_DrawRectangle(70,170,90,190);//3 LCD_DrawRectangle(150,170,170,190);//4 while(1) { if(flag==1)//xiu gai { north=(TIM4_IRQHandler());//daojishi_zhihou northg=north%10; norths=north/10; sprintf((char *)buf,"%d",norths); LCD_ShowString(115,110,tftlcd_data.width,tftlcd_data.height,16,buf);//1 LCD_ShowString(115,235,tftlcd_data.width,tftlcd_data.height,16,buf);//2 sprintf((char *)buf,"%d",northg); LCD_ShowString(123,110,tftlcd_data.width,tftlcd_data.height,16,buf);//1 LCD_ShowString(123,235,tftlcd_data.width,tftlcd_data.height,16,buf);//2 eath=(TIM3_IRQHandler()); eathg=eath%10; eaths=eath/10; sprintf((char *)buf,"%d",eaths); LCD_ShowString(50,175,tftlcd_data.width,tftlcd_data.height,16,buf);//3 LCD_ShowString(175,175,tftlcd_data.width,tftlcd_data.height,16,buf);//4 sprintf((char *)buf,"%d",eathg); LCD_ShowString(58,175,tftlcd_data.width,tftlcd_data.height,16,buf);//3 LCD_ShowString(183,175,tftlcd_data.width,tftlcd_data.height,16,buf);//4 if(TIM4_IRQHandler()==1)//north_xunhuan_1ci { mmm++; } if(mmm%2==1)//ji { if(eath>5) color_e_change(GREEN); else color_e_change(YELLOW); if(north>5) color_n_change(RED); else color_n_change(RED); } if(mmm%2==0)//ou { if(eath>5) color_e_change(RED); else color_e_change(RED); if(north>5) color_n_change(GREEN); else color_n_change(YELLOW); } key=KEY_Scan(0); if(key==KEY_UP)//nanbei { flag=2; } if(key==KEY_DOWN)//dongxi { flag=3; } }//flag1 if(flag==2)//up_nanbei { key=KEY_Scan(2); timen=tiiiiimt(key,1);//nanbei timen1=timen/10;//shi_wei timen2=timen%10;//ge_wei if(key==KEY_DOWN)//que ding { flag=1;//gai } LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,12,"time_setn:"); sprintf((char *)buf,"%d",timen1); LCD_ShowString(100,10,tftlcd_data.width,tftlcd_data.height,16,buf);//1 sprintf((char *)buf,"%d",timen2); LCD_ShowString(110,10,tftlcd_data.width,tftlcd_data.height,16,buf);//1 } if(flag==3)//down_dongxi { key=KEY_Scan(0); timee=tiiiiimt(key,2);//dongxi timee1=timee/10;//shi_wei timee2=timee%10;//ge_wei if(key==KEY_DOWN)//queding { flag=1;//gai_xianshi } LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,12,"time_sete:"); sprintf((char *)buf,"%d",timee1); LCD_ShowString(100,30,tftlcd_data.width,tftlcd_data.height,16,buf);//1 sprintf((char *)buf,"%d",timee2); LCD_ShowString(110,30,tftlcd_data.width,tftlcd_data.height,16,buf);//1 } } }
|