版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)電子鐘課程設(shè)計(jì)
- 單片機(jī)電子鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子鐘課程設(shè)計(jì)報(bào)告
- 電子鐘單片機(jī)課程設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)--基于單片機(jī)的電子鐘設(shè)計(jì)
- 《單片機(jī)技術(shù)》電子鐘課程設(shè)計(jì)---數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--電子鐘
- 單片機(jī)課程設(shè)計(jì)(電子鐘)
- 單片機(jī)課程設(shè)計(jì)——數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)---智能電子鐘
- 單片機(jī)原理課程設(shè)計(jì)--電子鐘
- 單片機(jī)數(shù)字電子鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)-智能電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字鐘電子鐘
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)單電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子鐘的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論