本文以STC89系列單片機為例,重點訓練讀者的C語言基礎和單片機的程序設計能力。 項目1 P0.0接口驅動LED閃爍 閃爍控制是安全燈、高層建筑、高空飛行器、警示燈等設備燈光閃爍控制的原理基礎,也是單片機項目學習過程中最簡單的項目。這里我們做為一個項目設計,詳細敘述項目實現的基本過程。 1.電路設計 電路硬件是單片機項目實現的基礎,在項目設計過程中必須先設計項目的電路原理。為了提高程序和電路的聯調效果,我們采用Proteus軟件設計單片機項目的仿真電路,當程序設計完成后,可在仿真系統中直接加載程序驗證程序設計的完整性。 ![]() (a)低電平驅動 (b)高電平驅動 圖1 P0接口驅動LED電路 LED閃爍電路參考圖1b低電平直接驅動方式。項目設計時,應先根據項目的原理圖利用Proteus軟件設計仿真電路圖,下面重新說明Proteus使用過程。 (1)打開Proteus軟件的ISIS程序并保存文件 一個項目包含程序和電路兩部分,因此在使用Proteus軟件的設計電路時,應首先考慮仿真電路文件的目錄。在學習項目設計過程中,建立科學的項目目錄結構對于養成良好的項目開發習慣有很多益處,因為真正進行單片機項目開發時,你所做的一切都很重要。項目1所在的目錄結構見圖2所示。 ![]() 圖2 項目1目錄結構 操作過程中,首先打開Proteus ISIS程序,鼠標左鍵點擊File→Save Design As,在彈出的窗口中選擇合適路徑,然后點擊“創建新文件夾”并命名為“項目1-LED閃爍”;然后進入這個文件夾后,再創建一個新文件夾命名為“電路”。再一次進入“電路”文件夾中,這時才對要保存電路文件命名,比如“LED閃爍”。 (2)Proteus ISIS設計電路 使用Proteus進行原理圖設計主要操作為放置元器件和連線。本項目所使用的單片機型號雖然為STC89C51,但在Proteus中是51內核的單片機都可以使用。這里選擇Micropocessor Ics-8051 Family中的80C51。Proteus原理圖中的單片機電路符號,含有完整的單片機最小系統模型,并且電源默認連接完好。仿真電路設計見圖3所示,為了使LED達到顯示效果,上拉電阻R1取值為470歐姆,實際應用要取值大一些。電路設計完成后,再次保存設計,下面就可以設計程序了。 ![]() 圖3 項目1的仿真電路圖 2.程序設計 本項目采用Keil軟件進行設計,基本操作共4個步驟,分別是創建一個項目、新建C文件、程序設計、生成HEX文件。創建項目和新建C文件比較簡單,這里不再詳細說明,但要注意,在打開Keil軟件時,新建的工程必須保存在項目1目錄下的程序中,新建一個C文件,應保存為main.c,并加載到工程中。 (1)程序設計 由于單片機內部的P0~P3寄存器都可以進行位操作,程序設計過程中,可以利用程序對P0.0位直接操作即可控制LED的閃爍。 C51定義P0.0為P0^0,因此在利用C語言程序設計時,可使P0.0輸出高、低電平,如P0.0輸出低電平,程序中編寫P0^0 為0即可。為了使程序簡單明了,可以利用sbit LED = P0^0語句,讓LED代替P0^0。 在程序編寫過程中,項目程序設計的一般順序是先寫#include #include sbit LED = P0^0; // LED接P0.0。在kell C51軟件中,定義P0.0為P0^0, void delay(unsigned int x) //延時函數 { while(x--); } void main(void) //主函數 { LED =0; //P0.0輸出低電平,LED1滅 delay(50000); //調用延時函數,延時一段時間,約0.3秒,不精確 LED ==1; //P0.0輸出高電平,LED1亮 delay(50000); } (2)程序說明 1)本項目中,單片機型號為STC89C51,因此程序包含reg51.h文件,reg51.h文件定義了51單片機所有特殊功能寄存器的名稱定義和相對應的地址值。 2)單片機程序順序執行,先執行主函數,在主函數內可以調用子函數,子函數可以調用子函數,但子函數不能調用主函數。單片機程序從主函數入口依次執行每一條指令,執行完畢后返回到主函數入口進行下次循環。 3)延時函數。延時的過程是程序執行了一個延時函數delay()。在主函數調用延時的過程中,如果單片機沒有中斷發生,單片機只能忙于執行這個延時函數。 單片機在執行延時函數相關指令時,每一條指令都會占用一定數量的機器周期,執行完延時函數的所有指令,浪費或占用的時間就是調用延時函數所獲得的延時時間,但執行延時函數不能得到精確的延時時間。 4)利用位定義命令讓LED等價于P0.0位,程序執行LED1=1后,單片機內部位寄存器P0.0位就設置為高電平,同時P0.0端口就會輸出高電平。單片機的所有I/O接口都可以進行位操作,也可以字節操作。 5)利用C語言編寫單片機程序時,每個人都有自己的風格。雖然C語言格式自由,但作為單片機的程序語言,具有嚴格的書寫格式。為了提高單片機C語言程序的可讀性,增加程序頁的層次感,一般情況下,函數的字符左邊距為0,函數體每條語句前留一個“tab”鍵空;算數邏輯符號的左右各留一個空格,關鍵語句要有中文或英文注釋,關鍵函數有時需要用“/**...**/”說明,并把主函數所在的程序命名為main.c。 6)實際應用中,把LED換成繼電器或其它驅動電路,就可以讓單片機間接驅動一個大功率的負載,如額定電壓為交流220V、200W的紅色的燈泡閃爍。圖4電路為安全燈閃爍驅動電路,雙向光電晶閘管型號為MOC3061,再加上一級晶閘管VTH,可以實現更大功率的負載驅動。 ![]() 圖4 單片機大功率交流負載驅動 3.程序編譯并創建HEX文件 程序編譯是檢驗程序設計格式或代碼錯誤的過程。如果程序在編譯過程中出錯,會在Keil的編譯結果欄中進行提示。程序的調試修改過程一般先用鼠標左鍵雙擊最上面的錯誤提示進行修改,然后再編譯,一直到無錯誤、無警告為止。 HEX文件是單片機可以執行的二進制文件,程序編譯無誤后可以通過Keil軟件創建一個HEX文件。在工具欄中Project→Options For Target ‘target 1’→Output窗口中選中“Create HEX Fi”,再編譯時,Keil即可創建一個HEX文件,這個文件自動保存在項目程序的目錄下。 可將Keil軟件創建的HEX文件直接下載到實驗開發板上的單片機中運行,也可以加載到仿真電路中的單片機內運行。 4.軟件仿真 軟件仿真是一種單片機系統測試,在沒有硬件的條件下,利用Protuse進行軟件仿真可以快速檢驗單片機程序設計的正確性。本項目在仿真時,需要利用Protuse先畫出項目的參考電路,然后把本項目程序創建的HEX文件加載到單片機中,最后單擊運行即可可以看到本項目LED閃爍的效果。 Proteus是單片機程序設計的重要仿真工具,但軟件仿真不能測試軟件的安全性和可靠性,也不能測試電路電氣特性的完整性。單片機的程序設計或相關產品開發必須有相關的軟件和硬件實驗支撐。本項目中,為了進一步驗證程序的可靠性,可以把程序下載到實驗開發板或實驗箱中的單片機內進行實際運行。 因為本項目比較簡單,初學者在了解項目的設計過程后可親自動手設計電路并編寫程序,實現項目的功能和要求。如果能看到成功的仿真結果,一定會有成就感,這就是項目設計的興趣所在。 在完成了P0.0驅動LED閃爍項目程序設計后,我們就可以在此基礎上增加一些器件,如利用P0驅動8只LED按照一定順序閃爍,進一步學習單片機I/O口的輸出控制原理。 由于篇幅所限,后續10個經典項目將不在此貼出,如果大家需要,小編將在以后陸續為大家補上。它們分別是: 流水燈程序設計(項目2) 數碼管0~9顯示程序設計(項目3) 單片機系統的按鍵(項目4) 利用外部中斷實現按鍵的輸入(項目5) 單只數碼管秒顯示(項目6) 6位數碼管動態顯示(項目7) PC與MCS-51系列單片機的串行通信(項目8) 電子表程序設計(項目9) 單片機片內看門狗定時器的使用(項目10) 單片機片內A-D轉換器的使用(項目11) 文章選自《單片機開發從入門到精通》白林峰等編著 小編特意拿出該書全部25個項目的實例資料提供給大家。 獲取方式:關注公眾號(機械工業出版社E視界),回復“52034” |