楊 楠
(西安鐵路職業技術學院,陜西 西安 710014)
當前,大多數院校對于電子設計類課程采用的授課方法都是先要求理解(理解原理、實現思路等),然后才是實踐編程,這樣會學生們對此類課程缺少初步的認知,更談不上什么興趣,因此教學效果不好。高職院校強調培養操作型人才,因此在日常授課中,不僅采用了現場教學等方法,還增設了許多實踐內容,以提高學生的動手能力;但由于實踐教學內容的設計相對薄弱,使得學生本身缺乏興趣,無法將書本上的理論與實際結合起來,導致效果不明顯,嚴重影響了學生動手能力的提高,甚至成為制約高職發展的瓶頸。為此,提出了一種新的單片機教學模式,即通過詳細描述數字鐘電路的整個過程設計,讓學生自己動手從繪制電路原理圖到利用ISIS軟件仿真,再到元件焊接以及電路調試,最終生產出一臺屬于自己的數字鐘。通過這一系列連續的工作,使學生切實體會到成就感,提升了動手能力,使學生對單片機技術產生初步的興趣。
簡易單片機應用大多采用最小應用系統,系統實物如圖1所示,主要包括單片機電路模塊、振蕩電路模塊、復位電路模塊、電源接口模塊以及≥12 MHz頻率的晶振(波特率為1 MHz)。最小應用系統是最簡單的單片機外圍電路,許多功能都可以利用該系統實現,其制作成功后可為后續試驗提供平臺。

圖1 單片機最小應用系統實物圖
單片機最小應用系統材料清單見表1,可按表1準備原件即可實現MCS-51最小應用系統電路。
首先在面包板當中放置40腳的IC芯片[1],用來放置單片機;然后將P0口(管腳32~39)、P1口(管腳1~8)、P2口(管腳21~28)和P3口(管腳10~17)分別引出排陣,用于系統擴展。

表1 單片機最小應用系統材料清單
單片機復位電路形式多種多樣,本文采用按鍵式復位電路,電路連接如圖2所示。首先將200 Ω電阻的一端、電解電容的負極和1 kΩ電阻的一端均與單片機的9號管腳相連接;然后將電解電容的正極接電源VCC,1 kΩ電阻的另一端接地;最后將200 Ω電阻的另一端與復位開關相接,復位開關的另一端接電源。復位開關共有4個管腳,在接線時選擇對角線接法即可[2]。
電路連接如圖2所示,首先將12 MHz的晶振兩端與單片機的18腳、19腳分別相連接;然后將2個30 pF的電容的一端與晶振的2個管腳相接;最后將2個電容另一端分別接地即可。
在單片機最小應用系統板上設計電源接口模塊,此模塊主要采用4個排針作為電源插口,且均為并聯方式連接,其中J1為電源輸入端,J2~J4可用于系統擴展,為其他模塊提供電源,電路連接如圖2所示,單片機的31號管腳應接電源,表示使用片內ROM。

圖2 MCS-51最小應用系統原理圖
列出制作簡易數字鐘所需的原件清單(見表2),其中74HC245芯片起到電流放大作用,由于MCS-51端口輸出信號的驅動能力有限,因此為了增強信號的驅動能力,需經過74HC245放大,8只PNP型9012三極管作為開關使用配合選通管腳,當某一只引腳輸出低電平時,其所接的三極管便導通,使得該管所接引腳的信號傳送到數碼管的引腳上[3]。

表2 數字鐘所需元器件清單
在軟件設計中遵循V模型自頂向下的設計原則[4],先設計好程序總體運行時的邏輯框圖,在此階段可以不考慮具體的實現細節,以免影響整體設計思路,主體程序結構框圖如圖3所示。

圖3 主體程序結構框圖
主體程序如下:
1 #include
2 #define uint unsigned int
3 #define uchar unsigned char
4 uint time_t; //毫秒統計值
5 #uchar hour,min,sec; //數碼管顯示值,小時,分,秒
6 uchar code led[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0Xe0, 0xFE,0xF6}//數碼管顯示0~9
7 void main()
8{
9 sec=56;
10 min=59;;
11 hour=23;//時間初始化為23:59:56
12 while(1){
13 DISPLAY_NUM(sec,0x01);//顯示秒
14 DISPLAY_NUM(min,0x08); //顯示分
15 DISPLAY_NUM(hour,0x40); //顯示小時
16 DISPLAY_CHAR( ); //顯示分隔符“—”
17 TIME_TAKE( ); //調用時間調整函數}
18}
程序第一行包含AT89X51.h頭文件,該文件包含常用的51系列單片機宏定義,第2和第3行將表述方式較為復雜的無符號整形、無符號字符型2種數據類型采用定義的方法進行簡化改寫。第4和第5行共定義了4個全局變量,分別用于存儲毫秒統計值、小時值、分值和秒值。第6行定義了一個容量為10的一維數組,用于存儲能夠在數碼管上顯示0~9這10個數字的十六進制數。主程序一開始對數碼管進行了初始化,這里設置為23:59:56,而主程序中被調用最頻繁的函數DISPLAY_NUM其函數原型為DISPLAY_NUM(uchar num,dis_w)其中局部變量num傳遞被送顯數值,而dis_w變量則是傳遞送顯數值顯示的位置。下述分析時間調整函數TIME_TAKE()。
Void TIME_TAKE()
{ if(time_t>=1000) //當總延時數為1 s時
{ time_t=0; //time_t 清零
sec++; //秒加1
if(60==sec) //當秒值為60時
{ sec=0; //秒值清零
min++; //分加1
if(60==min) //當分值為60時
{ min=0; //分值清零
hour++; //分加1
if(24==hour) hour=0; //當小時為24時,小時清零
} } } }
時間調整函數的處理流程如下:首先判斷毫秒累加值是否達到1 000,若是,則秒累加值加1,同時毫秒累加值清零;如果秒值到了60,則分累加值加1,同時秒值清零;若分值到了60,則小時累加值加1,同時分值清零;如果小時累加值到了24,則小時累加值清零;上述判斷只要任何一步不滿足條件則退出該函數。
利用上述源代碼及硬件電路圖可以在ISIS中進行虛擬仿真測試,此軟件可以模擬單片機應用程序的運行結果,在此平臺下可以驗證硬件電路及代碼的正確性,并進行代碼的修改以及優化,只有仿真結果正確,才有必要制作電路板實現硬件電路[5]。
啟動Proteus仿真軟件,根據硬件連接圖,在元件庫中找出相應原件并連接(見圖4),共需用到AT89C51芯片、4009反向器和8位1體7段數碼管7seg-mpx8。單擊元件庫“P”按鈕,在彈出對話框中輸入所需原件名,并將其布放到位,此處在仿真時做了如下省略:實際電路中,從單片機P0端口引出的8腳首先通過74HC245芯片后,再接入數碼管的a~h腳,這是因為需要考慮電流的驅動能力,而仿真只是為了驗證程序的正確性,因此在仿真圖中可以省略,直接將P0口與數碼管管腳相連,減少仿真難度;同時實際電路中數碼管8只位選腳同時也是數碼管工作時電流的提供腳,因此提供8只PNP三極管做開關管,既可以起到選通作用,也可以提高電流的驅動能力,而仿真中均用4009反相器代替,模擬選通作用。
制作電路板應遵循如下原則:1)考慮原件在面包板上布局美觀、大方,相關元器件盡量接近;2)考慮原件走線需要,盡可能預留走線空間。
走線時線路盡量布放在原件的背面,如果實在布放困難必須布放在原件側,則依據“正面走橫線,背面走豎線”的原則。
制作步驟如下。

圖4 Proteus仿真圖
1)找出2個12腳IC底座,放置合適位置,使得2個4位數碼管安裝完成后正好組成1個8為數碼管。
2)確定2個4位數碼管的12只引腳,哪8只控制數碼管的7段及小數點,哪4只腳是位控制腳并標示。
3)分別將2個4位數碼管相應的a-a、b-b、c-c、d-d、e-e、f-f、g-g、dp-dp等8對腳兩兩連接,并引出到合適位置成為8只段腳。
4)將2個4位數碼管的8只位選腳也分別引出到合適位置,成為8只位腳。
5)在8只段腳引出處連接8只電阻,并通過該電阻連接74LS245芯片相應的引腳處,同時將245芯片另8只腳連接到排針處。
6)8只位腳引出到8個PNP型三極管的集電極,發射極連在一起接VCC,基極接電阻后連接到另外的8只排針處。
實際制作好的電路板如圖5所示。

圖5 電路板實物圖
考慮到高職院校的特點,單片機教學應該是“模仿—理解—擴展”的過程。模仿階段主要是“玩”的階段,通過模仿學習讓學生對這門課程產生興趣,在這個階段應盡可能地提供詳細的資料,如電路圖、原理圖、操作流程和源代碼等,這樣初學者即使不懂也能依樣畫葫蘆做出成品,這對提高學習興趣有著至關重要的作用;之后的理解階段是真正的學習過程,從單片機的原理到高級應用以及源代碼的編寫進行融會貫通, 在原來模仿的基礎上能夠加以改造從而設計出自己的產品;最后的擴展階段則是沒有明確的界限,也是一個長期的過程,能夠得心應手地設計解決生活中的問題。
為實現上述目的,設計了一款較為容易實現的單片機應用電路,通過讓學生親自動手參與從電路的設計到項目仿真,再到元件的焊接,最后整體調試。這一整套生產工藝,讓學生們了解單片機電路板的開發制作過程及原理, 不僅提高了學生的動手能力,更重要的是提高同學們對本門課程的興趣,真正做到學以致用,讓大家知道平日上課所學的理論知識在現實當中具體的運用。經過兩屆學生的現場教學發現,同學們通過這樣的實訓模式后,普遍對單片機的后續功能開發充滿了興趣,并養成了獨立思考的能力,動手能力有了明顯提升。
[1] 朱可斌.電路基礎[M].西安:西安電子科技大學出版社,2005.
[2] 傅豐林.低頻電子線路[M].北京:高等教育出版社,2005.
[3] 孫津平.電子技術及其應用[M].北京:北京理工大學出版社,2012.
[4] 丁峰,柳西玲.UML技術及應用[M].北京:高等教育出版社,2004.
[5] 倪志蓮.單片機應用技術[M].北京:北京理工大學出版社,2010.