標(biāo)題:
stm32的交通信號(hào)燈控制系統(tǒng)程序
[打印本頁]
作者:
133470
時(shí)間:
2020-6-21 23:30
標(biāo)題:
stm32的交通信號(hào)燈控制系統(tǒng)程序
#include "Trifficlight.h"
#include "led.h"
extern volatile u32 time; //s計(jì)時(shí)
extern int key; //鍵值
void Delay(__IO u32 nCount); //簡(jiǎn)單的延時(shí)函數(shù)
void control1(void)
{
if(time<=30)//主干道
{
B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
C_red(OFF);C_yellow(OFF);C_green_l(OFF);C_green_s(ON);C_green_r(OFF);
}
else if(time<=55)
{
B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
C_red(OFF);C_yellow(OFF);C_green_l(ON);C_green_s(OFF);C_green_r(ON);
}
else if(time<=60)
{
B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
C_red(OFF);C_yellow(ON);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);
if(time%2) {C_yellow(ON);}
else {C_yellow(OFF);}
}
else if(time<=90)
{
B_red(OFF);B_yellow(OFF);B_green_l(OFF);B_green_s(ON);B_green_r(OFF);
C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);
}
else if(time<=115)
{
B_red(OFF);B_yellow(OFF);B_green_l(ON);B_green_s(OFF);B_green_r(ON);
C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);
}
else
{
B_red(OFF);B_yellow(ON);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);
if(time%2) {B_yellow(ON);}
else {B_yellow(OFF);}
}
if(time<=30) //人行道
{
Br_green(ON); Br_red(OFF);
}
else
{
Br_green(OFF); Br_red(ON);
}
if(time<=60)
{
Cr_green(OFF); Cr_red(ON);
}
else if(time<=90)
{
Cr_green(ON); Cr_red(OFF);
}
else
{
Cr_green(OFF); Cr_red(ON);
}
if(time<=30)//主干道
{
LEDC( ON ); LEDB( ON );LEDA( OFF );//選擇第二個(gè)數(shù)碼管
LED_DUANMA((60-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第一個(gè)數(shù)碼管
LED_DUANMA((60-time)%10); //b方向
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第五個(gè)數(shù)碼管
LED_DUANMA((30-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第六個(gè)數(shù)碼管
LED_DUANMA((30-time)%10); //c方向
Delay(0x000FEF);
}
else if(time<=55)
{
LEDC( ON ); LEDB( ON );LEDA( OFF );//選擇第二個(gè)數(shù)碼管
LED_DUANMA((60-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第一個(gè)數(shù)碼管
LED_DUANMA((60-time)%10); //b方向
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第五個(gè)數(shù)碼管
LED_DUANMA((55-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第六個(gè)數(shù)碼管
LED_DUANMA((55-time)%10); //c方向
Delay(0x000FEF);
}
else if(time<=60)
{
LEDC( ON ); LEDB( ON );LEDA( OFF );//選擇第二個(gè)數(shù)碼管
LED_DUANMA((60-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第一個(gè)數(shù)碼管
LED_DUANMA((60-time)%10); //b方向
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第五個(gè)數(shù)碼管
LED_DUANMA((60-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第六個(gè)數(shù)碼管
LED_DUANMA((60-time)%10); //c方向
Delay(0x000FEF);
}
else if(time<=90)
{
LEDC( ON ); LEDB( ON );LEDA( OFF );//選擇第二個(gè)數(shù)碼管
LED_DUANMA((90-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第一個(gè)數(shù)碼管
LED_DUANMA((90-time)%10); //b方向
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第五個(gè)數(shù)碼管
LED_DUANMA((120-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第六個(gè)數(shù)碼管
LED_DUANMA((120-time)%10); //c方向
Delay(0x000FEF);
}
else if(time<=115)
{
LEDC( ON ); LEDB( ON );LEDA( OFF );//選擇第二個(gè)數(shù)碼管
LED_DUANMA((115-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第一個(gè)數(shù)碼管
LED_DUANMA((115-time)%10); //b方向
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第五個(gè)數(shù)碼管
LED_DUANMA((120-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第六個(gè)數(shù)碼管
LED_DUANMA((120-time)%10); //c方向
Delay(0x000FEF);
}
else
{
LEDC( ON ); LEDB( ON );LEDA( OFF );//選擇第二個(gè)數(shù)碼管
LED_DUANMA((120-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第一個(gè)數(shù)碼管
LED_DUANMA((120-time)%10); //b方向
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第五個(gè)數(shù)碼管
LED_DUANMA((120-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第六個(gè)數(shù)碼管
LED_DUANMA((120-time)%10); //c方向
Delay(0x000FEF);
}
if(time<=30) //人行道
{
LEDC( OFF ); LEDB( OFF );LEDA( ON );//選擇第七個(gè)數(shù)碼管
LED_DUANMA((30-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( OFF );LEDA( OFF ); //選擇第八個(gè)數(shù)碼管
LED_DUANMA((30-time)%10); //b方向
Delay(0x000FEF);
}
else
{
LEDC( OFF ); LEDB( OFF );LEDA( ON );//選擇第七個(gè)數(shù)碼管
LED_DUANMA((120-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( OFF );LEDA( OFF ); //選擇第八個(gè)數(shù)碼管
LED_DUANMA((120-time)%10); //b方向
Delay(0x000FEF);
}
if(time<=60)
{
LEDC( ON ); LEDB( OFF );LEDA( ON );//選擇第四個(gè)數(shù)碼管
LED_DUANMA((60-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( OFF );LEDA( OFF ); //選擇第三個(gè)數(shù)碼管
LED_DUANMA((60-time)%10); //c方向
Delay(0x000FEF);
}
else if(time<=90)
{
LEDC( ON ); LEDB( OFF );LEDA( ON );//選擇第四個(gè)數(shù)碼管
LED_DUANMA((90-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( OFF );LEDA( OFF ); //選擇第三個(gè)數(shù)碼管
LED_DUANMA((90-time)%10); //c方向
Delay(0x000FEF);
}
else
{
LEDC( ON ); LEDB( OFF );LEDA( ON );//選擇第四個(gè)數(shù)碼管
LED_DUANMA((180-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( OFF );LEDA( OFF ); //選擇第三個(gè)數(shù)碼管
LED_DUANMA((180-time)%10); //c方向
Delay(0x000FEF);
}
}
void control2(void)
{
if(time>15)
{
time=1;
key=0;
}
LEDC( ON ); LEDB( ON );LEDA( OFF ); //選擇第2個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第1個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( ON ); LEDB(OFF );LEDA( OFF ); //選擇第4個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( ON ); LEDB( OFF );LEDA( ON ); //選擇第3個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第5個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第6個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( OFF );LEDA( OFF ); //選擇第8個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( OFF );LEDA( ON ); //選擇第7個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
C_red(OFF);C_yellow(OFF);C_green_l(ON);C_green_s(ON);C_green_r(ON);
Br_green(OFF); Br_red(ON);
Cr_green(OFF); Cr_red(ON);
}
void control3(void)
{
if(time>15)
{
time=1;
key=0;
}
LEDC( ON ); LEDB( ON );LEDA( OFF ); //選擇第2個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第1個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( ON ); LEDB(OFF );LEDA( OFF ); //選擇第4個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( ON ); LEDB( OFF );LEDA( ON ); //選擇第3個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第5個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第6個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( OFF );LEDA( OFF ); //選擇第8個(gè)數(shù)碼管
LED_DUANMA((15-time)%10);
Delay(0x000FEF);
LEDC( OFF ); LEDB( OFF );LEDA( ON ); //選擇第7個(gè)數(shù)碼管
LED_DUANMA((15-time)/10);
Delay(0x000FEF);
B_red(OFF);B_yellow(OFF);B_green_l(ON);B_green_s(ON);B_green_r(ON);
C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);
Br_green(OFF); Br_red(ON);
Cr_green(OFF); Cr_red(ON);
}
void control4(void)
{
LEDC( ON ); LEDB( ON );LEDA( ON ); //選擇第1個(gè)數(shù)碼管
LEDC( ON ); LEDB( ON );LEDA( OFF ); //選擇第2個(gè)數(shù)碼管
LEDC( ON ); LEDB( OFF );LEDA( ON ); //選擇第3個(gè)數(shù)碼管
LEDC( ON ); LEDB(OFF );LEDA( OFF ); //選擇第4個(gè)數(shù)碼管
LEDC( OFF ); LEDB( ON );LEDA( ON ); //選擇第5個(gè)數(shù)碼管
LEDC( OFF ); LEDB( ON );LEDA( OFF ); //選擇第6個(gè)數(shù)碼管
LEDC( OFF ); LEDB( OFF );LEDA( ON ); //選擇第7個(gè)數(shù)碼管
LEDC( OFF ); LEDB( OFF );LEDA( OFF ); //選擇第8個(gè)數(shù)碼管
LED1(OFF);LED2(ON);LED3(ON); LED4(ON);LED5(OFF);LED6(OFF);LED7(ON);LED8(ON);
B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);B_yellow(OFF);
C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);C_yellow(OFF);
Br_green(OFF);
Cr_green(OFF);
if(time%2) {Cr_green(ON); Br_green(ON);B_red(ON);C_red(ON); }
else {Cr_green(OFF);Br_green(OFF);B_red(OFF);C_red(OFF);}
}
void control()
{
if(!key)
control1();
else if(key==1)
control2();
else if(key==2)
control3();
else if(key==3)
control4();
}
void Delay(__IO u32 nCount) //簡(jiǎn)單的延時(shí)函數(shù)
{
for(; nCount != 0; nCount--);
}
復(fù)制代碼
交通燈.7z
2020-6-22 15:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
186.17 KB, 下載次數(shù): 12, 下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2020-6-22 15:47
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1