版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、簡易數(shù)字時鐘的設(shè)計(完整程序附在最后)摘要:本電子鐘利用單片機(jī)at89s52控制日歷時鐘芯片ds12c887實現(xiàn)多功能數(shù)字時鐘。該時鐘由單片機(jī)控制日歷時鐘芯片實現(xiàn)年份、月份、日期、時間信息的獲取,并且通過lcd12864對年份、月份、日期、星期、節(jié)日、時間信息進(jìn)行顯示,可以對年份、月份、日期、星期、時間進(jìn)行修改,具有掉電后時間信息不丟失的功能。另外具有鬧鐘功能和具有整點報時功能,可設(shè)置鬧鈴時間,當(dāng)鬧鈴時間到時,進(jìn)行鬧鈴,通過任意按鍵可解除鬧鈴;當(dāng)整點到來,鳴奏音樂。采用18b20進(jìn)行溫度測控,超出溫度閾值將會進(jìn)行報警。我們將程序固化到單片機(jī)中,并且設(shè)有程序下載口,可以方便對程序進(jìn)行升級。關(guān)鍵詞
2、:多功能數(shù)字時鐘,單片機(jī)at89s52,日歷時鐘芯片ds12c887,鬧鈴,整點報時。1 設(shè)計要求基本設(shè)計要求(1)單片機(jī)控制日歷時鐘芯片實現(xiàn)年份、月份、日期、星期、時間信息的獲取。(2)在lcd上對年份、月份、日期、星期、時間、信息進(jìn)行顯示。(2)可以對年份、月份、日期、星期、時間進(jìn)行修改。(3)具有掉電后時間信息不丟失的功能。發(fā)揮部分(1)具有鬧鐘功能??稍O(shè)置鬧鈴時間,當(dāng)鬧鈴時間到時,進(jìn)行鬧鈴。通過按鍵可解除鬧鈴。(2)具有整點報時功能。(3)程序固化到單片機(jī)中,并且可直接進(jìn)行程序下載和更新。2 總體設(shè)計2.1 系統(tǒng)組成及工作原理本電子鐘由單片機(jī)、定時、顯示、按鍵、定時提醒、isp在線編程
3、6部分組成。產(chǎn)品以at89s52單片機(jī)、ds12c887時鐘芯片為核心,顯示部分采用lcd12864,使用6個按鍵、1蜂鳴器和一個溫度傳感器,加上isp在線編程模塊。ds12c887時鐘芯片產(chǎn)生時鐘信號和存放鬧鈴數(shù)據(jù),其精度和可靠性高,在單片機(jī)掉電狀態(tài)下能正確走時、保存鬧鈴數(shù)據(jù)長達(dá)10年,故能實現(xiàn)停電重起后定時設(shè)計不變的關(guān)鍵設(shè)計指標(biāo)。at89s52單片機(jī)實時獲取ds12c887的時間和鬧鈴數(shù)據(jù),驅(qū)動lcd和蜂鳴器。顯示部分的lcd有高亮度,低成本等諸多優(yōu)點。蜂鳴器作鬧鈴提示切合實際、直觀。按鍵方面采用軟件消抖,減少硬件電路的同時增加了可靠性。本產(chǎn)品完全達(dá)到設(shè)計要求,輔助的isp在線編程讓產(chǎn)品具
4、有強(qiáng)大的擴(kuò)展功能,使其不僅僅是一個電子鐘,更是一個單片機(jī)試驗平臺。2.2 ds12c887時鐘芯片原理ds12c887能夠自動產(chǎn)生世紀(jì)、 年、月、日、時、分、秒等時間信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決 “千年”問題;ds12c887 中自帶有鋰電池,外部掉電時,其內(nèi)部時間信息還能夠保持10年之久;對于一天內(nèi)的時間記錄,有12 小時制和 24 小時制兩種模式。在 12 小時 制模式中,用 am 和 pm 區(qū)分上午和下午; 時間的表示方法也有兩種,一種用二進(jìn)制數(shù) 表示,一種是用 bcd 碼表示;ds12c887 中 帶有 128 字節(jié) ram,其中有 11 字節(jié) ram 用來存儲
5、時間信息,4 字節(jié) ram 用來存儲 ds12c887 的控制信息,稱為控制寄存器,113 字節(jié)通用 ram 使用戶使用;此外用戶還 可對 ds12c887 進(jìn)行編程以實現(xiàn)多種方波輸出,并可對其內(nèi)部的三路中斷通過軟件進(jìn)行屏蔽。3 硬件設(shè)計3.1 硬件組成用visio畫出硬件組成框圖,并進(jìn)行描述 本萬年歷以at89s52單片機(jī)、ds12c887時鐘芯片為核心,顯示部分采用lcd12864,使用6個按鍵、1蜂鳴器和一個溫度傳感器,加上isp在線編程模塊。ds12c887時鐘芯片產(chǎn)生時鐘信號和存放鬧鈴數(shù)據(jù)。3.2 單片機(jī)核心模塊單片機(jī)最小系統(tǒng)3.2.1主要特性單片機(jī)at89s52是 atmel公司生
6、產(chǎn)的低電壓、高性能coms 8位單片機(jī),它有128byte ram、8kbyte可編程flash rom,指令系統(tǒng)與mcs-51系列兼容。采用keilc51編譯軟件,protues仿真平臺,能方便實現(xiàn)程序的仿真。isp在線編程,能方便的更新程序??蓪x用的單片機(jī)特點進(jìn)行描述,可畫出單片機(jī)最小系統(tǒng)并描述電路連接。3.2.2單片機(jī)引腳說明at89s52 采用 40pin 封裝的雙列直接 dip 結(jié)構(gòu),40 個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4 組 8 位共 32 個 i/o 口,中斷口線與 p3 口線復(fù)用。現(xiàn)在我們對這些引腳的功能加以說明:pin20: 接地腳。 pin40:
7、 正電源腳,正常工作或?qū)ζ瑑?nèi) eprom 燒寫程序時,接 +5v 電源。 pin19: 時鐘 xtal1 腳,片內(nèi)振蕩電路的輸入端。 pin18: 時鐘 xtal2 腳,片內(nèi)振蕩電路的輸出端。 時鐘有兩種方式,一種是片內(nèi)時鐘振蕩方式,但需在 18 和 19 腳外接石英晶體 (2-12mhz) 和振蕩 電容,振蕩電容的值一般取 10p-30p 。另外一種是外部時鐘方式,即將 xtal1 接地,外部時鐘信號 從 xtal2 腳輸入。 輸入輸出 (i/o) 引腳: pin32-pin39 為 p0.0-p0.7 輸入輸出腳, pin1-pin8 為 p1.0-p1.7 輸入輸出腳, pin21-pi
8、n28 為 p2.0-p2.7 輸入輸出腳,pin10-pin17 為p3.0-p3.7輸入輸出腳,這些輸入輸出腳的功能闡述如下: p0 口( 32 腳 39 腳):是雙向 8 位三態(tài) i/o 口,在外接存儲器時,與地址總線的低 8 位及數(shù)據(jù) 總線復(fù)用,能以吸收電流的方式驅(qū)動 8 個 ttl 負(fù)載。p1 口( 1 腳 8 腳):是 8 位準(zhǔn)雙向 i/o 口。由于這種借口輸出沒有高阻狀態(tài),輸入也不能鎖存, 故不是真正的雙向 i/o 口。 p1 口能驅(qū)動(吸收或輸出電流) 4 個 ttl 負(fù)載。 p2 口( 21 腳 28 腳):是 8 位準(zhǔn)雙向 i/o 口。訪問外部存儲器時,它可以作為高 8 位
9、地址總線 送出高 8 位地址。 p2 可以驅(qū)動(吸收或輸出電流) 4 個 ttl 負(fù)載。 p3 口( 10 腳 17 腳):是 8 位準(zhǔn)雙向 i/o 口, p3 口能驅(qū)動(吸收或輸出電流) 4 個 ttl 負(fù)載。 p3 口除了作為一般的準(zhǔn)雙向通用 i/o 口使用外,每個引腳還有第二功能。 p3 口的 8 條線都定義有第二功能 6 ,如表 4.1 所列。 p3引腳第二功能:p3.0 rxd (串行口輸入端) p3.1 txd (串行口輸出端) p3.2 int0 (外部中斷 0 請求輸入端,低電平有效) p3.3 int1 (外部中斷 0 請求輸入端,低電平 有效) p3.4 t0 (定時器 /
10、 計數(shù)器 0 的技數(shù)脈沖輸入端) p3.5 t1 (定時器 / 計數(shù)器 0 的技數(shù)脈沖輸入端) p3.6 wr (片外數(shù)據(jù)存儲器寫選通信號輸出端,低電平有效) p3.7 rd (片外數(shù)據(jù)存儲器寫選通信號輸出端,低電平有效) pin9:reset/vpd 復(fù)位信號復(fù)用腳,當(dāng)單片機(jī)通電,時鐘電路開始工作,在 reset 引腳上出現(xiàn) 24 個時鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計數(shù)器 pc 指向 0000h , p0-p3 輸出 口全部為高電平,堆棧指鐘寫入 07h ,其它專用寄存器被清 “0” 。 reset 由高電平下降為低電平后, 系統(tǒng)即從 0000h 地址開始執(zhí)行程序。然而,
11、初始復(fù)位不改變 ram (包括工作寄存器 r0-r7 )的狀態(tài), 單片機(jī)復(fù)位后的狀態(tài)如下: p0 p3=ffh ,各口可用于輸出,也可用于輸入; sp=07h ,第一個入棧內(nèi)容將寫入 08h 單元; ip、ie 和 pcon 的有效位為 0 ,各中斷源處于低優(yōu)先級且均被關(guān)斷,串行通訊的波特率不加倍; psw=00h ,當(dāng)前工作寄存器為 0 組。 pin30:ale/prog 當(dāng)訪問外部程序器時, ale( 地址鎖存 ) 的輸出用于鎖存地址的低位字節(jié)。而訪 問內(nèi)部程序存儲器時, ale 端將有一個 1/6 時鐘頻率的正脈沖信號,這個信號可以用于識別單片機(jī) 是否工作,也可以當(dāng)作一個時鐘向外輸出。更
12、有一個特點,當(dāng)訪問外部程序存儲器, ale 會跳過一 個脈沖。 如果單片機(jī)是 eprom ,在編程其間, prog 將用于輸入編程脈沖。 pin29:pesn 當(dāng)訪問外部程序存儲器時,此腳輸出負(fù)脈沖選通信號, pc 的 16 位地址數(shù)據(jù)將出現(xiàn) 在 p0 和 p2 口上,外部程序存儲器則把指令數(shù)據(jù)放到 p0 口上,由 cpu 讀入并執(zhí)行。pin31:ea/vpp 程序存儲器的內(nèi)外部選通線, 8051 和 8751 單片機(jī),內(nèi)置有 4kb 的程序存儲器, 當(dāng) ea 為高電平并且程序地址小于 4kb 時,讀取內(nèi)部程序存儲器指令數(shù)據(jù),而超過 4kb 地址則讀取 外部指令數(shù)據(jù)。如 ea 為低電平,則不管
13、地址大小,一律讀取外部程序存儲器指令。顯然,對內(nèi)部 無程序存儲器的 8031,ea 端必須接地。 3.3晶振電路振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精確度決定了數(shù)字鐘計時的準(zhǔn)確程度,通常選用石英晶體構(gòu)成振蕩器電路。石英晶體振蕩器的作用是產(chǎn)生時間標(biāo)準(zhǔn)信號。3.4顯示電路本電路采用1602lcd,由于數(shù)碼管只能顯示數(shù)字?jǐn)?shù)碼管顯示內(nèi)容單一,液晶則比較豐富,而這個實驗中,要求功能較多,為了使電路顯示的更清晰明了,本實驗最終決定采用1602lcd顯示。且液晶顯示已占居社會主流,優(yōu)勢明顯。模塊引腳功能表: 引腳號引腳名稱方向功能說明1vss-模塊的電源地2vdd-模塊的電源正端3v0-lcd驅(qū)動電
14、壓輸入端4rs(cs)h/l并行的指令/數(shù)據(jù)選擇信號;串行的片選信號5r/w(sid)h/l并行的讀寫選擇信號;串行的數(shù)據(jù)口6e(clk)h/l并行的使能信號;串行的同步時鐘7db0h/l數(shù)據(jù)08db1h/l數(shù)據(jù)19db2h/l數(shù)據(jù)210db3h/l數(shù)據(jù)311db4h/l數(shù)據(jù)412db5h/l數(shù)據(jù)513db6h/l數(shù)據(jù)614db7h/l數(shù)據(jù)715psbh/l并/串行接口選擇:h-并行;l-串行16nc空腳17/reth/l復(fù)位 低電平有效18nc空腳19led_a-背光源正極(led+5v)20led_k-背光源負(fù)極(led-ov)3.5時鐘電路3.6獨立按鍵電路獨立按鍵電路圖鑒于使用中斷電路
15、會增加硬件電路的復(fù)雜度,本電路采用獨立按鍵的方法,只需在程序中加入掃描程序即可。其中p1.4接按鍵1,p1.5接按鍵2,p1.6接按鍵3,p1.7接按鍵4,其中按鍵4為確定,通過按鍵已可以切換至不同的工作方式,譬如時間,日期,鬧鈴設(shè)置,秒表;按鍵2為加鍵,通過按鍵2可以調(diào)整時間和鬧鐘的加鍵,按鍵3為減鍵,按鍵1為退出鍵。在秒表中鍵4為開始鍵和暫停,2和3為清零鍵。3.7蜂鳴器電路4 程序設(shè)計4.1 主程序設(shè)計main() char e=0,f=0,w2=0,w3=0;s1=1;s2=1;s3=1;s4=1;ea=1;/打開總中斷 ex0=1;/開外部中斷1 it1=1;/設(shè)置負(fù)跳變沿觸發(fā)中斷d
16、s_int(); /初始化ds12cr887lcm_init(); /初始化液晶顯示器lcm_clr(); /清屏welcome(); /顯示歡迎信息delaym(3000); /顯示停留3秒lcm_clr(); /清屏while(1) if(flag_ri=1)/當(dāng)鬧鐘中斷時進(jìn)入這里 w3=1;/這里用來取消鬧鐘報警,任一鍵取消報警if(s1=0)|(s2=0)|(s3=0)|(s4=0)|(s5=0)|(s6=0) delaym(5); if(s1=0)|(s2=0)|(s3=0)|(s4=0)|(s5=0)|(s6=0) while(!(s1&s2&s3&s4&s5&s6); di();
17、 flag_ri=0;/清除報警標(biāo)志w3=0; di(); delaym(100); di(); delaym(500); if (w = 0&w2=0)/正常走時 lcm_w_year(); /顯示年lcm_w_month();/顯示月 lcm_w_date();/顯示日lcm_w_day();/顯示星期lcm_w_shi();/顯示時lcm_w_fen();/顯示分lcm_w_miao();/顯示秒days(); /顯示節(jié)日提示else if (s1 = 0&w3=0) / 設(shè)置時間+ delaym(20); /按鍵消抖if(s1 = 0 & w = 1&w3=0) /當(dāng)是調(diào)時狀態(tài) 本鍵用
18、于調(diào)整下一項di();e+;if (e = 6 )e = 0; set_time(e);/調(diào)整if(s1 = 0 & w = 0&w3=0) /當(dāng)是正常狀態(tài)時就進(jìn)入調(diào)時狀態(tài) di();lcm_clr();/清屏w=1; /進(jìn)入調(diào)時set_time(e);/調(diào)整w2=0; while(s1 = 0); /等待鍵松開 if (s6 = 0&w3=0) / 設(shè)置時間- delaym(20); /按鍵消抖if(s6 = 0 & w = 1&w3=0) /當(dāng)是調(diào)時狀態(tài) 本鍵用于調(diào)整下一項di();e-;if (e = 3 )f = 0; set_alarm(f);/調(diào)整if(s5 = 0 & w2 =
19、0&w3=0) /當(dāng)是正常狀態(tài)時就進(jìn)入調(diào)鬧鐘狀態(tài) di();lcm_clr();/清屏w2=1; /進(jìn)入調(diào)鬧鐘set_alarm(f);/調(diào)整w=0; while(s5 = 0); /等待鍵松開 if (s2 = 0&w3=0) / 當(dāng)在調(diào)時狀態(tài)時就退出調(diào)時 delaym(20);/按鍵消抖if(s2 = 0 & w = 1&w3=0)di();w = 0; /退出調(diào)時e = 0;/下一項計數(shù)器清0if(s2 = 0 & w2 = 1&w3=0)di();w2 = 0; /退出調(diào)時f = 0;/下一項計數(shù)器清0if(s2 = 0 & w = 0&w3=0) di();lcm_clr();/清屏
20、 lunar();/顯示農(nóng)歷while(s2 = 0); /等待鍵松開 lcm_clr();/清屏lcm_w_year(); /年lcm_w_month();/月 lcm_w_date();/日lcm_w_day();/星期lcm_w_shi();/時lcm_w_fen();/分lcm_w_miao();/秒days(); /顯示節(jié)日提示 while(s2 = 0);/等待鍵松開 if (s3 = 0 & w = 1&w3=0)/加調(diào)整 delaym(20);/按鍵消抖 if(s3 = 0 & w = 1&w3=0)di();set_time(e);/調(diào)整 while(s3 = 0);/等待鍵
21、松開if (s3 = 0 & w2 = 1&w3=0)/加調(diào)整 delaym(20);/按鍵消抖 if(s3 = 0 & w2 = 1&w3=0)di();set_alarm(f);/調(diào)整 while(s3 = 0);/等待鍵松開if (s4 = 0 & w = 1&w3=0) /減調(diào)整 delaym(20);/按鍵消抖 if(s4 = 0 & w = 1&w3=0)di();set_time(e);/調(diào)整 while(s4 = 0);/等待鍵松開if (s4 = 0 & w2 = 1&w3=0) /減調(diào)整 delaym(20);/按鍵消抖 if(s4 = 0 & w2 = 1&w3=0)di
22、();set_alarm(f);/調(diào)整 while(s4 = 0);/等待鍵松開/否則啟動調(diào)時5 調(diào)試及結(jié)果本萬年歷硬件電路并不復(fù)雜,重在程序的編寫與調(diào)試,為了便于后期調(diào)試與產(chǎn)品升級,特加上isp下載口,既能給萬年歷供電又能方便燒寫程序。調(diào)試初期我們?yōu)榱耸煜r鐘芯片的使用,采用開發(fā)板搭接杜邦線的方法調(diào)試出程序,克服了無法從時鐘芯片中采集出數(shù)據(jù)的問題。等成功在開發(fā)板上實現(xiàn)后,我們制作了如下圖的完整的電子萬年歷。焊好完整電路后,出現(xiàn)了lcd12864屏幕無顯示的問題,經(jīng)過有序的查線,發(fā)現(xiàn)單片機(jī)的ea管腳沒有接高電平,接好后,正常顯示。正常顯示后,我們發(fā)現(xiàn)程序本身還存在著許多缺陷和不足,首先是沒有鬧
23、鈴功能,我們加上有關(guān)鬧鈴的程序段后,發(fā)現(xiàn)不能用按鍵取消鬧鈴狀態(tài),但確實有取消鬧鈴的代碼,這是怎么回事呢?后來發(fā)現(xiàn)該段程序和后面的按鍵選擇沖突了,在加上了w2標(biāo)識變量后解決了這個問題。而后在原有程序的基礎(chǔ)上我們還加入了時辰顯示、按鍵鈴音、星期自動調(diào)整、日期調(diào)整等功能,當(dāng)然還有一些不足以待后續(xù)完善。完整程序:/*-電子智能時鐘程序單片機(jī):stc89c52rc晶振:12mhz時鐘芯片:ds12cr887+5液晶屏:lcm-12864-st7920時間:2009年2月11日lcm12864使用并口連接方式-*/*頭文件-*/#include #include #include soundplay.h#
24、define uint unsigned int#define uchar unsigned char/*定義全局變量-*/uchar miao,fen,shi,date,month,year,amiao,afen,ashi,lunard,lunarm,lunary;/秒,分,小時,星期,日期,月, 年bit w = 0; /調(diào)時標(biāo)志位bitflag_ri;/*定義12864液晶屏數(shù)據(jù)線-*/sbit lcm_rs = p20; /模式位,為0輸入指令,為1輸入數(shù)據(jù) sbit lcm_rw = p21; /讀寫位,為0讀,為1寫 sbit lcm_en = p22; /使能位sbit lcm_
25、psb = p23; /h=并口; l=串口sbit lcm_rst = p25; #define lcd_bus p0 /lcm12864數(shù)據(jù)總線/*定義按鍵-*/sbit s1 = p12; /s1-設(shè)置sbit s2 = p13; /s2-確認(rèn)sbit s3 = p14; /s3-加sbit s4 = p15; /s4-減sbit s5 = p17;sbit s6 = p16;/*定義ds18b20數(shù)據(jù)線-*/sbit dq = p11;/*定義ds12cr887數(shù)據(jù)線-*/sbit dscs = p34;sbit dsas = p35;sbit dsrw = p36;sbit dsds
26、 = p37;sbit dsirq=p32;#define ds_bus p0 /ds12cr887數(shù)據(jù)總線/*定義累加器a中的各位-*/sbit a0 = acc 0;sbit a1 = acc 1;sbit a2 = acc 2;sbit a3 = acc 3;sbit a4 = acc 4;sbit a5 = acc 5;sbit a6 = acc 6;sbit a7 = acc 7;void lcm_w_test(bit i,uchar word);void lcm_w_word(uchar *s);/*延時程序-*/延時函數(shù) 1ms/次void delaym(uint a) ucha
27、r i;while( -a != 0) for(i = 0; i 125; i+); /一個 ; 表示空語句,cpu空轉(zhuǎn)。 /i 從0加到125,cpu大概就耗時1毫秒/延時函數(shù)void delay(int num)while(num-);void delay500us()unsigned char j; for(j=0;j57;j+) /500us基準(zhǔn)延時程序 ; void delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;j+);/兩只蝴蝶 unsigned char code music
28、_two = 0x19,0x03, 0x19,0x03, 0x1a,0x03, 0x1f,0x03, 0x1b,0x03, 0x1b,0x03, 0x1a,0x03, 0x17,0x0d, 0x16,0x03, 0x16,0x03, 0x16,0x0d, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1a,0x02, 0x1a,0x02, 0x10,0x03, 0x17,0x0d, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x02, 0x1f,0x
29、02, 0x1b,0x03, 0x1a,0x03, 0x1a,0x0e, 0x1b,0x04, 0x17,0x02, 0x1a,0x03, 0x1a,0x03, 0x1a,0x0e, 0x1b,0x04, 0x1a,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x17,0x0d, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x00, 0x00,0x00 ;void di()/產(chǎn)生1khz頻率聲音的函數(shù)int t;for(t=0;t 0 ) year-; else year = 4; / 返回星期幾(星期一用1表示,
30、而星期天用7表示) return 1+( day + 2*month + 3*(month+1)/5 + year + year/4 ) %7);/*ds12cr887驅(qū)動程序-*/往ds12cr887寫數(shù)據(jù)函數(shù)void write_ds(uchar add,uchar date) dscs=0;dsds=1;dsrw=1;dsas=1;ds_bus=add; dsas=0;dsrw=0;ds_bus=date;dsrw=1;dsas=1;dscs=1;/讀取ds12cr887的數(shù)據(jù)uchar read_ds(uchar add)uchar z;dscs=0;dsrw=1;dsds=1;dsa
31、s=1;ds_bus=add;dsas=0;dsds=0; ds_bus=0xff;z=ds_bus;dsds=1;dsas=1;dscs=1;return z;/ds12cr887初始化void ds_int()dsas=0;dsds=0;dsrw=0;write_ds(0x0a,0x20);/ds12cr887寄存器a功能設(shè)置,開啟時鐘振蕩器/*12864液晶顯示屏并口驅(qū)動程序-*/檢查忙位(底層)void chk_busy() lcm_rs=0; lcm_rw=1; lcm_en=1; lcd_bus=0xff; while(lcd_bus&0x80)=0x80); lcm_en=0;/
32、寫指令到lcd(底層)void write_com(uchar cmdcode)chk_busy();lcm_rs=0;lcm_rw=0;lcm_en=1;lcd_bus=cmdcode;lcm_en=0;/寫數(shù)據(jù)到lcd(底層)void write_data(uchar dispdata) chk_busy();lcm_rs=1;lcm_rw=0;lcm_en=1;lcd_bus=dispdata;lcm_en=0;/初始化lcd屏(被調(diào)用層)void lcm_init() lcm_psb=1; /如果液晶屏的psb在電路板中接了高電平的,這里可以屏蔽 lcm_rst=1; /如果液晶屏的r
33、st在電路板中接了高電平的,這里可以屏蔽 write_com(0x30); /選擇8bit數(shù)據(jù)流 write_com(0x0c); /開顯示(無游標(biāo)、不反白) write_com(0x01); /清除顯示,并且設(shè)定地址指針為00h/向lcm發(fā)送一個字符串,長度64字符之內(nèi)。(被調(diào)用層)/應(yīng)用:lcm_w_word(您好!);void lcm_w_word(uchar *s)while(*s0) write_data(*s); s+; /寫指令或數(shù)據(jù)(被調(diào)用層)void lcm_w_test(bit i,uchar word)if(i = 0)write_com(word);/寫指令或數(shù)據(jù)(0,
34、指令)elsewrite_data(word);/寫指令或數(shù)據(jù)(1,數(shù)據(jù))/清屏函數(shù)void lcm_clr(void)lcm_w_test(0,0x01);/*ds18b20驅(qū)動程序-*/初始化ds1820函數(shù)void init_ds18b20(void)uchar x=0;dq = 1; /dq復(fù)位delay(8); /稍做延時dq = 0; /單片機(jī)將dq拉低delay(80); /精確延時 大于 480usdq = 1; /拉高總線delay(14);x=dq; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗delay(20);/讀一個字節(jié)函數(shù)uchar readonecha
35、r(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-)dq = 0; / 給脈沖信號dat=1;dq = 1; / 給脈沖信號if(dq)dat|=0x80;delay(4);return(dat);/寫一個字節(jié)函數(shù)void writeonechar(uchar dat)uchar i=0;for (i=8; i0; i-)dq = 0;dq = dat&0x01;delay(5);dq = 1;dat=1;/讀取溫度函數(shù)uint readtemperature(void)uchar a=0;uchar b=0;uint t=0;float tt=0;in
36、it_ds18b20();writeonechar(0xcc); / 跳過讀序號列號的操作writeonechar(0x44); / 啟動溫度轉(zhuǎn)換init_ds18b20();writeonechar(0xcc); /跳過讀序號列號的操作writeonechar(0xbe); /讀取溫度寄存器a=readonechar(); /讀低8位b=readonechar(); /讀高8位t=b;t=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; /放大10倍輸出并四舍五入return(t);/*公歷節(jié)日數(shù)據(jù)庫-*/void days (viod) lcm_w_test(0,0x98
37、);/在液晶屏的第四行第一列顯示以下節(jié)日提示if ( month = 1 & date = 1 ) lcm_w_word( 元旦快樂 ); /1月if ( month = 1 & date = 28 ) lcm_w_word( 世界麻風(fēng)日 ); if ( month = 2 & date = 2 ) lcm_w_word( 世界濕地日 ); /2月if ( month = 2 & date = 13 ) lcm_w_word( 明天情人節(jié)了 ); if ( month = 2 & date = 14 ) lcm_w_word( 今天是情人節(jié) ); if ( month = 3 & date =
38、 1 ) lcm_w_word( 國際海豹日 ); /3月if ( month = 3 & date = 3 ) lcm_w_word( 全國愛耳日 ); if ( month = 3 & date = 8 ) lcm_w_word(國際勞動婦女節(jié) ); if ( month = 3 & date = 12 ) lcm_w_word( 植樹節(jié) ); if ( month = 3 & date = 14 ) lcm_w_word( 國際警察日 ); if ( month = 3 & date = 15 ) lcm_w_word( 消費者權(quán)益日 ); if ( month = 3 & date =
39、 17 ) lcm_w_word( 國際航海日 ); if ( month = 3 & date = 21 ) lcm_w_word( 世界森林日 ); if ( month = 3 & date = 22 ) lcm_w_word( 世界水日 ); if ( month = 3 & date = 23 ) lcm_w_word( 世界氣象日 ); if ( month = 3 & date = 24 ) lcm_w_word(世界防治結(jié)核病日); if ( month = 4 & date = 1 ) lcm_w_word(愚人節(jié) 小心上當(dāng)); /4if ( month = 4 & date
40、 = 7 ) lcm_w_word( 世界衛(wèi)生日 ); if ( month = 4 & date = 8 ) lcm_w_word( 復(fù)活節(jié) ); if ( month = 4 & date = 13 ) lcm_w_word( 黑色星期五 ); if ( month = 5 & date = 1 ) lcm_w_word(五一國際勞動節(jié) ); /5if ( month = 5 & date = 4 ) lcm_w_word( 青年節(jié) ); if ( month = 5 & date = 8 ) lcm_w_word( 世界紅十字日 ); if ( month = 5 & date = 12 ) lcm_w_word( 國際護(hù)士節(jié) ); if ( month = 5 & date = 5 ) lcm_w_word(近日請注意母親節(jié)); if ( month = 5 &
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度洗浴中心特色服務(wù)項目開發(fā)與運營合同4篇
- 2025年度智能制造車間承包運營管理合同協(xié)議書2篇
- 2024版物聯(lián)網(wǎng)技術(shù)開發(fā)合同
- 2025年度櫥柜與廚房設(shè)施安裝服務(wù)合同包含后期維護(hù)保障3篇
- 2024遠(yuǎn)洋漁業(yè)運輸合作協(xié)議
- 2025年工業(yè)廠房出租安全生產(chǎn)監(jiān)督協(xié)議書模板3篇
- 2025年度文化產(chǎn)品代理合同終止協(xié)議范本4篇
- 2025年度住宅小區(qū)車位租賃糾紛調(diào)解服務(wù)合同4篇
- 2025年度新能源汽車充電設(shè)施建設(shè)合作合同4篇
- 2025年度生物制藥研發(fā)項目出資入股分紅協(xié)議書3篇
- 國家自然科學(xué)基金項目申請書
- 電力電纜故障分析報告
- 中國電信網(wǎng)絡(luò)資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術(shù)試卷試題真題(答案詳解)
- 《品牌形象設(shè)計》課件
- 倉庫管理基礎(chǔ)知識培訓(xùn)課件1
- 藥品的收貨與驗收培訓(xùn)課件
- GH-T 1388-2022 脫水大蒜標(biāo)準(zhǔn)規(guī)范
- 高中英語人教版必修第一二冊語境記單詞清單
- 政府機(jī)關(guān)保潔服務(wù)投標(biāo)方案(技術(shù)方案)
- HIV感染者合并慢性腎病的治療指南
評論
0/150
提交評論