當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]設(shè)計(jì)一個(gè)基于單片機(jī)的交通燈信號(hào)控制器。已知東、西、南、北四個(gè)方向各有紅黃綠色三個(gè)燈,在東西方向有兩個(gè)數(shù)碼管,在南北方向也有兩個(gè)數(shù)碼管。要求交通燈按照表1進(jìn)行顯示和定時(shí)切換,并要求在數(shù)碼管上分別倒計(jì)時(shí)顯示

設(shè)計(jì)一個(gè)基于單片機(jī)的交通燈信號(hào)控制器。已知東、西、南、北四個(gè)方向各有紅黃綠色三個(gè)燈,在東西方向有兩個(gè)數(shù)碼管,在南北方向也有兩個(gè)數(shù)碼管。要求交通燈按照表1進(jìn)行顯示和定時(shí)切換,并要求在數(shù)碼管上分別倒計(jì)時(shí)顯示東西、南北方向各狀態(tài)的剩余時(shí)間。
表1 交通燈的狀態(tài)切換表

南北方向

 

 

東西方向

 

 

序號(hào)

 

 

狀態(tài)

 

 

序號(hào)

 

 

狀態(tài)

 

 

1

 

 

綠燈亮25秒,紅、黃燈滅

 

 

1

 

 

紅燈亮30秒,綠、黃燈滅

 

 

2

 

 

黃燈亮5秒,紅、綠燈滅

 

 

3

 

 

紅燈亮30秒,綠、黃燈滅

 

 

2

 

 

綠燈亮25秒,紅、黃燈滅

 

 

3

 

 

黃燈亮25秒,紅、綠燈滅

 

 

回到狀態(tài)1

 

 

回到狀態(tài)1

 

 

3.2.1模塊1:系統(tǒng)設(shè)計(jì)
(1)任務(wù)分析與整體設(shè)計(jì)思路
試題要求實(shí)現(xiàn)的功能主要包括計(jì)時(shí)功能、動(dòng)態(tài)掃描以及狀態(tài)的切換等幾部分。
計(jì)時(shí)功能:要實(shí)現(xiàn)計(jì)時(shí)功能則需要使用定時(shí)器來(lái)計(jì)時(shí),通過(guò)設(shè)置定時(shí)器的初始值來(lái)控制溢出中斷的時(shí)間間隔,再利用一個(gè)變量記錄定時(shí)器溢出的次數(shù),達(dá)到定時(shí)1秒中的功能。當(dāng)計(jì)時(shí)每到1秒鐘后,東西、南北信號(hào)燈各狀態(tài)的暫存剩余時(shí)間的變量減1。當(dāng)暫存剩余時(shí)間的變量減到0時(shí),切換到下一個(gè)狀態(tài),同時(shí)將下一個(gè)狀態(tài)的初始的倒計(jì)時(shí)值裝載到計(jì)時(shí)變量中。開(kāi)始下一個(gè)狀態(tài),如此循環(huán)重復(fù)執(zhí)行。
動(dòng)態(tài)掃描:需要使用4個(gè)數(shù)碼管分別顯示東西、南北的倒計(jì)時(shí)數(shù)字,將暫存各狀態(tài)剩余時(shí)間的數(shù)字從變量中提取出“十位”和“個(gè)位”,用動(dòng)態(tài)掃描的方式在數(shù)碼管中顯示。
整個(gè)程序依據(jù)定時(shí)器的溢出數(shù)來(lái)計(jì)時(shí),每計(jì)時(shí)1S則相應(yīng)狀態(tài)的剩余時(shí)間減1,一直減到0時(shí)觸發(fā)下一個(gè)狀態(tài)的開(kāi)始。
   (2)單片機(jī)型號(hào)及所需外圍器件型號(hào),單片機(jī)硬件電路原理圖

圖3-5 交通燈硬件電路原理圖
選用MCS51系列AT89S51單片機(jī)作為微控制器,選擇兩個(gè)四聯(lián)的共陰極數(shù)碼管組成8位顯示模塊,由于AT89S51單片機(jī)驅(qū)動(dòng)能力有限,采用兩片74HC244實(shí)現(xiàn)總線的驅(qū)動(dòng),一個(gè)74HC244完成共陰極數(shù)碼管位控線的控制和驅(qū)動(dòng),另一個(gè)74HC244完成數(shù)碼管的7段碼輸出,在7段碼輸出口上各串聯(lián)一個(gè)100歐姆的電阻對(duì)7段數(shù)碼管限流。用P3口的P3.0-P3.5完成發(fā)光二極管的控制,實(shí)現(xiàn)交通燈信號(hào)的顯示,每個(gè)發(fā)光二極管串聯(lián)500歐姆電阻起限流作用。硬件電路原理圖如圖3-5所示。
(3)程序設(shè)計(jì)思路,單片機(jī)資源分配以及程序流程
①單片機(jī)資源分配
單片機(jī)P3口的P3.0-P3.1引腳用作輸出,控制發(fā)光二極管的顯示。在計(jì)時(shí)模塊中,需要定義兩個(gè)數(shù)組變量(init_sn[3],init_ew[3])來(lái)存儲(chǔ)東西、南北兩個(gè)方向在不同狀態(tài)中倒計(jì)時(shí)的初始值,題目中每個(gè)方向的交通燈共有3種顯示狀態(tài),因此數(shù)組元素個(gè)數(shù)為3。還需要定義兩個(gè)變量( cnt_ sn, cnt_ ew)暫存東西、南北兩個(gè)方向的倒計(jì)時(shí)剩余時(shí)間。
    在狀態(tài)的切換中,為了明確當(dāng)前處于哪種狀態(tài),東西、南北方向各設(shè)置一個(gè)狀態(tài)變量(state_val_sn, state_val_ew),當(dāng)?shù)褂?jì)時(shí)的剩余時(shí)間到零時(shí),狀態(tài)變量增1,表示啟動(dòng)下一個(gè)狀態(tài),當(dāng)該變量增到3時(shí)變?yōu)?,回到序號(hào)為1的狀態(tài)。
 ②程序設(shè)計(jì)思路
在設(shè)計(jì)中,由于沒(méi)有鍵盤功能,因此只涉及定時(shí)計(jì)數(shù)和動(dòng)態(tài)掃描功能。主程序?qū)⒆兞砍跏蓟?br /> 后,設(shè)置單片機(jī)定時(shí)器和中斷特殊功能寄存器的初始值,將定時(shí)器T1的工作方式設(shè)置為8位自動(dòng)
裝載模式,定時(shí)器每隔250us產(chǎn)生一次溢出。
在初始化變量與寄存器后,主程序進(jìn)入一個(gè)循環(huán)結(jié)構(gòu),在循環(huán)中只做動(dòng)態(tài)掃描的工作,根據(jù)東西、南北兩向的剩余時(shí)時(shí)間進(jìn)行動(dòng)態(tài)掃描顯示。
    計(jì)時(shí)以及狀態(tài)的切換通過(guò)定時(shí)器的中斷服務(wù)程序來(lái)實(shí)現(xiàn),在中斷服務(wù)程序中,每計(jì)時(shí)到一秒時(shí),則各方向當(dāng)前狀態(tài)的剩余時(shí)間減1,一直減到0時(shí)觸發(fā)下一個(gè)狀態(tài)的開(kāi)始,改變交通燈的指示。
 ③程序流程

(4)軟硬件調(diào)試方案
     軟件調(diào)試方案:偉福軟件中,在“文件新建文件”中,新建C語(yǔ)言源程序文件,編寫相應(yīng)的程序。在“文件新建項(xiàng)目”的菜單中,新建項(xiàng)目并將C語(yǔ)言源程序文件包括在項(xiàng)目文件中。
 在 “項(xiàng)目編譯”菜單中將C源文件編譯,檢查語(yǔ)法錯(cuò)誤及邏輯錯(cuò)誤。在編譯成功后,產(chǎn)生以 “*.hex”和“*.bin” 后綴的目標(biāo)文件。
硬件調(diào)試方案:在設(shè)計(jì)平臺(tái)中,將單片機(jī)的P3.0-P3.5分別與獨(dú)立式鍵盤的相應(yīng)位通過(guò)插線連接起來(lái)。
在偉福中將程序文件編譯成目標(biāo)文件后,運(yùn)行“MCU下載程序”,選擇相應(yīng)的flash 數(shù)據(jù)文件,點(diǎn)擊“編程”按鈕,將程序文件下載到單片機(jī)的Flash中。
然后,上電重新啟動(dòng)單片機(jī),檢查所編寫的程序是否達(dá)到題目的要求,是否全面完整地完成試題的內(nèi)容。

3.2.2  程序設(shè)計(jì)(僅供參考的C語(yǔ)言源程序
//晶振:11.0592M  T1-250微秒溢出一次
/*變量的定義:
  show_val_sn,show_val_ew:  顯示的值0-59
  state_val_sn,state_val_ew: 狀態(tài)值 南北方向0-綠燈亮;1-黃燈亮;2-紅燈亮
  T1_cnt:    定時(shí)器計(jì)數(shù)溢出數(shù)
  cnt_sn,cnt_ew:   倒計(jì)時(shí)的數(shù)值
  init_sn[3],init_ew[3] 倒計(jì)時(shí)
  led_seg_code:數(shù)碼管7段碼
*/
#include "reg51.h"
sbit SN_green=P3^2 ;//南北方向綠燈
sbit SN_yellow=P3^1 ;//南北方向黃燈
sbit SN_red=P3^0 ;//南北方向紅燈
sbit EW_green=P3^5 ;//東西方向綠燈
sbit EW_yellow=P3^4 ;//東西方向黃燈
sbit EW_red=P3^3 ;//東西方向紅燈
unsigned char data cnt_sn,cnt_ew;
unsigned int  data T1_cnt;
unsigned char data state_val_sn,state_val_ew;
char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char code init_sn[3]={24,4,29};
char code init_ew[3]={29,24,4};
//------------------------
void delay(unsigned int i)//延時(shí)
{  while(--i);  }
//------------------------
void led_show(unsigned int u,unsigned int v)
{ unsigned char i;
  i=u%10;       //暫存?zhèn)€位
  P0=led_seg_code[i];
  P2=0xbf;
  delay(100);  //延時(shí)
  i=u%100/10;   //暫存十位
  P0=led_seg_code[i];
  P2=0x7f;
  delay(100);  //延時(shí)
  i=v%10;       //暫存?zhèn)€位
  P0=led_seg_code[i];
  P2=0xfe;
  delay(100);  //延時(shí)
  i=v%100/10;   //暫存十位
  P0=led_seg_code[i];
  P2=0xfd;
  delay(100);  //延時(shí)
}
//-------------------------
void  timer1() interrupt 3     //T1中斷
{ T1_cnt++;
  if(T1_cnt>3999)      //如果計(jì)數(shù)>3999, 計(jì)時(shí)1s
  {  T1_cnt=0;
     if (cnt_sn!=0) //南北方向計(jì)時(shí)
     { cnt_sn--; }
     else
     { state_val_sn++;
       if (state_val_sn>2) state_val_sn=0;
       cnt_sn=init_sn[state_val_sn]; 
       switch (state_val_sn) //根據(jù)狀態(tài)值,刷新各信號(hào)燈的狀態(tài)
        { case 0: SN_green=0 ;//南北方向綠燈
                  SN_yellow=1 ;//南北方向黃燈
                  SN_red=1 ;//南北方向紅燈
                  break;
          case 1: SN_green=1 ;//南北方向綠燈
                  SN_yellow=0 ;//南北方向黃燈
                 SN_red=1 ;//南北方向紅燈
                 break;
          case 2:SN_green=1 ;//南北方向綠燈
                 SN_yellow=1 ;//南北方向黃燈
                 SN_red=0 ;//南北方向紅燈
                 break;
        }    
     }
     if (cnt_ew!=0) //東西方向計(jì)時(shí)
     { cnt_ew--; }
     else
     { state_val_ew++;
       if (state_val_ew>2) state_val_ew=0;
       cnt_ew=init_ew[state_val_ew];
       switch (state_val_ew) //根據(jù)狀態(tài)值,刷新各信號(hào)燈的狀態(tài)
       { case 0: EW_green=1 ;//東西方向綠燈
                 EW_yellow=1;//東西方向黃燈
                 EW_red=0 ;//東西方向紅燈
                 break;
         case 1: EW_green=0 ;//東西方向綠燈
                 EW_yellow=1 ;//東西方向黃燈
                 EW_red=1 ;//東西方向紅燈
                 break;
         case 2: EW_green=1 ;//東西方向綠燈
                 EW_yellow=0 ;//東西方向黃燈
                 EW_red=1 ;//東西方向紅燈
                 break;
        }
     }
  }
}
//-------------------------
main()
{//初始化各變量
 cnt_sn=init_sn[0];
 cnt_ew=init_ew[0];
 T1_cnt=0;
 state_val_sn=0; //啟動(dòng)后,默認(rèn)工作在序號(hào)為1的狀態(tài)
 state_val_ew=0;
//初始化各燈的狀態(tài)
 SN_green=0 ;//南北方向綠燈亮
 SN_yellow=1 ;//南北方向黃燈滅
 SN_red=1 ;//南北方向紅燈滅
 EW_green=1 ;//東西方向綠燈滅
 EW_yellow=1;//東西方向黃燈滅
 EW_red=0 ;//東西方向紅燈亮
//初始化51的寄存器
 TMOD=0x20;//用T1計(jì)時(shí) 8位自動(dòng)裝載定時(shí)模式
 TH1=0x19;//0x4b; //500微秒溢出一次;   250=(256-x)*12/11.0592 -> x= 230.4
 TL1=0x19;
 EA=1;     //開(kāi)中斷
 ET1=1;
 TR1=1;    //開(kāi)定時(shí)器T1
while(1)
{  led_show(cnt_sn,cnt_ew);}}
//主程序結(jié)束

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉