田萍果
(西安工商學院,陜西西安,710200)
為進一步深化課堂教學改革,提高人才培養質量,從“灌輸知識為主”轉向“能力和知識并重”的課程內容設計,要有利于培養學生分析和解決問題的能力,激勵學生善于獨立思考、敢于質疑并大膽創新。
單片機的應用和上手實踐正是這門課的學習要求和學習價值所在,但以往的單片機教學很難提起學生學習興趣,注意力容易轉移,更不用說提高學生的自主思考能力了。
所以結合以上課程改革要求和單片機課程自身實踐性強的特點,筆者在授課過程中將課程以項目的形式劃分為五大模塊——彩燈的設計與實現,電子鐘的設計與實現,溫度測控系統的設計與實現,電子秤的設計與實現以及遠程通信系統的設計與實現。同時,為了使項目式教學的效果發揮到最大化,學生吸收、掌握和運用最大化,筆者把Proteus引入課堂教學和實驗教學當中,取得了較之以往理論灌輸更好的效果。下面以本學期講授的五大項目中電子鐘的設計與實現為例來說明。
電子鐘的設計包含數碼管顯示、定時器設置、按鍵輸入以及蜂鳴器提示四個部分。在進行各功能設計之前,在Proteus中仿真、演示電子鐘所實現的功能,給學生一個整體的印象,激發學生的好奇心,然后再做拆解。電子鐘的組成和知識點拓展如圖1所示。

圖1 電子鐘設計功能和知識點拆解圖
在這個系統的介紹中,先以人機交流、互動比較好的數碼管顯示模塊來切入,以便講述其他功能電路時,能在顯示電路的基礎上來觀察、調試和實現。
由簡入難,課堂上先講解靜態數碼管顯示原理及其編程方法,用Proteus仿真實現靜態數碼管顯示0~9,如圖2所示。還可以拓展性地提問學生如何顯示0~F;如何改變每一個數碼顯示的時長;當改變數碼管共陰/共陽極時電路和程序分別如何更改等等問題。學生可以在課堂上討論,也可以在課下自行用Proteus拓展思路,試著實現功能,以大作業的形式提交,最終教師給予最終解答,形成閉環,促進知識點的掌握。

圖2 共陽極數碼管靜態顯示電路
然后再講述動態數碼管的顯示,介紹完動態顯示原理、硬件電路實現和程序設計后,可以在Proteus中搭建2位一體數碼管的顯示電路,并編寫相應的程序。課堂中逐步深入,再設計8位一體數碼管的動態顯示電路,修改程序,讓學生深入理解電路設計和程序編寫中段選和位選的概念和控制方法。具體電路如圖3、4所示。

圖3 2位一體數碼管顯示電路
1s信號的產生有兩種方式,一是通過延時實現,這種方法占用CPU工作效率,而且不夠精準,所以選用第二種方式,用定時器實現。課堂先講述定時器內部電路組成、工作原理和工作方式,在Proteus中仿真簡單的例子——如何實現200μs定時,如何在某個IO端口輸出周期為400μs的方波,又如何實現20ms的定時時間。

圖4 8位一體數碼管顯示電路
在仿真實現以上三個例子后,提問學生電子鐘的1s基準時間如何實現。學生在認識到由于定時時間較長,具有最大定時時間的方式1也不能直接實現1s時,可用定時/計數器先產生20ms的定時,然后用一個寄存器R2對20ms計數50次便可實現秒信號。在keil5開發環境中對上述實現20ms定時的程序進行補充編寫,進而啟發學生60s定時又如何實現,60s定時的程序如何與前面8位一體數碼管的動態掃描顯示程序綜合起來實現在8位一體的數碼管電路上實現60s的秒計時呢?學生可以提出自己的想法,在keil中整合程序,并在軟件Proteus中仿真,來驗證自己的編程思想是否實現了60s計時并且得以正常顯示,或者觀察仿真出現了哪些現象,這些現象又是為何產生的,怎么樣得到解決和改善。如此引導學生,一步步實現秒的60s計時和顯示,如圖5所示。學生在此基礎上進一步編程實現60分和24時的計時和顯示,如圖6所示。

圖5 在8位一體的數碼管電路上實現60s計時

圖6 實現電子鐘計時并顯示
在完成溫度測控系統的設計與實現這個項目后,啟發學生如何通過液晶顯示器來顯示電子鐘的計時時間,以擴展學生的設計能力。
在電子鐘的設計中,按鍵輸入可以使用獨立式按鍵,也可以矩陣鍵盤來實現時鐘的啟動、停止、復位以及調整時間。
先以獨立式按鍵來實現時鐘啟動和停止,這種情況僅需要一個按鍵。筆者在課上先講述了按鍵處理的步驟,然后提出了分別以查詢方式和中斷方式如何來實現啟停功能,讓學生思考在前面設計的電路基礎上怎么進行硬件電路的設計和軟件程序的編寫,最終在Proteus中設計出了按鍵電路與系統的兩種連接方式,并在程序中以查詢方式和中斷處理方式實現了啟停功能,如圖7、8所示。

圖7 查詢方式對應的電路圖
進一步拓展設計,讓同學們修改程序在圖8的中斷方式電路上實現時鐘啟動、停止和復位,掌握一個按鍵有三種功能時程序應該如何編寫。

圖8 中斷方式對應的電路圖
在上述中斷方式電路設計基礎上,再進一步實現按鍵調時的功能,以獨立式按鍵結構實現時需要兩個按鍵,其中一個按鍵控制時、分、秒的哪一位需要調整,另一個按鍵控制需要調整的具體時間點。此時的情況是單片機只有兩個外部中斷引腳,但有三個按鍵要以中斷方式來響應,硬件電路上中斷要如何擴展。筆者在課上普及了中斷擴展的方法,并最后引導學生在Proteus中設計出了,具有啟動、停止、復位和調時功能的硬件電路圖,如圖9所示。

圖9 三個按鍵以中斷擴展方式接入電路
以矩陣按鍵來實現上述功能,可以在筆者介紹了矩陣按鍵的工作原理和識別方法后,由同學自行結合Proteus和keil軟件進行電路設計和程序編寫。
蜂鳴器的分類及其驅動方法比較簡單,布置給學生自行學習和仿真,課堂總結學生做得好的地方以及不足之處。
這種在Proteus中靈活化、逐漸遞進式深入地講授方式,使得學生很容易理解各個知識點,建立直觀的仿真思想,并很有動力進行創新,讓學生不再畏難而卻步,也慢慢明白了仿真出現的現象和電路、程序編制的之間對應關系,同樣也有了一個實際功能可以由硬件實現,也可用軟件實現的體驗。在本學期的科創大賽中,學習單片機課程的整個年級學生踴躍報名,從在Proteus中仿真去實現設計功能,到繪制電路原理圖,搭建硬件電路圖調試,進而實現題目規定功能,比往屆同學對于本課程的實踐水平高出了很多,對教學產生了積極的影響。這樣的學習方式也為學生參加全國電子設計大賽奠定了牢固的基礎。