找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 34704|回復(fù): 25
打印 上一主題 下一主題
收起左側(cè)

基于STM32的十字路口交通燈控制系統(tǒng)設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我近期單片機(jī)的作品,查閱大約資料自己做的

十字路口交通燈控制系統(tǒng)

隨著移動(dòng)設(shè)備的流行和發(fā)展,嵌入式系統(tǒng)已經(jīng)成為一個(gè)熱點(diǎn)。它并不是最近出現(xiàn)的新技術(shù),只是隨著微電子技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,微控制芯片功能越來(lái)越大,而嵌入微控制芯片的設(shè)備和系統(tǒng)越來(lái)越多,從而使得這種技術(shù)越來(lái)越引人注目。它對(duì)軟硬件的體積大小、成本、功耗和可靠性都提出了嚴(yán)格的要求。嵌入式系統(tǒng)的功能越來(lái)越強(qiáng)大,實(shí)現(xiàn)也越來(lái)越復(fù)雜,隨之出現(xiàn)的就是可靠性大大降低。最近的一種趨勢(shì)是一個(gè)功能強(qiáng)大的嵌入式系統(tǒng)通常需要一種操作系統(tǒng)來(lái)給予支持,這種操作系統(tǒng)是已經(jīng)成熟并且穩(wěn)定的,可以是嵌入式的Linux,WINCE等等。本文所要研究的就是基于ARM嵌入式系統(tǒng)的交通燈系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。本設(shè)計(jì)采用了ARM32位的Cortex-M3 CPU的內(nèi)核的STM32作為核心處理器。

Abstract

        With the popularity and development of mobile devices, embedded system has become a hotspot. It is not a new technique appeared recently, only with the development of microelectronics and computer technology, micro chip control functions more and more, more and more equipment and systems and embedded micro control chip, making the technology more attract sb.'s attention. Hardware and software of its size, cost, power consumption and reliability have made stringent requirements. The function of embedded system is more and more powerful, and more and more complicated, the reliability appears is greatly reduced. A recent trend is a powerful embedded systems usually require an operating system to support, the operating system is already mature and stable, can be embedded Linux, WINCE and so on. This paper is to study the design and Realization of the traffic light system based on ARM embedded system. This design uses the ARM32 bit Cortex-M3 CPU kernel STM32 as the core processor.


目 錄

一 引言
二 相關(guān)內(nèi)容和原理              1
三 作品設(shè)計(jì)要求              1
四 作品方案設(shè)計(jì)              2

4.1              設(shè)計(jì)思路              2

4.2              總體設(shè)計(jì)框圖              3

4.3              總體方案設(shè)計(jì)參數(shù)計(jì)算              4

五  系統(tǒng)硬件電路設(shè)計(jì)及分析              4

5.1              STM32f103芯片介紹及選用              4

5.2              單片機(jī)電路原理圖及分析              4

5.3              電源電路模塊原理圖及分析              5

5.4              晶振與復(fù)位電路模塊原理圖              5

5.5              LED交通燈電路原理圖及分析              6

六 系統(tǒng)軟件設(shè)計(jì)及其分析              7

6.1              軟件設(shè)計(jì)流程圖              8

6.2              ARM交通燈控制軟件設(shè)計(jì)              8

七 系統(tǒng)軟件代碼              9

   7.1 軟件設(shè)計(jì)流程圖………………………………………………… ………………………9

   7.2 部分程序代碼……………………………………………………………………………10

八 Keil軟件的運(yùn)用與調(diào)試……………………… ……………………………………………16

九 實(shí)物演示照片…………………………………………………………………………………17

十 作品電路的PCB圖……………………………………………………………………… …19

十一 設(shè)計(jì)心得及體會(huì)……………………………………………………………………………20

十二 參考文獻(xiàn)…………………………… …………… ………………………………………21



1引言

交通信號(hào)燈指揮著人和各種車輛的安全運(yùn)行,實(shí)現(xiàn)紅、黃、綠燈的自動(dòng)指揮是城鄉(xiāng)交通管理現(xiàn)代化的重要課題。在城鄉(xiāng)街道的十字交叉路口,為了保證交通秩序和行人安全,一般在每條道路上各有一組紅、黃、綠交通信號(hào)燈,其中紅燈亮,表示該條道路禁止通行; 黃燈亮,表示該條道路上未過(guò)停車線的車輛停止通行,已過(guò)停車線的車輛繼續(xù)通行;綠燈亮,表示該條道路允許通行。交通燈控制電路自動(dòng)控制十字路口兩組紅、黃、綠交通燈的狀態(tài)轉(zhuǎn)換,指揮各種車輛和行人安全通行,實(shí)現(xiàn)十字路口城鄉(xiāng)交通管理自動(dòng)化。

    本文為了實(shí)現(xiàn)交通道路的管理,力求交通管理先進(jìn)性、科學(xué)化。 分析應(yīng)用了單片機(jī)實(shí)現(xiàn)智能交通燈管制的控制系統(tǒng),以及該系統(tǒng)軟、硬件設(shè)計(jì)方法,實(shí)驗(yàn)證明該系統(tǒng)實(shí)現(xiàn)簡(jiǎn)單、經(jīng)濟(jì),能夠有效地疏導(dǎo)交通,提高交通路口的通行能力。

2  相關(guān)內(nèi)容及原理

通過(guò)設(shè)計(jì),培養(yǎng)自己綜合運(yùn)用所學(xué)知識(shí)、獨(dú)立分析和解決實(shí)際問(wèn)題的能力,培養(yǎng)創(chuàng)新意識(shí)和創(chuàng)新能力,并獲得科學(xué)研究的基礎(chǔ)訓(xùn)練,加深對(duì)ARM芯片的了解;熟悉ARM芯片各個(gè)引腳的功能,工作方式,計(jì)數(shù)/定時(shí),I/O口,中斷等相關(guān)原理,鞏固學(xué)習(xí)嵌入式的相關(guān)內(nèi)容知識(shí)。

利用ARM芯片模擬實(shí)現(xiàn)交通燈控制,自行選擇所需ARM芯片,查閱相關(guān)文獻(xiàn)資料,熟悉所選ARM芯片,了解所選ARM芯片各個(gè)引腳功能,工作方式,計(jì)數(shù)/定時(shí),I/O口,中斷等相關(guān)原理,通過(guò)軟硬件設(shè)計(jì)實(shí)現(xiàn)利用ARM芯片完成交通燈的模擬控制。

3  作品設(shè)計(jì)要求

要求基于Cortex系列單片機(jī)設(shè)計(jì)一具有模擬道路路口交通燈相應(yīng)功能的交通燈模擬系統(tǒng)。具體要求如下:

(1)具有三種顏色顯示:紅色、綠色和黃色,分別代表路口交通燈的三種顏色。

    (2)所設(shè)計(jì)的系統(tǒng)應(yīng)至少能夠模擬兩個(gè)路口的功能,具有直行和左轉(zhuǎn)的功能。

     (3)如果能力和時(shí)間允許,可以加入操作系統(tǒng)。

     (4)適當(dāng)加入一些其他元素,使其更加具有人性化設(shè)計(jì)。


4 作品方案設(shè)計(jì)4.1 設(shè)計(jì)思路

利用STM32F103芯片實(shí)現(xiàn)單路交通燈的控制: a 實(shí)現(xiàn)紅、綠、黃燈的循環(huán)控制。使用紅、黃、綠三種不同顏色的LED燈實(shí)現(xiàn)此功能,主干道正前方方向的LED燈,編號(hào)分別為1、2、3,分別接在單片機(jī)的PB8、PB6、PB9的引腳上;主干道右方的LED燈,編號(hào)分別為4、5、6,分別接在單片機(jī)的PA14、PA10、PA8的引腳上;主干道后側(cè)的LED燈,編號(hào)分別為7、8、9,分別接在單片機(jī)的PD10、PD12、PD14引腳上。主干道左方的LED燈,編號(hào)分別為10、11、12,分別接在單片機(jī)的PE7、PE11、PE15引腳上。以此實(shí)現(xiàn)四個(gè)路口的交通燈模擬系統(tǒng)。用軟件控制燈的亮與滅來(lái)控制車輛和行人的通行。

交通路口示意圖如圖4.1車輛遇到紅燈停綠燈行的行走情況,紅綠燈時(shí)間均為2000ms,切換時(shí)間為2000ms,最后2000ms為黃燈閃爍。

                圖4.1  交通路口示意圖

4.2 總體設(shè)計(jì)框圖

用ARM系列芯片STM32F103作為系統(tǒng)的主控芯片,控制交通燈的循環(huán)點(diǎn)亮并顯示燈亮?xí)r間(采用倒計(jì)時(shí)顯示),當(dāng)定時(shí)時(shí)間到的時(shí)候通過(guò)燈的狀態(tài)來(lái)提醒人們注意紅綠燈的狀態(tài)。

圖4.2  交通燈總體設(shè)計(jì)框圖


5 硬件電路模塊設(shè)計(jì)及其分析

根據(jù)設(shè)計(jì)任務(wù)要求,自行選擇電子元件,畫(huà)出電氣原理圖,并調(diào)試。一個(gè)完整的系統(tǒng)除了主控芯片以外,還需配上電源系統(tǒng)、時(shí)鐘電路、復(fù)位電路等。獨(dú)立的芯片是不能工作的。

5.1  STM32F103芯片介紹

     STM32F103是基于一個(gè)支持實(shí)時(shí)仿真和嵌入式跟蹤的32 位 CPU 的微控制器,STM32F1系列屬于中低端的32位ARM微控制器,該系列芯片是意法半導(dǎo)體(ST)公司出品,其內(nèi)核是Cortex-M3。該系列芯片按片內(nèi)Flash的大小可分為三大類:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。芯片集成定時(shí)器,CAN,ADC,SPI,I2C,USB,UART,等多種功能。

具有以下一些特性:

  •          ARM 32位的Cortex-M3
  •          高72MHz工作頻率,在存儲(chǔ)器的0等待周期訪問(wèn)時(shí)可達(dá)1.25DMips/MHZ(DhrystONe2.1),從32K到512K字節(jié)的閃存程序存儲(chǔ)器最大64K字節(jié)SRAM
  •          2.0-3.6V供電和I/O引腳
  •          上電/斷電復(fù)位(POR/PDR)、可編程電壓監(jiān)測(cè)器(PVD
  •          4-16MHZ晶振振蕩器
  •          內(nèi)嵌經(jīng)出廠調(diào)教的8MHz的RC振蕩器
  •          2個(gè)12位模數(shù)轉(zhuǎn)換器,1us轉(zhuǎn)換時(shí)間(多達(dá)16個(gè)輸入通道),轉(zhuǎn)換范圍:0至3.6V雙采樣和保持功能
  •          2個(gè)DMA控制器,共12個(gè)DMA通道:DMA1有7個(gè)通道,DMA2有5個(gè)通道
  •          片內(nèi)晶振頻率范圍:130 MHz。
  •          通過(guò)片內(nèi)PLL可實(shí)現(xiàn)最大為60MHz的CPU操作頻率,PLL的穩(wěn)定時(shí)間

為100us

  •          支持的外設(shè):定時(shí)器、ADC、SPI、USB、IIC和UART
  •          多達(dá)112個(gè)快速I/O端口(僅Z系列有超過(guò)100個(gè)引腳)
  •          3個(gè)16位定時(shí)器,每個(gè)定時(shí)器有多達(dá)4個(gè)用于輸入捕獲/輸出比較/PWM或脈沖計(jì)數(shù)的通道和增量編碼器輸入
  •          1個(gè)16位帶死區(qū)控制和緊急剎車,用于電機(jī)控制的PWM高級(jí)控制定時(shí)器
  •          ECOPACK封裝
5.2  STM32F103主電路原理圖

圖5.1為STM32F103芯片的原理圖,多達(dá)100個(gè)引腳,采用3.3V或者5V電源供電,設(shè)計(jì)所需外接器件的網(wǎng)絡(luò)名已經(jīng)標(biāo)出。

圖5.1  STM32F103芯片的原理圖


5.3  系統(tǒng)電源電路設(shè)計(jì)

本電源運(yùn)用5V的直流電源(圖5.2所示)。通過(guò)LM78系列芯片將5V電壓轉(zhuǎn)換為電壓,為STM32F103芯片供電,STM32F103芯片所能承受的電壓范圍是2V~3.6V。

      

     圖5.2  直流電源電路設(shè)計(jì)

5.4  晶振與復(fù)位電路模塊

系統(tǒng)的晶振電路如圖5.4所示STM32f103芯片采用8MHz的晶振作為振蕩時(shí)鐘源,外部是倍頻72MHz晶振。通過(guò)對(duì)芯片的進(jìn)行軟件設(shè)計(jì)可以將晶體振蕩器的頻率分頻為所需的頻率;系統(tǒng)的復(fù)位電路如圖5.5所示,STM32F103芯片的14號(hào)引腳連接到主控芯片的復(fù)位引腳(nRST)上,按下復(fù)位鍵S2時(shí),系統(tǒng)將會(huì)復(fù)位到初始的狀態(tài)。

  圖5.4 系統(tǒng)的晶振電路圖                                         圖5.5 系統(tǒng)的復(fù)位電路圖

5.5  LED循環(huán)顯示設(shè)計(jì)

    由南向北和由北向南車道各用一組紅、綠、黃三色的指示燈,左右兩側(cè)也是各三個(gè)燈,指揮車輛通行。綠燈是通行信號(hào),面對(duì)綠燈的車輛可以直行,紅燈是禁止通行信號(hào),面對(duì)紅燈的車輛必須在路口的停車線后停車。黃燈是警告信號(hào),面對(duì)黃燈的車輛不能越過(guò)停車線,但車輛已十分接近停車線而不能安全停車時(shí)可以繼續(xù)行進(jìn)。具體紅綠燈時(shí)間分配時(shí)間如表5.1所示。

表5—1:紅綠燈時(shí)間分配時(shí)間如表


1000ms

1000ms

1000ms

1000ms

1000ms

1000ms

主干通道

綠燈亮

黃燈閃

紅燈亮

黃燈閃

紅燈亮

黃燈閃

左右道路

紅燈亮

紅燈亮

綠燈亮

綠燈亮

紅燈亮

紅燈亮

    上表說(shuō)明主干通道綠燈亮、黃燈閃時(shí)人行道都是紅燈亮,只有車道

紅燈亮(車輛完全停下來(lái))時(shí)人行道綠燈才亮,這樣保證了過(guò)馬路的行人人身安全,避免了不必要的交通事故。硬件電路連接圖如圖5.6所示

圖5.6  硬件電路連接圖

交通燈LED的發(fā)光和熄滅的控制,是通過(guò)控制GPIO寄存器組來(lái)完成的,須先將引腳PA、PB、PD、PE等通過(guò)引腳功能選擇寄存器PINSEL1,設(shè)置為GPIO方式;再設(shè)置GPIO方向寄存器1(IO1DIR),對(duì)應(yīng)的引腳設(shè)置為輸出方向。要點(diǎn)亮LED1~LED12需要使用GPIO清零寄存器1(IO1CLR)的對(duì)應(yīng)位設(shè)置為1,即在引腳PA、PB、PD、PE上加邏輯低電平,即可點(diǎn)亮這些燈。與之相反,要熄滅這些燈,則要用GPIO輸出置位寄存器1(IO1SET)將對(duì)應(yīng)的位置位即可。

6 系統(tǒng)軟件設(shè)計(jì)及其分析6.1  軟件設(shè)計(jì)流程圖

圖6.1為ARM模擬交通燈控制程序流程圖,主程序主要完成倒計(jì)時(shí)顯示及控制蜂鳴器,中斷服務(wù)程序主要控制那些燈亮以及亮的時(shí)間。

圖6.1  ARM模擬交通燈控制程序流程圖


6.2   ARM交通燈模擬控制程序設(shè)計(jì)

定時(shí)器控制原理:定時(shí)器對(duì)外設(shè)時(shí)鐘Fpclk周期進(jìn)行計(jì)數(shù),根據(jù)4個(gè)匹配寄存器的設(shè)定可設(shè)置為匹配(即達(dá)到匹配寄存器指定的定時(shí)值)時(shí)產(chǎn)生中斷或執(zhí)行其他操作。

設(shè)置P0、P1口為GPIO輸出狀態(tài),初始化定時(shí)器,選定定時(shí)器0中斷為向量IRQ,對(duì)VICIntEnable、VICIntSelect、VICvectCntl進(jìn)行設(shè)置,初始化SPI接口,根據(jù)設(shè)計(jì)要求編寫軟件程序。根據(jù)事先畫(huà)好的程序流程圖,用C語(yǔ)言編寫程序,在主程序中對(duì)需要用到的I/O口進(jìn)行定義,并設(shè)置相應(yīng)的I/O口,比如要求P1。18~P1。25引腳為GPIO功能,則通過(guò)對(duì)引腳功能選擇 寄存器PINSEL1將對(duì)應(yīng)的引腳設(shè)置為GPIO方式并設(shè)置GPIO方向,在GPIO方向寄存器IO1DIR里設(shè)置,之后對(duì)定時(shí)器0進(jìn)行初始化,并開(kāi)相應(yīng)的中斷。然后進(jìn)入大循環(huán)進(jìn)行倒計(jì)時(shí)顯示、控制蜂鳴器的蜂鳴與否并判斷flag是否加到設(shè)定值,對(duì)flag加到設(shè)定值后進(jìn)行清零,讓flag重新計(jì)數(shù)。中斷服務(wù)程序的設(shè)計(jì),每隔一秒鐘定時(shí)器中斷一次,每中斷一次flag加1根據(jù)LED點(diǎn)亮的先后順序以及點(diǎn)亮的時(shí)間,分別編寫相應(yīng)的程序。

7  系統(tǒng)軟件代碼7.1   軟件設(shè)計(jì)流程圖



              

圖7.1  軟件設(shè)計(jì)流程圖


7.2   系統(tǒng)軟件代碼

主程序部分:

#include "stm32f10x.h"

#include "led.h"

#include"timer.h"

u32 time=0;//Ms級(jí)延時(shí)變量

int i;

int main(void)

{            

              LED_GPIO_Configuration();

              TIM2_Config1();

              TIM2_NVIC_Config1();

              TIM_Cmd(TIM2,ENABLE);//開(kāi)啟TIM2            

while(1){

                i=0;

                Delay_MS(2000);

                            LED2(ON);LED4(ON);LED7(ON);LED10(ON);//直行燈亮

                            Delay_MS(2000);//延時(shí)

                            LED2(OFF);//直行燈滅

while(i<10)                            //黃燈閃爍

{   LED3(ON);

                Delay_MS(100);

                            LED3(OFF);

                Delay_MS(100);

                i++;

}

    LED2(OFF);LED4(OFF);LED7(OFF);LED10(OFF);//直行燈結(jié)束

                LED1(ON);LED7(ON);LED10(ON);LED5(ON);//右行燈亮

                            Delay_MS(3000);

                            LED5(OFF);//右行燈滅

i=0;

while(i<10)                           

{   LED6(ON);

                Delay_MS(100);

                            LED6(OFF);

                Delay_MS(100);

                i++;

}

    LED5(OFF);LED1(OFF);LED7(OFF);LED10(OFF);//右行燈結(jié)束

                LED1(ON);LED7(ON);LED4(ON);LED11(ON);//左行燈亮

    Delay_MS(3000);

                            LED11(OFF);//左行燈滅

i=0;

while(i<10)                           

{   LED12(ON);

                Delay_MS(100);

                            LED12(OFF);

                Delay_MS(100);

                i++;

}

    LED11(OFF);LED1(OFF);LED7(OFF);LED4(OFF);//左行燈結(jié)束

                LED1(ON);LED4(ON);LED10(ON);LED8(ON);//后行燈

    Delay_MS(3000);

                            LED1(OFF);LED4(OFF);LED10(OFF);LED8(OFF);//后行燈滅

         }

            

}

底層寄存器配置部分:

void LED_GPIO_Configuration(void)

{

   GPIO_InitTypeDef GPIO_InitStructure;

   /*開(kāi)啟GPIOC&GPIOE的時(shí)鐘 */  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);

   /* Configure PB.04, PB.06 and PB.08*/   

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 | GPIO_Pin_6 | GPIO_Pin_8 ;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//輸出上拉

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_Init(GPIOB, &GPIO_InitStructure);

   /* Configure PA.08, PA.10 and PA.12 */

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_12 ;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//輸出上拉

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_Init(GPIOA, &GPIO_InitStructure);

            

                 /* Configure PD.10, PD.12 and PD.08 */   

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_12 | GPIO_Pin_15;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//輸出上拉

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_Init(GPIOD, &GPIO_InitStructure);

            

                 /* Configure PE.07, PE.11 and PE.15 */   

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_15;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//輸出上拉

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_Init(GPIOE, &GPIO_InitStructure);

                LED1(OFF);LED2(OFF);LED3(OFF);LED4(OFF);LED5(OFF);LED6(OFF);LED7(OFF);LED8(OFF);LED9(OFF);LED10(OFF);LED11(OFF);LED12(OFF);

內(nèi)聯(lián)函數(shù)定義LED函數(shù)部分:

#ifndef _LED_H

#define _LED_H

#include"stm32f10x.h"

#define              ON  0

#define OFF 1

/***************內(nèi)聯(lián)函數(shù)定義LED函數(shù)****************/

#define LED1(a)              if (a)              

                                                                      GPIO_SetBits(GPIOB,GPIO_Pin_8);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOB,GPIO_Pin_8)

#define LED4(a)              if (a)              

                                                                      GPIO_SetBits(GPIOA,GPIO_Pin_12);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOA,GPIO_Pin_12)

#define LED7(a)              if (a)              

                                                                      GPIO_SetBits(GPIOD,GPIO_Pin_10);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOD,GPIO_Pin_10)

#define LED10(a)              if (a)              

                                                                      GPIO_SetBits(GPIOE,GPIO_Pin_15);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOE,GPIO_Pin_15)

#define LED2(a)              if (a)              

                                                                      GPIO_SetBits(GPIOB,GPIO_Pin_6);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOB,GPIO_Pin_6)

#define LED5(a)              if (a)              

                                                                      GPIO_SetBits(GPIOA,GPIO_Pin_10);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOA,GPIO_Pin_10)

#define LED8(a)              if (a)              

                                                                      GPIO_SetBits(GPIOD,GPIO_Pin_12);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOD,GPIO_Pin_12)

#define LED11(a)              if (a)              

                                                                      GPIO_SetBits(GPIOE,GPIO_Pin_11);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOE,GPIO_Pin_11)                                       

#define LED3(a)              if (a)              

                                                                      GPIO_SetBits(GPIOB,GPIO_Pin_9);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOB,GPIO_Pin_9)

#define LED6(a)              if (a)              

                                                                      GPIO_SetBits(GPIOA,GPIO_Pin_8);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOA,GPIO_Pin_8)

#define LED9(a)              if (a)              

                                                                      GPIO_SetBits(GPIOD,GPIO_Pin_15);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOD,GPIO_Pin_15)

#define LED12(a)              if (a)              

                                                                      GPIO_SetBits(GPIOE,GPIO_Pin_7);

                                                                      else                           

                                                                      GPIO_ResetBits(GPIOE,GPIO_Pin_7)                                                                    

void               LED_GPIO_Configuration(void);

#endif

8  Keil軟件的運(yùn)用與調(diào)試

根據(jù)事先畫(huà)好的程序流程圖,用C語(yǔ)言編寫程序,并成功生成HEX文件,利用keil軟件編譯結(jié)果如圖8.1 所示。

圖8.1 編譯結(jié)果示意圖

調(diào)試過(guò)程截圖:





設(shè)計(jì)為系統(tǒng)上電即點(diǎn)亮車道紅燈以及馬路綠燈,倒計(jì)時(shí)1000ms紅燈開(kāi)始閃爍,同時(shí)馬路紅燈亮,紅燈閃1000ms接著轉(zhuǎn)為黃燈閃1000ms,然后車輛通道轉(zhuǎn)為綠燈亮,1000ms后綠燈閃1000ms,黃燈再閃1000ms之后又回到紅燈亮,人行道只在車輛通道紅燈時(shí)才亮綠燈。這主要靠在中斷服務(wù)程序中對(duì)計(jì)數(shù)值flag的判斷來(lái)對(duì)正在點(diǎn)亮的燈進(jìn)行定時(shí)實(shí)現(xiàn)程序詳細(xì)清單見(jiàn)附錄。

9 實(shí)物演示照片




10 作品電路的PCB圖

在設(shè)計(jì)好軟件流程圖以及焊接好硬件電路后,用Altium Designer軟件進(jìn)行電路的PCB設(shè)計(jì),下圖是主電路芯片的PCB:

   

11 設(shè)計(jì)心得體會(huì)及總結(jié)

1、因?yàn)樵O(shè)計(jì)中所用的一些工具,平時(shí)雖然接觸過(guò),但研究不夠深入,所以此次課程設(shè)計(jì)

在選好題目之后對(duì)設(shè)計(jì)所需資料進(jìn)行了系統(tǒng)查詢和整理,其中包括了我們學(xué)習(xí)過(guò)程中用

到的課本和網(wǎng)上搜索的期刊文獻(xiàn)等;

2、此次嵌入式實(shí)驗(yàn)是比較全面的一個(gè)實(shí)驗(yàn),所涉及的內(nèi)容十分廣泛,包括底層硬件結(jié)構(gòu)

以及上層操作系統(tǒng)、驅(qū)動(dòng)程序等方面,在實(shí)驗(yàn)過(guò)程中雖然遇到了各種各樣的問(wèn)題,但解

決問(wèn)題的同時(shí)也鍛煉了我們分析問(wèn)題的能力以及動(dòng)手能力,做完后感覺(jué)獲益匪淺;

3、回顧此次ARM課程設(shè)計(jì),我感慨很多,在這幾星期里,可以說(shuō)苦多于甜,但是確實(shí)

又學(xué)到了很多東西,不僅鞏固了以前所學(xué)的知識(shí),而且學(xué)到了很多書(shū)本上沒(méi)有的新的知

識(shí)。在設(shè)計(jì)調(diào)試的過(guò)程中遇到了各種各樣的問(wèn)題,同時(shí)也發(fā)現(xiàn)了自己的不足之處;

4、在編譯和調(diào)試的過(guò)程中,由進(jìn)一步加強(qiáng)了自己編程和改錯(cuò)的能力,通過(guò)研究這方面的

課題,可以更深刻地理解交通信號(hào)燈的整個(gè)過(guò)程,同時(shí)也加強(qiáng)了嵌入式學(xué)習(xí)的技巧。由

于時(shí)間的關(guān)系,只能做到這些功能,我知道想要實(shí)現(xiàn)功能更強(qiáng)大的交通信號(hào)燈,還有大

量的工作要做,希望以后還可以進(jìn)一步接觸此類設(shè)計(jì)。



評(píng)分

參與人數(shù) 4黑幣 +15 收起 理由
jscsd226 + 5 贊一個(gè)!
YHH(haoge) + 2 淡定
123lifei + 5 贊一個(gè)!
a570477522 + 3 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏18 分享淘帖 頂13 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:218480 發(fā)表于 2017-7-10 14:01 | 只看該作者
厲害 不錯(cuò),攢個(gè)
回復(fù)

使用道具 舉報(bào)

板凳
ID:307765 發(fā)表于 2018-4-14 08:57 | 只看該作者
led.h和time是怎么配置的?
回復(fù)

使用道具 舉報(bào)

地板
ID:256553 發(fā)表于 2018-5-27 22:04 | 只看該作者
有沒(méi)有完整的程序及電路圖做為參考
回復(fù)

使用道具 舉報(bào)

5#
ID:242804 發(fā)表于 2018-6-6 15:42 | 只看該作者
很不錯(cuò),要是能夠分享出程序一起學(xué)習(xí)就更好
回復(fù)

使用道具 舉報(bào)

6#
ID:460382 發(fā)表于 2019-1-2 19:48 | 只看該作者
很棒 很給力
回復(fù)

使用道具 舉報(bào)

7#
ID:564604 發(fā)表于 2019-6-17 15:20 | 只看該作者
不知道有沒(méi)有完整代碼
回復(fù)

使用道具 舉報(bào)

8#
ID:573727 發(fā)表于 2019-6-28 14:31 | 只看該作者
學(xué)習(xí)了。。。。。
回復(fù)

使用道具 舉報(bào)

9#
ID:586108 發(fā)表于 2019-7-18 10:56 | 只看該作者
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

10#
ID:605812 發(fā)表于 2019-8-31 15:07 | 只看該作者

贊一個(gè),很實(shí)用
回復(fù)

使用道具 舉報(bào)

11#
ID:272485 發(fā)表于 2019-10-21 19:31 | 只看該作者
謝謝了
回復(fù)

使用道具 舉報(bào)

12#
ID:323384 發(fā)表于 2019-10-22 13:12 | 只看該作者
謝謝你的分享,剛好用到這些知識(shí)!
回復(fù)

使用道具 舉報(bào)

13#
ID:663385 發(fā)表于 2019-12-13 17:07 | 只看該作者
大佬。太厲害了
回復(fù)

使用道具 舉報(bào)

14#
ID:666560 發(fā)表于 2019-12-17 19:26 | 只看該作者
贊一個(gè)!很棒呦!有完整的程序代碼就更好了!
回復(fù)

使用道具 舉報(bào)

15#
ID:780603 發(fā)表于 2020-6-16 08:39 | 只看該作者
贊!要是有仿真圖就好了 能看得更明白
回復(fù)

使用道具 舉報(bào)

16#
ID:384904 發(fā)表于 2020-6-17 21:42 | 只看該作者
厲害 不錯(cuò),攢個(gè)
回復(fù)

使用道具 舉報(bào)

17#
ID:783233 發(fā)表于 2020-6-18 14:54 | 只看該作者
膩害
回復(fù)

使用道具 舉報(bào)

18#
ID:785397 發(fā)表于 2020-6-20 22:12 | 只看該作者
這個(gè)很好,路人 甲學(xué)習(xí)了。
回復(fù)

使用道具 舉報(bào)

19#
ID:797298 發(fā)表于 2020-7-4 17:45 | 只看該作者
有沒(méi)有仿真圖啊
回復(fù)

使用道具 舉報(bào)

20#
ID:796954 發(fā)表于 2020-7-7 08:11 來(lái)自手機(jī) | 只看該作者
請(qǐng)問(wèn)文檔里有proteus仿真圖嗎,有源程序嗎
回復(fù)

使用道具 舉報(bào)

21#
ID:798899 發(fā)表于 2020-7-7 10:37 | 只看該作者
請(qǐng)問(wèn)這個(gè)配置底層文件怎么搞的
回復(fù)

使用道具 舉報(bào)

22#
ID:831026 發(fā)表于 2020-12-26 15:23 | 只看該作者
樓主,有程序嗎?
回復(fù)

使用道具 舉報(bào)

23#
ID:864872 發(fā)表于 2021-1-3 21:36 | 只看該作者
word?何用?
回復(fù)

使用道具 舉報(bào)

24#
ID:864872 發(fā)表于 2021-1-3 21:37 | 只看該作者
lyln 發(fā)表于 2020-7-7 08:11
請(qǐng)問(wèn)文檔里有proteus仿真圖嗎,有源程序嗎

撒都沒(méi)有就一word
回復(fù)

使用道具 舉報(bào)

25#
ID:988813 發(fā)表于 2021-12-6 20:07 | 只看該作者
很詳細(xì)的文件,非常感謝
回復(fù)

使用道具 舉報(bào)

26#
ID:1009935 發(fā)表于 2022-3-13 15:55 | 只看該作者
有沒(méi)有車流量檢測(cè)功能
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表