久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

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

C51單片機(jī)+MAX7219十字路口交通燈Proteus仿真程序設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì)要求: 用單片機(jī)控制LED模擬交通燈。東西向通行時(shí)間為80s,南北向通行時(shí)間為60s,緩沖時(shí)間為3s。
本項(xiàng)目為典型的LED顯示和中斷定時(shí)電路。利用定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。對(duì)兩個(gè)方向分別顯示紅、綠、黃燈,并顯示相應(yīng)的剩余時(shí)間。

本設(shè)計(jì)基于AT89C52單片機(jī),可用單片機(jī)控制信號(hào)燈的狀態(tài)變化,基本可以指揮交通的基本通行。用單片機(jī)控制紅、黃、綠LED燈模擬指示,模擬東西方向的十字路口交通信號(hào)控制情況。東西向通行時(shí)間為80s,南北向通行時(shí)間為60s,緩沖時(shí)間為3s,并將時(shí)間倒計(jì)時(shí)輸出,方便行人的觀看。
本設(shè)計(jì)主要設(shè)計(jì)指標(biāo):
  • 紅綠燈狀態(tài)提示模塊。
  • T0定時(shí)器模塊,實(shí)現(xiàn)三種時(shí)間的定時(shí)。
  • 驅(qū)動(dòng)顯示模塊,利用MAX7219驅(qū)動(dòng)數(shù)碼管的顯示倒計(jì)時(shí)。
1.3 系統(tǒng)結(jié)構(gòu)圖

圖1  系統(tǒng)結(jié)構(gòu)圖

系統(tǒng)正常運(yùn)行后,5V的穩(wěn)壓源給MAX7219芯片、LED信號(hào)燈和單片機(jī)供電,通過單片機(jī)內(nèi)部的定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。所計(jì)的時(shí)間以秒為單位,通過MAX7219驅(qū)動(dòng)七段顯示器倒計(jì)時(shí)輸出,計(jì)滿時(shí)間后產(chǎn)生中斷,中斷產(chǎn)生后信號(hào)燈發(fā)生相應(yīng)的變化,以達(dá)到自動(dòng)控制的目的。


2  理論分析與計(jì)算
定時(shí)器初值的計(jì)算,并掌握十進(jìn)制到十六進(jìn)制的轉(zhuǎn)化。在進(jìn)行通行時(shí)間上的控制時(shí)應(yīng)注意生活中的常識(shí)。
2.1 定時(shí)器初值的計(jì)算
通過單片機(jī)內(nèi)部的定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。在本設(shè)計(jì)中所用的晶振為12MHZ,定時(shí)器              T0為工作方式一。其中初值為X,定時(shí)間為m us。

                 (1)
計(jì)算可得,定時(shí)m=10ms=10000us時(shí),X=55536,轉(zhuǎn)化為十六進(jìn)制,X=D8F0H。即寫入定時(shí)器的初值TH0=0xD8,TL0=0xF0。
2.2 通行時(shí)間的計(jì)算
A方向紅燈時(shí)間=B方向綠燈時(shí)間+黃燈緩沖時(shí)間              (2)
3  硬件設(shè)計(jì)
  根據(jù)系統(tǒng)結(jié)構(gòu)圖,系統(tǒng)由MAX7219驅(qū)動(dòng)電路、顯示電路、晶振電路、復(fù)位電路、單片機(jī)供電電路、單片機(jī)電路組成。
3.1顯示電路
通過該電路, 行人可以清楚的看見各路口狀態(tài)燈的亮滅情況,判斷是否通行。同時(shí),數(shù)碼管顯示剩下通行的時(shí)間,提示行人。
數(shù)碼管顯示方面,東西南北各個(gè)方向分別用兩位7段數(shù)碼管,南北方向接DIG0、DIG1,東西方向接DIG2、DIG3,進(jìn)行位選控制,如圖2。
         
圖2 顯示電路1
紅綠燈采用三個(gè)共陽二極管作為指示燈,南北、東西方向各個(gè)一組,分別對(duì)應(yīng)數(shù)碼管的倒計(jì)時(shí)。東西方向接單片機(jī)的P1^0 , P1^1 , P1^2口,南北方向接單片機(jī)的P0^0 , P0^1 , P0^2口,如圖3。
圖3 顯示電路2

首先東西方向通行時(shí)間為80s,東西綠燈亮,南北紅燈亮。時(shí)間到后,東西南北黃燈亮3s。然后南北方向通行時(shí)間為60s,南北綠燈亮,東西紅燈亮。時(shí)間到后3s,東西南北黃燈亮3s。

3.2MAX7219驅(qū)動(dòng)電路

采用專用數(shù)碼管顯示控制芯片MAX7219。MAX7219是美國MAXI生產(chǎn)的串行輸入/輸出共陰極顯示驅(qū)動(dòng)器,該芯片最多可驅(qū)動(dòng)8位7段數(shù)字LED顯示器或多個(gè)LED和條形圖顯示器。   

圖4 MAX7219驅(qū)動(dòng)電路

4  軟件設(shè)計(jì)

在硬件的基礎(chǔ)上對(duì)軟件進(jìn)行設(shè)計(jì),本程序由主程序,定時(shí)中斷子程序和顯示驅(qū)動(dòng)子程序組成。主程序主要負(fù)責(zé)系統(tǒng)初始化和等待中斷,以及紅黃綠燈各種狀態(tài)判斷。定時(shí)中斷子程序主要負(fù)責(zé)各個(gè)狀態(tài)的定時(shí)要求,以及狀態(tài)的跳轉(zhuǎn)。顯示驅(qū)動(dòng)子程序負(fù)責(zé)倒計(jì)時(shí)時(shí)間的顯示。

根據(jù)系統(tǒng)軟件設(shè)計(jì)要求將軟件劃分為:延時(shí)模塊,狀態(tài)判斷模塊,中斷服務(wù)模塊,驅(qū)動(dòng)顯示模塊。
4.1 主程序
主程序完成MAX7219的初始化,定時(shí)器的初始化,狀態(tài)燈的初始化并進(jìn)行狀態(tài)的判斷。



圖 5  程序流程圖
進(jìn)入主程序后,先初始化并開啟定時(shí)器1和MAX7219芯片,再裝入初始狀態(tài)和初始值,然后等待中斷響應(yīng)。根據(jù)收到的中斷響應(yīng),主程序依次判斷。首先南北綠燈亮,東西紅燈亮,倒計(jì)時(shí)60S;定時(shí)結(jié)束后,由中斷跳轉(zhuǎn)到下一個(gè)狀態(tài),再東西南北黃燈亮,倒計(jì)時(shí)3S;定時(shí)結(jié)束后,由中斷跳轉(zhuǎn)到下一個(gè)狀態(tài),東西綠燈亮,南北紅燈亮,倒計(jì)時(shí)80S;定時(shí)結(jié)束后,再由中斷跳轉(zhuǎn)到下一個(gè)狀態(tài),東西南北黃燈亮,倒計(jì)時(shí)3S。依次循環(huán)執(zhí)行。

主要(關(guān)鍵)代碼:
  1. void main()
  2. {
  3.               T0_init();
  4.               MAX7219_init();
  5.               EA=1;
  6.               NS=60;                                                                                                                                               //初始南北通行60秒
  7.               EW=63;                                                                                                                  
  8.    R2=0,G1=0;                                                                                                       //南北綠燈亮,東西紅燈亮
  9. while (1)
  10.         {
  11.                             uint k;
  12.                             display();      
  13.       switch(i)
  14.                {
  15.               case 1:               R2=1,G1=1;                                          //關(guān)閉南北綠燈,東西紅燈
  16.                                                                                                     Y1=0,Y2=0;                                          //黃燈閃爍
  17.                       for(k=0;k<3;k++)
  18.                         {
  19.                               Y1=~Y1;
  20.                                                                                                                                 Y2=~Y2;
  21.                               delay(10000);
  22.                            }      
  23.                                   break;
  24.               case 2: G2=0,R1=0;                                          //東西綠燈亮,南北紅燈亮
  25.                                                                               break;
  26.               case 3: G2=1,R1=1;
  27.                                                                                            Y1=0,Y2=0;                                          //黃燈閃爍
  28.                       for(k=0;k<3;k++)              //循環(huán)三次進(jìn)行延時(shí)閃爍
  29.                         {
  30.                               Y1=~Y1;
  31.                                                                                                                                 Y2=~Y2;
  32.                               delay(10000);
  33.                             }
  34.                                   break;
  35.               case 4: R2=0,G1=0;                                           //東西紅燈亮,南北綠燈亮
  36.                                                                     break;
  37.              }                       
  38.          }
  39. }
復(fù)制代碼


此段程序是對(duì)狀態(tài)的判斷,利用switch()....case語句對(duì)狀態(tài)進(jìn)行判斷。
4.2 定時(shí)中斷子程序
定時(shí)器子程序是進(jìn)行時(shí)間的設(shè)定,并實(shí)現(xiàn)狀態(tài)的自動(dòng)跳轉(zhuǎn)。跳轉(zhuǎn)過后產(chǎn)生的中斷送入主程序進(jìn)行判斷并輸出。

圖 6  定時(shí)中斷子程序流程圖
設(shè)置通行時(shí)間,并利用定時(shí)器進(jìn)行倒計(jì)時(shí),其中狀態(tài)一60S,其中狀態(tài)二3S,其中狀態(tài)三80S,其中狀態(tài)四3S。
關(guān)鍵代碼介紹:
void T0_(void)interrupt 1
{
  temp++;
  TH0=0XD8;
  TL0=0XF0;
  if(temp==100)
    {
      temp=0;
      NS--;
      EW--;
          if((NS==0)&&(EW==3))
         {
          NS=3;
          EW=3;
          i=1;
         }
      if((NS==0)&&(EW==0)&&(i==1))
         {
          NS=83;
          EW=80;
          i=2;
         }
     if((NS==3)&&(EW==0))
         {
          NS=3;
          EW=3;
          i=3;
         }
     if((NS==0)&&(EW==0)&&(i==3))
         {
          NS=60;
          EW=63;
          i=4;
         }
              }
              display();
}
利用if語句對(duì)計(jì)時(shí)是否完畢進(jìn)行判斷,如計(jì)時(shí)完畢,執(zhí)行if中的內(nèi)容。
4.2 MAX7219驅(qū)動(dòng)程序
      MAX7219采用串行尋址方式,在傳送的串行數(shù)據(jù)中包含內(nèi)部RAM的地址。加在DIN腳上的串行數(shù)據(jù),必須在LOAD信號(hào)為高電平的前提下,以每個(gè)字節(jié)為一個(gè)數(shù)據(jù)包,在CLK信號(hào)上升沿移入16位的移位寄存器。然后在LOAD信號(hào)的上升沿鎖存進(jìn)數(shù)字或控制寄存器中。LOAD信號(hào)必須在第16個(gè)CLK信號(hào)上升沿的同時(shí),或在下一個(gè)CLK信號(hào)上升沿之前升高,否則,數(shù)據(jù)會(huì)丟失。DIN腳上的串行數(shù)據(jù)在16.5個(gè)CLK信號(hào)后出現(xiàn)在DOUT腳上,以便級(jí)聯(lián)應(yīng)用時(shí)傳到下一個(gè)MAX7219上。
圖 7   數(shù)據(jù)串行傳送時(shí)序圖

關(guān)鍵代碼介紹:
  1. void MAX_write(uchar ch)                            //以8位一個(gè)字節(jié)進(jìn)行寫值

  2. {

  3.               uchar j,ads;

  4.     for(j=0;j<8;j++)                                             //8位

  5.               {

  6.       ads=ch&0x80;                                   //取最高位

  7.       CLK = 0;                             //時(shí)鐘線置低

  8.       if(ads)  DIN = 1;

  9.       else      DIN = 0;

  10.       ch=ch<<1;                               //左移一位

  11.       CLK=1;                                                            //上升沿,DIN的數(shù)據(jù)寫入到7219

  12.     }

  13. }

  14. void MAX7219(uchar addr, uchar num)                            //寫地址,寫數(shù)據(jù)

  15. {

  16.     LOAD = 0;        

  17.               _nop_();

  18.     MAX_write(addr);

  19.               _nop_();

  20.     MAX_write(num);

  21.               _nop_();

  22.     LOAD = 1;                                                    //鎖存

  23. }                     
復(fù)制代碼

系統(tǒng)測(cè)試

5.1 倒計(jì)時(shí)狀態(tài)測(cè)試
由Proteus仿真軟件進(jìn)行系統(tǒng)測(cè)試。

                                                                                                                  圖8  60S、80S計(jì)時(shí)
結(jié)論:?jiǎn)纹瑱C(jī)內(nèi)部定時(shí)器能夠進(jìn)行定時(shí)。
5.2 紅綠燈狀態(tài)測(cè)試
由Proteus仿真軟件進(jìn)行系統(tǒng)測(cè)試。
表1  紅綠燈狀態(tài)測(cè)試

60S
3S
80S
3S
東西方向
紅燈亮
黃燈閃爍
綠燈亮
黃燈閃爍
南北方向
綠燈亮
黃燈閃爍
紅燈亮
黃燈閃爍

結(jié)論:每個(gè)狀態(tài)能夠正常的跳轉(zhuǎn)。
5.3 系統(tǒng)聯(lián)機(jī)測(cè)試
1、接硬件圖接線,為了確保東西南北紅黃綠燈能夠?qū)?yīng)顯示,實(shí)驗(yàn)時(shí),對(duì)P1口的接線做了調(diào)整。即,P1.0接G2綠燈,P1.1接Y2黃燈,P1.2接R2紅燈,P0.1接G1綠燈,P0.2接Y1黃燈,P0.3接R1紅燈。
2、從第一個(gè)狀態(tài)開始連續(xù)運(yùn)行,觀察六個(gè)LED燈是否與交通顯示情況對(duì)應(yīng),如果有偏差,則單步運(yùn)行或斷點(diǎn)運(yùn)行,進(jìn)行調(diào)試,直至滿足設(shè)計(jì)要求。
3、調(diào)試完燈的顯示后,從第一個(gè)狀態(tài)開始連續(xù)運(yùn)行,觀察數(shù)碼管顯示的是否正常,如果不正常,則運(yùn)用單步運(yùn)行或斷點(diǎn)運(yùn)行進(jìn)行分析和調(diào)試,直至滿足要求。
4、整體運(yùn)行,觀察燈顯示和時(shí)間顯示是否都符合要求,如果不符合,則再調(diào)試。直至滿足要求



6  總結(jié)以及展望

本設(shè)計(jì)實(shí)現(xiàn)設(shè)計(jì)要求。

本設(shè)計(jì)在實(shí)現(xiàn)相應(yīng)功能的時(shí)候主要是考慮到現(xiàn)有的條件,采用成熟度高的STC89C52作為CPU的解決方案,同時(shí)用LED燈和雙位數(shù)碼管作為顯示模塊,軟件則使用了移植性好的C語言。從功能需求上來看,已經(jīng)能夠滿足簡(jiǎn)單的應(yīng)用需要。
在設(shè)計(jì)過程中,從開始設(shè)計(jì)該系統(tǒng)的功能,到方案的論證,再到最后的調(diào)試,每一步都顯得是那么的重要,在這個(gè)過程中學(xué)習(xí)到了比這次設(shè)計(jì)本身更多的知識(shí),除此之外,在這次設(shè)計(jì)中也奠定了我對(duì)一個(gè)工業(yè)產(chǎn)品設(shè)計(jì)的思維,收獲頗豐。
展望,由于時(shí)間有限,本設(shè)計(jì)還需要做很多的改進(jìn)才能作為產(chǎn)品進(jìn)入市場(chǎng),如:在對(duì)單片機(jī)供電方案中可以改為更簡(jiǎn)單的電容降壓電路;在狀態(tài)的多樣性方面還很單一,可以增加一些更加符合實(shí)際情況的狀態(tài),如彎道時(shí)的狀態(tài)、擁堵時(shí)的狀態(tài)、應(yīng)急狀態(tài);在PCB元器件布局還可以更科學(xué)使線的寬度做的更寬等元器件選擇方面的問題,使其能夠通過一些標(biāo)準(zhǔn)。

  • 系統(tǒng)原理圖

圖9  系統(tǒng)原理圖

  • 系統(tǒng)PCB版圖
本系統(tǒng)的PCB版圖為雙重布線。
圖10  系統(tǒng)PCB圖


全部資料51hei下載地址:
通信交通燈.7z (981.18 KB, 下載次數(shù): 121)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:479983 發(fā)表于 2020-5-15 00:02 | 只看該作者
不錯(cuò)的程序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜影院在线观看 | 99精品视频在线 | 99热首页 | 国产91丝袜 | 亚洲高清av在线 | 毛片免费看 | 日韩欧美高清 | 干狠狠| 久久国产亚洲 | 欧美一级在线 | 欧美一区二区三区视频 | 天天干免费视频 | 欧美日韩精品在线一区 | 中文在线一区二区 | 中文字幕av免费 | 亚洲国产精品一区二区三区 | 91九色porny首页最多播放 | 久久久久久久久久影视 | 中文字幕在线第二页 | 亚洲国产欧美国产综合一区 | 欧美久久视频 | 黄色成人av | 在线超碰 | xxx国产精品视频 | 五月免费视频 | 操久久久| 国产aⅴ爽av久久久久久久 | 我爱操 | 综合中文字幕 | 岛国毛片在线观看 | 一区二区三区 在线 | 国产精品日日做人人爱 | 日韩在线中文字幕 | 亚洲国产成人精品女人久久久 | 玖玖玖av| 在线一区视频 | 99色综合 | 国产日韩欧美一区二区 | 久久久网 | 成人1区| 午夜视频免费在线观看 |