|
通信與信息工程學(xué)院
/ 學(xué)年第 學(xué)期
軟件設(shè)計(jì) 實(shí)驗(yàn)報(bào)告
模 塊 名 稱 AVR單片機(jī)軟件設(shè)計(jì)(proteus)
專 業(yè)
學(xué) 生 班 級(jí)
學(xué) 生 學(xué) 號(hào)
學(xué) 生 姓 名
指 導(dǎo) 教 師
設(shè)計(jì)題目
基于LED數(shù)碼管顯示的交通燈控制
任務(wù)要求
基本要求:
1.用2個(gè)7段數(shù)碼管或2片LCD液晶顯示屏分別倒計(jì)時(shí)東西及南北方向的通行及等待時(shí)間。
2.用兩組各3個(gè)發(fā)光二極管模擬兩個(gè)方向的紅、黃、綠交通燈的顯示。
3.可任意調(diào)節(jié)通行時(shí)長(zhǎng)。
4.要求對(duì)東西、南北直行方向的交通燈進(jìn)行控制,南北方向互相配合,在通行方向的最后5秒這樣處理:綠燈閃爍3秒后滅,最后2秒黃燈亮。禁行方向則直接由紅燈變?yōu)榫G燈。
發(fā)揮部分:
1.設(shè)計(jì)三車道十字路口信號(hào)燈(左轉(zhuǎn)、直行、右轉(zhuǎn)),右轉(zhuǎn)燈常亮,直行和左轉(zhuǎn)分時(shí)通行。
2.用定時(shí)器而不是普通的延時(shí)程序控制顯示時(shí)間
實(shí)驗(yàn)設(shè)備及軟件
CVAVR編程軟件、PROTUES 仿真軟件
同組人員學(xué)號(hào)及姓名
一人一組,無同組成員
參考文獻(xiàn)
[1]劉文濤.單片機(jī)應(yīng)用開發(fā)實(shí)例.北京:清華大學(xué)出版社,2005年9月:19~113
[2]周寶善.經(jīng)典電子設(shè)計(jì)與實(shí)踐DIY.北京:人民郵電出版社,2008年8月:7~8,61~92
[3] 寧武,唐曉宇,閆曉金.電子設(shè)計(jì)競(jìng)賽技能指導(dǎo).北京:電子工業(yè)出版社,2006年:128~156
[4] 胡偉,季曉衡.單片機(jī)c程序設(shè)計(jì)及應(yīng)用.北京:人民郵電出版社,2003年7月:67~135
[5] 童詩(shī)白,華成英.模擬電子技術(shù)基礎(chǔ).北京:高等教育出版社,2001年1月:501~550
[6] 張靖武, 周靈彬.單片機(jī)原理應(yīng)用與PROTEUS仿真.北京:電子工業(yè)出版社,2008年:28~60
[7] 張超琦,鐘明哲.單片機(jī)原理及實(shí)例.實(shí)踐篇.上海:上海交通大學(xué)出版社,2007年:110~158
[8]潘超群.單片機(jī)控制技術(shù)在通信中的應(yīng)用:MCS-51.北京:電子工業(yè)出版社,2008年:200~228
[9]陳濤.單片機(jī)原理及C51程序設(shè)計(jì).北京:機(jī)械工業(yè)出版社,2008年:20~66
AVR單片機(jī)軟件設(shè)計(jì)(proteus)報(bào)告
摘 要
本文介紹了交通燈系統(tǒng)的設(shè)計(jì)。軟件部分是基于ATMEGA128單片機(jī)的CVAVR軟件系統(tǒng)。本系統(tǒng)利用單片機(jī)的定時(shí)器產(chǎn)生秒信號(hào),控制十字路口的紅綠黃燈交替點(diǎn)亮和熄滅,并且用2位共陽(yáng)數(shù)碼管顯示十字路口兩個(gè)方向的剩余時(shí)間。本系統(tǒng)可以按照設(shè)定程序在PROTUES仿真軟件中自行運(yùn)行?蓪(shí)現(xiàn)基本交通燈功能,系統(tǒng)實(shí)用性強(qiáng)、操作簡(jiǎn)單。
關(guān)鍵詞:?jiǎn)纹瑱C(jī)最小系統(tǒng) ATMEGA128 紅綠燈控制 仿真
一、總體設(shè)計(jì)原理及思路
(一)整體思路
本系統(tǒng)的整體框圖由ATMEGA128構(gòu)成主控芯片,主要是實(shí)現(xiàn)各個(gè)功能模塊之間功能交互。
本系統(tǒng)包括紅黃綠LED燈顯示模塊,LED數(shù)碼管顯示模塊。
LED數(shù)碼管顯示模塊用來顯示被點(diǎn)亮的指示燈還將點(diǎn)亮多久;LED發(fā)光二極管模塊用于指示該方向的3種狀態(tài):通行(綠燈亮)、暫緩?fù)ㄐ校S燈亮)和禁止通行(紅燈亮)。
系統(tǒng)結(jié)構(gòu)框圖如圖所示:
(圖) 系統(tǒng)結(jié)構(gòu)框圖
紅綠燈控制器的總體的設(shè)計(jì)如下圖所示:
(圖) 紅綠燈控制器總體設(shè)計(jì)圖
從上圖中可以看出整個(gè)設(shè)計(jì)圖。由CVAVR單片機(jī)最小系統(tǒng)模塊來控制紅綠黃發(fā)光二極管組合模塊與LED數(shù)碼管動(dòng)態(tài)顯示模塊的聯(lián)合動(dòng)態(tài)顯示,可通過代碼的編寫任意改變通行時(shí)間的長(zhǎng)短和紅綠黃三種燈的交替。
(二)整體設(shè)計(jì)流程圖
二、各模塊設(shè)計(jì)思路及原理圖
n 單片機(jī)最小系統(tǒng)
ATMEGA128是ATMEL公司的8位系列單片機(jī)的最高配置的一款單片機(jī),穩(wěn)定性極高,應(yīng)用極其廣泛。它是高性能、低功耗的 AVR 8 位微處理器,具有先進(jìn)的 RISC 結(jié)構(gòu) 。它工作于16 MHz 時(shí)性能高達(dá)16 MIPS,具有只需兩個(gè)時(shí)鐘周期的硬件乘法器。它有128K 字節(jié)的系統(tǒng)內(nèi)可編程Flash,4K字節(jié)的EEPROM,4K 字節(jié)的內(nèi)部SRAM,多達(dá)64K 字節(jié)的優(yōu)化的外部存儲(chǔ)器空間。
它有兩個(gè)具有獨(dú)立的預(yù)分頻器和比較器功能的8 位定時(shí)器/ 計(jì)數(shù)器,兩個(gè)具有預(yù)分頻器、比較功能和捕捉功能的16 位定時(shí)器/ 計(jì)數(shù)器,具有獨(dú)立預(yù)分頻器的實(shí)時(shí)時(shí)鐘計(jì)數(shù)器,兩路8 位PWM,6路分辨率可編程(1 到16 位)的PWM,輸出比較調(diào)制器,8路10 位ADC,2 個(gè)具有可編程增益(1x,10x, 或200x)的差分通道。它還具有6種睡眠模式: 空閑模式、ADC 噪聲抑制模式、省電模式、掉電模式、Standby 模式以及擴(kuò)展的Standby 模式。
單片機(jī)最小系統(tǒng)如下圖所示:
(圖) 單片機(jī)最小系統(tǒng)圖
n LED數(shù)碼管顯示電路模塊
按發(fā)光二極管單元連接方式可分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管,共陽(yáng)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。
本系統(tǒng)的數(shù)碼管采用的是兩位共陽(yáng)數(shù)碼管。
數(shù)碼管如下圖所示:
(圖) LED數(shù)碼管顯示模塊圖
n LED燈顯示模塊
LED燈采用的是共陽(yáng)接法,即所有的LED管陽(yáng)級(jí)通過一個(gè)限流電阻上拉到5V電源,所有的陰級(jí)接到單片機(jī)的相應(yīng)引腳。只要該I/O口置低,該燈就能點(diǎn)亮。 本系統(tǒng)出于節(jié)省資源,左轉(zhuǎn)燈只用了紅、綠兩色,直行燈用了紅、綠、黃三色,而右轉(zhuǎn)燈由于要常綠,因此只用了一個(gè)綠燈。下圖只給出了東西南北方向重其中任意的一個(gè)。
LED燈顯示模塊如下圖所示:
(圖) LED燈顯示模塊圖
三、軟件設(shè)計(jì)
(一)各模塊設(shè)計(jì)思路及流程圖
n 主程序模塊
主要完成定時(shí)器T0的設(shè)置,綠、黃燈的初值設(shè)定以及各子程序的調(diào)用。
主程序的流程圖如下圖所示:
(圖)主程序的流程圖
n LED數(shù)碼管顯示模塊
LED數(shù)碼管顯示模塊包括南北方向LED顯示、東西方向LED顯示。
LED數(shù)碼管顯示模塊的程序流程圖如下圖所示:
(圖) LED顯示模塊程序流程圖
n LED燈顯示模塊
LED 燈的顯示及執(zhí)行流程主要是對(duì)I/O的高低電平的控制。
LED顯示模塊的程序流程圖如下圖所示:
(圖) LED顯示模塊程序流程圖
n 定時(shí)器0中斷模塊
定時(shí)器0主要通過計(jì)數(shù)產(chǎn)生1秒的定時(shí)時(shí)間,使LED數(shù)碼管按照每秒減1進(jìn)行倒計(jì)時(shí)。
定時(shí)器0中斷模塊的程序流程圖如下圖所示:
(圖) 定時(shí)器0中斷模塊程序流程圖
(二)關(guān)鍵代碼說明
Step1.以下是將計(jì)數(shù)數(shù)值轉(zhuǎn)換成LED 能顯示的兩個(gè)數(shù)字的程序代碼。將一個(gè)兩位十進(jìn)制數(shù)通過number0 = a/10;number1 = a%10; 轉(zhuǎn)換成兩個(gè)數(shù)字并顯示
void led_play(unsigned char a)
{
number0 = a/10;
number1 = a%10;
PORTD = 0x00;
PORTD = wei[0];
PORTC = table[number0];
delay_ms(5);
PORTD = 0x00;
PORTD = wei[1];
PORTC = table[number1];
delay_ms(5);
}
Step2.以下是計(jì)數(shù)器0的中斷服務(wù)程序。由于初始化的參數(shù)設(shè)置,使程序1ms進(jìn)入一次中斷函數(shù),等到進(jìn)入第1000次時(shí)代表1s 計(jì)時(shí)時(shí)間到。1s到了就講time_counter清零,并將time_1s_os置1,便于主函數(shù)每1s 執(zhí)行一次顯示函數(shù)。
interrupt [TIM0_COMP] voidtimer0_comp_isr(void)
{
if(++time_counter==1000)
{
time_counter = 0;
time_1s_ok = 1;
}
}
Step3.以下是主函數(shù)里的while(1)函數(shù)。首先判斷是否到達(dá)了1s(即檢驗(yàn)time_1s_ok是否為1,若為1,則到達(dá)了1s)。然后將time_1s_ok 清零,將計(jì)數(shù)值num 自減1,并將num 的值送給LED 數(shù)碼管顯示。接著判斷mode 為1 還是0。如果為0,則是南北方向通行,否則則是東西方向通行。我在函數(shù)中初始化計(jì)數(shù)初值num為30。假設(shè)mode 為0,那么如果num<=30&&num>21,那么使南北方向的左轉(zhuǎn)方向通行,即使南北方向的左轉(zhuǎn)燈為綠燈;同時(shí)南北方向的直行方向?yàn)榧t燈;而右轉(zhuǎn)燈無論南北還是東西方向一直都是通行的,即為綠燈。如果num<=21&&num>6,那么南北方向的直行方向?yàn)榫G燈,左轉(zhuǎn)禁止通行了。如果num<=6&num>3,南北方向的綠燈閃爍三秒。如果num<=3&&num>1,則南北方向的直行方向?yàn)辄S燈。在mode = 0的這30s 內(nèi),東西方向的左轉(zhuǎn)和直行方向都是禁止的。mode=1時(shí),則南北和東西方向的情況完全相反,這里就不贅述了。
while (1)
{
led_play(num);
if(time_1s_ok)
{
time_1s_ok = 0;
if(!mode)
{
PORTA=0x2d; //使東西方向的左轉(zhuǎn)和直行燈都是紅燈
if(num<=30&&num>21)
PORTB=0x1d;
if(num<=21&&num>6)
PORTB=0x2b;
if(num<=6&num>3) //南北方向綠燈閃爍
{
PORTB=0x2f;
for(i=0;i<20;i++)
{
led_play(num);
}
PORTB=0x2b;
}
if(num<=3&&num>1)
PORTB=0x2e;
if(num<=1)
{
mode=~mode;
num=31;
}
}
if(mode)
{
PORTB=0x2d;
if(num<=30&&num>21)
PORTA=0x1d;
if(num<=21&&num>6)
PORTA=0x2b;
if(num<=6&num>3)
{
PORTA=0x2f;
for(i=0;i<20;i++)
{
led_play(num);
}
PORTA=0x2b;
}
if(num<=3&&num>1)
PORTA=0x2e;
if(num<=1)
{
mode=~mode;
num=31;
}
}
num--;
}
}
四、系統(tǒng)測(cè)試
在PROTUES軟件中畫好了仿真圖后,將CVAVR中寫好的代碼放入ATMEGA16芯片中,然后啟動(dòng)。情況如下:
mode=0的30秒內(nèi):
21<num<=30時(shí),南北方向的左轉(zhuǎn)、直行、右轉(zhuǎn)分別為綠燈、紅燈、綠燈;東西方向的左轉(zhuǎn)、直行、右轉(zhuǎn)分別為紅燈、紅燈、綠燈。
6<num<=21時(shí),南北方向的左轉(zhuǎn)、直行、右轉(zhuǎn)分別為紅燈、綠燈、綠燈;東西方向的左轉(zhuǎn)、直行、右轉(zhuǎn)分別為紅燈、紅燈、綠燈。
3<num<=6時(shí),南北方向的直行方向綠燈有閃爍。
1<num<=3時(shí),南北方向的直行方向黃燈亮。
mode=1的30秒內(nèi):
東西方向與南北方向與上述現(xiàn)象正好相反。
系統(tǒng)仿真出來的結(jié)果和實(shí)驗(yàn)的基礎(chǔ)要求及提高要求大致上符合,較好的完成了預(yù)期期望。
PS:仿真一開始led燈的顏色較淡,之后將串接的限流電阻阻值改小后就解決了這個(gè)問題。
五、實(shí)驗(yàn)心得
首先,從此次實(shí)驗(yàn)的完成成果——基于LED數(shù)碼管顯示的交通燈控制的角度來總結(jié),本次單片機(jī)課程設(shè)計(jì)的紅綠燈控制器結(jié)構(gòu)簡(jiǎn)單,操作方便,對(duì)優(yōu)化城市交通具有一定的意義。本設(shè)計(jì)將各任務(wù)進(jìn)行細(xì)分包裝,使各任務(wù)保持相對(duì)獨(dú)立;能有效改善程序結(jié)構(gòu),便于模塊化處理,使程序的可讀性、可維護(hù)性和可移植性都得到進(jìn)一步的提高。同時(shí)由于使用的是單片機(jī)作為核心的控制元件,使得電路的可靠性比較高,功能也比較強(qiáng)大而且可以隨時(shí)的更新系統(tǒng),進(jìn)行不同狀態(tài)的組合。總而言之,本次實(shí)驗(yàn)我努力完成了課程要求的基本部分和發(fā)揮部分,探索的內(nèi)容豐富、學(xué)習(xí)內(nèi)容非常充實(shí)。
其次,從我個(gè)人的收獲角度來說,在我學(xué)習(xí)AVR單片機(jī)之前我學(xué)過51單片機(jī),51單片機(jī)用起來簡(jiǎn)單,價(jià)錢也便宜,用于一些比較簡(jiǎn)單的控制還算可以,開發(fā)平臺(tái)相對(duì)單一,但是單片機(jī)應(yīng)用系統(tǒng)開發(fā)時(shí),首先遇到的問題就是存儲(chǔ)器的擴(kuò)展。因?yàn)?1單片機(jī)內(nèi)部的存儲(chǔ)器容量一般都比較小,因此,從單片機(jī)外部配置外部存儲(chǔ)器,包括程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,就成了應(yīng)用系統(tǒng)的重要工作之一。同時(shí)擴(kuò)展的同時(shí)又占用了I/O口,當(dāng)外部設(shè)備較多時(shí),原有的幾個(gè)內(nèi)部I/O接口就明顯不夠使用。所以,通過此次對(duì)AVR的學(xué)習(xí),讓我掌握了一種新的、功能更強(qiáng)大的單片機(jī),對(duì)我以后的實(shí)際應(yīng)用很有幫助。不僅如此,在這幾個(gè)禮拜的學(xué)習(xí)中,不斷的摸索激發(fā)了我對(duì)AVR的興趣,同時(shí)也鍛煉我的耐心和分析能力,解決一個(gè)個(gè)困難的過程我認(rèn)為是非常寶貴的,相信有了這次實(shí)驗(yàn)的經(jīng)歷,會(huì)對(duì)我今后各門學(xué)科的學(xué)習(xí)深有幫助,我覺得受益匪淺、收獲良多。
|
|