帶數(shù)碼管的交通指示燈系統(tǒng)設(shè)計._第1頁
帶數(shù)碼管的交通指示燈系統(tǒng)設(shè)計._第2頁
帶數(shù)碼管的交通指示燈系統(tǒng)設(shè)計._第3頁
帶數(shù)碼管的交通指示燈系統(tǒng)設(shè)計._第4頁
帶數(shù)碼管的交通指示燈系統(tǒng)設(shè)計._第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、期末大作業(yè) 題 目: 帶數(shù)碼管的交通指示燈系統(tǒng)設(shè)計 院(系): 物聯(lián)網(wǎng)工程學院 專 業(yè): 計算機科學與技術(shù) 班 級: 計科1105班 姓 名: 學 號: 03041105 指導老師: 莊春興 設(shè)計時間: 13-14 學年 2 學期 2014年5月目錄0 引言21 設(shè)計原理31.1 交通信號燈的工作原理31.2 S3C2440-GPIO介紹31.2.1 GPxCON寄存器41.2.2 GPxDAT寄存器41.2.3 GPxUP寄存器41.3 帶數(shù)碼管的交通信號燈設(shè)計42 設(shè)計步驟42.1 設(shè)計思路42.2 設(shè)計框圖52.3顯示模塊62.4刷新與延時模塊73 實驗結(jié)果及結(jié)果分析73.1實驗代碼73

2、.2實驗步驟113.3結(jié)果分析114 心得體會12參考文獻120 引言 隨著科學技術(shù)發(fā)展的日新日異,ARM嵌入式系統(tǒng)1已經(jīng)成為當今計算機應用中空前活躍的領(lǐng)域,在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握嵌入式的開發(fā)技術(shù)是十分重要的。本文硬件設(shè)計,實現(xiàn)了利用S3C2440芯片來完成帶數(shù)碼管的交通指示燈設(shè)計2,培養(yǎng)自己綜合運用所學知識、獨立分析和解決實際問題的能力,培養(yǎng)創(chuàng)新意識和創(chuàng)新能力,并獲得科學研究的基礎(chǔ)訓練,加深對ARM芯片的了解;熟悉ARM芯片各個引腳的功能,工作方式,計數(shù)/定時,I/O口,中斷等相關(guān)原理,鞏固學習嵌入式的相關(guān)內(nèi)容知識。學習LED顯示控制方法并掌握基于ARM

3、開發(fā)板對I/O編程的方法3。通過實驗測試可以證明本文的設(shè)計原理和設(shè)計步驟都是正確的。1 設(shè)計原理1.1 交通信號燈的工作原理 一般情況下,紅綠燈設(shè)在十字路口,或在多干道的交叉口上,目的是為了調(diào)整交叉口的交通秩序使各干道來往車輛能夠有條不紊地行駛,否則將造成意想不到的嚴重后果。當然在交叉口設(shè)置合理的紅綠燈后,也可以大大減少交通管理部門的人力、屋里。 交叉口交通信號等的基本作用:紅燈亮表示車輛、行人禁止通行,綠燈亮表示車輛、行人可以通行,綠燈轉(zhuǎn)換成紅燈前幾秒,可用黃燈亮來暗示駕駛員或行人即將禁止通行。該系統(tǒng)的屏幕時間顯示用倒計時方式表示紅綠燈的切換時間,時間顯示其的作用是協(xié)助紅綠燈工作,跟隨紅、綠

4、燈反復地進行切換。目的是為了使駕駛員和行人能夠看見紅綠燈亮的時間還剩幾秒,以便停車線以內(nèi)的駕駛員和行人能夠更清楚地知道此時該繼續(xù)通行或減速,才不會使駕駛員盲目地加速或減速停車而阻礙另一干道車輛或行人的通行,從而可以提高交叉口車輛及行人的流通率,當然也可以減少事故的發(fā)生,為交通安全提供保障。 交通信號燈的工作原理:當東西組紅燈亮綠燈滅時,南北組就會綠燈亮紅燈滅。對東西組或南北組而言,每當綠燈亮轉(zhuǎn)換成紅燈亮前幾秒(具體時間視實際情況而定)黃燈亮,當綠燈滅時黃燈也同時熄滅。1.2 S3C2440-GPIO介紹 GPIO,通用輸入輸出(General Purpose I/O)的簡稱4,其引腳可以供編程

5、使用。嵌入式系統(tǒng)中常常有數(shù)量眾多,但是結(jié)構(gòu)卻比較簡單的外部設(shè)備,對這些設(shè)備的控制,有時只需要一位控制信號就夠了,即只需要開/關(guān)兩種狀態(tài)就夠了,比如燈亮與滅。對這些設(shè)備的控制,使用傳統(tǒng)的串行口和并行口都不合適。所以在微控制器芯片上一般都會提供一個“通用可編程I/O接口”,即GPIO。 S3C2440有130個GPIO口,分為A到J共9組:GPA、GPB、GPC.GPJ。通過設(shè)置相應寄存器,可以選擇某個GPIO口是用于輸入、輸出還是其他特殊功能。例如可以設(shè)置GPH6作為一般的輸入、輸出端口,或者用于串口。每組GPIO(GPAGPJ),都可以通過3個寄存器來控制與訪問,這3個寄存器分別為:GPxCO

6、N:GPIO配置寄存器、GPxDAT:GPIO數(shù)據(jù)寄存器、GPxUP:上拉電阻控制寄存器(其中x為:A、B.H、J)。1.2.1 GPxCON寄存器 從寄存器的名字可以看出它屬于配置(Confugure)寄存器選擇GPIO口的功能。其中PORTA與PORTBPORTJ在功能選擇方面有所不同。GPACON中每一位對應一個IO口(共23個)。當某位為0時,相應的IO為輸出;當某位被置為1時,相應的引腳為地址線或用于地址控制。PORTBPORTJ在寄存器操作方面完全相同,GPxCON中每兩位控制一個引腳:00表示輸入,01表示輸出,10表示特殊功能,11保留不用。1.2.2 GPxDAT寄存器 GP

7、xDAT寄存器用于讀/寫引腳:當引腳被設(shè)置為輸入時,讀此寄存器可知相應引腳電瓶狀態(tài)是高還是低;當引腳被設(shè)為輸出時,寫此寄存器相應的位可令此引腳輸出高電平或低電平。1.2.3 GPxUP寄存器 GPxUP寄存器某位為1時,相應引腳無內(nèi)部上拉電阻;為0時相應的引腳使用內(nèi)部上拉電阻。(上拉電阻:由于管腳懸空比較容易受到外界的電磁干擾,因此通過一個電阻來將此管腳與高電平相連,讓其固定在高電平,這樣的電阻稱之為上拉電阻。)1.3 帶數(shù)碼管的交通信號燈設(shè)計 本文通過利用ARM芯片模擬來實現(xiàn)帶數(shù)碼管的交通信號燈設(shè)計。用ARM實驗箱的LED和七段數(shù)碼管模擬十字路口的交通燈。將LED的數(shù)碼管分成兩組,分別代表一

8、個路口的東西向和南北向紅黃綠三色交通燈。數(shù)碼管計時顯示剩余時間,綠燈顯示27秒,然后黃燈顯示3秒,紅燈顯示30秒。南北與東西向的交通燈協(xié)同工作,循環(huán)顯示,一個周期一分鐘。一個復位按鈕,按一下雙向黃燈閃爍,計時20秒后恢復到初始狀態(tài),然后繼續(xù)工作5。2 設(shè)計步驟2.1 設(shè)計思路本文是利用S3C2440ARM芯片來實現(xiàn)帶數(shù)碼管的交通信號燈設(shè)計。 在實現(xiàn)紅、綠、黃燈的循環(huán)控制上,通過使用紅、黃、綠三種不同顏色的LED燈實現(xiàn)此功能。南北方向綠、黃、紅三個燈依次接在P0.20、P0.21、P0.22上,東西方向的綠、黃、紅三個燈依次接在P0.16、P0.17、P0.18上,用軟件控制燈的亮與滅來控制車輛

9、和行人的通行。在實現(xiàn)用數(shù)碼管顯示倒計時的過程中,可以利用動態(tài)顯示或靜態(tài)顯示,串行并出或者并行并出實現(xiàn)。采用兩位數(shù)碼顯示器顯示南北方向時間,采用兩位數(shù)碼顯示器顯示東西方向時間,交通燈控制器工作流程如圖1所示:南北方向綠燈亮27秒,東西方向紅燈亮27秒南北方向黃燈亮3秒,東西方向紅燈亮3秒南北方向紅燈亮27秒,東西方向綠燈亮27秒南北方向紅燈亮3秒,東西方向黃燈亮3秒 圖1 交通燈控制器工作流程圖2.2 設(shè)計框圖 本設(shè)計采用S3C2440作為系統(tǒng)的主控芯片,控制交通燈的循環(huán)點亮時間,并采用倒計時顯示?;究驁D是主要有三部分組成:S3C2440最小系統(tǒng)、交通燈循環(huán)模塊、倒計時顯示模塊。其系統(tǒng)框圖如圖

10、2所示:倒計時顯示模塊S3C2440最小系統(tǒng) 交通燈循環(huán)模塊 圖2 系統(tǒng)框圖 其主程序流程圖如圖3所示:開始初始化東西南北方向黃色交通燈顯示東西南北方向紅綠交通燈顯示東西南北方向紅綠交通燈交替顯示圖3 主程序流程圖2.3顯示模塊采用共陽極七段數(shù)碼管顯示交通燈倒計時,東西、南北兩個方向各用兩個數(shù)碼管顯示時間。設(shè)置紅綠燈時間為27秒,當南北方向綠燈倒計時為0后,黃燈倒計時延時3秒。3秒后,南北方向交通燈變?yōu)榧t燈,而東西方向交通燈變?yōu)榫G燈,倒計時3秒整個交通燈倒計時用循環(huán)模塊無限制循環(huán)。南北方向綠、黃、紅三個燈依次接在P0.20、P0.21、P0.22上,東西方向的綠、黃、紅三個燈依次接在P0.16

11、、P0.17、P0.18上,P0.0-P0.7引腳連接數(shù)碼管段選位,P0.12-P0.15引腳連接數(shù)碼管位選位。本設(shè)計采用共陽七段數(shù)碼管,故有效電平為低電平,根據(jù)引腳0XFFBFFFFF或者0XFFFBFFFF代表紅燈亮,其中B(1011);0XFFEFFFFF或者0XFFFEFFFF代表紅燈亮,其中E(1110);0XFFDFFFFF或者0XFFFDFFFF代表紅燈亮,其中D(1101)。通過I00PIN=(I00PIN&0XFFFF0FFF)(weiweishu<<8),將I00的32位接口按位與“FFFF0FFF”,把P0.12-P0.15端口清零,同時將位碼左移8位

12、,因為在開始的位碼數(shù)組中定義的值是在4-7位,但是在芯片上接口在12-15位,所以需要左移8位。I00PIN=(I00PIN&0XFFFFFF00)(LED_numshu<<8)將P0.0-P0.7變?yōu)榈碗娖?,芯片接口就是在最?位,所以不用左移。其交通燈顯示情況如下表所示:南北方向綠燈27秒黃燈3秒紅燈27秒紅燈3秒東西方向紅燈27秒紅燈3秒綠燈27秒黃燈3秒2.4刷新與延時模塊延時子程序可以消除抖動,防止因硬件不穩(wěn)定而造成顯示不穩(wěn)定。3 實驗結(jié)果及結(jié)果分析3.1實驗代碼#include ".ucos-iiincludes.h"#include &qu

13、ot;.ucos-iiaddosaddition.h#include ".incdrv.h /設(shè)備驅(qū)動#include “string.h”#include “.incexio.h” /系統(tǒng)輸入輸出/定義數(shù)碼管段碼Unsigned charLed =ox3f, 0x06,0x5b, ox4e, 0x66,0x6d,Ox7d, x07, 0x7f, 0x6f, ox77, 0x39, 0x5e,0x79,0x71;/定義全局變量BOOLEAN Is_ Working; /工作狀態(tài)int Count; /計時器void onKey(int nkey,int fnkey); /鍵盤消息處理

14、函數(shù)聲明/任務(wù)定義/OS_STK Main_StackSTACKSIZE*8; /任務(wù)堆棧void key_Task(void *Id):#define key_ Task_ Prio 12 /定義任務(wù)優(yōu)先級OS_STK Led_Flash_StackSTACKSIZE; /任務(wù)堆棧Void Led_Flash_Task(void *Id);#define Led_Flash_Prio 60OS_STK Display_Task_StackSTACKSIEZ*8 /任務(wù)堆棧Void Display_Task(void *Id);#define Display_Task_Prio 52/已經(jīng)定義

15、的任務(wù)/#define SYS_ Task_ Prio 1#define Touch_ Screen_ Task_ Prio 9#define key_Task_ Prio 12#define key_SCan_ Task_PriO 58#define Lcd_Fresh_prio 59#define Led_Flash_ Prio 60/事件定義/OS_EVENT *Nand_ Rw_Sem; /讀寫控制權(quán)信號量OS_EVENT *Uart_ Rw_Sem; /uart讀寫控制信號量Void Led_ Flash_Task(void *Id) /指示ROTS處于正常工作中 ursigned

16、char led_state; Uart_printf(0,”n10”); For(;) /消息死循環(huán) Led_Display(led_state);/顯示LED燈狀態(tài) 1ed_state = Ied_state; OSTime(250); /時間設(shè)置void initOSGUI() /初始化圖形界面initOSMeasage( ):initOSList( );initOSDC( );initOSCtrl();initOSFile();Int Main(int argc, char *argv) ARMTargetInit( ); /系統(tǒng)硬件初始化 OSInit( ); /操作系統(tǒng)初始化 LC

17、D_Init(); /初始化LCD模塊 LEC_printf(”LCD初始化完成n”); LoadFont( ); /裝載字庫 LoadConfigSys(); /裝載config.sys配置文件 LCD_Printf(“Create task on Ucos_ii.n”); /顯示液晶屏信息/建立任務(wù)OSTaskCreate(key_Task, (void *)0, (OS_STK*)&key_stackSATCKSIZE*8-1, key_Task_prio);/建立任務(wù)OSTaskCreate(Led_Flash_Task, (void *)0, (OS_STK*)&Le

18、d_Flash_stackSATCKSIZE*8-1, Led_Flash_prio);/建立任務(wù)OSTaskCreate(Led_Task, (void *)0, (OS_STK*)&Led_stackSATCKSIZE*8-1, Led_Task_prio);/建立任務(wù)OSTaskCreate(Display_Task, (void *)0, (OS_STK*)&Display_Task_stackSATCKSIZE*8-1, Display_Task_prio);/添加任務(wù)OSAddTask_Init();/輸出LCD_Printf(”starting ucos-IIn”

19、);LCD_Printf(”entering graph moden”);LCE_ChangeMode(DspGraMode);/設(shè)置液晶屏顯示為圖形模式InitOSGUI();/初始化圖形界面InitRtc();/初始化系統(tǒng)時鐘Nand_Rw_Sem = OSSemCreate(1)/創(chuàng)建Nand-Flash讀寫控制權(quán)旗語,初值為1,滿足互斥條件OSStart();/啟動操作系統(tǒng)void key_ Task(void*Id)/創(chuàng)建并發(fā)送到系統(tǒng)的任務(wù)隊列POSMSG pMsg = 0; /創(chuàng)建消息結(jié)構(gòu)Is_working = TURE; /工作狀態(tài)For(; ;) /死循環(huán)pMsg = Wai

20、tMessage(0); /等待消息switch(pMsg->Message)/比較Case OSM_KEY: Onkey(pMsg->wparam, pMsg->LParam);/鍵盤消息響應 Break;OSTimDly(1000);/修改任務(wù)時間參數(shù)DeleteMessage(pMsg);/刪除消息void LED_Taskvoid*id)/創(chuàng)建數(shù)碼管任務(wù)隊列 int eastwest = 1; /正為東西綠燈亮,負為難背綠燈亮 Count = 30; /紅綠燈備亮30秒 for(;) /死循環(huán)if(Count>0)if(Is_ working = =TRUE)

21、/東西通行If(eastwest>0) If(count<4) IO0DIR=0XEB; /東西綠燈,南北黃燈 Else IO0DIR=0xe7; /東西綠燈,南北紅燈Else/南北通行If(count<4) IO0DIR=0XBE; /東西黃燈,南北綠燈Else IO0DIR = 0x7e; /東西紅燈,南北綠燈OSTimeDly(1500);/修改任務(wù)時間參數(shù)ElseIO0DIR=0xbb; /黃燈亮OSTimeDly(500);/修改任務(wù)時間參數(shù)IO0DIR=Oxff; /黃燈滅OSTimeDly(1000);/修改任務(wù)時間參數(shù)Count-; e1seIs_ worki

22、ng = TURE /工作狀態(tài)Eastwest = -eastwest;Count=30;void onKey(int nkey,int fnkey) /鍵盤消息處理函數(shù)(If(nkey = =15)Is_ working=FALSE; /工作狀態(tài)為復位狀態(tài)Count=20; /計時設(shè)為20秒3.2實驗步驟1.在ADS1.2中,使用已經(jīng)創(chuàng)建好的模板,新建一個項目traffic。把操作系統(tǒng)所需要的頭文件和庫文件加入工程中。2.把交通燈文件夾中的C語言源文件加入。3.打開main.c文件,在Main( )數(shù)中創(chuàng)建3個任務(wù):(1) key_Task負責接收鍵盤消息,執(zhí)行工作狀態(tài)的控制;(2) LED

23、_Task負責發(fā)光二極管的顯示,同時負責每秒將Count時間計數(shù)器減1;(3) Display_Task負責數(shù)碼管的動態(tài)顯示,顯示Count剩余時間。全局變量Count用來記錄剩余時間;全局變量Is_working用來控制工作狀態(tài)。LED_Task任務(wù)局部變量eastwest用來記錄當前通行方向,1為東西向,-1為南北向。4.在key_Task任務(wù)中添加代碼,主要任務(wù)是初始化一些變量,啟動消息循環(huán),等待鍵盤掃描任務(wù)發(fā)來的消息(OSM_ KEY),并調(diào)用onKey函數(shù)進行處理。5.完成交通燈控制任務(wù)和數(shù)碼管顯示任務(wù)。數(shù)碼管顯示任務(wù)交替顯示計時的十位和個位。交通燈控制任務(wù)實現(xiàn)通行方向的控制。6.用ADS1.2編譯、下載并調(diào)試上述程序,檢查運行結(jié)果。7.生成*.bin文件,通過USB下載到嵌入式開發(fā)板中,運行并檢查輸出結(jié)果。3.3結(jié)果分析 代碼成功運行后可以觀察到LED的數(shù)碼管被分成了兩組,它們分別代表一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論