摘要:本設計采用STC89C52單片機作為下位機,PC機作為上位機。二者通過RS-232串行口接受或上傳數據。我們要實現串口通信是通過PC機發出信號,然后經過數碼管顯示。在本設計中,選用鍵盤輸入數據,共采用四個鍵盤和四個八段LED數碼管顯示。四個鍵盤分別用來顯示、選位按鍵、加一按鍵和減一按鍵,而四個八段LED數碼管分別顯示個、十、百、千位。在顯示方面采用動態顯示。調試方面是通過串口調試助手完成數據的發送和查看LED數碼管的顯示出的數字是否與輸入一致。
關鍵詞:課程設計 STC89C52單片機 RS-232串行口
1 主要原件的選擇
1STC89C52單片機的功能特性描述
STC89C52的結構簡單,并可以在編程器上實現閃爍式的電擦寫達幾萬次以上,使用方便等優點,而且完全兼容MCS5l系列單片機的所有功能。STC89C52是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—FAlsh ProgrAmmABle And ErAsABle ReAd Only Memory),低電壓,高性能CMOS8位微處理器,俗稱單片機。STC89C51系列單片機是宏晶科技推出的新一代超強抗干擾/高速/低功耗的單片機,是MCS-51系列單片機的派生產品;它們在指令系統中、硬件系統和片內資源與標準的8052單片機完全兼容,DIP-40封裝系列與8051為pin-to-pin兼容,指令代碼是與8051完全兼容的單片機。該器件與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,STC89C52是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
STC89C52單片機具有增強型12時鐘/機器周期、6時鐘機器/周期任意選擇,工作電壓為5.5V-3.4V(5V單片機)/3.8V-2.0V(5V單片機);工作頻率范圍:0-40MHZ,相當于普通8051的0-80MHZ。實際頻率可達48MHZ。用戶應用程序空間為4K/8K/13K/16K/20K/
32K/64K字節;片上集成1280字節/512字節RAM;有32/36個通用I/O口,P1/P2/P3/P4是準雙向口;集成ISP(在系統可編程)/IPA(在應用可編程),無需專用的編程器/仿真器,可通過串行口(P3.0/P3.1)直接下載用戶程序,8K程序3秒就可以完成一片,具備EEPROM功能,工作溫度范圍在0-750℃,共有3個16位定時器/計數器,其中定時器T0還可以當成2個8位定時器使用;封裝形式有DIP-40,PLCC-44,PQFP-44等。
2 顯示的設計方案
顯示采用LED數碼管,一方面與其他顯示器件相比,LED數碼管顯示清晰直觀,另一方面LED數碼管的成本低,符合經濟適用的設計原則。
設計中采用動態掃描的方式把數據輸出出來,共用到四個八段LED數碼管,分別表示個、十、百、千位,通過按鍵來實現四位之間的相互轉換,手動選擇需要顯示的位數。在調用顯示程序時,需要輸出的值會通過74LS138譯碼器輸出到相應的LED數碼管,哪一位數據需要改變,只需手動調節。
3 按鍵的設計方案
按鍵采用的是中斷編碼按鍵,這趟既能設計多個按鍵,而且還不用占用程序太多時序。
按鍵總共用到4個:
數據傳送按鍵一個,此按鍵是實現在LED數碼管上顯示的數據能發送到串口調試助手上。
選擇顯示位按鍵一個,用來選中需要操作的數據位,每按一下,都會選中個、十、百、千位中具體的一位。
數據加一按鍵一個,用來實現數據的加一操作,每按一下,都會使顯示數字在原有基礎上加一。
數據減一按鍵一個,與加一按鍵相反,此按鍵用來實現數據的減一操作,每按一下,都會使顯示位上的數據在原有數據的基礎上減一。
本設計以STC89C52單片機為中心,分別設計了按鍵電路、數據接收和發送電路和LED數碼管顯示電路。按鍵采用的是中斷編碼按鍵;串行口數據的接收和發送電路采用RS-232;顯示采用的是靜態掃描數據顯示。系統電路總體示意圖如下圖所示。
4 晶振的選擇
設計中用到的晶振是11.0592MHZ。
5 軟件設計
串行口通信的軟件部分是基于C語言進行程序設計的,程序結構總體上包括五大部分,即主程序、延時程序、發送程序、接收顯示程序、中斷程序。
各個部分以主程序為中心,主程序主要功能是對各個數據和接口進行初始化、調用適當的子程序等協調整個程序的運行。
程序流程圖如下圖所示。從程序流程圖中可以很明顯的看出整個設計的整體思路。
6 主程序的設計
主程序在初始化串口之后,便開始等待按鍵按下,當K2鍵按下時,位選碼就加一,如果初始位置為個位,此時選中十位,以此類推,當位選碼大于3時,將其重置為0。當按下K3鍵時,若此時的位選是個位則對個位加一,若為十位則對十位加一,以此類推。當K4鍵按下時,若此時位選為個位,則對個位減一,若為十位則對十位減一,以此類推,當顯示的數值為9時,如果再加一,現實的數據將會從零開始重新計數。當K1鍵按下時,就將前面的個十百千位的數值傳送出去。當有串行中斷來臨時,就執行中斷程序,將接收的數據通過顯示程序在LED數碼管上顯示出來。主程序流程圖如圖1所示。
7 子程序的設計
7.1 串口初始化程序的設計
由程序可知,SCON=0x50使串口工作在工作方式一,串行允許接收。TMOD=0x20使定時器工作在方式二——自動重裝初值的八位定時器。隨后將用初值計算公式計算出初值為0xf3,波特率選為4800bps。接下來開放串口中斷,允許定時器1工作,最后開總中斷。其程序流程圖如圖2所示。
7.2 數據發送和接受程序的設計
當PC機有數據輸出時,就會引起按鍵中斷,隨即執行中斷程序,通過查詢接收標志位RI,確定串行中斷,手動清零RI標志位。然后將接收緩沖器里的數據轉存入內存中,本設計傳送的是四位十六進制的數。隨后,調用顯示程序,是數據顯示在LED數碼管上。發送子程序與接收子程序類似,當發送鍵按下時,將數據裝入發送緩沖器,等待發送中斷標志位TI=1,說明發送完成。然后手動將TI清零。
7.3 顯示程序的設計
在顯示模塊,本設計采用4個LED數碼管的動態顯示形式。另外為了保證數據的正常顯示,在顯示之前會有一個清零的操作。在程序設計中,采用Switch語句來設置74LS138譯碼器的輸入端口,從而決定具體是哪位LED數碼管進行顯示。
7.4 延時子程序的設計
在延時子程序的設計中運用兩個For()循環實現延時的操作,由于在設計的其它程序模塊中延時的時間不同,所以在延時子程序中,用到xms無符號字符來決定具體的延時時間,使整個設計更加完美。
參考文獻:
[1]李朝青.單片機原理及接口技術(第三版).北京:北京航空航天大學出版社,2005.
[2]劉守義主編.數字電子技術。西安:西安電子科技大學出版社,2001.
[3]趙曉安.MCS-51單片機原理及應用.天津:天津大學出版社,2001.3.
[4]李廣第.單片機基礎(第一版).北京:北京航天大學出版社,1999.
[5]馬淑花,王鳳文,張美金.單片機原理與接口技術.北京:北京郵電大學出版社,2005.
[6]崔瑋.Protel99SE電路原理圖與電路板設計教程.北京:海洋出版社,2005.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文