我們先是操作了單個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
我們把程序中的數據進行更改。
更改完之後,編譯一下,沒有錯誤和警告。然後我們去仿真一下看看。
這篇就先介紹的這裡,主要說明的是使用函數的方法。如果有什麼疑問或建議可以留言或私信給我。
更多多內容,歡迎關注百家號:小亮談電氣。微信公眾號:電氣學苑。