版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《單片微型計算機與接口技術(shù)》</p><p><b> ——課程設(shè)計</b></p><p> 項 目_帶有LCD顯示的音樂倒數(shù)計數(shù)器 </p><p> 拓 展 萬年歷、鬧鐘 </p><p> 年級班別__ <
2、;/p><p> 姓名學(xué)號 </p><p> 指導(dǎo)教師 老師 </p><p><b> 2012年12月</b></p><p><b> 目錄</b></p><p><b&
3、gt; 摘要 1</b></p><p><b> 一 前言 2</b></p><p> 1.1 設(shè)計概括 2</p><p> 1.2 設(shè)計要求 2</p><p><b> 二 系統(tǒng)設(shè)計 3</b></p><p> 2.1 方案
4、選擇 3</p><p> 2.2 系統(tǒng)框圖設(shè)計 4</p><p><b> 三 硬件設(shè)計 4</b></p><p> 3.1 整體硬件電路圖 5</p><p> 3.2 STC89C51單片機6</p><p> 3.2.1 STC89C51單片機主要性能參數(shù) 6
5、</p><p> 3.2.2 STC89C51單片管腳說明7</p><p> 3.2.3 單片機時鐘電路 10</p><p> 3.2.4 單片機復(fù)位電路 10</p><p> 3.2.5 本設(shè)計所使用功能 11</p><p> 3.3 STC15F104單片機 11 </p&g
6、t;<p> 3.4 STC15F104單片機 13</p><p> 3.5 gdm 1602 LCD 14</p><p> 四 系統(tǒng)控制及軟件設(shè)計 15</p><p> 4.1 系統(tǒng)控制流程圖 15</p><p> 4.2 控制操作及功能 15</p><p> 4
7、.2.1 控制說明 15</p><p> 4.2.2 設(shè)置萬年歷 16</p><p> 4.2.3 設(shè)置鬧鐘 17</p><p> 4.3對應(yīng)功能編程 17</p><p> 4.3.1 STC89C51主函數(shù) 17</p><p> 4.3.2 LCD功能的頭文件 17</
8、p><p> 4.3.3 按鍵調(diào)整的頭文件 19</p><p> 4.3.4 萬年歷運行頭文件 27</p><p> 4.3.5 鬧鐘運行頭文件 30</p><p> 4.5.7 STC15F104主函數(shù) 33</p><p> 五 調(diào)試和燒錄35</p><p>
9、; 5.1 編程工具—C51語言35</p><p> 5.2 程序調(diào)試工具—KEIL 35</p><p> 5.3 單片機仿真軟件在線調(diào)試—PROTEUS 35</p><p> 5.4 調(diào)試總結(jié) 36</p><p> 六 制作感想 36</p><p> 七 參考文獻 37<
10、/p><p><b> 摘 要</b></p><p> 本設(shè)計是以STC89C52單片微型計算機為中心,及STC15F104單片微型計算機為輔的簡單電路設(shè)計,通過按鍵輸入,GDM1602LCD顯示器及揚聲器輸出,實現(xiàn)萬年歷、可調(diào)定時鬧鐘、音樂鬧鈴等功能。LCD顯示為可切換的萬年歷模式和鬧鐘模式,萬年歷模式為顯示年、月、星期、日、時、分、秒;鬧鐘模式為顯示萬年歷對應(yīng)
11、的時、分、秒和設(shè)定時常倒數(shù)的時、分、秒。鬧鈴為可編程的《世上只有媽媽好》音樂頻率。</p><p> 主要輔助工具:編程:Keil uVision2;仿真:proteus;程序燒:PZISP;實物調(diào)試:普中科技單片機開發(fā)實驗儀HC6800EM3。</p><p> 關(guān)鍵字:萬年歷;可調(diào)定時鬧鐘;音樂鬧鈴;STC89C52;STC15F104; GDM1602LC
12、D;Keil uVision2;proteus;HC6800EM3;</p><p><b> 一、前言</b></p><p><b> 1.1 設(shè)計概述</b></p><p> 20世紀末,電子技術(shù)獲得了飛速的發(fā)展。在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透到了社會的各個領(lǐng)域,有力的推動和提高了社會生產(chǎn)力的發(fā)展與信息化程
13、度。同時也使現(xiàn)代電子產(chǎn)品性能進一步提升,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。</p><p> 隨著科技的發(fā)展和社會的進步,人們對數(shù)字鐘的要求越來越高,多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質(zhì)的變化。數(shù)字鐘實際上是一個對標準頻率進行計數(shù)的計數(shù)電路,走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校。單片計算機即單片微型計算機,是集CPU,RAM,ROM,定時/計數(shù)和多種接口于一體的微控制器。它體積小成本低,功能強,廣
14、泛應(yīng)用于智能產(chǎn)品和工業(yè)自動化上。由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度遠遠超多老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大地方便,而且大大的擴展了鐘表原先的報時功能,諸如定時自動報警、0按時自動打鈴、定時廣播、自動啟閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以數(shù)字化為基礎(chǔ)的,因此研究數(shù)字鐘及擴大其應(yīng)用有著非?,F(xiàn)實的意義。</p><p> 本設(shè)
15、計是以STC89C52單片微型計算機為中心電路,及STC15F104單片微型計算機為輔助電路的簡單電路設(shè)計,通過按鍵輸入,GDM1602LCD顯示器及揚聲器輸出,實現(xiàn)萬年歷、可調(diào)定時鬧鐘、音樂鬧鈴等功能。LCD顯示為可切換的萬年歷模式和鬧鐘模式,萬年歷模式為顯示年、月、星期、日、時、分、秒;鬧鐘模式為顯示萬年歷對應(yīng)的時、分、秒和設(shè)定時常倒數(shù)的時、分、秒。鬧鈴為可編程的《世上只有媽媽好》音樂頻率。</p><p>
16、 當設(shè)置好的倒數(shù)時間,倒數(shù)到零的時候,STC89C52單片微型計算機將連續(xù)輸出一低電平信號,觸發(fā)STC15F104單片微型計算機,使其輸出一定的音樂頻率控制揚聲器,音樂鬧鈴將響起。</p><p><b> 1.2 設(shè)計要求</b></p><p> 設(shè)計任務(wù):利用89C51單片機結(jié)合字符型LCD顯示器設(shè)計一個簡易的倒數(shù)計數(shù)器,可用來煮方便面、煮開水或小睡片刻等
17、。做一小段時間倒計數(shù), 當?shù)褂嫈?shù)為0時,則發(fā)出一段音樂聲響,通知倒計數(shù)終了,該做應(yīng)當做的事。</p><p> 設(shè)計要求:定時鬧鐘的基本功能如下:</p><p> ( 字符型LCD(16×2)顯示器。</p><p> ( 顯示格式為“TIME 分分:秒秒”。</p><p> 用4個按鍵操作來設(shè)置當前想要倒計數(shù)的時間。&
18、lt;/p><p> 一旦按下鍵則開始倒計數(shù),當計數(shù)為0時,發(fā)出一陣音樂聲。</p><p> 程序執(zhí)行后工作指示燈LED閃動,表示程序開始執(zhí)行,按下操作鍵K1~K4動作如下。</p><p> K1——可調(diào)整倒計數(shù)的時間1~60分鐘。</p><p> (2)K2——設(shè)置倒計數(shù)的時間為5分鐘,顯示“0500”。</p>&
19、lt;p> ?。?)K3——設(shè)置倒計數(shù)的時間為10分鐘,顯示“1000”。</p><p> ?。?)K4——設(shè)置倒計數(shù)的時間為20分鐘,顯示“2000”。</p><p> 復(fù)位后LCD的畫面應(yīng)能顯示倒計時的分鐘和秒數(shù),此時按K1鍵,則在LCD上顯示出設(shè)置畫面。此時,若:</p><p> (1)按操作鍵K2——增加倒計數(shù)的時間1分鐘。</p>
20、;<p> ?。?)按操作鍵K3——減少倒計數(shù)的時間1分鐘。</p><p> ?。?)按操作鍵K4——設(shè)置完成。</p><p><b> 可擴充功能:</b></p><p> 增加時鐘及鬧鈴功能。</p><p><b> 增加秒表計數(shù)功能。</b></p>
21、<p> 增加萬年歷顯示“年月日”。</p><p> 增加多組倒計數(shù)功能。</p><p><b> 二 系統(tǒng)設(shè)計</b></p><p><b> 2.1 方案選擇</b></p><p><b> 方案一</b></p><p>
22、; 直接按要求完成老師的要求。這個方案相對很簡單,簡簡單單的按鍵控制,相對于40腳多功能的強大STC89C51來說是很大程度上的浪費。對于自己剛剛學(xué)到的單片機只是很多都用不上,也造成了實踐不到位,從而沒無法達到老師期望的理論與實踐結(jié)合,徹底把握簡單的微型計算機的控制。</p><p><b> 方案二</b></p><p> 達到老師的要求以外,添加生活上可以
23、利用到的功能,如:萬年歷、鬧鐘等等。但出現(xiàn)了個嚴重問題:非系統(tǒng)性的編程,單片機無法同時進行多種應(yīng)用運行,也就是只能單步進行。但在鬧鐘響起的時候,不能讓編程跳出萬年歷運作,執(zhí)行音樂程序,因此需要外置音樂模塊。則再分兩個小方案:</p><p> 1)使用外置的固定音樂模塊,即直接購買商家做好的模塊,這樣就減少了制作的難度,但成本高。</p><p> 2)再增加一片微型計算機。經(jīng)過設(shè)計考
24、慮,使用廉價性能好且容易控制的STC15F104單片微型計算機,經(jīng)過編程產(chǎn)生音樂頻率取代外置音樂模塊。</p><p> 2.2 系統(tǒng)框圖設(shè)計</p><p> 本項目的系統(tǒng)設(shè)計框圖如圖2-1所示:</p><p><b> 圖2-1 系統(tǒng)框圖</b></p><p> 通過方案的選擇,設(shè)計了上面的系統(tǒng)框圖。由系
25、統(tǒng)框圖可看出,本設(shè)計由單片機AT89C51、STC15F104;LCD液晶顯示器、控制鍵盤、蜂鳴器、復(fù)位單路和定時器電路幾大模塊構(gòu)成。</p><p><b> 三 硬件設(shè)計</b></p><p> 本章主要講以STC89C52單片微型計算機為中心電路,及STC15F104單片微型計算機為輔助電路電路硬件設(shè)計。主要硬件電路有:鍵盤控制電路、顯示電路、復(fù)位電路、音
26、樂電路等。</p><p> 3.1 整體硬件電路圖 </p><p> 圖3-1 接通電源初始化模式</p><p> 圖 3-2 設(shè)置好時間的顯示 圖3-3 鬧鐘模式的顯示</p><p> 由圖3-1我們可以清楚地看到,本電路控制核心是STC89C51芯片。該方案通過九個按鍵進行控制,采用LCD1602顯示
27、,雙行顯示,位數(shù)足夠多,并且容易控制,占用CPU的時間少,每次進行使能設(shè)置,把一個數(shù)據(jù)送到外部接口即可。</p><p> 3.2 STC89C51單片機 </p><p> STC89C51是采用8051核的ISP(In System Programming)在系統(tǒng)可編程芯片,最高工作時鐘頻率為80MHz,片內(nèi)含4K Bytes的可反復(fù)擦寫1000次的Flash只讀程序存儲
28、器,具有標準MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,具有在系統(tǒng)可編程(ISP)特性,配合PC端的控制程序即可將用戶的程序代碼下載進單片機內(nèi)部,省去了購買通用編程器,而且速度更快。STC89C51系列單片機是單時鐘/ 機器周期(1T)的兼容8051 內(nèi)核單片機,是高速/ 低功耗的新一代8051 單片機,AT89C51單片機可提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。
29、</p><p> 3.2.1 STC89C51單片機主要性能參數(shù) </p><p> STC89C51單片機的主要性能特點有:</p><p> 1.具有MCS-51產(chǎn)品指令系統(tǒng)</p><p> 2.4字節(jié)可重擦寫Flash閃速存儲器</p><p> 3.1000次擦寫周期</p>
30、<p> 4.全靜態(tài)操作:0Hz-24Hz</p><p> 5.三級加密程序存儲器</p><p> 6.128*8字節(jié)內(nèi)部RAM</p><p> 7.32個可編程I/O口線,2個16位定時/計數(shù)器,6個中斷源</p><p> 8.可編程串行UART通道</p><p> 9.低功耗空閑
31、和掉電模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器、串行通信口及中斷系統(tǒng)斷續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其他所有部件工作直到下一個硬件復(fù)位。</p><p> 10.一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路</p><p> STC89C51單片機的引腳封裝如圖3-2所示。</p><p> 圖3-4STC89C51
32、的引腳排列</p><p> 3.2.2 STC89C51單片機管腳說明</p><p><b> VCC:供電電壓。</b></p><p><b> GND:接地。</b></p><p> P0:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電路。當P0口的管腳每一次寫1時
33、,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FLASH編程時,P0口作為原碼輸入口,當FLASH進行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。</p><p> P1:P1口是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸引或輸出電源)4個PPL邏輯門電路.對端口寫”1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因
34、為內(nèi)部存在上拉電阻,某個引腳被外部信呈拉低時會輸出一個電流。Flash編程和程序校驗期間,P1接收低8位地址。</p><p> P2:P2口是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸引或輸出電源)4個PPL邏輯門電路。對端口寫”1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信呈拉低時會輸出一個電流。</p>
35、<p> 在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX @DPTR指令)時,P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX @R1指令)時,P2口線上的內(nèi)容(也即特殊功能寄存器區(qū)中R2寄存器的內(nèi)容),在整個訪問期間不會改變。Flash編程或校驗時,P2亦接收高位地址和其他控制信號。</p><p> P3:P3口是一個帶有內(nèi)部上拉電阻的8位雙向I/O
36、口,P2的輸出緩沖級可驅(qū)動(吸引或輸出電源)4個PPL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端時,被外部拉低的P3口將用上拉電阻輸出電流。</p><p> P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如表3.1所示:</p><p><b> 表3.1</b></p><p>
37、 P3口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。</p><p> RST:復(fù)位輸入,當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。</p><p> ALE//PROG:當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它
38、可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。</p><p> 對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(/PROG)。</p><p> 如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令A(yù)LE才會被激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程
39、序時,應(yīng)設(shè)置ALE無效。</p><p> /PSEN:程序儲存允許(/PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C51由自問程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次/PSEN有次,即輸出兩個脈沖。在此期間,當訪問外部程序存儲器時,這兩次有次的/PSEN信號不出現(xiàn)。</p><p> /EA/Vpp:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H-FF
40、FFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。</p><p> 如EA端為高電平(接VCC端),CPU則執(zhí)行內(nèi)部存儲器中的指令。</p><p> Flash存儲器編程時,該引腳加上+12V的編程允許電源Vpp。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p
41、><p> XTAL2:振蕩器反向放大器的輸出端。</p><p> 3.2.3 STC89C51單片機最小系統(tǒng)的設(shè)計</p><p> STC89C51單片機為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3, MCS-51單片機共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨立地作輸出或輸入。</p><p&
42、gt; 單片機的最小系統(tǒng)如圖3-5所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出。結(jié)合本設(shè)計的要求采用內(nèi)部振蕩方式,所選的晶振為12MHz。第9引腳為復(fù)位輸入端,接上電容,電阻構(gòu)成上電復(fù)位電路。</p><p> 圖3-5 單片機最小系統(tǒng)</p><p>
43、; 3.2.3 單片機時鐘電路</p><p> AT89C52單片機的時鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。在本設(shè)計中,采用內(nèi)部振蕩方式。電路見圖3-6所示。</p><p> 圖3-6 時鐘電路圖</p><p> 單片機引腳XTAL1和XTAL2外接晶振12MHz,構(gòu)成了內(nèi)部振蕩方式。由于單片機內(nèi)部有一個高增益反相放大器,當外接晶
44、振后,就構(gòu)成了自激振蕩,并產(chǎn)生振蕩時鐘脈沖。電容器C1、C2起穩(wěn)定振蕩頻率,快速起振作用。電容值一般為5-30pF,內(nèi)容振蕩方式所得時鐘信號比較穩(wěn)定,實用電路中使用較多。</p><p> 3.2.4 單片機復(fù)位電路</p><p> 本設(shè)計系統(tǒng)的復(fù)位電路見圖3-7所示。</p><p><b> 圖3-7復(fù)位電路圖</b></p&
45、gt;<p> 復(fù)位操作完成單片機內(nèi)電路的初始化,使單片機從一種確定的狀態(tài)開始運行。當STC89C51單片機的復(fù)位引腳RST出現(xiàn)5ms以上的高電平時,單片機就完成了復(fù)位電路操作。需要注意的是,如果RST持續(xù)為高電平,單片機就會處于循環(huán)復(fù)位狀態(tài),而無法執(zhí)行程序。因此,要求單片機復(fù)位后能夠脫離復(fù)位狀態(tài)。本系統(tǒng)的復(fù)位電路采用上電開關(guān)復(fù)位電路。上電后,由于電容充電,使RST持續(xù)一段高電平時間。當單片機已經(jīng)在運行時,按下復(fù)位鍵也能
46、使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電且開關(guān)復(fù)位的操作。通常選擇C=10-30uF,R=10K?。</p><p> 3.2.5 本設(shè)計所使用功能</p><p> 在本設(shè)計中,使用了單片機的最小系統(tǒng),復(fù)位電路和內(nèi)部震蕩方式。使用了P0端口作為LCD的數(shù)據(jù)輸出端, P2端口作為LCD的使能端選擇輸出端,使用了P1端口和P2.0接控制按鍵,實現(xiàn)置數(shù)、功能切換等。P3.0作為STC15
47、F104的觸發(fā)端,使STC15F104得PB.2輸出音樂頻率。</p><p> 3.3 STC15F104單片機</p><p> 1.1 STC15F100系列單片機簡介 STC15F100系列單片機是STC生產(chǎn)的單時鐘/機器周期(1T)的單片機,是高速/高可靠/低功耗超強抗干擾的新一代8051單片機。,采用第八代加密技術(shù),加密性超強,指令代碼完全兼容傳統(tǒng)8051.但速度快6-2
48、倍。內(nèi)部高度集成R/C時鐘,±1%溫飄,常溫下溫飄5‰。5MHz~35MHz寬范圍可設(shè)置,可徹底省掉外部昂貴的晶振。內(nèi)部高可靠復(fù)位,8級可選復(fù)位門檻電壓,可徹底省掉外部復(fù)位電路。</p><p> 1增強型 8051 CPU,1T,單時鐘/機器周期,速度比普通805快6-2倍 </p><p><b> 2 工作電壓: </b></p>&
49、lt;p> STC15F00 系列工作電壓:5.5V - 3.8V(5V 單片機) </p><p> STC15L00 系列工作電壓:3.6V - 2.4V(3V 單片機) </p><p> 3 內(nèi)部高可靠復(fù)位,8級可選復(fù)位門檻電壓,徹底省掉外部復(fù)位電路</p><p> 4 內(nèi)部高?度R/C時鐘?±%溫飄(-40oC~+85oC)?常溫
50、下溫飄5‰?內(nèi)部時鐘從5MHz ~ 35MHz可選(5.5296MHz / .0592MHz / 22.84MHz / 33.776MHz)</p><p> 5 工作頻率范圍:5MHz ~ 35MHz,相當于普通805的60MHz~420MHz</p><p> 6 低功耗設(shè)計:低速模式,空閑模式,掉電模式/停機模式(可由外部中斷喚醒)</p><p> 7
51、 支持掉電喚醒的管腳:INT0/P3.2, INT/P3.3, INT2, INT3, INT4 </p><p> 8 0.5K/K/2K/3K/4K/5K字節(jié)片內(nèi)Flash程序存儲器, 擦寫次數(shù)10萬次以上</p><p> 9 片上集成28字節(jié)RAM</p><p> 10 有EEPROM功能,擦寫次數(shù)10萬次以上</p><p&g
52、t; 11 ISP/IAP,在系統(tǒng)可編程/在應(yīng)用可編程,無需編程器/仿真器</p><p> 12 2個16位可重裝載定時器,兼容普通8051的定時器T0/T1并可實現(xiàn)時鐘輸出和PWM功能。</p><p> 13 可編程時鐘輸出功能,T0在P3.5輸出時鐘,T1在P3.4輸出時鐘?在P3.4口還可輸出內(nèi)部高高度R/C時鐘IRC_CLK(也可2分頻輸出IRC_CLK/2)。</
53、p><p> 14 硬件看門狗(WDT)</p><p> 15 串口功能可由[P3.0/INT4,P3.]結(jié)合定時器實現(xiàn)</p><p> 16 先進的指令集結(jié)構(gòu),兼容普通8051指令集,有硬件乘法/除法指令</p><p> 17 6個通用I/O口,復(fù)位后為: 準雙向口/弱上拉(普通8051傳統(tǒng)I/O口)</p><
54、;p> 可設(shè)置四種模式:準雙向口/?上拉,強推挽/弱上拉,僅為輸入/高阻,開漏推挽/ 上拉,僅為輸入/高阻,開漏每個I/O口驅(qū)動能力均可達到20mA,但整個芯片最大不要超過70mA。</p><p> 18 封裝:SOP-8, DIP-8</p><p> 19 全部75oC 八小時高溫烘烤,高品質(zhì)制造保證。</p><p> 圖3-8 STC15F1
55、04 引腳圖</p><p> 3.4 STC15F104單片機</p><p> 表3-2 STC15F104單片機引腳功能表</p><p> 3.5 GDM1602LCD</p><p> 1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表3-3所示:</p><p> 表3-3:控制命令表<
56、/p><p> 1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)</p><p> 指令1:清顯示,指令碼01H,光標復(fù)位到地址00H位置。</p><p> 指令2:光標復(fù)位,光標返回到地址00H。</p><p> 指令3:光標和顯示模式設(shè)置 I/D:光標移動方向,高電平右移,低電
57、平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。</p><p> 指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標的開與關(guān),高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。</p><p> 指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標。<
58、/p><p> 指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。</p><p> 指令7:字符發(fā)生器RAM地址設(shè)置。</p><p> 指令8:DDRAM地址設(shè)置。</p><p> 指令9:讀忙信號和光標地
59、址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。</p><p><b> 指令10:寫數(shù)據(jù)。</b></p><p><b> 指令11:讀數(shù)據(jù)。</b></p><p> 四 系統(tǒng)控制及軟件設(shè)計</p><p> 4.1 系統(tǒng)控制流程圖</p
60、><p> 圖 4-1 系統(tǒng)控制流程圖</p><p> 4.2 控制操作及功能 </p><p> 4.2.1 控制說明</p><p> 本系統(tǒng)是利用STC89C51的時間中斷0,每經(jīng)過1S系統(tǒng)運行一次,在時間中斷執(zhí)行的程序中調(diào)用萬年歷置數(shù)、萬年歷運行、鬧鐘置數(shù)、鬧鐘運行、音樂觸發(fā)等子函數(shù)。</p><p>
61、 所以,每次按鍵必須按住,等待LCD數(shù)字變化,持續(xù)時間0<t<2S。需要連續(xù)調(diào)整的,直接按住按鍵,數(shù)字變化間隔為1S,直至對應(yīng)位顯示所需要的時間。</p><p> 4.2.2 設(shè)置萬年歷</p><p> 圖 4—2 萬年歷顯示模式</p><p> 接通電源,或者按復(fù)位鍵,則會出現(xiàn)圖 4—2 萬年歷顯示模式,這是萬年歷的設(shè)置模式,如果跳過這個模
62、式,需要調(diào)整時間,則需要按復(fù)位鍵復(fù)位系統(tǒng)。</p><p> 現(xiàn)是處于時、分、秒的設(shè)置模式,控制方法:k1、k2、k3、k4、k5、k6設(shè)置萬年歷:時十位、個位、分十位、個位、秒十位、個位。</p><p> 調(diào)好,按住K7(持續(xù)超過1S)確定。按K7后,進入年份的調(diào)試</p><p> k1、k2、k3、k4設(shè)置萬年歷年份:年千位、百位、十位、個位。<
63、/p><p> 調(diào)好,按住K8(持續(xù)超過1S)確定。按K8后,進入月份、星期的調(diào)試</p><p> k1、k2、k3、k4、k5設(shè)置萬年歷月份:月十位、個位、日十位、個位、星期</p><p> 調(diào)好,按住K7(持續(xù)超過1S)確定。進入年歷運行。</p><p> 4.2.3 設(shè)置鬧鐘</p><p> 圖 4
64、-2 鬧鐘模式顯示</p><p> 在萬年歷運行的狀態(tài)按住k9(持續(xù)超過1S),進入鬧鐘置數(shù)模式,萬年歷的時間同樣顯示在上方。</p><p> 控制方式k1、k2、k3、k4、k5、k6設(shè)置鬧鐘:時十位、個位、分十位、個位、秒十位、個位。</p><p> 調(diào)好,按住K7(持續(xù)超過1S)確定。按K7后,進入鬧鐘倒數(shù)模式。</p><p&
65、gt; 當鬧鐘倒數(shù)為零時,鬧鐘音樂《世上只有媽媽好》將響起。</p><p><b> 4.3對應(yīng)功能編程</b></p><p> 該編程是利用Keil uVision2,設(shè)置多個不同功能頭文件進行編程。</p><p> 4.3.1 STC89C51主函數(shù)</p><p> #include<reg
66、52.h></p><p> #include<intrins.h></p><p> #include<lcd.h> //LCD功能的頭文件</p><p> #include<anjian.h> //按鍵調(diào)整的頭文件</p><p> #include<main_t
67、.h> //萬年歷運作頭文件</p><p> #include<main_a.h> //鬧鐘運作頭文件</p><p> void main()</p><p><b> {</b></p><p> LCD_init();</p><p> TMOD=0
68、x01;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b>
69、 TR0=1;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> while(flag_a)</p><p><b> a_main();</b></p><p>
70、while(flag_t)</p><p><b> t_main();</b></p><p><b> }</b></p><p><b> }</b></p><p> //計數(shù)器0中斷,50000微妙進行一次t++。</p><p>
71、void time0() interrupt 1</p><p><b> {</b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> t++;</b></p><
72、p><b> }</b></p><p> 4.3.2 LCD功能的頭文件</p><p> #ifndef lcd_h</p><p> #define lcd_h</p><p> sbit rs = P2^6;</p><p> sbit rw = P2^5;</p
73、><p> sbit ep = P2^7;</p><p> unsigned char shi,ge;</p><p> unsigned char code dis[] = {"0123456789"};</p><p> //LCD1602位置參考0x0x 0123456789abcdef</p>
74、<p> unsigned char code dis1[] = {"2012-01-01 00:00"};</p><p> // 0x4x 0123456789abcdef</p><p> unsigned char code dis2[] = {" Hello Sun 00 "}
75、;</p><p> unsigned char code dis3[7][4] ={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};</p><p> //LCD1602位置參考 0x0x 01234567
76、89abcdef</p><p> unsigned char code dis4[] = {" Time 00:00:00 "};</p><p> unsigned char code dis5[] = {"Clock 00:00:00 "};</p><p> // 0x
77、4x 0123456789abcdef</p><p> unsigned char code dis6[] = {" Hi Alarm Clock "};</p><p> bit lcd_pd() //判斷,指令8,判斷是否忙碌,忙碌—循環(huán)</p><p><b> {</b></p><p
78、> bit result;</p><p><b> rs = 0;</b></p><p><b> _nop_();</b></p><p><b> rw = 1;</b></p><p><b> _nop_();</b></
79、p><p><b> ep = 1;</b></p><p><b> _nop_();</b></p><p> result = (bit)(P0 & 0x80);</p><p><b> ep = 0;</b></p><p> r
80、eturn result;</p><p><b> }</b></p><p> void lcd_kz(unsigned char kz)//寫入控制指令</p><p><b> {</b></p><p> while(lcd_pd()); //判斷LCD是否忙碌</p
81、><p><b> rs = 0;</b></p><p><b> rw = 0;</b></p><p><b> ep = 0;</b></p><p><b> _nop_();</b></p><p><b>
82、; P0 = kz;</b></p><p><b> _nop_();</b></p><p><b> ep = 1;</b></p><p><b> _nop_();</b></p><p><b> ep = 0;</b>&
83、lt;/p><p><b> }</b></p><p> void lcd_wz(unsigned char wz)//光標位置</p><p><b> {</b></p><p> lcd_kz(wz | 0x80);</p><p><b> }<
84、;/b></p><p> void lcd_data (unsigned char dat)//顯示內(nèi)容</p><p><b> {</b></p><p> while(lcd_pd());//判斷LCD是否忙碌</p><p><b> rs = 1;</b></p>
85、;<p><b> rw = 0;</b></p><p><b> ep = 0;</b></p><p><b> P0 = dat;</b></p><p><b> _nop_();</b></p><p><b>
86、 ep = 1;</b></p><p><b> _nop_();</b></p><p><b> ep = 0;</b></p><p><b> }</b></p><p> void lcd_two_xs(void)//顯示函數(shù)</p>
87、;<p><b> {</b></p><p> lcd_data(dis[shi]);//顯示內(nèi)容</p><p> lcd_data(dis[ge]);</p><p><b> }</b></p><p> void LCD_init() //初始化LCD1602&
88、lt;/p><p><b> {</b></p><p> lcd_kz(0x38);</p><p><b> _nop_();</b></p><p> lcd_kz(0x0c);</p><p><b> _nop_();</b></
89、p><p> lcd_kz(0x06);</p><p><b> _nop_();</b></p><p> lcd_kz(0x01);</p><p><b> _nop_();</b></p><p><b> }</b></p>
90、<p><b> #endif</b></p><p> 4.3.3 按鍵調(diào)整的頭文件</p><p> //按鍵響應(yīng)間隔為1S</p><p> //單步調(diào)試時,每個按鍵按下控制在1~2S內(nèi)</p><p> //連續(xù)調(diào)試,按住不放就行</p><p> #ifndef
91、 anjian_h</p><p> #define anjian_h</p><p> sbit k1=P1^0;</p><p> sbit k2=P1^1;</p><p> sbit k3=P1^2;</p><p> sbit k4=P1^3;</p><p> sbit
92、k5=P1^4;</p><p> sbit k6=P1^5;</p><p> sbit k7=P1^6;</p><p> sbit k8=P1^7;</p><p> sbit k9=P2^0;</p><p> sbit speaker=P2^1;//P3^0</p><p>
93、 unsigned t_flag1=0,t_flag2=0,t_flag3=0,a,b=1;</p><p> unsigned char t_miao=0,t_fen=0,t_shi=0,t_ri=1,t_week=1,t_yue=1;</p><p> unsigned int t_nian=2000,i;</p><p> unsigned char
94、a_miao=5,a_fen=0,a_shi=0;</p><p> //在沒有鬧鐘顯示時的時間設(shè)置</p><p> //初始化后,為 時、分、秒 的設(shè)置</p><p> //k1 k2 k3 k4 k5 k6 設(shè)置 時 分 秒六位</p><p> //時十位 個位分十位 個位
95、 秒十位 個位</p><p> //調(diào)好,按K7確定。按K7后,進入年份的調(diào)試</p><p> // k1 k2 k3 k4 設(shè)置年份</p><p> //年千位 百位 十位 個位</p><p> //調(diào)好,按K8確定。按K8后,進入月份的調(diào)試</p><p><b&
96、gt; //</b></p><p> // k1 k2 k3 k4 k5置年份</p><p> //月十位 個位 日十位 個位 星期</p><p> //調(diào)好,按K8確定。按K8后,進入年歷運行</p><p> void t_anjian()</p><
97、;p><b> {</b></p><p> if(t_flag1!=1&&t_flag2!=1&&t_flag3!=1)</p><p><b> {</b></p><p><b> if(k1==0)</b></p><p>
98、 t_shi=t_shi+10;</p><p> if(t_shi/10==3)</p><p> t_shi=t_shi-30;</p><p><b> if(k2==0)</b></p><p><b> { </b></p><p> a=t_sh
99、i/10;</p><p> t_shi=t_shi+1;</p><p> if(t_shi/10>a)</p><p> t_shi=t_shi-10;</p><p><b> }</b></p><p> if(t_shi>23)</p><p&g
100、t; t_shi=0;</p><p><b> if(k3==0)</b></p><p> t_fen=t_fen+10;</p><p> if(t_fen/10==6)</p><p> t_fen=t_fen-60;</p><p><b> if(k4==
101、0)</b></p><p><b> { </b></p><p> a=t_fen/10;</p><p> t_fen=t_fen+1;</p><p> if(t_fen/10>a)</p><p> t_fen=t_fen-10;</p>
102、<p><b> }</b></p><p><b> if(k5==0)</b></p><p> t_miao=t_miao+10;</p><p> if(t_miao/10==6)</p><p> t_miao=t_miao-60;</p><p&
103、gt;<b> if(k6==0)</b></p><p><b> { </b></p><p> a=t_miao/10;</p><p> t_miao=t_miao+1;</p><p> if(t_miao/10>a)</p><p> t_
104、miao=t_miao-10;</p><p><b> }</b></p><p><b> if(k7==0)</b></p><p> t_flag1=1;</p><p><b> }</b></p><p> if(t_flag1==
105、1&&t_flag2!=1&&t_flag3!=1)</p><p><b> {</b></p><p><b> if(k1==0)</b></p><p><b> {</b></p><p> t_nian=t_nian+100
106、0;</p><p> if(t_nian/1000>=10)</p><p> t_nian=t_nian-10000;</p><p><b> }</b></p><p><b> if(k2==0)</b></p><p><b> {<
107、;/b></p><p> a=t_nian/1000;</p><p> t_nian=t_nian+100;</p><p> if(t_nian/1000>a)</p><p> t_nian=t_nian-1000;</p><p><b> }</b></p
108、><p><b> if(k3==0)</b></p><p><b> {</b></p><p> a=t_nian/100%10;</p><p> t_nian=t_nian+10;</p><p> if(t_nian/100%10>a)</p&g
109、t;<p> t_nian=t_nian-100;</p><p><b> }</b></p><p><b> if(k4==0)</b></p><p><b> {</b></p><p> a=t_nian/10%10;</p>
110、<p> t_nian=t_nian+1;</p><p> if(t_nian/10%10>a)</p><p> t_nian=t_nian-10;</p><p><b> }</b></p><p><b> if(k8==0)</b></p>&
111、lt;p> t_flag2=1;</p><p><b> }</b></p><p> if(t_flag1==1&&t_flag2==1&&t_flag3!=1)</p><p><b> {</b></p><p><b>
112、; if(k1==0)</b></p><p> t_yue=t_yue+10;</p><p> if(t_yue/10==2)</p><p> t_yue=t_yue-20;</p><p><b> if(k2==0)</b></p><p><b> {
113、 </b></p><p> a=t_yue/10;</p><p> t_yue=t_yue+1;</p><p> if(t_yue/10>a)</p><p> t_yue=t_yue-10;</p><p><b> }</b></p>&l
114、t;p> if(t_yue>12)</p><p> t_yue=1;</p><p> if(t_yue==1||t_yue==3||t_yue==5||t_yue==7||t_yue==8||t_yue==10||t_yue==12)</p><p><b> {</b></p><p>&l
115、t;b> if(k3==0)</b></p><p> t_ri=t_ri+10;</p><p> if(t_ri/10==4)</p><p> t_ri=t_ri-40;</p><p><b> if(k4==0)</b></p><p><b>
116、{ </b></p><p> a=t_ri/10;</p><p> t_ri=t_ri+1;</p><p> if(t_ri/10>a)</p><p> t_ri=t_ri-10;</p><p><b> }</b></p><p&g
117、t; if(t_ri>31)</p><p> t_ri=1;</p><p><b> }</b></p><p> if(t_yue==4||t_yue==6||t_yue==9||t_yue==11)</p><p><b> {</b></p><
118、p><b> if(k3==0)</b></p><p> t_ri=t_ri+10;</p><p> if(t_ri/10==4)</p><p> t_ri=t_ri-40;</p><p><b> if(k4==0)</b></p><p><
119、b> { </b></p><p> a=t_ri/10;</p><p> t_ri=t_ri+1;</p><p> if(t_ri/10>a)</p><p> t_ri=t_ri-10;</p><p><b> }</b></p>
120、<p> if(t_ri>30)</p><p> t_ri=1;</p><p><b> }</b></p><p> if(t_yue==2)</p><p><b> {</b></p><p> if(t_nian%4!=0
121、)</p><p><b> {</b></p><p><b> if(k3==0)</b></p><p> t_ri=t_ri+10;</p><p> if(t_ri/10==3)</p><p> t_ri=t_ri-30;</p><
122、p><b> if(k4==0)</b></p><p><b> { </b></p><p> a=t_ri/10;</p><p> t_ri=t_ri+1;</p><p> if(t_ri/10>a)</p><p> t_ri=t_r
123、i-10;</p><p><b> }</b></p><p> if(t_ri>28)</p><p> t_ri=1;</p><p><b> }</b></p><p> if(t_nian%4==0)</p><p&g
124、t;<b> {</b></p><p><b> if(k3==0)</b></p><p> t_ri=t_ri+10;</p><p> if(t_ri/10==4)</p><p> t_ri=t_ri-40;</p><p><b> if(k
125、4==0)</b></p><p><b> { </b></p><p> a=t_ri/10;</p><p> t_ri=t_ri+1;</p><p> if(t_ri/10>a)</p><p> t_ri=t_ri-10;</p><
126、;p><b> }</b></p><p> if(t_ri>29)</p><p> t_ri=1; </p><p><b> }</b></p><p><b> }</b></p><p> if(k5==
127、0) //調(diào)整星期函數(shù),以2000.01.01為參考</p><p><b> { </b></p><p><b> while(b)</b></p><p><b> {</b></p><p> for(i=2000;i<t_nian;i++)
128、</p><p><b> {</b></p><p> if(i%10!=0&&i/10%10!=0)</p><p><b> {</b></p><p> if(i%4==0)</p><p> t_week=t_week+2;</
129、p><p><b> else</b></p><p><b> t_week++;</b></p><p><b> }</b></p><p><b> else </b></p><p> if(i%400==0)&l
130、t;/p><p> t_week=t_week+2;</p><p><b> else</b></p><p><b> t_week++;</b></p><p><b> }</b></p><p> for(i=0;i<t_yue;i
131、++)</p><p><b> {</b></p><p> if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)</p><p> t_week=t_week+3;</p><p> if(i==4||i==6||i==9||i==11)</p><
132、p> t_week=t_week+2;</p><p> if(t_yue==2)</p><p><b> {</b></p><p> if(t_nian%10!=0&&t_nian/10%10!=0)</p><p><b> {</b></p>
133、<p> if(t_nian%4==0)</p><p><b> t_week++;</b></p><p><b> }</b></p><p><b> else </b></p><p> if(t_nian%400==0)</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 帶有l(wèi)cd顯示的音樂倒數(shù)計數(shù)器課程設(shè)計
- 帶有l(wèi)cd顯示的音樂倒數(shù)計數(shù)器課程設(shè)計
- 課程設(shè)計-帶有l(wèi)cd顯示的音樂倒數(shù)計數(shù)器設(shè)計
- 基于單片機lcd顯示的音樂倒數(shù)計數(shù)器課程設(shè)計論文
- 單片機課程設(shè)計---倒數(shù)計數(shù)器
- 倒數(shù)計數(shù)器單片機課程設(shè)計
- 基于at89c51帶有l(wèi)cd顯示的音樂倒數(shù)計數(shù)器課程設(shè)計
- 微機原理課程設(shè)計--基于單片機設(shè)計的音樂倒數(shù)計數(shù)器
- 微機原理課程設(shè)計--基于單片機設(shè)計的音樂倒數(shù)計數(shù)器
- 單片機課程設(shè)計--帶有l(wèi)cd顯示的定時鬧鐘
- 單片機課程設(shè)計----手動計數(shù)器
- 單片機計數(shù)器課程設(shè)計報告
- 微機原理課程設(shè)計--基于單片機設(shè)計的音樂倒數(shù)計數(shù)器.doc
- 單片機課程設(shè)計----語言報數(shù)計數(shù)器
- 單片機課程設(shè)計(語言報數(shù)計數(shù)器)
- lcd顯示設(shè)計單片機課程設(shè)計
- 單片機課程設(shè)計--簡易頻率計數(shù)器
- 單片機課程設(shè)計外部脈沖計數(shù)器
- 基于單片機的頻率計數(shù)器課程設(shè)計
- 單片機lcd系統(tǒng)顯示課程設(shè)計
評論
0/150
提交評論