王莉軍
【摘 要】單片機是一種集成度很高的微型計算機,是現(xiàn)代電子系統(tǒng)中重要的智能化工具,廣泛應(yīng)用于工業(yè)自動化控制、家用電器、智能儀表、汽車電子、航天電子等。在單片機課程教學(xué)中,理論結(jié)合實踐的綜合性課程設(shè)計項目教學(xué)是非常重要的。本論文介紹了一個單片機課程設(shè)計中非常經(jīng)典的電子鐘設(shè)計項目,通過該案例的設(shè)計分析,可以使同學(xué)們能夠熟練掌握并靈活運用所學(xué)的知識,了解一個產(chǎn)品開發(fā)的全過程,鍛煉學(xué)生的創(chuàng)新、獨立思考、解決問題的能力。
【關(guān)鍵詞】電子鐘;Proteus;LCD1602;DS1302
中圖分類號: F426.63 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2017)17-0004-002
Practice Teaching of Electronic Clock Project Based on Proteus
WANG Li-jun
(Department of Computer Science and Technology,Sanda University,Shanghai 201209,China)
【Abstract】In Single chip microcomputer course, project teaching of comprehensive curriculum design is very important. This paper introduces a very classic curriculum design of the electronic clock project. Through this project, students can master and apply the knowledge, understand the whole process of a product development. Students' creativity, independent thinking and problem solving skills can be exercised.
【Key words】Electronic Clock; Proteus; LCD1602; DS1302
0 前言
隨著LCD液晶顯示屏的普及,很多地方我們都能看到電子鐘的應(yīng)用,比如電子手表、測試儀器、智能家電、公共場合的大屏幕時間顯示屏等。本論文介紹了一個基于Proteus單片機仿真平臺的電子鐘設(shè)計[1]。
1 總體設(shè)計
本電子鐘的功能是通過液晶顯示屏實時顯示時鐘。電子鐘包括時鐘模塊、顯示模塊,具體的流程是先把設(shè)置的初始時間寫入時鐘芯片并驅(qū)動時鐘運行,然后單片機每隔一段時間讀出時鐘芯片的當(dāng)前時間,并通過液晶顯示屏顯示出來。
2 詳細(xì)設(shè)計
2.1 時鐘模塊
2.1.1 DS1302模塊電路設(shè)計
時鐘模塊采用DS1302芯片,該芯片總共包括8個引腳:1腳VCC2為主電源和8腳VCC1為后備電源,可接電池;2腳X1和3腳X2為晶振引腳,外接32768Hz晶振;4腳GND接地;5腳/RST為復(fù)位/片選引腳;6腳I/O為串行數(shù)據(jù)輸入輸出引腳;7腳SCLK為串行時鐘引腳。單片機通過5、6、7腳控制DS1302時鐘芯片。5腳/RST連接到單片機P1.7, 6腳I/O連接到單片機P3.4,7腳SCLK連接到單片機P3.5[1]。
2.1.2 DS1302模塊軟件設(shè)計
對DS1302的操作實際上就是對主要的8個時鐘寄存器進(jìn)行讀寫。具體的控制流程是先寫入控制字,然后再寫入或讀出寄存器數(shù)據(jù)。寄存器控制字包括讀寫的寄存器地址和讀寫操作等信息,最高位bit7固定為1,bit6為RAM和時鐘的選擇位,bit5~bit1為寄存器地址位,bit0為讀寫選擇位。
接下來就是怎樣寫入寄存器控制字和讀寫寄存器數(shù)據(jù),這就要涉及到DS1302讀寫時序。DS1302
單字節(jié)一次讀取和寫入過程可以看成是對兩個字節(jié)的讀寫操作,即1個字節(jié)的寄存器控制字和1個字節(jié)的讀寫寄存器數(shù)據(jù)。例如單字節(jié)讀時序是先寫入一個字節(jié)的寄存器控制字(以便知道要讀取哪個寄存器數(shù)據(jù)),然后再讀出對應(yīng)寄存器的一個字節(jié)數(shù)據(jù)。單字節(jié)寫時序也是先寫入一個字節(jié)的寄存器控制字,然后寫入一個字節(jié)數(shù)據(jù)到對應(yīng)的寄存器。而且對于一個字節(jié)的寄存器控制字和寄存器數(shù)據(jù),它們的寫過程是一樣的,也就是說寫一個寄存器控制字和寫一個寄存器數(shù)據(jù)可以調(diào)用同一個函數(shù)的,所以可以只設(shè)計兩個底層接口函數(shù),用于讀、寫單個字節(jié):void write_byte(uchar addr)和uchar read_byte(void)。DS1302單字節(jié)讀時序可以調(diào)用寫控制字write_byte(addr)和讀數(shù)據(jù)read_byte()兩個函數(shù),對上一層的接口函數(shù)為uchar read_ds1302(uchar addr),即從某個寄存器中讀取數(shù)據(jù)。而DS1302單字節(jié)寫時序可以調(diào)用寫控制字write_byte(addr)和寫數(shù)據(jù)write_byte(data),對上層的接口函數(shù)為write_ds1302(uchar addr,uchar dat),即將數(shù)據(jù)寫入指定地址的寄存器。
寫單字節(jié)函數(shù)void write_byte(uchar addr)的流程是在時鐘的上升沿將每一個數(shù)據(jù)位寫入DS1302,具體流程為:將字節(jié)從低位開始依次寫入DS1302,即先取數(shù)據(jù)的最低位放在I/O數(shù)據(jù)線上,然后SCLK電平設(shè)為高電平,產(chǎn)生上升沿,此時I/O上數(shù)據(jù)會寫入DS1302,再將SCLK置為低電平,數(shù)據(jù)右移一位,為下一次數(shù)據(jù)位傳輸做準(zhǔn)備,然后又進(jìn)入下一位數(shù)據(jù)的傳輸。讀單字節(jié)函數(shù)uchar read_byte(void)的流程是在時鐘的下降沿時通知DS1302要取數(shù)據(jù)位,在低電平一段時間等DS1302準(zhǔn)備好數(shù)據(jù)后,再從I/O數(shù)據(jù)線上讀取一位數(shù)據(jù),而且在寫控制字的最后一位的時鐘周期,要讀取的數(shù)據(jù)最低位已經(jīng)在I/O數(shù)據(jù)線上,具體流程為:先讀取I/O數(shù)據(jù)線上的數(shù)據(jù)位,將它保存在一個數(shù)據(jù)的最高位,SCLK置為高電平,然后再置為低電平,產(chǎn)生下降沿,通知DS1302要取下一位數(shù)據(jù),并且將保存的數(shù)據(jù)右移一位,以便將新接收的數(shù)據(jù)位放在保存數(shù)據(jù)的最高位[2]。endprint
2.1.3 DS1302模塊仿真測試
通過Proteus和Keil軟件聯(lián)合仿真DS1302時鐘模塊,寫入時間2017年9月1日 12點30分30秒能正常寫入,仿真結(jié)果如圖1所示:
圖1 DS1302模塊仿真測試結(jié)果
圖2 LCD1602液晶顯示流程圖
2.2 顯示模塊
2.2.1 電路設(shè)計
顯示模塊采用LCD1602,它總共能顯示32個字符,分兩行顯示。LCD1602芯片總共有16個引腳。主要的控制和數(shù)據(jù)引腳有:RS指令/數(shù)據(jù)寄存器選擇引腳4,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器,接單片機P1.0;RW讀寫選擇引腳5,高電平時讀操作,低電平時寫操作,接單片機P1.1;E使能引腳6,接單片機P1.5;D0~D7數(shù)據(jù)引腳7~14,接單片機P0端口[3]。
2.2.2 軟件設(shè)計
單片機主要是通過4腳寄存器選擇RS、5腳讀寫選擇RW、6腳使能E來控制LM1602液晶顯示模塊。
LM1602有16×2個顯示位,每個顯示位對應(yīng)于一個RAM單元,而且系統(tǒng)規(guī)定,寫操作時的地址最高位為1,讀操作時的地址最高位為0,所以讀操作時RAM的地址范圍為:第一行00H~0FH,第二行40H~4FH,寫操作時RAM的地址范圍為:第一行80H~8FH,第二行C0H~CFH。根據(jù)RAM地址表,可以確定如何顯示字符,即先寫入字符顯示的首地址,然后依次連續(xù)寫入要顯示的字符。那么如何將顯示的地址和顯示的字符寫入LCD1602呢,它們都是根據(jù)LM1602芯片的讀寫操作控制時序?qū)懭氲?,?dāng)E為下降沿脈沖時寫入指令或數(shù)據(jù),當(dāng)E為高電平時讀出狀態(tài)字或數(shù)據(jù),而且它是并行數(shù)據(jù)傳輸?shù)模瑫r序相對于DS1302的串行數(shù)據(jù)傳輸簡單些。
要在液晶顯示器上顯示兩行字符串,可以將需要顯示的兩行字符串分別存放在兩個字符數(shù)組里,流程圖如圖2所示。LCD的初始化主要是設(shè)置LCD的工作模式、清屏、光標(biāo)顯示方式等,即清屏顯示指令為0x01,表示清除所有顯示數(shù)據(jù);輸入模式指令為0x06,表示讀寫一個字符后地址指針會自動加1;顯示開關(guān)控制指令為0x0F,表示整屏顯示;顯示模式指令為0x38,表示8位數(shù)據(jù)接口,雙行顯示。設(shè)置第一、二行首地址,寫命令和寫數(shù)據(jù)操作可以根據(jù)LM1602芯片的讀寫操作控制方式寫出[4]。
2.2.3 仿真測試
LCD1602模塊顯示功能測試結(jié)果如圖3所示,第一二行都能正常顯示字符。
圖3 LCD1602模塊仿真測試結(jié)果
圖4 電子鐘系統(tǒng)仿真測試結(jié)果
2.3 系統(tǒng)測試
將時鐘模塊和液晶顯示模塊聯(lián)合仿真測試,結(jié)果如圖4所示,設(shè)置的初始時間為2017年9月1日,12點30分30秒,星期五,設(shè)置后,時鐘能正常工作。圖中也包括單片機的時鐘、復(fù)位電路[5]。(下轉(zhuǎn)第7頁)
(上接第5頁)
3 結(jié)語
本文介紹了基于Proteus的電子鐘項目的教學(xué)實踐過程,它的特點是在沒有硬件開發(fā)平臺的環(huán)境下,同學(xué)們也可以進(jìn)行項目的開發(fā)實踐,并且通過該項目,同學(xué)們可以了解一個項目的開發(fā)流程,以及熟練掌握常用的時鐘模塊DS1302、液晶顯示模塊LCD1602的設(shè)計方法。
【參考文獻(xiàn)】
[1]老楊.51單片機工程師是怎樣煉成的-基于C語言和Proteus仿真[M].北京:電子工業(yè)出版社,2012:284-298.
[2]宋雪松,李冬明,崔長勝.手把手教你學(xué)51單片機[M].北京:清華大學(xué)出版社,2014:264-298.
[3]魏芬主,戴麗佼,李紅霞.基于Proteus的單片機實驗與課程設(shè)計[M].北京:清華大學(xué)出版社,2015:218-222.
[4]林立,張俊亮.單片機原理及應(yīng)用-基于Proteus和Keil C. 第3版[M].北京:電子工業(yè)出版社,2014:213-218.
[5]張霞,周克,何威,張超.基于MCS-51單片機的液晶顯示設(shè)計[J].自動控制,2014.3:71-74.endprint