




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)萬(wàn)年歷設(shè)計(jì)報(bào)告 班級(jí):xxx 姓名:xxx 學(xué)號(hào):xxx 指導(dǎo)老師:xxx 時(shí)間:xxx摘要:本文介紹了單片機(jī)的一些比較基礎(chǔ)的,比較常用的一些資源的應(yīng)用,同時(shí)也對(duì)單片機(jī)所涉及的一些簡(jiǎn)單硬件有一定的介紹,基于單片機(jī)的原理設(shè)計(jì)電路,在了解硬件的基礎(chǔ)上完成程序設(shè)計(jì),使自己掌握對(duì)一個(gè)系統(tǒng)的初步規(guī)劃和設(shè)計(jì),提高自己分析問(wèn)題的能力。一、設(shè)計(jì)內(nèi)容及要求利用at89c51單片機(jī)芯片實(shí)現(xiàn)電子鐘系統(tǒng)設(shè)計(jì),其硬件原理框圖如圖1所示,其中顯示采用液晶lcd1602,溫度測(cè)量采用ds18b20。鬧鈴電路at89c51按鍵控制液晶顯示器 硬件原理框圖各部分功能實(shí)現(xiàn):(1) 單片機(jī)發(fā)送的信號(hào)通過(guò)程序控制最終在液晶顯示
2、器上顯示出來(lái)。(2) 單片機(jī)通過(guò)輸出各種電脈沖信號(hào)來(lái)驅(qū)動(dòng)控制各部分正常工作。(3) 為使時(shí)鐘走時(shí)與標(biāo)準(zhǔn)時(shí)間一致,校時(shí)電路是必不可少的,按鍵用來(lái)校正液晶顯示器上顯示的時(shí)間。(4) 單片機(jī)通過(guò)控制鬧鈴電路來(lái)完成 準(zhǔn)點(diǎn)報(bào)時(shí)的功能。系統(tǒng)的主要工作和流程 此電子鐘系統(tǒng)的設(shè)計(jì),為實(shí)現(xiàn)其多方面的功能,需要收集芯片元件的資料和芯片的數(shù)據(jù)手冊(cè),理解芯片的工作原理,時(shí)鐘芯片,溫度芯片, lcd1602芯片的顯示原理。設(shè)計(jì)中最為關(guān)鍵的是對(duì)整個(gè)系統(tǒng)設(shè)計(jì)原理的理解。 系統(tǒng)的主要工作是進(jìn)行整個(gè)電子鐘系統(tǒng)的程序設(shè)計(jì),主要是對(duì)時(shí)間算法,lcd顯示設(shè)計(jì),溫度讀取的程序設(shè)計(jì)。由于電子萬(wàn)年設(shè)計(jì)的功能較多,所編寫(xiě)的代碼量較大,編程中
3、更是用到了大量的算法,所以此次的軟件設(shè)計(jì)使用c語(yǔ)言編程而沒(méi)有使用匯編語(yǔ)言。軟件的設(shè)計(jì)主要將程序分為主程序和各個(gè)子程序模塊。系統(tǒng)工作的流程為:在完成了程序的設(shè)計(jì)調(diào)試之后,便可將編譯生產(chǎn)的文件下載到at89c51單片機(jī)芯片運(yùn)行,再不斷進(jìn)行調(diào)試改進(jìn)。 二、系統(tǒng)工作原理設(shè)計(jì)的電路主要由主控模塊、液晶顯示模塊、溫度模塊、按鍵模塊和鬧鐘模塊共5個(gè)模塊組成。本設(shè)計(jì)采用語(yǔ)言程序設(shè)計(jì),使單片機(jī)控制液晶顯示器時(shí)、分、秒,當(dāng)秒計(jì)數(shù)計(jì)滿60時(shí)就向分進(jìn)位,分計(jì)數(shù)器計(jì)滿60后向時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按“23翻0”規(guī)律計(jì)數(shù)。時(shí)、分、秒的計(jì)數(shù)結(jié)果經(jīng)過(guò)數(shù)據(jù)處理可直接送顯示器顯示。當(dāng)計(jì)時(shí)發(fā)生誤差的時(shí)候可以用校時(shí)電路進(jìn)行校正。設(shè)
4、計(jì)采用的是時(shí)、分、秒顯示,單片機(jī)對(duì)數(shù)據(jù)進(jìn)行處理同時(shí)在液晶顯示器上顯示。主控模塊:本系統(tǒng)主控模塊采用的單片機(jī)at89c51,外接12mhz晶振。at89c51具有40個(gè)引腳,1288位內(nèi)部ram ,32可編程i/o線 ,兩個(gè)16位定時(shí)器/計(jì)數(shù)器,5個(gè)中斷源??删幊檀型ǖ溃凸牡拈e置和掉電模式, 片內(nèi)振蕩器和時(shí)鐘電路也是其主要特性。液晶顯示模塊:lcd1602采用標(biāo)準(zhǔn)的16腳接口,其中: 第1腳:gnd為地電源 第2腳:vcc接5v正電源 第3腳:v0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10k的電位器調(diào)整對(duì)比度 第4
5、腳:rs為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:rw為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)rsrw共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)rs為低電平rw為高電平時(shí)可讀忙信號(hào),當(dāng)rs為高電平rw為低電平時(shí)可以寫(xiě)入數(shù)據(jù).第6腳:e端為使能端,當(dāng)e端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:db0db7為8位雙向數(shù)據(jù)線。第1516腳:空腳。溫度模塊:ds18b20溫度傳感器是美國(guó)dallas半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)位的數(shù)字值讀
6、數(shù)方式。 其引腳功能描述見(jiàn)表1。表1ds18b20詳細(xì)引腳功能描述序號(hào)名稱引腳功能描述1gnd地信號(hào)2dq數(shù)據(jù)輸入/輸出引腳。開(kāi)漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源。3vdd可選擇的vdd引腳。當(dāng)工作于寄生電源時(shí),此引腳必須接地。鬧鐘模塊:鬧鈴模塊為單片機(jī)開(kāi)發(fā)箱的蜂鳴器,當(dāng)鬧鐘時(shí)間到后,蜂鳴器發(fā)聲,直到過(guò)了鬧鐘時(shí)間后停止。按鍵模塊:本設(shè)計(jì)總共用了5個(gè)獨(dú)立按鍵,其中一個(gè)是設(shè)置鍵,兩個(gè)是調(diào)整項(xiàng)增加、減少的鍵,一個(gè)是鬧鐘設(shè)置鍵,一個(gè)是顯示模式設(shè)置鍵。三、系統(tǒng)的軟件設(shè)計(jì)軟件的總體設(shè)計(jì)系統(tǒng)是由at89c51單片機(jī)控制,系統(tǒng)分為主函數(shù)部分和各模塊子函數(shù)部分2個(gè)部分。系統(tǒng)主函數(shù)部分主
7、要是調(diào)用各個(gè)模塊的子函數(shù)。本系統(tǒng)的時(shí)間是通過(guò)軟件進(jìn)行設(shè)置,使用定時(shí)器使電子鐘運(yùn)行,并將值送入主控芯片,通過(guò)液晶顯示器lcd1602來(lái)顯示,時(shí)間、日期的修改通過(guò)按鍵來(lái)控制的。所以要對(duì)定時(shí)器、液晶顯示器進(jìn)行初始化。而其他模塊的初始化在各模塊函數(shù)中初始化。各模塊的子函數(shù)包括lcd1602顯示模塊、ds18b20測(cè)溫模塊、時(shí)鐘模塊、按鍵掃描模塊。鬧鐘設(shè)置模塊包含在時(shí)鐘模塊和按鍵掃描模塊中。主程序通過(guò)調(diào)用其他函數(shù)來(lái)實(shí)現(xiàn)系統(tǒng)的總體功能,其工作流程如下:(1) 系統(tǒng)啟動(dòng)后,進(jìn)行定時(shí)器和lcd顯示初始化。(2) lcd1602顯示日期、時(shí)間、溫度。開(kāi)始定時(shí)器及中斷定時(shí)器初始化執(zhí)行時(shí)鐘鬧鈴設(shè)定程序是否設(shè)定參數(shù)執(zhí)
8、行顯示程序ny(3) 可以通過(guò)按鍵進(jìn)行顯示模式設(shè)置,調(diào)整日期、時(shí)間、還可以進(jìn)行萬(wàn)年歷查詢。圖3-1 主程序流程圖液晶顯示模塊于本系統(tǒng)是采用lcd1602顯示的,系統(tǒng)的軟件設(shè)計(jì)通過(guò)p0口輸出數(shù)據(jù),數(shù)據(jù)命令選擇端p2.6,讀寫(xiě)選擇端是p2.5,使能信號(hào)選擇端為p2.7。程序主要進(jìn)行l(wèi)cd1602的初始化設(shè)定,及根據(jù)時(shí)序圖編寫(xiě)lcd1602的寫(xiě)指令、寫(xiě)字符函數(shù)。此外還需編寫(xiě)顯示字符串函數(shù)等。測(cè)溫模塊溫度檢測(cè)相關(guān)函數(shù)包括:ds18b20的初始化函數(shù), ds18b20的溫度讀取函數(shù)等。 由于ds18b20是單總線的時(shí)序工作方式,其每次工作前需要初始化。首先由總線拉低480-960us,而后釋放總線60-
9、120us,此后會(huì)有ds18b20自己拉地60-240us,然后釋放總線。這樣就完成了ds18b20的初始化過(guò)程。如果在有ds18b20自動(dòng)拉低部分,讀取總線其沒(méi)被拉低,則表示ds18b20不存在。函數(shù)編寫(xiě)上由于只對(duì)一條總線進(jìn)行編程,所以十分簡(jiǎn)單??偩€拉低時(shí)向dq送0,總線釋放向dq送1即可。延時(shí)時(shí)間通過(guò)延時(shí)函數(shù)調(diào)整。溫度讀取函數(shù)的程序流程為首先初始化ds18b20,然后通過(guò)ds18b20寫(xiě)字節(jié)函數(shù)寫(xiě)命令字cc(跳過(guò)rom匹配),再寫(xiě)命令字44(溫度轉(zhuǎn)換)。然后再初始化ds18b20,寫(xiě)命令字cc,寫(xiě)命令字be(讀暫存),通過(guò)ds18b20字節(jié)讀取函數(shù)讀取暫存的前2字節(jié)(0,1字節(jié)為溫度字節(jié))
10、存入a與b兩個(gè)變量中,a為溫度值低位,b為溫度值高位。 ds18b20工作過(guò)程:sbit dq = p33; / 定義dq引腳為p3.3/* 延時(shí)函數(shù) * 功能:在11.059mhz的晶振條件下調(diào)用本函數(shù)需要24s ,然后每次計(jì)數(shù)需16s */void ds18_delay(int useconds) int s;for (s=0; suseconds;s+);/* 復(fù)位函數(shù) * 功能:完成單總線的復(fù)位操作。* 復(fù)位時(shí)間為480s,因此延時(shí)時(shí)間為(480-24)/16 = 28.5,取29s。* 經(jīng)過(guò)70s之后檢測(cè)存在脈沖,因此延時(shí)時(shí)間為(70-24)/16 = 2.875,取3s。*/uns
11、igned char ow_reset(void) unsigned char presence;dq = 0; / 將 dq 線拉低ds18_delay(29); / 保持 480sdq = 1; / dq返回高電平ds18_delay(3); / 等待存在脈沖presence = dq; / 獲得存在信號(hào)ds18_delay(25); / 等待時(shí)間隙結(jié)束return(presence); / 返回存在信號(hào),0 = 器件存在, 1 = 無(wú)器件/* 位寫(xiě)入函數(shù) * 功能:向單總線寫(xiě)入1位值:bitval*/void write_bit(char bitval) dq = 0; / 將dq 拉低
12、開(kāi)始寫(xiě)時(shí)間隙if(bitval=1) dq =1; / 如果寫(xiě)1,dq 返回高電平ds18_delay(5); / 在時(shí)間隙內(nèi)保持電平值,dq = 1; / ds18_delay函數(shù)每次循環(huán)延時(shí)16s,因此ds18_delay(5) = 104s/* 字節(jié)寫(xiě)入函數(shù) * 功能:向單總線寫(xiě)入一個(gè)字節(jié)值:val*/void ds18write_byte(char val) unsigned char i;unsigned char temp;for (i=0; ii; temp &= 0x01; write_bit(temp); ds18_delay(5);/* 位讀取函數(shù) * 功能:從單總線上讀取
13、一位信號(hào),所需延時(shí)時(shí)間為15s,因此無(wú)法調(diào)用前面定義* 的ds18_delay()函數(shù),而采用一個(gè)for()循環(huán)來(lái)實(shí)現(xiàn)延時(shí)。* */unsigned char read_bit(void) unsigned char i;dq = 0; /將dq 拉低開(kāi)始讀時(shí)間隙dq = 1; / then return highfor (i=0; i3; i+); / 延時(shí)15sreturn(dq); / 返回 dq 線上的電平值/* 字節(jié)讀取函數(shù) * 功能:從單總線讀取一個(gè)字節(jié)的值*/unsigned char dsread_byte(void) unsigned char i;unsigned char
14、 value = 0;for (i=0;i8;i+) / 讀取字節(jié),每次讀取一個(gè)字節(jié)if(read_bit() value|=0x01i; / 然后將其左移ds18_delay(6); return(value);/* 讀取溫度函數(shù) * 功能:如果單總線節(jié)點(diǎn)上只有一個(gè)器件則可以直接掉用本函數(shù)。如果節(jié)點(diǎn)上有多個(gè)器* 件,為了避免數(shù)據(jù)沖突,應(yīng)使用match rom函數(shù)來(lái)選中特定器件。* 注: 本函數(shù)是根據(jù)ds1820的溫度數(shù)據(jù)格式編寫(xiě)的,若用于ds18b20,必須根據(jù)* ds18b20的溫度數(shù)據(jù)格式作適當(dāng)修改。*/unsigned int readtemperature(void) unsigne
15、d char get10;unsigned char temp_lsb,temp_msb;unsigned int t;unsigned char k;ow_reset();ds18write_byte(0xcc); / 跳過(guò) romds18write_byte(0x44); / 啟動(dòng)溫度轉(zhuǎn)換ds18_delay(5);ow_reset();ds18write_byte(0xcc); / 跳過(guò) romds18write_byte(0xbe); / 讀暫存器for (k=0;k2;k+)getk=dsread_byte();temp_msb = get1; / sign byte + lsbit
16、temp_lsb = get0; / temp data plus lsbt=temp_msb*256+temp_lsb;t=t&0x0ff0;if(t0xf0)t=(-1)*t;return t4;/temp_f = (int)temp_c)* 9)/5 + 32; / 輸出華氏溫度值時(shí)鐘函數(shù)時(shí)鐘函數(shù)包括年、月、日、時(shí)、分、秒、星期的計(jì)算方法。時(shí)間控制程序主要是定時(shí)器0計(jì)時(shí)中斷程序每隔17ms中斷一次當(dāng)作一個(gè)計(jì)數(shù),每中斷一次則計(jì)數(shù)加1,當(dāng)計(jì)數(shù)60次時(shí),則表示1秒到了,秒變量加1,同理再判斷是否1分鐘到了,再判斷是否1小時(shí)到了,再判斷是否1天到了,再判斷是否1月到了,再判斷是否1年到了,若計(jì)數(shù)
17、到了則相關(guān)變量清除0。月份算法:先給出一般年份的每月天數(shù)。如果是閏年,第二個(gè)月天數(shù)不為28天,而是29天。星期算法:算出當(dāng)前時(shí)間距2000年1月1日(星期六)的天數(shù),通過(guò)公式week=(6+sum%7)%7計(jì)算當(dāng)前顯示日期是星期幾。閏年的判斷規(guī)則為,如果該年份是4或100的整數(shù)倍或者是400的整數(shù)倍,則為閏年;否則為非閏年。當(dāng)電子鐘運(yùn)行的時(shí)間與所設(shè)定的時(shí)間相同時(shí),蜂鳴器響,直到過(guò)了設(shè)置時(shí)間后不響。按鍵掃描函數(shù)本系統(tǒng)的時(shí)間、日期設(shè)置、鬧鐘設(shè)置、萬(wàn)年歷判斷是通過(guò)5個(gè)按鍵進(jìn)行設(shè)置,分別為key_1、key_2、key_3、key_4、key_5按鍵。系統(tǒng)啟動(dòng)后按key_1進(jìn)入設(shè)置程序,對(duì)當(dāng)前項(xiàng)進(jìn)行設(shè)
18、置,調(diào)整順序依次為:年、月、日、時(shí)、分、秒。設(shè)置時(shí)時(shí)鐘停止運(yùn)行,按key_1對(duì)各個(gè)設(shè)置項(xiàng)進(jìn)行切換,第7項(xiàng)為設(shè)置完成,時(shí)鐘開(kāi)始運(yùn)行。key_1鍵為功能鍵,key_2鍵為加1,key_3為減一,key_4為顯示模式設(shè)置按鍵,key_5為鬧鐘設(shè)置按鍵。四、仿真1、仿真:打開(kāi)軟件,輸入所編寫(xiě)的源程序并對(duì)程序進(jìn)行編譯,在軟件的幫助下檢查其中的錯(cuò)誤并進(jìn)行反復(fù)修改,知道編譯正確后運(yùn)行,確保沒(méi)有錯(cuò)誤以后對(duì)正確的源程序進(jìn)行保存,保存時(shí)給其命名,以便將來(lái)載入程序時(shí)容易找到。2、打開(kāi)proteus軟件,并出畫(huà)單片機(jī)電子萬(wàn)年歷具體運(yùn)行電路圖。3、檢查所畫(huà)電路運(yùn)行圖,確保沒(méi)有錯(cuò)誤以后,在proteus下對(duì)原理圖進(jìn)行加載
19、keil下的源程序。4、加載完成后,單擊電路圖框下的開(kāi)始按鈕,進(jìn)行仿真,觀察液晶顯示器顯示情況。調(diào)節(jié)開(kāi)關(guān)進(jìn)行時(shí)間的調(diào)節(jié),調(diào)節(jié)石英晶體震蕩器的頻率參數(shù),從而使秒的間隔達(dá)到標(biāo)準(zhǔn)。然后檢查電路其它問(wèn)題,并對(duì)其的各參數(shù)進(jìn)行調(diào)整,使之正確。五、pcb圖六、程序#include#includeds18b20_3.h#define uint unsigned int#define uchar unsigned charuchar a,b,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,miao1,shi1=12,fen1=1,miao1=0,clock=0 ;/f
20、lag用于讀取頭文件中的溫度值,和顯示溫度值#define yh 0x80 /lcd第一行的初始位置,因?yàn)閘cd1602字符地址首位d7恒定為1(100000000=80)#define er 0x80+0x40 /lcd第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)/液晶屏的與c51之間的引腳連接定義(顯示數(shù)據(jù)線接c51的p0口)sbit rs=p20;sbit en=p22;sbit rw=p21; /如果硬件上rw接地,就不用寫(xiě)這句和后面的rw=0了sbit led=p26; /lcd背光開(kāi)關(guān)/ds1302時(shí)鐘芯片與c51之間的引腳連接定義sbit io=p11;sbit sc
21、lk=p10;sbit rst=p12;sbit clo=p14;sbit acc0=acc0;sbit acc7=acc7;/*acc累加器=aacc.0=e0hacc.0就是acc的第0位。acc可以位尋址。累加器acc是一個(gè)8位的存儲(chǔ)單元,是用來(lái)放數(shù)據(jù)的。但是,這個(gè)存儲(chǔ)單元有其特殊的地位,是單片機(jī)中一個(gè)非常關(guān)鍵的單元,很多運(yùn)算都要通過(guò)acc來(lái)進(jìn)行。以后在學(xué)習(xí)指令時(shí),常用a來(lái)表示累加器。但有一些地方例外,比如在push指令中,就必須用acc這樣的名字。一般的說(shuō)法,a代表了累加器中的內(nèi)容、而acc代表的是累加器的地址。*/校時(shí)按鍵與c51的引腳連接定義sbit key1=p15; /設(shè)置鍵s
22、bit key2=p16; /加鍵sbit key3=p17; /減鍵sbit buzzer=p13;/蜂鳴器,通過(guò)三極管9012驅(qū)動(dòng),端口低電平響/*/uchar code tab1=20 - - ; /年顯示的固定字符uchar code tab2= : : ;/時(shí)間顯示的固定字符uchar code tab3= hello welcome;/開(kāi)機(jī)動(dòng)畫(huà)/延時(shí)函數(shù),后面經(jīng)常調(diào)用void delay(uint xms)/延時(shí)函數(shù),有參函數(shù)uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);void delay1ms(int i)/1毫秒延時(shí) int j,k;
23、while(i-) for(j=76;j1;j-); for(k=29;k1;k-); /*液晶寫(xiě)入指令函數(shù)與寫(xiě)入數(shù)據(jù)函數(shù),以后可調(diào)用*/*在這個(gè)程序中,液晶寫(xiě)入有關(guān)函數(shù)會(huì)在ds1302的函數(shù)中調(diào)用,所以液晶程序要放在前面*/write_1602com(uchar com)/*液晶寫(xiě)入指令函數(shù)*rs=0;/數(shù)據(jù)/指令選擇置為指令rw=0; /讀寫(xiě)選擇置為寫(xiě)p0=com;/送入數(shù)據(jù)delay(1);en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令write_1602dat(uchar dat)/*液晶寫(xiě)入數(shù)據(jù)函數(shù)*rs=1;/數(shù)
24、據(jù)/指令選擇置為數(shù)據(jù)rw=0; /讀寫(xiě)選擇置為寫(xiě)p0=dat;/送入數(shù)據(jù)delay(1);en=1; /en置高電平,為制造下降沿做準(zhǔn)備delay(1);en=0; /en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令lcd_init()/*液晶初始化函數(shù)* uchar j; write_1602com(0x0f|0x08);for(a=0;a17;a+) write_1602dat(tab3a); j=17;while(j-)write_1602com(0x1c);/循環(huán)左移delay(700);write_1602com(0x01);delay(10);write_1602com(0x38);/設(shè)置液
25、晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)write_1602com(0x0c);/開(kāi)顯示不顯示光標(biāo)write_1602com(0x06);/整屏不移動(dòng),光標(biāo)自動(dòng)右移write_1602com(0x01);/清顯示/*開(kāi)機(jī)動(dòng)畫(huà)顯示hello welcome dianzizhong*/write_1602com(yh+1);/日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開(kāi)始顯示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏寫(xiě)日歷顯示的固定符號(hào)部分/delay(3);write_1602com(er+2);/時(shí)間顯示固定符號(hào)寫(xiě)入位置,從第2個(gè)位置后開(kāi)始顯示
26、for(a=0;a0;a-)io=acc0;sclk=0;sclk=1;acc=acc1;uchar read_byte()/讀一個(gè)字節(jié)rst=1;for(a=8;a0;a-)acc7=io;sclk=1;sclk=0;acc=acc1;return (acc);/-void write_1302(uchar add,uchar dat)/向1302芯片寫(xiě)函數(shù),指定寫(xiě)入地址,數(shù)據(jù)rst=0;sclk=0;rst=1;write_byte(add);write_byte(dat);sclk=1;rst=0;uchar read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)
27、源地址uchar temp;rst=0;sclk=0;rst=1;write_byte(add);temp=read_byte();sclk=1;rst=0;return(temp);uchar bcd_decimal(uchar bcd)/bcd碼轉(zhuǎn)十進(jìn)制函數(shù),輸入bcd,返回十進(jìn)制 uchar decimal; decimal=bcd4; return(decimal=decimal*10+(bcd&=0x0f);/-void ds1302_init() /1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)rst=0;sclk=0;write_1302(0x8e
28、,0x00); /允許寫(xiě),禁止寫(xiě)保護(hù)write_1302(0x80,0x00); /向ds1302內(nèi)寫(xiě)秒寄存器80h寫(xiě)入初始秒數(shù)據(jù)00write_1302(0x82,0x00);/向ds1302內(nèi)寫(xiě)分寄存器82h寫(xiě)入初始分?jǐn)?shù)據(jù)00write_1302(0x84,0x12);/向ds1302內(nèi)寫(xiě)小時(shí)寄存器84h寫(xiě)入初始小時(shí)數(shù)據(jù)12write_1302(0x8a,0x01);/向ds1302內(nèi)寫(xiě)周寄存器8ah寫(xiě)入初始周數(shù)據(jù)4write_1302(0x86,0x08);/向ds1302內(nèi)寫(xiě)日期寄存器86h寫(xiě)入初始日期數(shù)據(jù)07write_1302(0x88,0x07);/向ds1302內(nèi)寫(xiě)月份寄存器8
29、8h寫(xiě)入初始月份數(shù)據(jù)01write_1302(0x8c,0x10);/向ds1302內(nèi)寫(xiě)年份寄存器8ch寫(xiě)入初始年份數(shù)據(jù)10write_1302(0x8e,0x80); /打開(kāi)寫(xiě)保護(hù)/-/溫度顯示子函數(shù)void write_temp(uchar add,uchar dat)/向lcd寫(xiě)溫度數(shù)據(jù),并指定顯示位置uchar gw,sw,bw;if(dat=0&dat31) ri=1; break; case 2:if(nian%4=0|nian%400=0) if(ri29) ri=1; else if(ri28) ri=1; break; case 4:case 6:case 9:case 11
30、: ri+; if(ri30) ri=1; break; write_nyr(9,ri);/令lcd在正確的位置顯示加設(shè)定好的日期數(shù)據(jù)temp=(ri)/10*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x86,temp);/向ds1302內(nèi)寫(xiě)日期寄存器86h寫(xiě)入調(diào)整后的日期數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 6:yue+;i
31、f(yue=13)yue=1;write_nyr(6,yue);/令lcd在正確的位置顯示加設(shè)定好的月份數(shù)據(jù)temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x88,temp);/向ds1302內(nèi)寫(xiě)月份寄存器88h寫(xiě)入調(diào)整后的月份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+7);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 7:nian+; if(nian=100)nian=0;write_nyr(3,nian);/令lcd在正確的位置顯示加設(shè)定好的年份數(shù)據(jù) temp=(nian)/10*16+(nian)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x8c,temp);/向ds1302內(nèi)寫(xiě)年份寄存器8ch寫(xiě)入調(diào)整后的年份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美容美發(fā)店員工入股2025年度全新合作框架合同匯編
- 2025年度高端服裝店品牌代理權(quán)轉(zhuǎn)讓合同范本
- 砌體抹灰勞務(wù)分包合同書(shū)
- 工業(yè)生產(chǎn)過(guò)程質(zhì)量控制要點(diǎn)
- 農(nóng)業(yè)養(yǎng)殖業(yè)智能化養(yǎng)殖管理系統(tǒng)建設(shè)
- 新能源車(chē)充電樁建設(shè)合同
- 汽車(chē)工程車(chē)輛維護(hù)與故障診斷技能考試試題集
- 中學(xué)生物多樣性的感悟
- 城市商業(yè)管理系統(tǒng)升級(jí)服務(wù)協(xié)議
- 給排水安裝工程勞務(wù)合同
- 2025年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)審定版
- 人教版四年級(jí)數(shù)學(xué)下冊(cè)《圖形的運(yùn)動(dòng)(二)》試題(含答案)
- 2024-2025學(xué)年五年級(jí)(下)信息科技教學(xué)計(jì)劃
- 《老年人權(quán)益保障法》
- 2025屆上海市(春秋考)高考英語(yǔ)考綱詞匯對(duì)照表清單
- 2025-2030年中國(guó)pcb行業(yè)競(jìng)爭(zhēng)格局及未來(lái)投資趨勢(shì)分析報(bào)告新版
- 2025年年食堂工作總結(jié)和年工作計(jì)劃例文
- 船舶制造設(shè)施安全生產(chǎn)培訓(xùn)
- 全國(guó)駕駛員考試(科目一)考試題庫(kù)下載1500道題(中英文對(duì)照版本)
- TSG 07-2019電梯安裝修理維護(hù)質(zhì)量保證手冊(cè)程序文件制度文件表單一整套
- 2025深圳勞動(dòng)合同下載
評(píng)論
0/150
提交評(píng)論