自學單片機第十三篇下:單點交通燈

2020-08-25 小亮談電氣

​我們先是操作了單個IO的控制,然後又以流水燈的形式,進行了多個IO的操作,這些只是為了讓我們儘可能的熟悉程序的操作,如何賦值,如何運行,如何測試,如何下載程序到硬體,有了這些熟悉的過程,後邊學起來就不會再費力了,因為很多問題都是這些基礎操作導致的。

今天這篇文章,我們來通過一個僅靠延時函數,來實現下交通燈。這裡會讓大家先熟悉下正常的函數如何使用。我們之前的延時函數其實有些粗糙了,不過能達到要求也就無所謂了。

首先看下函數的形式。

我們一句一句的來分析,首先是頭文件,之前講過了,例如我們下邊使用的P1,就是包含在頭文件中的,所以我們可以拿來就用,而不用聲明。

接著我們看到的是一個函數聲明語句,這句話的含義是:我這裡有一個函數,名字叫delay,它有一個可以輸入的變量,是無符號整型的,最大數值62236,變量名是t。

這就是為了在主函數運行前,先告訴主函數,我這裡有個delay函數,裡邊有個變量t,運行時注意下,可以直接用。主函數就明白了,當它運行到delay(300)時,就會明白,這個函數可以用,參數300也不大於65536。它會跳到下邊的函數體中,運行函數體中的程序,運行完,再回來接著運行主函數中的接下來的程序。

我們只要聲明過函數,使用時,就不用再寫void了,直接用就可以了,函數名後邊的小括號中的數字,就是我們需要使用的變量,通過調整這個數字,就可以調整延時的時間。

函數的使用,有利於程序結構的合理布局,使得程序的模塊更加清晰。我們看一個使用函數和不使用函數的程序對比。

我們可以看出,兩個程序的行數基本一致,但是從結構上,左邊的程序雖然結構看似層層清晰,這是因為我們所書寫的代碼還是比較少,如果代碼量很大,程序中存在大量一樣的語句,就看著很費神了,不過也許對於剛接觸的同學來說,這種會有助於理解為什麼右邊的函數可以完成同樣的功能,理解完,清楚了原理,我們還是應該使用右側的代碼,這樣會比左側結構更加清晰,主函數應儘可能簡潔,一目了然,看完就知道主函數在做什麼,不然,分析完幾千行代碼,才知道函數的功能,多累。

不止是延時函數,很多程序結構,我們都可以寫出函數的形式,然後在主函數中完成調用即可,有利於閱讀,也有利於修改。

上圖的函數,我就不演示仿真了,想看的可以自己寫過後,通過下載或軟體進行仿真,現象是一樣的。

這篇我們主要是實現交通信號燈。

首先先了解下信號燈的工作方式,南北紅燈亮,則東西綠燈亮,綠燈結束,黃燈亮,黃燈結束,東西紅燈亮,南北綠燈亮,綠燈結束,黃燈亮,黃燈結束,南北紅燈亮,東西綠燈亮,如此往復。時間上可能不一樣,但規律一致。

我們只顯示紅黃綠燈即可。程序結構如下:

1,南北,紅燈亮,東西綠燈亮。延時X秒。

2,南北紅燈亮,東西黃燈亮。延時Y秒。

3,東西紅燈亮,南北綠燈亮。延時M秒。

4,東西紅燈亮,南北黃燈亮。延時N秒。

結束。

好的,開始寫程序。我先寫出來,再一段一段的解釋。

然後對仿真電路進行了簡單的調整,增加了一個交通燈電路。

這只是一個演示,我們知道,一個信號燈,怎麼也得紅燈10秒。黃燈3秒,綠燈10秒吧,不然,別說車了,就是火車也飛不過去。假設,我們需要東西南北都一樣,那麼,紅燈我們用18秒,黃燈3秒,綠燈15秒。因為這個黃燈和綠燈的時間總長,要等於紅燈。於是,我們這個延時程序,需要一定的更改,僅僅是數值需要換一下。

先不管定時器什麼的,我們就用延時函數來做。之前我們用60000延時了0.8秒,那麼0.1秒就是60000/8=7500,由於延時的核心步驟我們用了200,所以7500/200=37.5。當然,0.5是沒法寫的,因為我們用的是整數變量。先算出大概再說。

3秒就是0.1秒X30》37.5X30=1125

15秒就是0.1秒X150》37.5X150=5625

我們把程序中的數據進行更改。

更改完之後,編譯一下,沒有錯誤和警告。然後我們去仿真一下看看。

這篇就先介紹的這裡,主要說明的是使用函數的方法。如果有什麼疑問或建議可以留言或私信給我。

更多多內容,歡迎關注百家號:小亮談電氣。微信公眾號:電氣學苑。

相關焦點

  • 自學單片機第十篇:基礎知識--萬用表的使用
    第三種,萬用表內部保險燒壞了,有時不經意的一個操作,或者自己我操作後,內部保險已經燒壞,不影響其他測量,但是電流檔就用不了了。表內一般是兩個電阻,一個是10A的,一個是400mA的,針對的是兩個量程,可以打開萬用表看下,或者找個其他表測一下通斷。網上有賣的,福祿克的相對較貴些。平時要注意。
  • 自學單片機第十二篇上:首次測試設備——軟體測試
    如果選擇了「是」也不影響操作,接著進行下一步即可。(截圖忘記保存,不影響操作,大家自己看提示就可以完成)新建一個程序文檔,我們可以在項目上單擊右鍵,會彈出菜單欄,選擇第二項》》添加一個新的文檔。這個先按下不談。查看輸出提示,我們發現,並沒有提示導出了可執行文件。主要是我們沒有設置。要輸出文件,還需要設置一下。之前的文章中已經有提到過。單擊下圖中的設置按鈕,進入設置界面。在設置中的第三項output中,將輸出HEX文件前選中,打勾。然後點擊確定。
  • 自學單片機第九篇:基礎知識--計算機基礎操作
    首先,來捋下電腦上都有什麼硬體,先說,這個不是教修電腦的文章,不過用的時間長了,小毛病還是可以解決的,遇到難以解決的問題,我的絕招是重裝系統,此法就像,養了個狗,眼看著收拾不住了,果斷換條新狗或者擼個貓什麼的。說硬體。
  • 自學單片機第十一篇:基礎知識--電工常識
    鉛酸蓄電池12V(一般情況),單格2V。乾電池1.2-1.5V,卷閘門乾電池12V,萬用表乾電池9V。人體安全電壓36V以下。自學單片機第十篇:基礎知識--萬用表的使用
  • 自學單片機第十四篇中:流水燈
    並把我們的之前單點操作的流水燈進行了改進,成為了一個新的更加簡潔的程序。這回,就再用總線方法,來實現流水燈的更加多樣化的操作。這次,我們要實現正向流水結束後再反過來流水,如此循環。然後再間隔閃爍。然後再累積流水,最後結束。正向流水結束,再反過來。這個如何實現呢,我們需要使用到一些運算方法。第一個是移位指令<<。
  • 自學單片機第二十篇:多點輸入
    今天就再說說,多點輸入的操作,如果說單點輸入是明白如何檢測信號,那麼多點輸入就是對信號檢測的熟練掌握。我們先說下練習的規則,本次採用P1和P2埠,P1採用總線方式,P2採用單點檢測方式。對輸入的數據我們均採用自鎖方式處理。處理後用於P3埠的控制LED小燈點亮。
  • 鬼滅之刃:禰豆子參戰意義不明,第十三型毫無亮點,決戰篇略爛尾
    禰豆子185話甦醒,在父親炭十郎的指引下前往無限城。當時距離天亮90分鐘,即便禰豆子在此期間逐漸變人,那也足夠抵達決戰現場。畢竟鬼殺隊的那些普通劍士都可以在2小時內找到鬼舞辻的繭,說明總部和無限城的距離沒有想像中那麼遠。
  • 基於FPGA的交通燈系統控制設計
    摘要:為了對交通燈系統進行精確控制,採用FPGA實驗板,在QuartusⅡ軟體環境下,分別實現脈衝發生模塊、狀態定時模塊、交通燈顯示模塊、時間顯示模塊,進行仿真實驗和硬體下載,獲得的測試結果滿足設計要求。
  • Verilog HDL基礎之:實例5 交通燈控制器
    原理簡介交通燈是城市交通中不可缺少的重要工具,是城市交通秩序的重要保障。本實例就是實現一個常見的十字路口交通燈功能。讀者通過學習這個交通燈控制器,可以實現一個更加完整的交通燈。例如實現實時配置各種燈的時間,手動控制各個燈的狀態等。一個十字路口的交通一般分為兩個方向,每個方向具有紅燈、綠燈和黃燈3種,另外每個方向還具有左轉燈,因此每個方向具有4個燈。
  • 基於89C52單片機的紅外遙控雙模式交通燈控制系統
    摘要:針對實現交通燈系統的雙模式控制的目的。採用以C 編寫程序,設計電路的軟體部分和以89C52 單片機為核心,連同紅外接收模塊、交通燈顯示模塊和其它元器件,設計電路的硬體部分的軟硬體相結合的方法。即軟體部分:在KEIL 環境中編寫並驗證C 程序。
  • 智能交通燈
    直接上功能:第一部分:基礎設計這次的智能交通燈是放在十字路口的,分為東西南北四個方向,每個方向分別都有紅黃綠三個LED代表交通燈,2位8段數碼管顯示當前紅綠燈剩餘的秒數,並且這個數值可以手動由按鍵設置。由於單片機引腳數量的限制,所以我們要復用好每一個引腳。
  • 【專利解密】百度助力智慧交通 無人駕駛交通燈識別方案
    而目前交通燈的種類、形狀有多種多樣,造成無人駕駛車輛在識別交通燈時需要進行大量的計算,消耗系統資源,並且存在無法準確識別交通燈的情況,存在一定的安全隱患。因此百度在18年12月10日申請了一項名為「交通燈、交通燈識別方法、裝置、設備及存儲介質」的發明專利(申請號:201811501707.5),申請人為百度在線網絡技術(北京)有限公司。
  • 自學單片機第十二篇番外:首次測試——軟體仿真
    對於沒有單片機和下載器的同學,看完前兩篇文章,或許會一時技癢,但無從下手,這裡,咱就說下,沒有硬體,如果調試。之前我共享過一個軟體,不知道現在還能用不,私信回復【仿真】應該還可以獲取連結地址。如果連結失效,私信我,我單獨發送。好了,接下來介紹仿真的首次使用。
  • 自學單片機第十二篇下:首次測試設備——硬體
    我們就用它來測試第一個程序,來驗證下我們的學習整套設備是否都可以使用。打開下載軟體選擇型號,我使用的是89c52,所以選擇了這個,你們可以選擇與自己一致的型號。當然如果後期發現任何問題,都可以回來用這個流程再走一遍,看下問題出在哪裡,方便快捷。有些同學沒有硬體,或者手頭只有電腦,那我們可以退而求其次,使用仿真軟體來進行硬體操作。下篇我們介紹下軟體仿真如何使用。文章會介紹得比較慢,學習是個緩慢的過程,急於求成都不好。
  • 單點登錄那些事兒(三)不同域下的單點登錄
    單點登錄,在企業的應用中是多樣的。上篇文章中,我們提到企業的一個域名承載著不同的應用。但隨著企業對新業務的探索,便會申請一些新的域名用於功能承載,一方面為了做區分,另一方面為了滿足監管要求。在這種不同域名的模式下,打通原先站點的用戶體系,就是本次介紹的 —— 不同域下的單點登錄。
  • 自學單片機第三篇:keil軟體
    關於軟體,我將分四篇介紹,因為這是以後學習的主陣地。要想使用,首先是下載軟體,個人推薦大家前往Keil官網下載。官網的軟體各方面都有保證,英文並不影響使用,因為我們能用的功能項目,位置就那幾個,記住就好了,而且不用擔心莫名其妙的問題。
  • 單片機C語言程序設計:LED 模擬交通燈
    /* 名稱:LED 模擬交通燈說明:東西向綠燈亮若干秒,黃燈閃爍 5 次後紅燈亮, 紅燈亮後,南北向由紅燈變為綠燈,若干秒後南北向黃燈閃爍 5 此後變紅燈,東西向變綠燈,如此重複。
  • 《戰雙帕彌什》主線第十三章玩法攻略
    《戰雙帕彌什》主線第十三章怎麼玩呢?想必很多小夥伴都還不是特別的確定,十三章的具體內容大家都知道了嗎?
  • 「快訊」中國共產黨甘肅省第十三屆委員會第十三次全體會議召開第...
    新甘肅客戶端蘭州12月25日訊(新甘肅·甘肅日報記者 張富貴 金鑫)中國共產黨甘肅省第十三屆委員會第十三次全體會議今天下午召開第三次大會。大會由省委常委會主持,省委書記林鐸講話。會議遞補張文學、張寶軍為省委委員,通過了省委常委會工作報告,通過了《中共甘肅省委關於制定甘肅省國民經濟和社會發展第十四個五年規劃和二〇三五年遠景目標的建議》,通過了《中國共產黨甘肅省第十三屆委員會第十三次全體會議決議》。在完成各項會議議程後,省委十三屆十三次全會閉幕。
  • 雅典將升級智能交通燈 紅外攝像測速抓拍「一燈搞定」
    中新網6月29日電 據希臘《中希時報》報導,希臘首都雅典將在全市境內開始安裝配有監控攝像頭的智能交通燈。