2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  信息科學(xué)與技術(shù)學(xué)院</b></p><p><b>  單片機(jī)原理及應(yīng)用</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  課題名稱:基于STC89C52單片機(jī)電子鐘設(shè)計(jì)</p><p>  學(xué)生姓名:

2、 </p><p>  學(xué) 號(hào): </p><p>  專業(yè)年級(jí): </p><p>  指導(dǎo)教師: </p><p>  完成時(shí)間: 2013-07-06

3、 </p><p><b>  目 錄</b></p><p>  1.單片機(jī)電子鐘系統(tǒng)概述1</p><p>  1.1電子鐘的描述1</p><p>  1.2電子鐘的概述1</p><p><b>  2.題目及要求2</b></p><

4、p><b>  2.1 題目2</b></p><p><b>  2.2要求2</b></p><p>  3.方法選擇與論證2</p><p>  3.1單片機(jī)芯片的選擇方案和論證2</p><p>  3.1.1方案一2</p><p>  3.1.2方

5、案二2</p><p>  3.2顯示模塊的選擇與論證3</p><p>  3.2.1方案二3</p><p>  3.2.2方案二3</p><p>  3.2.3方案二3</p><p>  3.3電路設(shè)計(jì)最終方案決定3</p><p>  4.硬件原理電路圖的設(shè)計(jì)及分析3&

6、lt;/p><p>  4.1 STC89C52J介紹3</p><p>  4.1.1 STC89C52主要功能及PDIP封裝3</p><p>  4.1.2 STC89C52引腳介紹4</p><p>  4.1.3 STC89C52的最小系統(tǒng)5</p><p>  4.2.LCD1602液晶顯示器介

7、紹6</p><p>  4.2.1 LCD1602液晶概述6</p><p>  4.2.2 LCD1602引腳介紹7</p><p>  4.2.3 LCD1602字符液晶使用方法8</p><p><b>  5.系統(tǒng)流程圖9</b></p><p>  5.1 電路設(shè)

8、計(jì)框圖9</p><p>  5.2 系統(tǒng)流程圖9</p><p>  5.3 硬件框圖11</p><p><b>  6.編程思路13</b></p><p><b>  7.系統(tǒng)評(píng)價(jià)13</b></p><p><b>  8.心得體會(huì)14&l

9、t;/b></p><p><b>  9.參考文獻(xiàn)14</b></p><p>  10.程序代碼16</p><p>  11.實(shí)驗(yàn)效果圖29</p><p>  基于STC89C52單片機(jī)電子鐘設(shè)計(jì)</p><p>  1.單片機(jī)電子鐘系統(tǒng)概述</p><p&

10、gt;<b>  1.1電子鐘的描述</b></p><p>  數(shù)字電子鐘是采用電子電路實(shí)現(xiàn)對(duì)年、月、日、時(shí)、分、秒數(shù)字顯示的計(jì)時(shí)裝置,由于數(shù)字集成電路的發(fā)展和石英晶體震蕩器的廣泛應(yīng)用,使得數(shù)字電子鐘的精度遠(yuǎn)遠(yuǎn)超過(guò)老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,成為人們?nèi)粘I钪胁豢扇鄙俚谋匦杵贰?lt;/p><p><b>  1.2電子鐘的概述<

11、;/b></p><p>  20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。隨著科技的發(fā)展和社會(huì)的進(jìn)步,人們對(duì)鐘表的要求也越來(lái)越高,傳統(tǒng)的鐘表已不能滿足人們的需求。單片機(jī)在多功能電子鐘中的應(yīng)用已是非常普遍的,人們對(duì)電子鐘的功能及工作順序都非常熟悉。&

12、lt;/p><p>  電子時(shí)鐘是采用數(shù)字電路實(shí)現(xiàn)對(duì)時(shí)間、日期數(shù)字顯示的計(jì)時(shí)裝置,是人們?nèi)粘I钪斜夭豢缮俚谋匦杵?,廣泛用于個(gè)人家庭以及車站、航站、劇院、辦公室等公共場(chǎng)所,給人們的生活、學(xué)習(xí)、工作、娛樂(lè)帶來(lái)極大的方便。</p><p>  縱觀我們現(xiàn)在生活的各個(gè)領(lǐng)域,從導(dǎo)彈的導(dǎo)航裝置,到飛機(jī)上各個(gè)儀表的控制,從計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,到工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理;以及我們生活中廣泛

13、使用的各種智能IC卡等,這些都離不開(kāi)單片機(jī)。以前沒(méi)有單片機(jī)時(shí),這些東西也能做,但是智能使用復(fù)雜的模擬電路、然而這樣做出來(lái)的產(chǎn)品不僅體積大,而且成本高,并且由于長(zhǎng)期使用,與元件不斷老化,控制精度自然也會(huì)達(dá)不到標(biāo)準(zhǔn)。在單片機(jī)產(chǎn)生后,我們就將控制這些東西變?yōu)橹悄芑?,我們只需要在單片機(jī)外圍接一點(diǎn)簡(jiǎn)單的接口電路,核心部分只是由人為的寫入程序來(lái)完成。這樣產(chǎn)品的體積變小了,成本也降低了。隨著電子技術(shù)的飛速發(fā)展,家用電器和辦公電子設(shè)備逐漸增多,不同的

14、設(shè)備都有自己的控制器,使用起來(lái)很不方便。根據(jù)這種實(shí)際情況,設(shè)計(jì)了一個(gè)單片機(jī)多功能電子鐘系統(tǒng),他可以避免多種控制器的混淆,利用一個(gè)控制器對(duì)多路電器進(jìn)行控制,同時(shí)又可以進(jìn)行時(shí)鐘校準(zhǔn),它可以任意設(shè)置時(shí)間。這種具有人們所需要的智能化特性的產(chǎn)品減輕了人們的勞動(dòng),擴(kuò)大了數(shù)字化的范圍,為家庭數(shù)字化提供了可能。</p><p><b>  2.題目及要求</b></p><p>&l

15、t;b>  2.1 題目</b></p><p>  基于STC89C52單片機(jī)電子鐘設(shè)計(jì)</p><p><b>  2.2要求</b></p><p> ?。?)在LCD1602液晶顯示器上顯示年份、月、日、星期、時(shí)、分、秒。</p><p> ?。?)年-月-日-星期顯示在第一行,格式XX-XX-

16、XX-星期X;時(shí)-分-秒顯示在第二行,格式XX-XX-XX(24小時(shí)格式) 。</p><p>  (3)用按鍵任意更改顯示的時(shí)間:</p><p>  1)K13按鍵功能是停止時(shí)鐘,進(jìn)行設(shè)置顯示的時(shí)間,光標(biāo)移動(dòng)。</p><p>  2)在K13按下的時(shí)候,K14進(jìn)行時(shí)間的增加。按一次就增加1。</p><p>  3)在K13按下的時(shí)候,

17、K15進(jìn)行時(shí)間的減少。按一次就減少1。</p><p><b>  3.方案選擇與論證</b></p><p>  3.1 單片機(jī)芯片的選擇方案和論證</p><p>  3.1.1、方案一: </p><p>  采用STC89C52芯片作為硬件核心。STC89C52內(nèi)部具有8KB ROM 存儲(chǔ)空間,512字節(jié)數(shù)據(jù)存儲(chǔ)

18、空間,帶有2K字節(jié)的EEPROM存儲(chǔ)空間,與MCS-51系列單片機(jī)完全兼容,STC89C52可以通過(guò)串口下載。</p><p>  3.1.2、方案二:</p><p>  采用AT89S52。AT89S52片內(nèi)具有8K字節(jié)程序存儲(chǔ)空間,256字節(jié)的數(shù)據(jù)存儲(chǔ)空間沒(méi)有EEPROM存儲(chǔ)空間,也與MCS-51系列單片機(jī)完全兼容,具有在線編程可擦除技術(shù)。</p><p> 

19、 由兩種單片機(jī)都完全能夠滿足設(shè)計(jì)需要,而STC89C52相對(duì)ATS89C52價(jià)格便宜,且抗干擾能力強(qiáng)。考慮到成本因素,因此選用STC89C52。</p><p>  3.2 顯示模塊選擇方案和論證</p><p>  3.2.1、方案一:</p><p>  采用點(diǎn)陣式數(shù)碼管顯示。點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,可用來(lái)顯示數(shù)。但體積較大,且價(jià)格也相對(duì)較高,

20、從便攜實(shí)用的角度出發(fā),不采用此種方案。</p><p>  3.2.2、方案二:</p><p>  采用LED數(shù)碼管動(dòng)態(tài)掃描。LED數(shù)碼管價(jià)格便宜,對(duì)于顯示數(shù)字最合適,但功耗較大,且顯示容量不夠,所以也不用此種方案。</p><p>  3.2.3、方案三:</p><p>  采用LCD液晶顯示屏。液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字

21、,顯示多樣,清晰可見(jiàn),且價(jià)格適中,所以采用了LCD數(shù)碼管作為顯示。</p><p>  3.3 電路設(shè)計(jì)最終方案決定</p><p>  綜上各方案所述,對(duì)此次作品的方案選定: 采用STC89C52單片機(jī)作為主控制系統(tǒng);采用1602 LCD液晶作為顯示器件。</p><p>  4.硬件原理電路圖的設(shè)計(jì)及分析</p><p>  4.1 S

22、TC89C52介紹</p><p>  4.1.1 STC89C52主要功能及PDIP封裝</p><p>  STC89C52是由深圳宏晶科技公司生產(chǎn)的與工業(yè)標(biāo)準(zhǔn)MCS-51指令集和輸出管腳相兼容的單片機(jī)。STC89C52主要功能如表4.1所示,其PDIP封裝如圖4.1所示</p><p>  表4.1 STC89C52主要功能</p><

23、p>  4.1.2 STC89C52引腳介紹</p><p>  (1) 主電源引腳(2根)</p><p>  VCC(Pin40):電源輸入,接+5V電源</p><p>  GND(Pin20):接地線</p><p>  (2) 外接晶振引腳(2根)</p><p>  XTAL1(Pin19):片內(nèi)振

24、蕩電路的輸入端</p><p>  XTAL2(Pin20):片內(nèi)振蕩電路的輸出端</p><p>  (3) 控制引腳(4根)</p><p>  RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位</p><p>  ALE/PROG(Pin30):地址鎖存允許信號(hào)</p><p>

25、  PSEN(Pin29):外部存儲(chǔ)器讀選通信號(hào)</p><p>  EA/VPP(Pin31):程序存儲(chǔ)器的內(nèi)外部選通,接低電平從外部程序存儲(chǔ)器讀指令,如果接高電平則從內(nèi)部程序存儲(chǔ)器讀指令。</p><p>  (4) 可編程輸入/輸出引腳(32根)</p><p>  STC89C52單片機(jī)有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個(gè)口有8位

26、(8根引腳),共32根。</p><p>  P0口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7</p><p>  P1口(Pin1~Pin8):8位準(zhǔn)雙向I/O口線,名稱為P1.0~P1.7 </p><p>  P2口(Pin21~Pin28):8位準(zhǔn)雙向I/O口線,名稱為P2.0~P2.7 </p><p>

27、;  P3口(Pin10~Pin17):8位準(zhǔn)雙向I/O口線,名稱為P3.0~P3.7</p><p>  圖4.1 STC89C52 PDIP封裝圖</p><p>  4.1.3 STC89C52最小系統(tǒng) </p><p>  最小系統(tǒng)是指能進(jìn)行正常工作的最簡(jiǎn)單電路。STC89C52最小應(yīng)用系統(tǒng)電路如圖4.2所示。它包含五個(gè)電路部分:電源電路、時(shí)鐘電路、復(fù)位

28、電路、片內(nèi)外程序存儲(chǔ)器選擇電路、輸入/輸出接口電路。其中電源電路、時(shí)鐘電路、復(fù)位電路是 保證單片機(jī)系統(tǒng)能夠正常工作的最基本的三部分電路,缺一不可。</p><p>  (1) 電源電路 芯片引腳VCC一般接上直流穩(wěn)壓電源+5V,引腳GND接電源+5V的負(fù)極,電源電壓范圍在4~5.5之間,可保證單片機(jī)系統(tǒng)能正常工作。為提高電路的抗干擾性能,通常在引角Vcc與GND之間接上一個(gè)10uF的電解電容和一個(gè)0.1uF陶片

29、電容,這樣可抑制雜波串?dāng)_,從而有效確保電路穩(wěn)定性。</p><p>  (2) 時(shí)鐘電路 單片機(jī)引腳18和引腳19外接晶振及電容, STC89C52芯片</p><p>  工作頻率可在2~33MHz范圍之間選,單片機(jī)工作頻率取決于晶振XT的頻率,通常選用11.0592MHz晶振。兩個(gè)小電容通常取值3pF,以保證振蕩器電路的穩(wěn)定性及快速性。</p><p>  (

30、3) 復(fù)位電路 一般若在引腳RST上保持24個(gè)工作主頻周期的高電平,單片機(jī)就可以完成復(fù)位,但為了保證系統(tǒng)可靠地復(fù)位,復(fù)位電路應(yīng)使引腳RST保持10ms以上的高電平。如圖復(fù)位電路帶有上電自動(dòng)復(fù)位功能,當(dāng)電路上電時(shí),由于C1電容兩端電壓值不能突變,電源+5V會(huì)通過(guò)電容向RST提供充電電流,因此在RST引腳上產(chǎn)生一高電平,使單片機(jī)進(jìn)入復(fù)位狀態(tài)。隨著電容C1充電,它兩端電壓上升使得RST電位下降,最終使單片機(jī)退出復(fù)位狀態(tài)。正常運(yùn)行時(shí),可按復(fù)

31、位按鈕對(duì)單片機(jī)復(fù)位</p><p>  圖4.2 STC89C52最小系統(tǒng)</p><p>  4.2 LCD1602液晶顯示器介紹</p><p>  4.2.1 LCD 1602液晶概述</p><p>  工業(yè)字符型液晶,LCD1602是指顯示的內(nèi)容為16*2,能同時(shí)顯示兩行,每行16個(gè)字符。常見(jiàn)的1602字符液晶有兩種,一種顯示

32、綠色背光黑色字體,另一種顯示藍(lán)色背光白色字體,目前市面上絕大多數(shù)基于HD44780液晶芯片控制,原理是完全相同的。本課題所用LCD1602液晶模塊,顯示屏是藍(lán)色背光白色字體。如圖4.3所示</p><p>  圖4.3 LCD 1602字符液晶</p><p>  4.2.2 LCD1602引腳介紹(如表4.2)</p><p>  表4.2 LCD1602字符液

33、晶引腳說(shuō)明</p><p>  各個(gè)引腳具體功能說(shuō)明:</p><p>  第1腳:GND為地電源。</p><p>  第2腳:VCC接5V正電源。</p><p>  第3腳:VO為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生重影,使用一個(gè)1K的電位器調(diào)整對(duì)比度。</p><p

34、>  第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器,低電平時(shí)選擇指令寄存器。</p><p>  第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。</p><p>  第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p>  第7~14腳:DB0~DB7為8位雙向數(shù)據(jù)線。</p><

35、p>  第15~16腳:背光燈電源。</p><p>  4.2.3 LCD1602字符液晶使用方法</p><p> ?。?)基本操作時(shí)序(如表4.3、圖4.4、5)</p><p>  表4.3 LCD1602字符液晶讀寫狀態(tài)表</p><p>  圖4.4 LCD1602液晶寫時(shí)序圖</p><p> 

36、 圖4.5 LCD1602液晶讀時(shí)序圖</p><p><b>  (2)RAM</b></p><p>  LCD1602液晶控制器芯片內(nèi)部帶有80個(gè)8位的RAM緩沖區(qū),其地址和屏幕的對(duì)應(yīng)關(guān)系如圖4.6示</p><p>  圖4.6 RAM緩沖區(qū)</p><p><b>  5.系統(tǒng)流程圖</b&

37、gt;</p><p>  5.1電路設(shè)計(jì)框圖(如圖5.1)</p><p><b>  圖5.1 系統(tǒng)框圖</b></p><p>  5.2系統(tǒng)流程圖(如圖5.2)</p><p><b>  5.3硬件框圖</b></p><p>  LCD1602 框圖</p&

38、gt;<p>  程序主要實(shí)現(xiàn)對(duì)信息的顯示,包括年、月、日、星期、時(shí)、分、秒等信息,在這里要注意它的讀寫控制指令。其流程圖如圖5.3所示。</p><p>  5.3.2 STC89C52框圖(如圖5.4)</p><p>  圖5.4 STC89C52 框圖</p><p><b>  6、編程思路</b></p>

39、<p>  編程思路是,在確定了時(shí)鐘要實(shí)現(xiàn)的功能后按照上述各按鍵所實(shí)現(xiàn)的效果編寫程序。本程序包含液晶寫指令函數(shù)(write_com())、寫數(shù)據(jù)函數(shù)(write_data())、初始化函數(shù)(init())、寫入時(shí)分秒函數(shù)(write_sfm())、寫入月和日函數(shù)(write_nyr())【別指出,由于年包含四位數(shù)字其寫法與月和日不同,故單獨(dú)設(shè)置一個(gè)寫入年函數(shù)】、寫入星期函數(shù)(write_xq())和鍵盤掃描函數(shù),這些程序圍繞

40、主函數(shù)互相嵌套調(diào)用。</p><p><b>  7、系統(tǒng)評(píng)價(jià)</b></p><p>  此時(shí)鐘設(shè)計(jì)是利用STC89C52單片機(jī)進(jìn)行設(shè)計(jì),基本上實(shí)現(xiàn)了課程設(shè)計(jì)要求實(shí)現(xiàn)的功能。</p><p>  硬件部分設(shè)置了的4個(gè)按鍵。當(dāng)按鍵K13按下時(shí),進(jìn)入光標(biāo)顯示狀態(tài),計(jì)數(shù)器停止工作,時(shí)鐘也停止,進(jìn)入設(shè)置時(shí)間的狀態(tài)。在K13按下的情況,按鍵K14按下時(shí)

41、,對(duì)應(yīng)光標(biāo)的數(shù)據(jù)隨著K14按鍵的按下的次數(shù)而變化,具體是按鍵一次就是增加一個(gè)單位。在K13按下的情況,按鍵K15按下時(shí),對(duì)應(yīng)光標(biāo)的數(shù)據(jù)隨著K15按鍵的按下的次數(shù)而變化,具體是按鍵一次就是少一個(gè)單位。在增加和減少設(shè)置的選項(xiàng)中也加入了閏年平年的判斷,更利于設(shè)置。K16按下的時(shí)候,推出設(shè)置狀態(tài),計(jì)數(shù)器工作,開(kāi)始計(jì)時(shí)。</p><p>  調(diào)試階段,出現(xiàn)一些問(wèn)題。比如,實(shí)際小時(shí)顯示到29才歸零,分鐘顯示到60才進(jìn)一……

42、,以上問(wèn)題均一一排除,結(jié)果達(dá)到預(yù)期目標(biāo)。但時(shí)間有限,1,按鍵問(wèn)題。我的設(shè)計(jì)中,很多功能選擇是通過(guò)按鍵開(kāi)關(guān)實(shí)現(xiàn)的。在仿真中發(fā)現(xiàn),調(diào)整數(shù)值時(shí),有時(shí)按鍵反應(yīng)太快,按一次,跳了幾下,使設(shè)置時(shí)間,日期很不方便。但是仿真多了之后,找到了按鍵(實(shí)際上是按鼠標(biāo))的節(jié)奏,對(duì)按鍵的掌控力提高了不少,不怎么會(huì)出現(xiàn)跳變的情況了。有些開(kāi)關(guān)我采用了長(zhǎng)按鍵的方式來(lái)防抖,效果不錯(cuò),但是每次都要長(zhǎng)按鍵,調(diào)整效率太低,我沒(méi)有普及。本來(lái)想把所有的按鍵都加延時(shí)防抖電路,但仿真

43、中感覺(jué)對(duì)鍵盤的控制力沒(méi)提高多少,有時(shí)還是會(huì)出問(wèn)題,這個(gè)方案放棄了。索性將板子焊接出來(lái)了在調(diào)試軟件吧,仿真畢竟不是那么“真”啊!實(shí)際電路調(diào)試中,按鍵反應(yīng)沒(méi)有出現(xiàn)過(guò)于靈敏的問(wèn)題,基本可控制。</p><p>  出現(xiàn)以上問(wèn)題,我認(rèn)為是電路板上焊接點(diǎn)太多,接觸不是很好,影響了信號(hào)的傳輸時(shí)間,從而解決了按鍵問(wèn)題!也有可能是按鍵質(zhì)量問(wèn)題,接觸不良。</p><p><b>  8、心得體會(huì)

44、</b></p><p>  一分耕耘,一分收獲。只有親自用實(shí)踐來(lái)驗(yàn)證這句話,在能得其要領(lǐng)。經(jīng)過(guò)這次單片機(jī)課程設(shè)計(jì),我從一個(gè)單片機(jī)實(shí)踐的門外漢,已經(jīng)越升為略知一二的新手。雖然還有很多有關(guān)單片機(jī)的應(yīng)用有待學(xué)習(xí),但萬(wàn)變不離其宗,只要深入了解單片的原理,全部知識(shí)點(diǎn),各個(gè)細(xì)節(jié),一切設(shè)計(jì)皆有可能。</p><p>  在實(shí)驗(yàn)的開(kāi)始幾天,基本上沒(méi)有收獲,不知何從下手,不知所措。為了看得更遠(yuǎn)

45、,不妨站在前人的肩膀上,我在整體思路模糊的情況下,在網(wǎng)上大量招資糧,各種與電子時(shí)鐘相關(guān)的文章,我閱讀了不少。隨著涉獵的點(diǎn)滴積累,我對(duì)電子時(shí)鐘的設(shè)計(jì)方案已經(jīng)慢慢醞釀而成。有了方向和不少知識(shí)儲(chǔ)備后,在接下來(lái)的幾天,幾乎每天都有突破,雖然有時(shí)只是一句程序的修改或誕生,但那種收獲的感覺(jué)很暖人心。</p><p><b>  9.參考文獻(xiàn)</b></p><p> ?。?)、甕

46、嘉民主編 單片機(jī)應(yīng)用開(kāi)發(fā)技術(shù) 中國(guó)電力出版社</p><p> ?。?)、肖婧編著 單片機(jī)系統(tǒng)設(shè)計(jì)與仿真 北京航空航天大學(xué)出版社</p><p> ?。?)、張曉鄉(xiāng)主編 89C51單片機(jī)實(shí)用教程 電子工業(yè)出版社</p><p> ?。?)、于海生.微型計(jì)算機(jī)控制技術(shù)[M] .清華大學(xué)出版社</p><p>  (5)、孫涵芳.MCS-51系列

47、單片機(jī)原理及應(yīng)用[M] .北京航空航天大學(xué)社</p><p> ?。?)、黃正謹(jǐn).綜合電子設(shè)計(jì)與實(shí)踐[M] .東南大學(xué)出版社</p><p> ?。?)楊欣等.電子設(shè)計(jì)從零開(kāi)始[M] .清華大學(xué)出版社</p><p> ?。?)、謝嘉奎.電子線路[M] .高等教育出版社</p><p> ?。?)、王毓銀.?dāng)?shù)字電路邏輯設(shè)計(jì)[M] .高等教育出

48、版社</p><p>  (9)、邱關(guān)源.電路[M] .高等教育出版社</p><p><b>  10.程序代碼</b></p><p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  #defi

49、ne uint unsigned int</p><p>  sbit RS = P1^0;</p><p>  sbit RW = P1^1;</p><p>  sbit E = P1^5;</p><p>  sbit s1=P2^4;</p><p>  sbit s2=P2^5;</p>&l

50、t;p>  sbit s3=P2^6;</p><p>  sbit s4=P2^7;</p><p>  sbit speaker=P2^0;</p><p>  uchar code table[]=" 2099-12-31 MON";</p><p>  uchar code table1[]="23

51、:58:50 23:59";</p><p>  uchar num,count,shi=23,fen=58,miao=50;</p><p>  uchar yue=12,ri=31;</p><p>  uint nian=2099;</p><p>  uchar s1num,xq;</p><p>

52、;  char Nshi=23,Nfen=59,clock;</p><p>  void delay(uchar z)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p>

53、<p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p>  void write_com(uchar com)</p><p><b>  {</b></p><p><b>  RS=0;</b></

54、p><p><b>  RW=0;</b></p><p><b>  P0=com;</b></p><p><b>  delay(5);</b></p><p><b>  E=0;</b></p><p><b>  

55、delay(5);</b></p><p><b>  E=1;</b></p><p><b>  }</b></p><p>  void write_data(uchar date)</p><p><b>  {</b></p><p&g

56、t;<b>  RS=1;</b></p><p><b>  RW=0;</b></p><p><b>  P0=date;</b></p><p><b>  delay(5);</b></p><p><b>  E=0;</b&g

57、t;</p><p><b>  delay(5);</b></p><p><b>  E=1;</b></p><p><b>  }</b></p><p>  void init()//初始化</p><p><b>  {</b

58、></p><p>  delay(15);</p><p>  write_com(0x38); </p><p>  write_com(0x08); </p><p>  write_com(0x01); </p><p>  write_com(0x06);</p><p>  w

59、rite_com(0x0c); </p><p>  write_com(0x01); </p><p>  write_com(0x80);</p><p>  write_com(0x02);</p><p>  for(num=0;num<15;num++)</p><p><b>  {<

60、/b></p><p>  write_data(table[num]);</p><p>  delay(20);</p><p><b>  }</b></p><p>  write_com(0x80+0x41);</p><p>  for(num=0;num<15;num++

61、)</p><p><b>  {</b></p><p>  write_data(table1[num]);</p><p>  delay(20);</p><p><b>  }</b></p><p>  TMOD=0x01;//t016位計(jì)數(shù)器</p>

62、<p><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p>  TH0=(65536-50000)/256;//賦值初值12MHz晶振</p><p>  TL0=(6

63、5536-50000)%256;</p><p><b>  }</b></p><p>  void write_sfm(uchar add,uchar date)</p><p><b>  {</b></p><p>  uchar shi,ge;</p><p>  

64、shi=date/10;</p><p>  ge=date%10;</p><p>  write_com(0x80+0x40+add);</p><p>  write_data(0x30+shi);//</p><p>  write_data(0x30+ge);</p><p><b>  }<

65、/b></p><p>  void write_nyr(uchar add,uchar date)</p><p><b>  {</b></p><p>  uchar shi,ge;</p><p>  shi=date/10;</p><p>  ge=date%10;</p&

66、gt;<p>  write_com(0x80+add);</p><p>  write_data(0x30+shi);</p><p>  write_data(0x30+ge);</p><p><b>  }</b></p><p>  void write_nian(uchar add,uint

67、year)</p><p><b>  {</b></p><p>  uint qian,bai,shi,ge;</p><p>  qian=year/1000;// 2413/1000=2</p><p>  bai=(year%1000)/100;//(2413%1000)=413 413/100=4 </

68、p><p>  shi=((year%1000)%100)/10;// 413%100=13 13/10=1 </p><p>  ge=(((year%1000)%100))%10;//13%10=3 </p><p>  write_com(0x80+add);</p><p>  write_data(0x30+qian);</p&g

69、t;<p>  write_data(0x30+bai);</p><p>  write_data(0x30+shi);</p><p>  write_data(0x30+ge);</p><p><b>  }</b></p><p>  void write_xq1(uchar add)</p

70、><p><b>  {</b></p><p>  write_com(0x80+add);</p><p>  write_data(0x40+0x0d);</p><p>  write_data(0x40+0x0f);</p><p>  write_data(0x40+0x0e);<

71、/p><p><b>  }</b></p><p>  void write_xq2(uchar add)</p><p><b>  {</b></p><p>  write_com(0x80+add);</p><p>  write_data(0x54);</p

72、><p>  write_data(0x55);</p><p>  write_data(0x45);</p><p><b>  }</b></p><p>  void write_xq3(uchar add)</p><p><b>  {</b></p>

73、<p>  write_com(0x80+add);</p><p>  write_data(0x50+4);</p><p>  write_data(0x40+8);</p><p>  write_data(0x50+5);</p><p><b>  }</b></p><p&g

74、t;  void write_xq4(uchar add)</p><p><b>  {</b></p><p>  write_com(0x80+add);</p><p>  write_data(0x57);</p><p>  write_data(0x45);</p><p>  w

75、rite_data(0x4e);</p><p><b>  }</b></p><p>  void write_xq5(uchar add)</p><p><b>  {</b></p><p>  write_com(0x80+add);</p><p>  wri

76、te_data(0x46);</p><p>  write_data(0x52);</p><p>  write_data(0x49);</p><p><b>  }</b></p><p>  void write_xq6(uchar add)</p><p><b>  {&

77、lt;/b></p><p>  write_com(0x80+add);</p><p>  write_data(0x53);</p><p>  write_data(0x41);</p><p>  write_data(0x54);</p><p><b>  }</b></

78、p><p>  void write_xq7(uchar add)</p><p><b>  {</b></p><p>  write_com(0x80+add);</p><p>  write_data(0x53);</p><p>  write_data(0x55);</p>

79、<p>  write_data(0x4e);</p><p><b>  }</b></p><p>  void write_naozhong(uchar add,uchar date)</p><p><b>  {</b></p><p>  uchar shi,ge;<

80、/p><p>  shi=date/10;</p><p>  ge=date%10;</p><p>  write_com(0x80+0x40+add);</p><p>  write_data(0x30+shi);</p><p>  write_data(0x30+ge);</p><p>

81、;<b>  }</b></p><p>  void keyscan()</p><p><b>  {</b></p><p><b>  if(s1==0)</b></p><p><b>  {</b></p><p>&l

82、t;b>  delay(5);</b></p><p><b>  if(s1==0)</b></p><p><b>  {</b></p><p><b>  s1num++;</b></p><p>  while(!s1);</p>&

83、lt;p>  if(s1num==1)</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p>  write_com(0x80+0x40+8);</p><p>  write_com(0x0f);</p><p>&

84、lt;b>  } </b></p><p>  if(s1num==2)</p><p><b>  {</b></p><p>  write_com(0x80+0x40+5);</p><p><b>  }</b></p><p>  if

85、(s1num==3)</p><p><b>  {</b></p><p>  write_com(0x80+0x40+2);</p><p><b>  }</b></p><p>  if(s1num==4)</p><p><b>  {</b>

86、</p><p>  write_com(0x80+4);</p><p><b>  }</b></p><p>  if(s1num==5)</p><p><b>  {</b></p><p>  write_com(0x80+7);</p><p

87、><b>  }</b></p><p>  if(s1num==6)</p><p><b>  {</b></p><p>  write_com(0x80+10);</p><p><b>  }</b></p><p>  if(s1num

88、==7)</p><p><b>  {</b></p><p>  write_com(0x80+12); </p><p><b>  }</b></p><p>  if(s1num==8)</p><p><b>  {</b></p>

89、;<p>  write_com(0x80+0x40+12); </p><p><b>  }</b></p><p>  if(s1num==9)</p><p><b>  {</b></p><p>  write_com(0x80+0x40+15); </p>

90、<p><b>  }</b></p><p>  if(s1num==10)</p><p><b>  {</b></p><p><b>  s1num=0;</b></p><p>  write_com(0x0c); </p><p

91、><b>  TR0=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(s1num!=0)</p><p>&

92、lt;b>  {</b></p><p><b>  if(s2==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(s2==0)</b><

93、;/p><p><b>  {</b></p><p>  while(!s2);</p><p>  if(s1num==1)</p><p><b>  {</b></p><p><b>  miao++;</b></p><p&g

94、t;  if(miao==60)</p><p><b>  miao=0;</b></p><p>  write_sfm(7,miao);</p><p>  write_com(0x80+0x40+8);</p><p><b>  }</b></p><p>  

95、if(s1num==2)</p><p><b>  {</b></p><p><b>  fen++;</b></p><p>  if(fen==60)</p><p><b>  fen=0;</b></p><p>  write_sfm(4,

96、fen);</p><p>  write_com(0x80+0x40+5);</p><p><b>  }</b></p><p>  if(s1num==3)</p><p><b>  {</b></p><p><b>  shi++;</b>

97、</p><p>  if(shi==24)</p><p><b>  {</b></p><p><b>  shi=0;</b></p><p>  write_sfm(1,shi);</p><p>  write_com(0x80+0x40+2);</p>

98、;<p><b>  }</b></p><p><b>  }</b></p><p>  if(s1num==4)</p><p><b>  {</b></p><p><b>  nian++;</b></p><

99、;p>  write_nian(1,nian);</p><p>  write_com(0x80+4);</p><p><b>  }</b></p><p>  if(s1num==5)</p><p><b>  {</b></p><p><b>

100、  yue++;</b></p><p>  if(yue==13)</p><p><b>  yue=1;</b></p><p>  write_nyr(6,yue);</p><p>  write_com(0x80+7);</p><p><b>  }<

101、/b></p><p>  if(s1num==6)</p><p><b>  {</b></p><p><b>  ri++;</b></p><p>  if(yue==2&&(nian%4==0)&&ri==29)ri=1; </p>&

102、lt;p>  if(yue==2&&(nian%4!=0)&&ri==30)ri=1; </p><p>  if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;</p><p>  else if(ri==32)ri=1;</p><p>  write_nyr

103、(9,ri);/</p><p>  write_com(0x80+10);</p><p><b>  }</b></p><p>  if(s1num==7)</p><p><b>  {</b></p><p><b>  xq++;</b>&l

104、t;/p><p>  if(xq%7==0)</p><p>  write_xq1(12);</p><p>  if(xq%7==1)</p><p>  write_xq2(12);</p><p>  if(xq%7==2)</p><p>  write_xq4(12);</p>

105、;<p>  if(xq%7==3)</p><p>  write_xq3(12);</p><p>  if(xq%7==4)</p><p>  write_xq5(12);</p><p>  if(xq%7==5)</p><p>  write_xq6(12);</p><

106、p>  if(xq%7==6)</p><p>  write_xq7(12);</p><p>  write_com(0x80+12);</p><p><b>  }</b></p><p>  if(s1num==8)</p><p><b>  {</b>&l

107、t;/p><p><b>  Nshi++;</b></p><p>  if(Nshi==24)</p><p><b>  Nshi=0;</b></p><p>  write_naozhong(11,Nshi);</p><p>  write_com(0x80+0x40

108、+11);</p><p><b>  }</b></p><p>  if(s1num==9)</p><p><b>  {</b></p><p><b>  Nfen++;</b></p><p>  if(Nfen==60)</p>

109、<p><b>  Nfen=0;</b></p><p>  write_naozhong(14,Nfen);</p><p>  write_com(0x80+0x40+14);</p><p><b>  }</b></p><p><b>  }</b>&

110、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  {</b></p><p><b>  if(s3==0)</b></p><p><b>  {</b&g

111、t;</p><p><b>  delay(5);</b></p><p><b>  if(s3==0)</b></p><p><b>  {</b></p><p>  while(!s3);</p><p>  if(s1num==1)<

112、/p><p><b>  {</b></p><p><b>  miao--;</b></p><p>  if(miao==-1)</p><p><b>  {</b></p><p><b>  miao=59;</b><

113、/p><p><b>  }</b></p><p>  write_sfm(7,miao);</p><p>  write_com(0x80+0x40+8);</p><p><b>  }</b></p><p>  if(s1num==2)</p><

114、p><b>  {</b></p><p><b>  fen--;</b></p><p>  if(fen==-1)</p><p><b>  fen=59;</b></p><p>  write_sfm(4,fen);</p><p> 

115、 write_com(0x80+0x40+5);</p><p><b>  }</b></p><p>  if(s1num==3)</p><p><b>  {</b></p><p><b>  shi--;</b></p><p>  if(s

116、hi==-1)</p><p><b>  shi=23;</b></p><p>  write_sfm(1,shi);</p><p>  write_com(0x80+0x40+2);</p><p><b>  }</b></p><p>  if(s1num==4)

117、</p><p><b>  {</b></p><p><b>  nian--;</b></p><p>  write_nian(1,nian);</p><p>  write_com(0x80+4);</p><p><b>  }</b>

118、</p><p>  if(s1num==5)</p><p><b>  {</b></p><p><b>  yue--;</b></p><p>  if(yue==0)</p><p><b>  yue=12;</b></p>

119、<p>  write_nyr(6,yue);</p><p>  write_com(0x80+7);</p><p><b>  }</b></p><p>  if(s1num==6)</p><p><b>  {</b></p><p><b&g

120、t;  ri--;</b></p><p>  if(yue==2&&(nian%4==0)&&ri==0)ri=28; </p><p>  if(yue==2&&(nian%4!=0)&&ri==0)ri=29;</p><p>  if((yue==4||yue==6||yue==9

121、||yue==11)&&ri==0)ri=30;</p><p>  else if(ri==0)ri=31;</p><p>  write_nyr(9,ri);</p><p>  write_com(0x80+10);</p><p><b>  }</b></p><p>

122、  if(s1num==8)</p><p><b>  {</b></p><p><b>  Nshi--;</b></p><p>  if(Nshi<0)</p><p><b>  Nshi=23;</b></p><p>  write

123、_naozhong(11,Nshi);</p><p>  write_com(0x80+0x40+11);</p><p><b>  }</b></p><p>  if(s1num==9)</p><p><b>  {</b></p><p><b>  N

124、fen--;</b></p><p>  if(Nfen<0)</p><p><b>  {</b></p><p><b>  Nfen=59;</b></p><p>  write_naozhong(14,Nfen);</p><p>  write

125、_com(0x80+0x40+14);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

126、;  }</b></p><p><b>  if(s4==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(s4==0)</b></p>

127、<p><b>  {</b></p><p>  while(!s4);</p><p>  if(s1num<=9&&s1num!=0)</p><p><b>  {</b></p><p><b>  s1num=0;</b><

128、/p><p><b>  TR0=1;</b></p><p>  write_com(0x0c);</p><p><b>  }</b></p><p>  if(Nshi==shi&&Nfen==fen)</p><p><b>  {</b

129、></p><p><b>  clock=0;</b></p><p>  speaker=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b><

130、/p><p><b>  }</b></p><p>  void alarm()</p><p><b>  { </b></p><p>  if(Nfen!=fen)clock=1;</p><p>  if(clock==1)</p><p>&

131、lt;b>  {</b></p><p>  if(Nshi==shi&&Nfen==fen)</p><p><b>  {</b></p><p>  if(count==0) </p><p>  speaker=0;</p><p>  if(count=

132、=10)</p><p>  speaker=1;</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  } </b></p><p>  void main()</p><p&

133、gt;<b>  {</b></p><p><b>  init();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  alarm();</b>&l

134、t;/p><p>  keyscan();</p><p>  if(count==20)//</p><p><b>  {</b></p><p><b>  count=0;</b></p><p><b>  miao++;</b></p>

135、;<p>  if(miao==60)</p><p><b>  {</b></p><p><b>  miao=0;</b></p><p><b>  fen++;</b></p><p>  if(fen==60)</p><p>

136、;<b>  {</b></p><p><b>  fen=0;</b></p><p><b>  shi++;</b></p><p>  if(shi==24)</p><p><b>  {</b></p><p><

137、;b>  shi=0;</b></p><p><b>  ri++;</b></p><p><b>  xq++;</b></p><p>  if(yue==2&&(nian%4==0)&&ri==29)</p><p><b>  

138、{</b></p><p><b>  ri=1; </b></p><p><b>  yue++;</b></p><p><b>  }</b></p><p>  if(yue==2&&(nian%4!=0)&&ri==30)

139、</p><p><b>  {</b></p><p><b>  ri=1; </b></p><p><b>  yue++;</b></p><p><b>  }</b></p><p>  if((yue==4||yu

140、e==6||yue==9||yue==11)&&ri==31)</p><p><b>  {</b></p><p><b>  ri=1;</b></p><p><b>  yue++;</b></p><p><b>  }</b>

141、</p><p>  if(ri==32)</p><p><b>  {</b></p><p><b>  ri=1;</b></p><p><b>  yue++;</b></p><p><b>  }</b></p

142、><p>  if(yue==13)</p><p><b>  {</b></p><p><b>  yue=1;</b></p><p><b>  nian++;</b></p><p>  write_nian(1,nian);</p>

143、<p>  write_com(0x80+1);</p><p><b>  }</b></p><p>  write_nyr(6,yue);</p><p>  write_com(0x80+6);</p><p>  write_nyr(9,ri);</p><p>  wri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論