多功能數(shù)字鐘課程設計報告_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  目錄</b></p><p><b>  1引言3</b></p><p>  2課程設計的目的與要求3</p><p>  2.1設計的目的3</p><p><b>  2.2要求3</b></p><p>  

2、3方案論證及選擇3</p><p>  3.1多功能數(shù)字鐘的總體設計思路3</p><p>  3.2多功能數(shù)字鐘系統(tǒng)方案論證3</p><p>  3.2.1多功能數(shù)字鐘系統(tǒng)方案選擇3</p><p>  3.2.2 單片機的選擇4</p><p>  3.2.3 顯示系統(tǒng)的方案比較4</p>

3、;<p>  3.2.4 溫度系統(tǒng)方案選擇4</p><p>  3.3 多功能數(shù)字鐘系統(tǒng)的總體設計4</p><p><b>  4.1基本原理5</b></p><p>  4.2單片機最小系統(tǒng)電路設計5</p><p>  4.2.1 單片機芯片選擇5</p><p&

4、gt;  4.2.2復位電路9</p><p>  4.2.3晶振電路9</p><p>  4.2.4電源電路9</p><p>  4.3時鐘系統(tǒng)電路設計9</p><p>  4.3.1 時鐘芯片選擇9</p><p>  4.3.2 DS1302 管腳及寄存器說明10</p><

5、p>  4.4溫度系統(tǒng)電路11</p><p>  4.4.1 溫度芯片的選擇11</p><p>  4.4.2 DS18B20 內(nèi)部結構描述11</p><p>  4.4.3 DS18b20 溫度系統(tǒng)電路12</p><p>  4.5 LED12864液晶顯示電路12</p><p>  4.5

6、.1 LED12864簡介12</p><p>  4.5.2液晶 12864 引腳說明13</p><p>  4.6 蜂鳴器電路14</p><p>  4.6.1蜂鳴器簡介14</p><p>  4.7按鍵電路15</p><p>  4.8 ISP在線編程電路15</p><

7、;p>  4.9 總體硬件系統(tǒng)設計:16</p><p>  4.10元件列表16</p><p><b>  5軟件設計17</b></p><p>  5.1軟件流程圖17</p><p><b>  6 實踐作品26</b></p><p><b

8、>  7總結28</b></p><p><b>  1引言</b></p><p>  微型計算機的出現(xiàn)給人類生活帶來了根本性的變化,單片機技的出現(xiàn)也給現(xiàn)代生活  帶來了一次新的技術革命,因其極高的性能價格比,應用很廣,發(fā)展很快。電子時鐘是現(xiàn)代社會應用廣泛的計時工具,在我們?nèi)粘I钪邪l(fā)揮重要作用。故本次課程設計通過對單片機的學習和應用,

9、以AT89C52 芯片為核心,輔以必要的電路,設計了一個具有 LCD準確顯示的數(shù)字實時時鐘,采用獨立式按鍵進行時間調(diào)整和功能轉(zhuǎn)換,并引入一個內(nèi)部充電電源在停止外部供電時仍具有內(nèi)部計時的功能。該系統(tǒng)同時具有硬件設計簡單、應用性強、工作穩(wěn)定性高等優(yōu)點。  </p><p>  2課程設計的目的與要求</p><p><b>  2.1設計的目的</b><

10、/p><p>  1 、 AT80S52單片機硬件結構。</p><p>  2 、 DS18B20 溫度傳感器的使用方法。</p><p>  3 、 DS1302 時鐘芯片的用法。</p><p>  4、 12864LCD 液晶屏的編程使用方法。</p><p><b>  2.2要求</b>&

11、lt;/p><p>  1 、能夠以數(shù)字的形式在 LCD12864 上顯示當前時間的小時和分鐘和秒。</p><p>  2 、能夠以數(shù)字加漢字的形式在 LCD12864 上顯示當前時間的小時和分鐘和秒。</p><p>  3 、能夠以數(shù)字加漢字的形式在 LCD12864 上顯示當前年月日。</p><p>  4 、能夠以數(shù)字加漢字的形式在

12、LCD12864 上顯示當前星期。</p><p>  5 、時間采用時鐘芯片 DS1302 控制。</p><p>  6 、溫度采用 DS18B20 溫度傳感器檢測當前溫度。</p><p>  7 、所有功能在 LCD12864 當中同步顯示。</p><p>  8 、采用 AT89S52單片機控制</p><p&

13、gt;<b>  3方案論證及選擇</b></p><p>  3.1多功能數(shù)字鐘的總體設計思路</p><p>  按照系統(tǒng)的設計功能要求,本多功能數(shù)字鐘系統(tǒng)的設計必須采用單片機軟件系統(tǒng)實現(xiàn),用單片機的自動控制能力配合 ds1302 和 ds18b20 來控制時鐘和溫度的調(diào)整顯示。獲得多功能數(shù)字鐘的數(shù)據(jù)信息,單片機對其進行一系列的處理,最后通過液晶顯示出來。<

14、/p><p>  3.2多功能數(shù)字鐘系統(tǒng)方案論證</p><p>  3.2.1多功能數(shù)字鐘系統(tǒng)方案選擇</p><p>  方案 1 : 通過單片機內(nèi)部的定時器 / 計數(shù)器,用軟件實現(xiàn),直接用單片機的定時器編程以實現(xiàn)時鐘;</p><p>  方案 2 : 用專門的時鐘芯片 ( DS1302 ) 實現(xiàn)時鐘的記時 , 再把時間數(shù)據(jù)送入單片機,

15、由單片機控制顯示。雖然用軟件實現(xiàn)時鐘硬件線路簡單,但是程序運行的每一步都需要時間,多一步或少一步程序都會影響記時的準確度,對定時器定時也不是十分準確,時鐘精度很低,對于我們實現(xiàn)所需要的功能造成軟件編程非常復雜。用專用時鐘芯片硬件成本相對較高,但它的精度很高,軟件編程很簡單。綜上所述,選擇方案 2 。</p><p>  3.2.2 單片機的選擇</p><p>  方案 1 : 8031

16、 系列,由于它沒有內(nèi)部 RAM ,系統(tǒng)又需要大量內(nèi)存存儲數(shù)據(jù),因而不可用 ; 51 系列單片機的 ROM 為 4K ,對于我們設計的系統(tǒng)可能有點小 。 </p><p>  方案 2 : 52 系列單片機與 51 系列的結構一樣 ,而 ROM 擴大為 8K ,對我們設計系統(tǒng)提供充足的空間進行功能的擴展 。再有 51 系列單片機與 52 系列的單片機價格差不多 。 因此 , 我們選擇 5 2系列的單片機。<

17、/p><p>  3.2.3 顯示系統(tǒng)的方案比較</p><p>  方案 1 : 用數(shù)碼管或點陣 LED 顯示。</p><p>  方案 2 : 用液晶 1602 顯示。</p><p>  方案 3 : 用液晶 12864 顯示。時鐘和溫度的顯示可以用數(shù)碼管或 LED ,而且價格便宜。但是數(shù)碼管的只能顯示簡單的設計的系統(tǒng),與我們設計

18、要求也不相符。有很多東西需要顯示,還是用顯示功能更好的液晶顯示器比較好,它能顯示更多的數(shù)據(jù),用 1602 液晶顯示數(shù)據(jù)有限, 1602 不能夠顯示指針時鐘,只能夠顯示一些基本的西文字符,顯示數(shù)據(jù)的可讀性不好,用可以顯示漢字的 12864 液晶顯示器還可以增加顯示信息的可讀性,用 12864 的繪圖功能即可繪制出大字體數(shù)字,讓人看起來會很方便 。雖然它們在價格上差距很大 ,但是 160 2不能夠?qū)崿F(xiàn)我們的要求,12864.是我們唯一的選擇

19、。</p><p>  3.2.4 溫度系統(tǒng)方案選擇</p><p>  方案 1 :用熱敏電阻等測溫元件測出電壓,再轉(zhuǎn)換成對應的溫度。需要比較多的外部元件 ( A/D 轉(zhuǎn)換 ) 支持 , 且硬件電路復雜 , 制作成本相對較高 。</p><p>  方案 2 :用 DS18B20 直接測溫。 DS18B20 溫度傳感器是美國 DALLAS 半導體公司最新推出的一

20、種改進型智能溫度傳感器 , 它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn) 9~12 位的數(shù)字值讀數(shù)方式。經(jīng)比較,我們選擇方案 2 。溫度實現(xiàn)只能通過外部的溫度傳感器來實現(xiàn)。經(jīng)上網(wǎng)查閱及市場考察, DS18b20 體積小,只有 3 只腳,電路接法簡單。內(nèi)部含有寄存器為我們設計實現(xiàn)上下限報警功能提供保障。精度為 0.5 °C ,也符合我們設計的要求。 DS18B20 也是我們通常使用的型號,因此溫度傳感器 用DS18

21、B20 。</p><p>  3.3 多功能數(shù)字鐘系統(tǒng)的總體設計</p><p>  初步確定設計系統(tǒng)由單片機AT89S52主控模塊、時鐘模塊 ds1302 、測溫模塊ds18b20 、顯示模塊 12864 、按鍵掃描模塊、ISP在線編程模塊、復位模塊、晶振模塊共 8個模塊組成,電路系統(tǒng)框圖如下</p><p><b>  4.1基本原理</b&

22、gt;</p><p>  本設計采用一塊單片機(AT89S52)作為多功能數(shù)字鐘的控制核心,加以溫度傳感(DS18B20)、時鐘芯片(DS1302)、液晶顯示屏(12864)、復位電路、晶振電路、按鍵電路等構成。系統(tǒng)的結構框架最主要的部分是中間的主控模塊部分,時間的計算由時鐘芯片(DS1302)完成,通過簡單的串行接口與單片機進行通信。溫度測量由溫度傳感器(DS18B20)完成。傳感器的測量結果由于是以數(shù)字信號

23、形式輸出,可以直接送給單片機處理。單片機在接到數(shù)據(jù)后,一方面將時間日期通過液晶顯示屏(12864)顯示出來,另一方面通過對鍵盤的掃描來確定哪個鍵按下,隨即跳轉(zhuǎn)到該鍵對應功能模塊界面。 </p><p>  4.2單片機最小系統(tǒng)電路設計</p><p>  4.2.1 單片機芯片選擇</p><p>  單片機采用 52 系列單片機。由 ATMEL 公司生產(chǎn)的 AT8

24、9S52 是一種低功耗、高性能 CMOS8 位微控制器,具有 8K 在系統(tǒng)可編程 Flash 存儲器 。使用 Atmel 公司高密度非易失性存儲器技術制造,與工業(yè) 80C51 產(chǎn)品指令和引腳完全兼容 。 在單芯片上 , 擁有靈巧的 8 位 CPU 和在線系統(tǒng)可編程 Flash ,使得 AT89S52 為眾多嵌入式控制應用系統(tǒng)提供高靈活、有效的解決方案。 AT89S52 具有以下標準功能: 8k 字節(jié) Flash , 256 字節(jié) RAM

25、 ,32 位 I/O 口線,看門狗定時器, 2 個數(shù)據(jù)指針,三個 16 位定時器 / 計數(shù)器,一個 6 向量 2 級中斷結構,全雙工串行口,片內(nèi)晶振及時鐘電路??臻e模式下 , CPU 停止工作 , 允許 RAM 、 定時器 / 計數(shù)器 、 串口 、 中斷繼續(xù)工作 。 掉電保護方式下 , RAM 內(nèi)容被保存 , 振蕩器被凍結 , 單片機一切工作停止,直到下一個中斷或硬件復位為止。而且,它還具有一個看門狗 ( WDT ) 定時 / 計數(shù)器

26、, 如果程序沒有正常工作 , 就會強制整個系統(tǒng)復位,還可</p><p>  單片機管腳圖及說明:</p><p>  VCC :供電電壓。</p><p><b>  GND :接地。</b></p><p>  P0 口: P0 口為一個 8 位漏級開路雙向 I/O 口,每腳可吸收 8TTL 門流 。當 P1 口的管

27、腳第一次寫 1 時 , 被定義為高阻輸入 。 P0 能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù) / 地址的第八位 。 在 FIASH 編程時 , P0 口作為原碼輸入口,當 FIASH 進行校驗時, P0 輸出原碼,此時 P0 外部必須被拉高。</p><p>  P1 口: P1 口是一個內(nèi)部提供上拉電阻的 8 位雙向 I/O 口, P1 口緩沖器能接收輸出 4TTL 門電流。 P1 口管腳寫入 1 后,被

28、內(nèi)部上拉為高,可用作輸入, P1 口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在 FLASH 編程和校驗時, P1 口作為第八位地址接收。</p><p>  P2 口: P2 口為一個內(nèi)部上拉電阻的 8 位雙向 I/O 口, P2 口緩沖器可接收,輸出 4 個 TTL 門電流,當 P2 口被寫 “ 1 ” 時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時, P2 口的管腳被外部拉低,將

29、輸出電流。這是由于內(nèi)部上拉的緣故。 P2 口當用于外部程序存儲器或 16 位地址外部數(shù)據(jù)存儲器進行存取時, P2 口輸出地址的高八位。在給出地址“ 1 ” 時 , 它利用內(nèi)部上拉優(yōu)勢 , 當對外部八位地址數(shù)據(jù)存儲器進行讀寫時 , P2 口輸出其特殊功能寄存器的內(nèi)容 。 P2 口在 FLASH 編程和校驗時接收高八位地址信號和控制信號。</p><p>  P3 口 : P3 口管腳是 8 個帶內(nèi)部上拉電阻的雙向

30、I/O 口 , 可接收輸出 4 個TTL 門電流 。 當 P3 口寫入 “ 1 ” 后 , 它們被內(nèi)部上拉為高電平 , 并用作輸入 。 作為輸入 , 由于外部下拉為低電平 , P3 口將輸出電流 ( ILL ) 這是由于上拉的緣故。</p><p>  P3 口也可作為 AT89S52 的一些特殊功能口,如下表所示:</p><p>  P3 口同時為閃爍編程和編程校驗接收一些控制信號。&

31、lt;/p><p>  RST : 復位輸入 。 當振蕩器復位器件時 , 要保持 RST 腳兩個機器周期的高</p><p><b>  電平時間。</b></p><p>  ALE/PROG :當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在 FLASH 編程期間,此引腳用于輸入編程脈沖。在平時, ALE 端以不變的頻率周期

32、輸出正脈沖信號,此頻率為振蕩器頻率的1/6 。 因此它可用作對外部輸出的脈沖或用于定時目的 。 然而要注意的是 :每當用作外部數(shù)據(jù)存儲器時,將跳過一個 ALE 脈沖。如想禁止 ALE 的輸出可在 SFR8EH 地址上置 0 。 此時 , ALE 只有在執(zhí)行 MOVX , MOVC 指令是 ALE 才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài) ALE 禁止,置位無效。/PSEN :外部程序存儲器的選通信號。在由外部程序存儲

33、器取指期間,每個機器周期兩次 /PSEN 有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的 /PSEN 信號將不出現(xiàn)。/EA/VPP :當 /EA 保持低電平時,則在此期間外部程序存儲器( 0000H-FFFFH ) , 不管是否有內(nèi)部程序存儲器 。 注意加密方式 1 時 , /EA將內(nèi)部鎖定為 RESET ;當 /EA 端保持高電平時,此間內(nèi)部程序存儲器 。 在FLASH 編程期間,此引</p><p>  EA

34、:非 /Vpp 腳我們沒有用外部擴展 ROM, 因此 EA 非 /Vpp 為高電平,即接 +5V 電源。</p><p><b>  4.2.2復位電路</b></p><p>  復位電路有兩種方式 : 上電復位和按鈕復位 , 我們主要用按鈕復位方式。如下圖所示:</p><p><b>  4.2.3晶振電路</b>&

35、lt;/p><p>  電路中,在XTAL1和XTAL2之間連接晶體震蕩器與電容構成穩(wěn)定的自激震蕩器,電容器C3和C4對振蕩器具有微調(diào)作用。如下圖所示:</p><p>  選取原則:電容選取 22pF ,晶振為 12MHz 。</p><p><b>  4.2.4電源電路</b></p><p>  AT89S52 單片

36、機的供電電源是 5V 的直流電。如下圖所示:</p><p>  4.3時鐘系統(tǒng)電路設計</p><p>  4.3.1 時鐘芯片選擇</p><p>  我們采用具有涓細電流充電能力的低功耗實時時鐘電路 DS1302 。它可以對年、月、日、周日、時、分、秒進行計時,可以達到我們設計的基本的要求,且具有閏年補償?shù)榷喾N功能。它采用主電源和備用電源雙電源供電。它的工作電

37、壓范圍2.0~5.5V , 在 2.2V 時 , 小于 300nA 。 它內(nèi)部含有 31 個字節(jié)的靜態(tài) RAM ,可提供用戶訪問。</p><p>  DS1302內(nèi)部的寄存器為我們調(diào)時,鬧鐘定時提供了寄存空間。備用電源也實現(xiàn)了當系統(tǒng)斷電后,時鐘仍然可以保持。而且它是串行接口 , 與單片機通信所需要的接口少 。 不像 DS12887 等芯片并行通信需要很多 IO 口。</p><p>  

38、4.3.2 DS1302 管腳及寄存器說明</p><p>  1)DS1302 的引腳排列</p><p>  Vcc1 為后備電源, VCC2 為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。 DS1302 由 Vcc1 或 Vcc2 兩者中的較大者供電。當 Vcc2 大于 Vcc1 + 0.2V 時 , Vcc2 給 DS1302 供電 。 當 Vcc2 小于 Vcc 1時

39、, DS1302 由 Vcc1 供電 。 因此 , 我們 Vcc1 用 3V 的紐扣電池作為備用電源 , Vcc2 用系統(tǒng)電源作為主電源 。 X1 和 X2 是振蕩源 , 外接 32.768kH z晶振 。 RST 是復位 / 片選線 , 通過把 RST 輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送 。 RST 輸入有兩種功能 : 首先 , RST 接通控制邏輯 , 允許地址 /命令序列送入移位寄存器;其次, RST 提供終止單字節(jié)或多字節(jié)數(shù)據(jù)

40、的傳送手段 。 當 RS T 為高電平時 , 所有的數(shù)據(jù)傳送被初始化 , 允許 對 DS130 2進行操作 。 如果在傳送過程中 RST 置為低電平 , 則會終止此次數(shù)據(jù)傳送 ,I/O 引腳變?yōu)楦咦钁B(tài)。上電運行時,在 Vcc ≥ 2.5V 之前, RST 必須保持低電平。只有在 S</p><p>  2)DS1302 的寄存器說明</p><p>  DS1302 有 12 個寄存器,其

41、中有 7 個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為 BCD 碼形式 。 此外 , DS1302 還有年份寄存器 、 控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與 RAM 相關的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302 與 RAM 相關的寄存器分為兩類 : 一類是單個 RAM 單元 , 共 3 1</p><p>  個,每個單元組態(tài)為一個 8 位的字節(jié),其命令控制字為 C

42、0H ~ FDH ,其中奇數(shù)為讀操作 , 偶數(shù)為寫操作 ; 另一類為突發(fā)方式下的 RAM 寄存器 ,此方式下可一次性讀寫所有的 RAM 的 31 個字節(jié),命令控制字為FEH( 寫 ) 、 FFH( 讀 ) 。</p><p>  3)、DS1302 時鐘電路如下圖所示:</p><p>  DS1302 與單片機的連接僅需 3 條線:時鐘線 SCLK 、數(shù)據(jù)線 I/O 和復位線 RST 。

43、時鐘線 SCLK 與 P1.1 相連,數(shù)據(jù)線 I/O 與 P1.2 相連,復位線RESS 與 P1.3相連。由于 DS1302 是靠涓細電流充電來實現(xiàn)串行輸入輸出的,因此,在 SCLK 、 I/O 、 RST 線上要加上拉電阻 , 其中 , 它們的電流應該在 500u~1mA 之間,若電源為 5V ,則 R 約為 5k ,因此,我們的電阻 R=4.7K 。在單電源與電池供電系統(tǒng)中 , vcc1 提供低電源并提供低功率的備用電源 。Vcc

44、2 提供高電源作為芯片供電的主電源。因此,這里 vcc1 用 10uf 的電容做電池, vcc2 用 5V 的系統(tǒng)電源。晶振為 32.768KHz 接入 X1 、 X2 引</p><p><b>  腳。</b></p><p><b>  4.4溫度系統(tǒng)電路</b></p><p>  4.4.1 溫度芯片的選擇<

45、;/p><p>  溫度實現(xiàn)只能通過外部的溫度傳感器來實現(xiàn) 。 經(jīng)上網(wǎng)查閱資料及市場考察 , DS18b20 體積小 , 只有 3 只腳,電路接法簡單 。 它能夠直接讀出被測溫度 。 內(nèi)部含有寄存器為我們設計實現(xiàn)上下限報警功能提供保障 。 用戶可定義的非易失性溫度報警設置 ; 報警搜索命令識別并標志超過程序限定溫度 ( 溫度報警條件 ) 的器件 ; 精度為 0.5 ° C , 也符合我們設計的要求 。 DS

46、18B20 也是我們通常使用的型號 , 因此溫度傳感器用 DS18B20 。</p><p>  4.4.2 DS18B20 內(nèi)部結構描述</p><p>  DS18B20 溫度傳感器的內(nèi)部存儲器還包括一個高速暫存 RAM 和一個非易失性的可電擦除的 EERAM 。 高速暫存 RAM 的結構為 8 個字節(jié)的存儲器,結構如圖 4.1 所示。頭兩個字節(jié)包含測得的溫度信息,第三和第四字節(jié)是 T

47、H 和 TL 的拷貝 , 是易失的 , 每次上電復位時被刷新 。 第五個字節(jié)為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20 工作時按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應精度的數(shù)值。該字節(jié)各位的定義如圖 4.2 所示。低 5 位一直為 1 , TM 是測試模式位 ,用于設置 DS18B20 在工作模式還是在測試模式。</p><p>  4.4.3 DS18b20 溫度系統(tǒng)電路</p>

48、;<p>  DS18B20 溫度系統(tǒng)電路如下:</p><p>  DS18B20 有兩種接法:一是單線接法即只接 QT 。這種方法應用它內(nèi)部的寄生電源 , 因此在 QT 上要用一個 MOSFET 把 I/O 線只接拉到電源上 。二是從 vdd 腳加上電源。方法一適合于遠距離溫度監(jiān)控,不需要本地電源 。 而我們只是設計測溫系統(tǒng) , 選擇方法二就行了 , 還有 MOSFET 極容易燒,我們不用它。

49、Vdd 接 5V 電源, vss 接地, QT 與 P3.1 相連。因 為DS18B20 的工作電流約為 1MA ,因此 Qt 端還要加上拉電阻為其提供電流。若用 5V 電源,則 R=5/1MA=5k 。 R 取 4.7K 。</p><p>  4.5 LED12864液晶顯示電路</p><p>  4.5.1 LED12864簡介</p><p>  帶中文

50、字庫的 128X64 是一種具有 4 位 /8 位并行 、 2 線或 3 線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊 ;其顯示分辨率為 128 × 64, 內(nèi)置 8192 個 16*16 點漢字,和 128 個16*8 點 ASCII 字符集 . 利用該模塊靈活的接口方式和簡單 、 方便的操作指令,可構成全中文人機交互圖形界面??梢燥@示 8 × 4 行 16 × 16 點陣

51、的漢字 . 也可完成圖形顯示 . 低電壓低功耗是其又一顯著特點。由該模塊構成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結構或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。</p><p>  4.5.2液晶 12864 引腳說明</p><p>  管腳號管腳名稱、電平管腳功能描述如下表</p><p>  1、VSS 0V

52、 電源地</p><p>  2 、VCC 3.0+5V 電源正</p><p>  3、 V0 - 對比度(亮度)調(diào)整</p><p>  4、RS(CS ) H/L</p><p>  RS= “ H ” , 表示 DB7 —— DB0 為顯示數(shù)據(jù)</p><p>  RS= “ L ” , 表示 DB7 —— D

53、B0 為顯示指令數(shù)據(jù)</p><p>  5 、R/W(SID H/L R/W= “ H ” ,E= “ H ” , 數(shù)據(jù)被讀到 DB7 —— DB0) R/W= “ L ” ,E= “ H → L ” , DB7 —— DB0 的數(shù)據(jù)被寫到 IR 或 DR</p><p>  6 、E(SCLK) H/L 使能信號</p><p>  7 、DB0 H/L 三態(tài)

54、數(shù)據(jù)線</p><p>  8 、DB1 H/L 三態(tài)數(shù)據(jù)線</p><p>  9 、DB2 H/L 三態(tài)數(shù)據(jù)線</p><p>  10、 DB3 H/L 三態(tài)數(shù)據(jù)線</p><p>  11 、DB4 H/L 三態(tài)數(shù)據(jù)線</p><p>  12、 DB5 H/L 三態(tài)數(shù)據(jù)線</p><p&g

55、t;  13 、DB6 H/L 三態(tài)數(shù)據(jù)線</p><p>  14 、DB7 H/L 三態(tài)數(shù)據(jù)線</p><p>  15、 PSB H/L H : 8 位或 4 位并口方式 , L : 串口方式 </p><p>  16、 NC - 空腳</p><p>  17 、/RESET H/L 復位端,低電平有效</p><

56、;p>  18、 VOUT - LCD 驅(qū)動電壓輸出端</p><p>  19 、A VDD 背光源正端( +5V ) </p><p>  20 、K VSS 背光源負端</p><p>  LED12864液晶顯示電路設計中采用 LCD12864 液晶顯示 。 它一般串口 、 并口兩種方式顯示 ,而我們在這里采用串口顯示。LCD12864 顯示電路如下圖

57、所示:</p><p><b>  4.6 蜂鳴器電路</b></p><p>  4.6.1蜂鳴器簡介</p><p>  蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。</p><p>  蜂鳴器主要分為:

58、壓電式蜂鳴器和電磁式蜂鳴器兩種類型。壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構成,當接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周

59、期性地振動發(fā)聲。</p><p>  蜂鳴器發(fā)聲原理:電流通過電磁線圈,使電磁線圈產(chǎn)生磁場來驅(qū)動振動膜發(fā)聲的,需要一定的電流才能驅(qū)動它,單片機IO引腳輸出的電流較小,單片機輸出的TTL電平基本上驅(qū)動不了蜂鳴器,因此需要增加一個電流放大的電路,通過一個三極管C9012來放大驅(qū)動蜂鳴器。它的電路如下圖所示:</p><p><b>  4.7按鍵電路</b></p&

60、gt;<p>  采用輕觸按鍵完成各項功能的設置,分別為調(diào)整年份、調(diào)整月份、調(diào)整日期、設置小時、調(diào)整分鐘以及設置鬧鈴。它的電路如下圖所示:</p><p>  4.8 ISP在線編程電路</p><p>  4.9 總體硬件系統(tǒng)設計:</p><p><b>  4.10元件列表</b></p><p>

61、;<b>  5軟件設計</b></p><p>  為利于該設計的多功能的實現(xiàn)和更高的編程效率,采用c語言進行編程。為實現(xiàn)編程結構清晰,采用各個模塊單獨編程,最后實現(xiàn)各個模塊的綜合連接。主程序的框架由鍵盤掃描程序構成,各個功能模塊程序嵌入到各個按鍵的子程序中,通過對按鍵的不斷掃描來確定跳轉(zhuǎn)到哪個功能模塊。對于鍵盤模塊,采用掃描法循環(huán)掃描。</p><p><b

62、>  5.1軟件流程圖</b></p><p>  2.5.1 軟件流程圖</p><p><b>  主程序流程圖</b></p><p><b>  計算陽歷程序流程圖</b></p><p><b>  時間調(diào)整流程圖</b></p>&

63、lt;p><b>  5.1軟件程序</b></p><p><b>  主程序</b></p><p>  #include<reg52.h></p><p>  #include<stdio.h></p><p>  #include<math.h>&l

64、t;/p><p>  #include<intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #include"lcd12864.h"</p><p>  

65、#include"ds1302.h"</p><p>  uchar NEXT=0;</p><p>  uchar state;</p><p>  uint counter,date;</p><p>  uchar jifei_flag,start_flag;</p><p>  uchar

66、 tab[]={"行車距離00.0公里"</p><p>  "單價 00.0 元 "</p><p>  "總價 00.0 元 "</p><p>  "停車計時 00分鐘"};</p><p>  uint x,f,m,n,k,mn;//定

67、義全局變量</p><p>  sbit dj = P1^0;</p><p>  sbit FMQ = P3^0;</p><p>  sbit yw = P0^0;</p><p>  sbit k1 = P3^1;</p><p>  sbit k2 = P3^3;</p>

68、<p>  sbit k3 = P3^4;</p><p>  sbit k4 = P3^5;</p><p>  sbit k5 = P3^6;</p><p>  sbit k6 = P3^7;</p><p>  void delay1(uint z)</p><p>  {

69、uint m,n;</p><p>  for(m=z;m>0;m--)</p><p>  for(n=110;n>0;n--);} </p><p>  void welcome()</p><p>  { chn_disp_string(0x80,"歡迎乘坐空調(diào)855 ");</p>&l

70、t;p>  chn_disp_string(0x90,"本公交線路共五段");</p><p>  chn_disp_string(0x88,"請大家看清站牌。");</p><p>  chn_disp_string(0x98,"祝大家路途愉快!");}</p><p>  void sh

71、ijian()</p><p>  { chn_disponeword(1,1,1,"20");</p><p>  chn_disponeword(1,2,year+1,tab_num);</p><p>  chn_disponeword(1,3,1,"年");</p><p>  chn_dis

72、poneword(1,4,month+1,tab_num);</p><p>  chn_disponeword(1,5,1,"月");</p><p>  chn_disponeword(1,6,day+1,tab_num);</p><p>  chn_disponeword(1,7,1,"日");</p>

73、<p>  chn_disponeword(1,8,1," ");</p><p>  chn_disponeword(2,1,hour+1,tab_num);</p><p>  chn_disponeword(2,2,1,"時");</p><p>  chn_disponeword(2,3,minute+1,

74、tab_num);</p><p>  chn_disponeword(2,4,1,"分");</p><p>  chn_disponeword(2,5,second+1,tab_num);</p><p>  chn_disponeword(2,6,1,"秒");</p><p>  chn_dis

75、poneword(2,7,1," ");</p><p>  chn_disponeword(2,8,week,tab_week);</p><p>  chn_disp_string(0x88,"歡迎乘坐出租車 ");</p><p>  chn_disp_string(0x98,"祝大家路途愉快!"

76、);</p><p><b>  }</b></p><p>  void k_control()</p><p>  {///////////////////k1功能鍵/////////////////////////</p><p>  switch(state)</p><p>  {cas

77、e 1: lat_disp (0x00,0x00);</p><p>  chn_disponeword(1,2,year+1,tab_num);</p><p>  con_disp (0xff,0xff,0x81,0x81,1,11);delay1(100);</p><p><b>  break;</b></p><

78、p>  case 2: lat_disp (0x00,0x00);</p><p>  chn_disponeword(1,4,month+1,tab_num); </p><p>  con_disp (0xff,0xff,0x83,0x82,1,11);delay1(100);</p><p><b>  break;</b><

79、;/p><p>  case 3:lat_disp (0x00,0x00);</p><p>  chn_disponeword(1,6,day+1,tab_num);</p><p>  con_disp (0xff,0xff,0x85,0x82,1,11);delay1(100);</p><p>  break;

80、</p><p>  case 4:lat_disp (0x00,0x00);</p><p>  chn_disponeword(2,1,hour+1,tab_num);</p><p>  con_disp (0xff,0xff,0x90,0x90,1,11);delay1(100);</p><p><b>  break

81、;</b></p><p>  case 5: lat_disp (0x00,0x00);</p><p>  chn_disponeword(2,3,minute+1,tab_num);</p><p>  con_disp (0xff,0xff,0x92,0x92,1,11);delay1(100);</p><p><

82、;b>  break;</b></p><p>  case 6: lat_disp (0x00,0x00);</p><p>  chn_disponeword(2,5,second+1,tab_num);</p><p>  con_disp (0xff,0xff,0x94,0x92,1,11);delay1(100);</p>

83、<p><b>  break;</b></p><p>  case 7:lat_disp (0x00,0x00);</p><p>  chn_disponeword(2,8,week,tab_week);</p><p>  con_disp (0xff,0xff,0x97,0x92,1,11);delay1(100);

84、</p><p><b>  break;</b></p><p>  case 8: state=0; </p><p>  clrram (); </p><p><b>  break;</b></p><p>  default:break;}</p>

85、<p>  //////////////////////k2加鍵///////////////////////// </p><p>  if((k2!=1)&&(jifei_flag==0))</p><p>  { delay1(2);</p><p>  if((k2!=1)&&(jifei_flag==0)

86、)</p><p>  { while(k2!=1){FMQ=1;}FMQ=0;</p><p>  if(state==1){year++;if(year>=100)year=1;write_ds1302(0x8e,0x00);write_ds1302(0x8c,od_ox(year));write_ds1302(0x8e,0x80);}//年</p><

87、;p>  if(state==2){month++;if(month>=13)month=1;write_ds1302(0x8e,0x00);write_ds1302(0x88,od_ox(month));write_ds1302(0x8e,0x80);}</p><p>  if(state==3){day++;if(day>=32)day=1;write_ds1302(0x8e,0

88、x00);write_ds1302(0x86,od_ox(day));write_ds1302(0x8e,0x80);}</p><p>  if(state==4){hour++;if(hour>=25)hour=0;write_ds1302(0x8e,0x00);write_ds1302(0x84,od_ox(hour));write_ds1302(0x8e,0x80);}</p>

89、<p>  if(state==5){minute++;if(minute>=61)minute=1;write_ds1302(0x8e,0x00);write_ds1302(0x82,od_ox(minute));write_ds1302(0x8e,0x80);}</p><p>  if(state==6){second++;if(second>=61)second=1;write_

90、ds1302(0x8e,0x00);write_ds1302(0x80,od_ox(second));write_ds1302(0x8e,0x80);}</p><p>  if(state==7){week=week+1;if(week>=8)week=1; write_ds1302(0x8e,0x00);write_ds1302(0x8a,od_ox(week));write_ds1302(0x8e

91、,0x80);}</p><p><b>  } </b></p><p><b>  }</b></p><p>  ////////////////////////k3減鍵/////////////////////////</p><p>  if((k3!=1)&&(jif

92、ei_flag==0))</p><p>  {delay1(2);</p><p>  if((k3!=1)&&(jifei_flag==0))</p><p>  {while(k3!=1){FMQ=1;}FMQ=0;</p><p>  if(state==1){year=year-1;if(year<=0)ye

93、ar=99; write_ds1302(0x8e,0x80);write_ds1302(0x8c,od_ox(year));write_ds1302(0x8e,0x80);}//年</p><p>  if(state==2){month=month-1;if(month<=0)month=12;write_ds1302(0x8e,0x00);write_ds1302(0x88,od_ox

94、(month));write_ds1302(0x8e,0x80);}//月</p><p>  if(state==3){day=day-1;if(day<=0)day=31; write_ds1302(0x8e,0x00);write_ds1302(0x86,od_ox(day));write_ds1302(0x8e,0x80);}//日</p><p>  if

95、(state==4){hour=hour-1;if(hour<=0)hour=1; write_ds1302(0x8e,0x00);write_ds1302(0x84,od_ox(hour));write_ds1302(0x8e,0x80);}//時</p><p>  if(state==5){minute=minute-1;if(minute<=0)minute=59;write_ds

96、1302(0x8e,0x00);write_ds1302(0x82,od_ox(minute));write_ds1302(0x8e,0x80);}//分</p><p>  if(state==6){second=second-1;if(second<=0)second=59;write_ds1302(0x8e,0x00);write_ds1302(0x80,od_ox(second));write_ds

97、1302(0x8e,0x80);}//秒 </p><p>  if(state==7){week=week-1;if(week<=1)week=7; write_ds1302(0x8e,0x00);write_ds1302(0x8a,od_ox(week));write_ds1302(0x8e,0x80);}//星期</p><p><b>  }<

98、;/b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void zongjia_jia() //車費總價加</p><p>  { if((k1==0)&&(star

99、t_flag==0))</p><p>  {delay1(200);</p><p>  if((k1==0)&&(start_flag==0))</p><p><b>  { n++;</b></p><p>  tab[38]=n/100%10+0x30; </p><p>

100、;  tab[39]=n/10%10+0x30; </p><p>  tab[41]=n%10+0x30;</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  

101、void zongjia_jian() //車費總價減</p><p>  { if((k2==0)&&(start_flag==0))</p><p>  {delay1(200);</p><p>  if((k2==0)&&(start_flag==0))</p>

102、<p><b>  {n--;</b></p><p>  tab[38]=n/100%10+0x30; </p><p>  tab[39]=n/10%10+0x30; </p><p>  tab[41]=n%10+0x30;</p><p><b>  } </b></p&

103、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  void danjia_jia() //車費單價加</p><p>  { if((k3==0)&&(start_flag==0))</p><p>

104、;  {delay1(200);</p><p>  if((k3==0)&&(start_flag==0))</p><p><b>  { m++;</b></p><p>  //if(m >= 100) m=0;</p><p>  tab[22]=m/100%10+0x30; </

105、p><p>  tab[23]=m/10%10+0x30;</p><p>  tab[25]=m%10+0x30; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

106、;<p>  void danjia_jian() //車費單價減</p><p>  { if((k4==0)&&(start_flag==0))</p><p>  {delay1(200);</p><p>  if((k4==0)&&(start_flag==0))</p>&

107、lt;p><b>  { m--;</b></p><p>  //if(m >= 100) m=0;</p><p>  tab[22]=m/100%10+0x30; </p><p>  tab[23]=m/10%10+0x30;</p><p>  tab[25]=m%10+0x30; </p&

108、gt;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /////////// 中斷初始化//////////////////////////////////////////////</p>

109、<p>  void Eint0() //外部中斷0,邊沿觸發(fā)</p><p>  { IT0=1;</p><p><b>  EX0=1;</b></p><p><b>  }</b></p>&l

110、t;p>  void Dshi0() //定時器0,每周期0.01s</p><p>  { TH0=(65536-50000)/256; </p><p>  TL0=(65536-50000)%256; </p><p>  PT0=1;

111、 </p><p><b>  ET0=1;</b></p><p><b>  PX0=0;</b></p><p><b>  PX1=0;</b></p><p><b>  }</b></p><p>  /////////

112、///////////////////////////////////////////////////////////</p><p>  {TMOD=0x01; </p><p>  Eint0(); //外部中斷0初始化</p><p>  Dshi0(); //定時器0

113、初始化init_lcd ();</p><p><b>  EA=1;</b></p><p><b>  FMQ=0;</b></p><p>  clrram(); </p><p><b>  while(1)</b></p><p>  {

114、if(yw==0)</p><p>  { delay1(1);</p><p><b>  if(yw==0)</b></p><p>  {clrram();</p><p><b>  FMQ=0;</b></p><p>  delay1(100);</p&g

115、t;<p><b>  FMQ=1;</b></p><p>  delay1(100);</p><p><b>  FMQ=0;</b></p><p>  delay1(100);</p><p>  Disp_img(logo);</p><p><

116、;b>  clrram();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if((k1!=1)&&(jifei_flag==0)) </p><p>  { delay1(1);</p>

117、<p>  if((k1!=1)&&(jifei_flag==0))</p><p>  { while(k1==0){FMQ=1;}FMQ=0;</p><p><b>  state++;</b></p><p><b>  }</b></p><p><b&

118、gt;  } </b></p><p>  if((k4!=1)&&(jifei_flag==0)) </p><p>  {delay1(2);</p><p>  if((k4!=1)&&(jifei_flag==0))</p><p>  {while(k4

119、!=1){FMQ=1;}FMQ=0;</p><p>  state=0;clrram ();</p><p><b>  }</b></p><p><b>  }</b></p><p>  if((state==0)&&(jifei_flag==0))</p>

120、<p>  {read_time();</p><p>  shijian(); </p><p><b>  }</b></p><p>  else k_control();</p><p><b>  if(k5==0)</b></p><p>  {

121、 delay1(1);</p><p><b>  if(k5==0)</b></p><p>  {while(k5==0){FMQ=1;}FMQ=0;</p><p>  jifei_flag=1;</p><p>  start_flag=0;TR0=0;</p><p>  n=0;m=0

溫馨提示

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

評論

0/150

提交評論