基于mcs51單片機的電子萬年歷設計-畢業(yè)匯編(完整版)資料_第1頁
基于mcs51單片機的電子萬年歷設計-畢業(yè)匯編(完整版)資料_第2頁
基于mcs51單片機的電子萬年歷設計-畢業(yè)匯編(完整版)資料_第3頁
基于mcs51單片機的電子萬年歷設計-畢業(yè)匯編(完整版)資料_第4頁
基于mcs51單片機的電子萬年歷設計-畢業(yè)匯編(完整版)資料_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于mcs51單片機的電子萬年歷設計畢業(yè)匯編(完整版)資料(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

基于mcs51單片機的電子萬年歷設計畢業(yè)匯編(完整版)資料(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)成績:成績:江西科技師范大學畢業(yè)設計(論文)題目(中文):基于MCS51的電子萬年歷的設計(英文):ThedesignoftheelectroniccalendarbasedonMCS51院(系):通信與電子學院專業(yè):電子信息工程姓名:蘭小玲學號:20212623指導教師:宗文軍2021年4月22日目錄基于MCS51的電子萬年歷的設計摘要:隨著現(xiàn)今世界信息化時代和經(jīng)濟的快速發(fā)展的來臨,各式各樣的小型智能家電產(chǎn)物陸續(xù)出現(xiàn)在我們的生活中。日歷是人們不可或缺的日常用品。但一般日歷都是紙制的,使用不便,壽命不長。電子萬年歷采用智能電子控制和顯示技術,改善了紙制日歷的缺陷。本設計以AT89C51單片機為核心,構成單片機主控制電路,結(jié)合DS1302時鐘芯片和DS18B20溫度芯片,完成時間的自動調(diào)整和掉電保護,全部信息用液晶顯示。時間、日期調(diào)整由三個按鍵來實現(xiàn),并可對鬧鈴開關進行設置。日歷能顯示年、月、日以及星期、時、分、秒。關鍵詞:電子萬年歷

51單片機

時鐘芯片

溫度芯片

液晶顯示器

第一章引言跟著微電子技術和超大范圍集成電路技術的不停進步,家用電子產(chǎn)物不光種類日益豐碩,還變得加倍經(jīng)濟實用,單片微型計算機體積小、性價比高、功能強、可靠性高等獨有的特點,在各個范疇得到了廣泛普遍。電子萬年歷是一種非常廣泛的日常計時工具,數(shù)字電子鐘已經(jīng)越來越流行,特別適用于車站、廣場以及辦公,還可用于家庭居室。LED數(shù)字顯示的電子鐘顯示清晰直觀、走時精準、能夜視,還能夠延伸出其他功能。功能也越來越齊全,除了公歷年、月份、日期、時分秒、禮拜顯示及鬧鈴。但通過我們對各類電子鐘的不停觀察,總結(jié)發(fā)現(xiàn)目前市場的電子鐘都出現(xiàn)一些不足之處,例如:時鐘不精確、產(chǎn)物本錢太高、無環(huán)境溫度顯示等,這都給人們的使用帶來了一些不便。為此設計了一種功能周全、計時精確、本錢便宜的基于MSC51的電子萬年歷。1.1研究背景與意義當今社會的電子技術可謂是發(fā)展迅速,特別是隨著大規(guī)模或者超大集成電路的出現(xiàn),給人類學習、工作、娛樂、以及生活、都帶來了本質(zhì)性的改變。尤其是單片機的應用產(chǎn)物已經(jīng)進入了每家每戶。電子萬年歷給人類帶來了許多方便。利用單片機制作的的電子萬年歷其編程靈活,便于功能擴展,高精度等特點,而且它走時精準、顯示清晰,很是受大眾歡迎。通過單片機設計的電子萬年歷,能夠用軟件編程進行功能的調(diào)整和改進,促使其可以精準顯示年、月、日、時辰、禮拜的同時,還可以有許多其他功能。例如:設置鬧鐘、語音報時、顯示溫度等有一定的實用性,同時體積小、方便使用、方便攜帶,當然,還有其成本不高、計時準確、性能穩(wěn)定、更新周期也短,維護方便等優(yōu)點,至此、探索電子萬年歷有著非常現(xiàn)實的意義,同時也具有很大的實用價值。1.2電子萬年歷的發(fā)展現(xiàn)狀現(xiàn)今,電子萬年歷技術已經(jīng)進入了優(yōu)化-家庭-環(huán)境的團隊關系的階段之間,它向著超微型、超高效以及集成電路的微型化方向成長,并為電子萬年歷上的集中控制奠基了根本。目前,市場上出售的電子萬年歷類別繁多,其中大致是基于單片機技術的電子系統(tǒng)。它們通常包括輸入脈沖電路、單片機、晶振和復位電路、外部存儲器電路和LED顯示電路等構成。現(xiàn)今,電子萬年歷基本上是用于計時、自動報警、定時、時間查詢以及自動控制。由于單片機技術以及數(shù)字集成電路技術的成長和高端的石英技術,使得如今的電子萬年歷系統(tǒng)具有體積小、耗電少、計時精確、機能穩(wěn)定、維護方便、走時精準、攜帶方便等長處。其他,現(xiàn)今的市場上也有現(xiàn)成的數(shù)字萬年歷集成電路芯片買,而且價格實惠、用起來也很方便。1.3電子萬年歷的優(yōu)勢它是一種非常普遍的平常計時工具,它可以對年、月份、日期、時、分、秒來計時。它是采用數(shù)字電路設計的,以51系列單片機為核心,通過LCD液晶顯示器來進行顯示,能夠同時顯示陽歷或是農(nóng)歷、年、月份、日刻、時、分、秒、禮拜、溫度等內(nèi)容。而且有可調(diào)整日期和時間的功能。像定時自動報警、按時自動響鈴、時間程序自動控制、定時廣播、自動開閉路燈、定時開關烘箱、通斷動力設備、甚至種種定時電器的自動應用等,但是所有這些,都是以鐘表數(shù)字化為基礎的。所以,探索萬年歷以及擴大它的應用,有著非常重要的現(xiàn)實意義。第二章、系統(tǒng)中主要芯片介紹2.1工作原理和電路設計框圖電子萬年歷電路,它的內(nèi)部是由主控制芯片AT89C51、時鐘器件DS1302、溫度傳感器DS18B20、LCD12864液晶顯示屏及鍵盤掃描電路組成。電子萬年歷配鬧鐘就是運用單片機加上一個時鐘元件DS1302以及數(shù)個與門芯片組成一個可調(diào)整年、月份、日期、時刻、分秒,以及能夠獲取當前時刻的一個電路和鬧鐘功能。實現(xiàn)我們平常生活中的日歷的作用。由于電路的硬件設計程序復雜,本電路采用89c51單片機作為控制核心,它具有在線編程功能,低功耗,可以在3V超低壓工作;時鐘電路由DS1302提供,它是一種高機能、低損耗、帶RAM的實時時鐘電路,它可以對年、月份、日刻、時、分、秒等來計時,還有閏年補償特點,工作電壓為2.5V-5.5V。通過三線接口與CPU進行同步通信,并可通過突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個用來臨時存放數(shù)據(jù)的RAM寄存器。可產(chǎn)生年、月份、日期、時刻、分、秒。以及通過與門芯片和按鍵開關來實現(xiàn)年、月、日、時、分、秒的調(diào)節(jié)。具體框架結(jié)構圖如下:2.2系統(tǒng)概述

本次設計電路是以AT89C51的最小系統(tǒng)為控制核心,時鐘電路由高精度低功耗的DS1302提供,采用了三線接口與CPU進行同步通信,輸入部分就是采用的4個獨立按鍵S1、S2S3、S4。顯示部分采用的是LCD12864液晶顯示器,D0~D7口與單片機P0口相連。2.3主要器件的結(jié)構及其特性AT89C51的管腳說明AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低電壓、高性能CMOS8位微處理器,俗稱單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃速存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C51是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示。

特性概述:AT89C51提供以下標準功能:4k

字節(jié)Flash

閃速存儲器,128字節(jié)內(nèi)部RAM,32個I/O口線,兩個16位定時/計數(shù)器,一個5向量兩級中斷結(jié)構,一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為低八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。/EA:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。ds1302的管腳說明

VCC1是后備電源,而VCC2是主電源。當主電源關閉時,還可以維持時鐘繼續(xù)工作。ds1302是通過VCC1或VCC2之間更大的一方來提供電源。當VCC2≥VCC1+0.2V時,VCC2給ds1302提供電源。當VCC2小于VCC1時,VCC1給ds1302提供電源。X1和X2是振蕩源,需要再接一個32.768kHz的晶振。RST是復位/片選端,通過把RST輸入驅(qū)動置“1”來開啟全部數(shù)據(jù)的接送。RST輸入2種特點:第一,RST接通控制邏輯,允許地址/命令序列送到移位寄存器;第二,RST提供中止單字節(jié)或者是多字節(jié)數(shù)據(jù)的輸送方法。當RST為“1”時,所有的數(shù)據(jù)輸送便會被初始化,可以對ds1302執(zhí)行操作。若在輸送過程中RST置為“0”,就會中止這次數(shù)據(jù)輸送,I/O管腳改為高阻態(tài)。上電工作后,在VCC≥2.5V之前,RST必須保持“0”。僅當在SCLK為“0”時,才能夠把RST置為“1”。I/O是串行數(shù)據(jù)輸入輸出端(雙向),SCLK是時鐘輸入端。ds1302的寄存器:ds1302包括了12個寄存器,當中有7個寄存器與日歷、時鐘有聯(lián)系,存放的數(shù)據(jù)位是BCD碼形式。而且,ds1302也有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器以及跟RAM相關的寄存器等。時鐘突發(fā)寄存器能夠一次性順序讀寫,除充電寄存器之外的所有寄存器內(nèi)容。5、ds1302的管腳特點:5.ds1302的控制字:6、ds1302的控制字節(jié)控制字節(jié)的最高有效位(位7)必須是邏輯1,若它為0,就無法把數(shù)據(jù)寫到ds1302中,位6為1時說明存取RAM數(shù)據(jù)\若為0,就說明存取日歷時鐘數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)若為0,說明要執(zhí)行寫操作,為1說明要執(zhí)行讀操作,控制字節(jié)都是從最低位開始輸出。當控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位開始。同理,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出ds1302的數(shù)據(jù),讀數(shù)據(jù)時也是從低位0至高位7。ds18b20的管腳說明

ds18b20是普遍使用的溫度傳感器,其傳感器的體積小,而且成本低,抗干擾性強,精度也高的特點。ds18b20的存儲器、含有高速暫存器RAM跟可電擦除RAM,可電擦除RAM里又含有溫度觸發(fā)器TH與TL,以及一個配置寄存器。ds18b20能夠用外部電源VDD,或者是使用芯片里面的寄生電源。1、ds18b20的基本特性通用電壓范疇較廣,電壓范疇:3.0到5.5V,在寄生電源模式下,能夠用數(shù)據(jù)線供電。特別的單線接口方式,ds18b20在跟微處理器連接時、只需要一條口線就能實現(xiàn)微處理器與ds18b20的兩向通訊。溫度范疇是-55攝氏度到+125攝氏度,當溫度是-10到+85攝氏度時精度是±0.5攝氏度可編程的分辨率是9~12位,其相對應的可分辨溫度有:0.5攝氏度、0.25攝氏度、0.125攝氏度以及0.0625攝氏度,能夠進行高精度測溫。負壓特性:當電源極性接反,芯片并不會由于發(fā)熱而有所損壞,卻無法正常使用。2、ds18b20的外觀與內(nèi)部構造它包括四部分:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。ds18b20管腳有:(1)DQ是數(shù)字信號輸入/輸出端;(2)GND是地;(3)VDD是外接供電電源其輸入端(當接寄生電源時,VDD接地)。LCD12864液晶顯示屏帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為128×64,內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面。可以顯示8×4行16×16點陣的漢字.也可完成圖形顯示.低電壓低功耗是其又一顯著特點。由該模塊構成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結(jié)構或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。

基本參數(shù)(1)低電源電壓(VDD:+3.0--+5.5V)(2)顯示分辨率:128×64點(3)內(nèi)置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)(4)內(nèi)置128個16×8點陣字符(5)2MHZ時鐘頻率(6)顯示方式:STN、半透、正顯(7)驅(qū)動方式:1/32DUTY,1/5BIAS(8)視角方向:6點(9)背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—1/10(10)通訊方式:串行、并口可選(11)內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負壓(12)無需片選信號,簡化軟件設計(13)工作溫度:0℃-+55℃,存儲溫度:-20℃-+60℃管腳號管腳名稱電平管腳功能描述1VSS0V電源地2VCC3~5V電源正3VO-對比度(亮度)調(diào)整4RS(CS)H/LRS=”H”,表示DB7~DB0為顯示指令;RS=”L”,表示DB7~DB0為顯示數(shù)據(jù);5R/W(SID)H/LR/W=”H”,E=”H”,數(shù)據(jù)讀到DB7~DB0;R/W=”L”,E=”H到L”,DB7~DB0的數(shù)據(jù)寫到IR或DR;6E(SCLK)H/L使能信號7~14DB0~DB7H/L均是三態(tài)數(shù)據(jù)線15PSBH/LH:8位或4位并口方式;L:串口方式16NC-空腳17RESETH/L復位端,低電平有效;18VOUT-LCD驅(qū)動電壓輸出端19AVDD背光源正端(+5V)20KVSS背光源負端模塊接口說明:

*注釋1:如在實際應用中僅使用串口通訊模式,可將PSB接固定低電平,也可以將模塊上的J8和“GND”用焊錫短接。

*注釋2:模塊內(nèi)部接有上電復位電路,因此在不需要經(jīng)常復位的場合可將該端懸空。

*注釋3:如背光和模塊共用一個電源,可以將模塊上的JA、JK用焊錫短接。模塊有并行和串行兩種連接方法(時序如下):

1、8位并行連接時序圖

MPU寫資料到模塊MPU從模塊讀出資料由于此設計是并行連接,所以串行連接時序圖不作介紹。用戶指令集(指令表如下:)指令指令碼說明執(zhí)行時間(540kHz)RSRWDB7DB6DB5DB4DB3DB2DB1DB0消除顯示0000000001將DDRAM填滿“20H”,并且設定DDRAM的地址計數(shù)器(AC)到“00H”4.6ms地址歸位000000001X設定DDRAM的地址計數(shù)器(AC)到“00H”,并且將游標移到開頭原點位置;這個指令并不改變DDRAM的內(nèi)容4.6ms進入點設定00000001I/DS指定在資料的讀取與寫入時,設定游標移動方向及指定顯示的移位72us進入點設定:執(zhí)行該命令后,所設置的行將顯示在屏幕的第一行。顯示起始行是由Z地址計數(shù)器控制的,該命令自動將A0-A5位地址送入Z地址計數(shù)器,起始地址可以是0-63范圍內(nèi)任意一行。Z地址計數(shù)器具有循環(huán)計數(shù)功能,用于顯示行掃描同步,當掃描完一行后自動加一。顯示狀態(tài)開/關0000001DCBD=1;整體顯示ONC=1;游標ONB=1;游標位置ON72us游標或移位控制000001S/CR/LXX設定游標的移動與顯示的移動控制位元;這個指令并不改變DDRAM的內(nèi)容;72us功能設定00001DLX0REXXDL=1;(必須設為1)RE=1;擴充指令集動作RE=0;基本指令集動作72us備注:

當模塊在接受指令前,微處理順必須先確認模塊內(nèi)部處于非忙碌狀態(tài),即讀取BF標志時BF需為0,方可接受新的指令;如果在送出一個指令前并不檢查BF標志,那么在前一個指令和這個指令中間必須延遲一段較長的時間,即要等待前一個指令確實執(zhí)行完成。2“RE”為基本指令集與擴充指令集的選擇控制位,當變更“RE”位后,往后的指令集將維持在最后的狀態(tài),除非再次變更“RE”位,否則使用相同指令集時,不需每次重設“RE”位。主要單元電路設計3.1單片機主控制模塊、采用AT89C51芯片,它能以3V的超低電壓工作,同時也與MCS-51系列單片機完全兼容,該芯片內(nèi)部存儲器為8KBROM存儲空間,同時具有89C51的功能,且具有在線編程可擦除技術。其主要工作原理:P1口有兩個作用,一個接上DS1302的AD0-AD7(雙向地址/數(shù)據(jù)復用總線),控制著DS1302的8位并行數(shù)據(jù)的地址和數(shù)據(jù)的傳輸,另接上液晶的DB0-DB7(數(shù)據(jù)總線)控制著向液晶發(fā)送8位并行數(shù)據(jù)。P1.1接上DS1302的單數(shù)據(jù)線,發(fā)送并接受數(shù)據(jù),地址的操作。0為命令,P2.3口控制液晶讀/寫選擇端,1為讀命令,0為寫操作,P2.2口控制液晶使能信號。對DS1302、P2.0口控制DS1302的片選信號的輸入(CS1),P2.1口控制DS1302的片選信號的輸入(CS2),P1.4接入鬧鐘,到設置時間到了,buzzer響應。復位電路:由按鍵復位和上電復位兩部分組成。通常在復位引腳RST上連接一個電容到VCC,再連接一個電阻到GND,由此形成一個RC充放電回路、保證單片機在上電時RST腳上有足夠時間的高電平進行復位,隨后回歸到低電平進入正常工作狀態(tài)。按鍵復位就是在復位電容上并聯(lián)一個開關,當開關按下時電容被放電、RST也被拉到高電平,而且由于電容的充電,會保持一段時間的高電平來使單片機復位。此次設計采用12MHz的晶體振蕩器作為振蕩源,由于單片機內(nèi)部帶有振蕩電路,所以外部只要連接一個晶振和兩個電容即可。3.2時鐘電路模塊的設計圖示為DS1302的管腳排列,其中VCC1為后備電源,VCC2為主電源,在主電源關閉的情況下,也能保持時鐘的連續(xù)運行,DS1302由VCC1或VCC2兩者中的較大者供電,當VCC2大于VCC1+0.2V時,VCC2給DS1302供電,當VCC2小于VCC1時候VCC1供電。X1和X2是振蕩源,外接32.768KHz晶振,RST是復位片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段,當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進行操作,如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O管腳變?yōu)楦咦钁B(tài),上電運行時,在VCC大于等于2.5V之前,RST必須保持低電平,中有在SCLK為低電平時,才能將RST置為高電平,I/O為串行數(shù)據(jù)輸入端,SCLK始終是輸入端。3.3溫度采集模塊溫度采集部分是使用了數(shù)字式溫度傳感器DS18B20,接地和接電源的部分完成后,就是其中的第二腳連接到單片機的P2.6腳,并且接上一個上拉電阻。3.4顯示部分模塊帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為128×64,內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面。3.5按鍵部分按鍵部分如上圖所示,本設計總的用了4個按扭開關作為鍵盤,其中一個是切換界面鍵,(一共三個界面、一是主界面;顯示當前時間以及溫度。二是鬧鐘設置;三是生日提醒。)第二個是Next鍵;第三個是調(diào)整加鍵(可調(diào)整年、月、周、日、時、分、秒等等)、第三個也是是鬧鐘開關切換鍵。3.6鬧鐘模塊鬧鐘模塊的接線如下圖所示。以下蜂鳴器電路中,使用PNP三極管進行驅(qū)動控制,設計中使用的是直流蜂鳴器,當P1.4輸出低電平時,蜂鳴器鳴叫。(由于蜂鳴器為感性原件,可以在兩端并接一個二極管來起到泄放作用。)、單片機程序部分初始化初始化LCD12864、DS1302、DS18B20允許LCD顯示?允許LCD顯示?關閉LCD顯示讀DS18B20的溫度值和DS1302的時間值YesNO關閉LCD顯示讀DS18B20的溫度值和DS1302的時間值將讀出的值顯示到將讀出的值顯示到LCD12864上掃描按鍵掃描按鍵生日設定鬧鐘設定時間設定生日設定鬧鐘設定時間設定4.1系統(tǒng)主程序流程圖開始DS1302初始化DS1302初始化從DS1302讀出數(shù)據(jù),放入RAM從DS1302讀出數(shù)據(jù),放入RAM調(diào)用顯示子程序調(diào)用顯示子程序LCD12864顯示時間LCD12864顯示時間掃描按鍵掃描按鍵設置時間設置時間數(shù)據(jù)寫回DS1302保存數(shù)據(jù)寫回DS1302保存返回主菜單返回主菜單4.2顯示時間子程序流程圖開始DS18B20初始化DS18B20初始化從從DS18B20中讀出數(shù)據(jù),放入RAMLCD模塊顯示溫度LCD模塊顯示溫度返回主菜單返回主菜單4.3溫度子程序流程圖開始開始AT89C51初始化AT89C51初始化選擇鬧鐘、生日選擇鬧鐘、生日從從AT89C51中讀出數(shù)據(jù),放入RAMLCD12864顯示鬧鐘、生日LCD12864顯示鬧鐘、生日按鍵掃描設置鬧鐘、生日設置鬧鐘、生日數(shù)據(jù)寫入數(shù)據(jù)寫入AT89C51保存返回主界面返回主界面4.4設置鬧鐘、設定生日的子程序流程圖4.5程序編寫#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineportP0//DB0~DB7數(shù)據(jù)口/*********12864IO************/sbite=P2^2;//使能sbitrw=P2^3;//讀寫sbitrs=P2^4;//數(shù)據(jù)/命令sbitcs2=P2^1;//片選sbitcs1=P2^0;sbitbusy=P0^7;//檢測忙/*********DS18B20IO********/sbitDQ=P2^5;sbitbuzz=P1^4;//定義ds1302使用的IO口//sbitDSIO=P1^0;sbitRST=P1^2;sbitSCLK=P1^1;//定義按鍵IO//sbitmenu=P3^0;sbitnext=P3^1;sbitup=P1^6;sbitdown=P1^7;//DS1302時鐘初始化2021年1月23日星期五2點00分00秒。////存儲順序是秒分時日月周年,存儲格式是用BCD碼//ucharTIME[7]={0,0,0x14,0x23,0x01,0x05,0x15};ucharcodeREAD_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};ucharcodeWRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};ucharalram_set1[]={0,0,0};ucharalram_set2[]={0,0,0};ucharalram_set3[]={0,0,0};ucharbirthday_set[]={0,0,0,0,0};uchardatadisdata[5];ucharmin,hour,day,mon;uinttvalue;//溫度值uchartflag;//溫度正負標志uchardisplay_type;ucharalram_operate;ucharbirthday_operate;ucharmenu_num=0;uinttimer=0,S=0;ucharq_data,bai_data,shi_data,ge_data;ucharcodehz[][32]={/*--文字:年--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*--文字:月--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*--文字:日--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*--文字:星--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00,0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00},/*--文字:期--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00},/*--文字:當--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x40,0x42,0x44,0x58,0x40,0x40,0x7F,0x40,0x40,0x50,0x48,0xC6,0x00,0x00,0x00,0x00,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00},/*--文字:前--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x08,0x08,0xE8,0x29,0x2E,0x28,0xE8,0x08,0x08,0xC8,0x0C,0x0B,0xE8,0x08,0x08,0x00,0x00,0x00,0xFF,0x09,0x49,0x89,0x7F,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00},/*--文字:溫--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},/*--文字:度--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00}};ucharcodeweek[][32]={/*--文字:日--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*--文字:一--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*--文字:二--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00},/*--文字:三--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00},/*--文字:四--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00},/*--文字:五--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00},/*--文字:六--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00}};ucharcodealram[][32]={/*--文字:鬧--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0xF8,0x01,0x22,0x20,0x22,0x2A,0xF2,0x22,0x22,0x22,0x22,0x02,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x1F,0x01,0x01,0x7F,0x09,0x11,0x0F,0x40,0x80,0x7F,0x00,0x00},/*--文字:鐘--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x20,0x10,0x2C,0xE7,0x24,0x24,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,0x01,0x01,0x01,0x7F,0x21,0x11,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00},/*--文字:開--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*--文字:關--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x10,0x11,0x16,0x10,0x10,0xF0,0x10,0x10,0x14,0x13,0x10,0x00,0x00,0x00,0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00},/*--文字:設--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00,0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00},/*--文字:置--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x17,0x15,0xD5,0x55,0x57,0x55,0x7D,0x55,0x57,0x55,0xD5,0x15,0x17,0x00,0x00,0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0x40,0x40,0x40,0x00}};ucharcodebirthday[][32]={/*--文字:生--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x80,0x40,0x30,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x40,0x40,0x42,0x42,0x42,0x42,0x42,0x7F,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00},/*--文字:日--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*--文字:提--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x10,0x10,0x10,0xFF,0x10,0x90,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x42,0x3A,0x42,0x82,0xFE,0x92,0x92,0x92,0x82,0x00},/*--文字:醒--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0xF2,0x12,0xFE,0x12,0xFE,0x12,0xF2,0x00,0x00,0xBE,0x2A,0xEA,0x2A,0x3E,0x00,0x00,0xFF,0x4A,0x49,0x48,0x49,0x49,0xFF,0x00,0x42,0x49,0x49,0x7F,0x49,0x49,0x40,0x00},/*--文字:祝--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x08,0x08,0x89,0xEE,0x98,0x00,0x7E,0x42,0xC2,0x42,0x42,0xC2,0x42,0x7E,0x00,0x00,0x02,0x01,0x00,0xFF,0x80,0x43,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x78,0x00},/*--文字:您--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x20,0x10,0x08,0xFC,0x23,0x10,0x88,0x67,0x04,0xF4,0x04,0x24,0x54,0x8C,0x00,0x00,0x40,0x30,0x00,0x77,0x80,0x81,0x88,0xB2,0x84,0x83,0x80,0xE0,0x00,0x11,0x60,0x00},/*--文字:快--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00},/*--文字:樂--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00}};ucharcodewelcome[][32]={/*--文字:歡--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x04,0x24,0x44,0x84,0x64,0x9C,0x40,0x30,0x0F,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,0x10,0x08,0x06,0x01,0x82,0x4C,0x20,0x18,0x06,0x01,0x06,0x18,0x20,0x40,0x80,0x00},/*--文字:迎--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x40,0x40,0x42,0xCC,0x00,0x00,0xFC,0x04,0x02,0x00,0xFC,0x04,0x04,0xFC,0x00,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x4F,0x44,0x42,0x40,0x7F,0x42,0x44,0x43,0x40,0x00},/*--文字:使--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x80,0x60,0xF8,0x07,0x04,0xE4,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0xE4,0x04,0x00,0x00,0x00,0xFF,0x00,0x80,0x81,0x45,0x29,0x11,0x2F,0x41,0x41,0x81,0x81,0x80,0x00},/*--文字:用--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*--文字:萬--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00},/*--文字:年--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*--文字:歷--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x42,0xC2,0x02,0x00,0x80,0x60,0x1F,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x40,0x80,0x40,0x3F,0x00,0x00},/*--文字:制--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x40,0x50,0x4E,0x48,0x48,0xFF,0x48,0x48,0x48,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3E,0x02,0x02,0xFF,0x12,0x22,0x1E,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00},/*--文字:作--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x80,0x60,0xF8,0x07,0x40,0x30,0x0F,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0x00,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x08,0x00,0x00},/*--文字:人--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x00},/*--文字:蘭--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x28,0x24,0x23,0x20,0x20,0x00,0x00,0x40,0x40,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00},/*--文字:小--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00},/*--文字:玲--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x04,0x84,0x84,0xFC,0x84,0x84,0x40,0x20,0x10,0x0C,0x23,0xCC,0x10,0x20,0x40,0x00,0x20,0x60,0x20,0x1F,0x10,0x10,0x00,0x01,0x09,0x11,0x21,0xD1,0x0D,0x03,0x00,0x00},/*--文字:祝--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x08,0x08,0x89,0xEE,0x98,0x00,0x7E,0x42,0xC2,0x42,0x42,0xC2,0x42,0x7E,0x00,0x00,0x02,0x01,0x00,0xFF,0x80,0x43,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x78,0x00},/*--文字:您--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x20,0x10,0x08,0xFC,0x23,0x10,0x88,0x67,0x04,0xF4,0x04,0x24,0x54,0x8C,0x00,0x00,0x40,0x30,0x00,0x77,0x80,0x81,0x88,0xB2,0x84,0x83,0x80,0xE0,0x00,0x11,0x60,0x00},/*--文字:生--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x80,0x40,0x30,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x40,0x40,0x42,0x42,0x42,0x42,0x42,0x7F,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00},/*--文字:活--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x10,0x60,0x02,0x8C,0x00,0x20,0x24,0x24,0x24,0xFE,0x22,0x23,0x22,0x20,0x20,0x00,0x04,0x04,0x7E,0x01,0x00,0x00,0xFE,0x42,0x42,0x43,0x42,0x42,0xFE,0x00,0x00,0x00},/*--文字:愉--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0xE0,0x00,0xFF,0x10,0x30,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00},/*--文字:快--*//*--宋體12;此字體下對應的點陣為:寬x高=16x16--*/{0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00}};ucharcodenum[][16]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},//"0",0{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//"1",1{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},//"2",2{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},//"3",3{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},//"4",4{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},//"5",5{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},//"6",6{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},//"7",7{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},//"8",8{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}//"9",9};ucharcodesign[][16]={{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},//"!",0{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},//":",1{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},//"Q",2/*--文字:---*//*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},//-//3{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},////4{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00}//.//5};voidnormal_display();voidalram_set();voidbirthday_display();voiddelay_ms();voiddelay_ms(ucharx){ uchari; while(x--)for(i=0;i<120;i++);}/***********12864程序部分******************///判斷是否忙voidcheck(){rs=0; rw=1; //讀e=1; port=0x00; e=1; while(busy); e=0;}//寫指令voidsendcommand(ucharcommand){check(); rs=0; //指令 rw=0; //寫e=0; port=command; e=1; e=0; //寫入指令}//寫數(shù)據(jù)voidwritedata(uchardat){check(); rs=1; //數(shù)據(jù) rw=0; port=dat; e=1; e=0;}//選屏幕0--全屏,1--左屏,2--右屏;voidselect(uintn){switch(n) { case0:cs1=0;cs2=0;break; //低電平選中case1:cs1=0;cs2=1;break; //cs1左屏 case2:cs1=1;cs2=0;break; //cs2右屏 }}//頁voidsetpage(ucharpage){page=page&0x07;page=page|0xb8;sendcommand(page);}//列voidsetcolumn(ucharcolumn){column=column&0x3f;column=column|0x40;sendcommand(column);}//起始行voidsetline(ucharline){line=line&0x3f; line=line|0xc0; sendcommand(line);}//屏幕開關顯示0--關,1--開;voidseton(uintn){n=n|0x3e;sendcommand(n);}//清屏0--全屏,1--左屏,2--右屏;voidclear(uintn){uchari,j;select(n);for(i=0;i<8;i++){setpage(i); setcolumn(0); for(j=0;j<64;j++) writedata(0); //置0清空}}//初始化voidinit(){check();seton(1);clear(0);setline(0);}//顯示漢字16*16顯示voidshow16(ucharpage,ucharcolumn,ucharscreen,ucharmethod,uchar*str){uchari,j;select(screen);j=0;setpage(page);setcolumn(column);for(i=0;i<16;i++){if(method==1)writedata(~str[j++]); //method為顯示方式。當?shù)扔?時,反白。elsewritedata(str[j++]); }setpage(page+1);setcolumn(column);for(i=0;i<16;i++){if(method==1)writedata(~str[j++]);elsewritedata(str[j++]); }} //顯示數(shù)字8*8顯示voidshow8(ucharpage,ucharcolumn,ucharscreen,ucharmethod,uchar*str){uchari,j;select(screen);j=0;setpage(page);setcolumn(column);for(i=0;i<8;i++){if(method==1)writedata(~str[j++]);elsewritedata(str[j++]); }setpage(page+1);setcolumn(column);for(i=0;i<8;i++){if(method==1)writedata(~str[j++]);elsewritedata(str[j++]); }}voidwelcome_display(){show16(0,0,1,0,welcome[0]);show16(0,16,1,0,welcome[1]);show16(0,32,1,0,welcome[2]);show16(0,48,1,0,welcome[3]);show16(0,0,2,0,welcome[4]);show16(0,16,2,0,welcome[5]);show16(0,32,2,0,welcome[6]);show16(2,0,1,0,welcome[7]);show16(2,16,1,0,welcome[8]);show16(2,32,1,0,welcome[9]);show8(2,48,1,0,sign[1]);show16(2,0,2,0,welcome[10]);show16(2,16,2,0,welcome[11]);show16(2,32,2,0,welcome[12]);show8(4,0,1,0,sign[2]);show8(4,8,1,0,sign[2]);show8(4,16,1,0,sign[1]);show8(4,24,1,0,num[2]);show8(4,32,1,0,num[0]);show8(4,40,1,0,num[1]);show8(4,48,1,0,num[2]);show8(4,56,1,0,num[2]);show8(4,0,2,0,num[6]);show8(4,8,2,0,num[2]);show8(4,16,2,0,num[3]);show16(6,0,1,0,welcome[13]);show16(6,16,1,0,welcome[14]);show16(6,32,1,0,welcome[15]);show16(6,48,1,0,welcome[16]);show16(6,0,2,0,welcome[17]);show16(6,16,2,0,welcome[18]);show8(6,32,2,0,sign[0]);}voiddisplayinit(){show8(0,0,1,0,num[2]);show8(0,8,1,0,num[0]);show16(0,32,1,0,hz[0]);show16(0,0,2,0,hz[1]);show16(0,32,2,0,hz[2]);show8(2,16,1,0,sign[1]);show8(2,40,1,0,sign[1]);show16(2,8,2,0,hz[3]);show16(2,24,2,0,hz[4]);show16(4,0,1,0,hz[5]);show16(4,16,1,0,hz[6]);show16(4,32,1,0,hz[7]);show16(4,48,1,0,hz[8]);show8(4,0,2,0,sign[1]);//以下數(shù)字均為反白顯示。}/***********DS1302程序部分*****************/voidDs1302Write(ucharaddr,uchardat){ ucharn; RST=0; _nop_(); SCLK=0;//先將SCLK置低電平。 _nop_(); RST=1;//然后將RST(CE)置高電平。 _nop_(); for(n=0;n<8;n++)//開始傳送八位地址命令 { DSIO=addr&0x01;//數(shù)據(jù)從低位開始傳送 addr>>=1; SCLK=1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù) _nop_(); SCLK=0; _nop

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論