萬(wàn)年歷課程設(shè)計(jì)完整版_第1頁(yè)
萬(wàn)年歷課程設(shè)計(jì)完整版_第2頁(yè)
萬(wàn)年歷課程設(shè)計(jì)完整版_第3頁(yè)
萬(wàn)年歷課程設(shè)計(jì)完整版_第4頁(yè)
萬(wàn)年歷課程設(shè)計(jì)完整版_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于51單片機(jī)的萬(wàn)年歷的設(shè)計(jì)學(xué)生姓名學(xué)號(hào)所在專業(yè)電子信息工程所在班級(jí)電子1111小組成員指導(dǎo)教師完畢日期基于51單片機(jī)的萬(wàn)年歷的設(shè)計(jì)1需求分析“需“的分析萬(wàn)年歷是一個(gè)可以顯示當(dāng)前時(shí)間、日歷、溫度信息以及設(shè)立鬧鐘報(bào)警的應(yīng)用系統(tǒng),其具有以下功能:(1)可以顯示當(dāng)前的時(shí)間信息;(2)可以顯示當(dāng)前的溫度;(3)可以手動(dòng)修改時(shí)間;(4)可以設(shè)立鬧鐘,并且達(dá)成設(shè)立的時(shí)間點(diǎn)發(fā)出音響信號(hào)。1.2“求“的分析設(shè)計(jì)萬(wàn)年歷,需要考慮以下幾方面的內(nèi)容:(1)如何獲取當(dāng)前的時(shí)間信息,這些時(shí)間信息涉及時(shí)、分、秒、年、月、日、和星期;(2)如何獲得當(dāng)前的溫度信息,精確到1°C即可;(3)提供必要的用戶輸入設(shè)立通道;(4)提供相應(yīng)的顯示和報(bào)警部件;(5)需要寫(xiě)出合適的軟件應(yīng)用代碼。方案設(shè)計(jì)與論證時(shí)間獲取方法的方案設(shè)計(jì)與論證方案一:使用單片機(jī)的內(nèi)部定期器進(jìn)行定期,使用軟件算法來(lái)計(jì)算當(dāng)前的時(shí)間信息。此種方案雖然可以不使用時(shí)鐘芯片,節(jié)約成本,但是時(shí)間的精確度一般,軟件代碼復(fù)雜。方案二:采用外部擴(kuò)展實(shí)時(shí)時(shí)鐘芯片DS12C887的方式來(lái)獲取相應(yīng)的時(shí)間信息。DS12C887是一種高性能的芯片,能自動(dòng)產(chǎn)生年、月、日、時(shí)、分、秒等信息,并有閏年修正功能。采用雙電源供電方式,可設(shè)立備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流的充電的能力,在能滿足精度規(guī)定的同時(shí)價(jià)格也比較便宜,性價(jià)比較高。所以采用方案二。顯示模塊的方案設(shè)計(jì)與論證方案一:采用LED數(shù)碼管動(dòng)態(tài)掃描。LED數(shù)碼管價(jià)格適中,但只能顯示數(shù)字和簡(jiǎn)樸的字符,且其的接口線少。方案二:采用點(diǎn)陣式數(shù)碼管顯示。點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,并不太適合于對(duì)數(shù)字跟字母進(jìn)行顯示,其重要用于漢字的顯示。方案三:采用LED液晶顯示屏。液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清楚可見(jiàn),雖然價(jià)格稍微貴了點(diǎn),但其接口線多。所以采用方案三。溫度采集的方案設(shè)計(jì)與論證方案一:使用PT鉑電阻采集。PT鉑電阻根據(jù)溫度變化的只是其電阻值,在實(shí)際使用過(guò)程,需要額外的輔助器件將其轉(zhuǎn)化為電壓信號(hào),并且通過(guò)調(diào)整后送到模/數(shù)字轉(zhuǎn)換器件才干讓51單片機(jī)進(jìn)行解決。方案二:使用數(shù)字溫度傳感器采集。溫度傳感器雖然、精度采樣速度等性能比不上PT鉑電阻,但是其沒(méi)有額外的附加器件,且能滿足系統(tǒng)對(duì)采集精度的規(guī)定。所以采用數(shù)字溫度傳感器。硬件設(shè)計(jì)萬(wàn)年歷的硬件模塊顯示模塊51顯示模塊51單片機(jī)聲音報(bào)警模塊聲音報(bào)警模塊用戶輸入模塊用戶輸入模塊時(shí)鐘日歷模塊時(shí)鐘日歷模塊溫度傳感器模塊 溫度傳感器模塊圖3-1萬(wàn)年歷的硬件模塊3.2萬(wàn)年歷的電路圖3-2萬(wàn)年歷的電路3.3硬件基礎(chǔ)DS1302的硬件基礎(chǔ):(1)時(shí)鐘芯片DS1302的工作原理:DS1302在每次進(jìn)行讀、寫(xiě)程序前都必須初始化,先把SCLK端置“0”,接著把RST端置“1”,最后才給予SCLK脈沖。圖5為DS1302的控制字的位7必須置1,若為0則不能把對(duì)DS1302進(jìn)行讀寫(xiě)數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫(xiě)時(shí)RAM=1,對(duì)時(shí)間進(jìn)行讀/寫(xiě)時(shí),CK=0。位1至位5指操作單元的地址。位0是讀/寫(xiě)操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表達(dá)進(jìn)行的是寫(xiě)操作??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出的。DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處在低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開(kāi)始運(yùn)營(yíng)?!癢P”是寫(xiě)保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫(xiě)操作之前,WP必須為0。當(dāng)“WP”為1時(shí),寫(xiě)保護(hù)位防止對(duì)任一寄存器的寫(xiě)操作。(2)DS1302的控制字節(jié)DS1302的控制字如表-1所示。控制字節(jié)的高有效位(位7)必須是邏輯1,假如它為0,則不能把數(shù)據(jù)寫(xiě)入DS1302中,位6假如0,則表達(dá)存取日歷時(shí)鐘數(shù)據(jù),為1表達(dá)存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表達(dá)要進(jìn)行寫(xiě)操作,為1表達(dá)進(jìn)行讀操作,控制字節(jié)總是從最低位開(kāi)始輸出。表3-1DS1302的控制字格式1RAM/CKA4A3A2A1A0RD/WR(3)數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫(xiě)入DS1302,數(shù)據(jù)輸入從低位即位0開(kāi)始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如下圖3-3所示:圖3-3DS1302讀/寫(xiě)時(shí)序圖(4)DS1302的寄存器DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見(jiàn)表3-2。表3-2DS1302的日歷、時(shí)間寄存器此外,DS1302尚有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫(xiě)除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫(xiě)所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫(xiě))、FFH(讀)。1602液晶的硬件基礎(chǔ):1602通常有14條引腳線或16條引腳線的LCD,多余來(lái)的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全同樣,引腳定義如表3-3所示:表3-31602的引腳及其相應(yīng)的功能

1602支持的一系列指令:(1)清屏指令:表3-4清屏指令(2)歸零指令:表3-5歸零指令(3)輸入方式選擇指令:表3-6輸入方式選擇指令(4)顯示開(kāi)關(guān)控制指令:表3-7顯示開(kāi)關(guān)控制指令(5)光標(biāo)和畫(huà)面移動(dòng)指令:表3-8光標(biāo)和畫(huà)面移動(dòng)指令(6)功能設(shè)定指令:表3-9功能設(shè)定指令(7)CGRAM設(shè)立指令:表3-10CGRAM設(shè)立指令(8)DDRAM設(shè)立指令:表3-11DDRAM設(shè)立指令(9)讀BF和AC指令:表3-12讀BF和AC指令(10)寫(xiě)數(shù)據(jù)指令:表3-13寫(xiě)數(shù)據(jù)指令(11)讀數(shù)據(jù)指令:表3-14讀數(shù)據(jù)指令軟件設(shè)計(jì)系統(tǒng)初始化系統(tǒng)初始化設(shè)立鬧鐘按鍵被按下驅(qū)動(dòng)蜂鳴器報(bào)警時(shí)鐘數(shù)據(jù)和鬧鐘信息等初始化時(shí)鐘芯片和液晶顯示顯示當(dāng)前的數(shù)據(jù)和溫度數(shù)據(jù)讀取DS18B20數(shù)據(jù)并且進(jìn)行相應(yīng)的解決讀取DS1302的時(shí)鐘數(shù)據(jù)設(shè)立鬧鐘按鍵被按下驅(qū)動(dòng)蜂鳴器報(bào)警時(shí)鐘數(shù)據(jù)和鬧鐘信息等初始化時(shí)鐘芯片和液晶顯示顯示當(dāng)前的數(shù)據(jù)和溫度數(shù)據(jù)讀取DS18B20數(shù)據(jù)并且進(jìn)行相應(yīng)的解決讀取DS1302的時(shí)鐘數(shù)據(jù) 是否 是圖4-1萬(wàn)年歷的工作流程總結(jié)仿真結(jié)果及分析通過(guò)多次調(diào)試、修改程序,萬(wàn)年歷終于在pruteus正常運(yùn)營(yíng)起來(lái)了。前面由于初次寫(xiě)的代碼有較多不完善的地方,所以調(diào)試的時(shí)候出了很多大的問(wèn)題,第一次發(fā)現(xiàn)大的問(wèn)題后,團(tuán)隊(duì)認(rèn)真地討論并修改了程序,后面調(diào)試碰到的都是些小問(wèn)題,無(wú)非是打漏或者打錯(cuò)這類問(wèn)題。心得工程上的問(wèn)題很多不是一個(gè)人的能力可以解決的,所以不能老是想著單干、蠻干,一定要發(fā)揮團(tuán)隊(duì)的力量,多討論,討論往往可以碰撞出思想的火花來(lái)。做事的時(shí)候一定要靜下心來(lái),保持專注,不能老想著快,不然會(huì)弄出很多本可以避免的問(wèn)題,敲代碼的時(shí)候,為了求快,結(jié)果調(diào)試的碰到小問(wèn)題花了可不少時(shí)間才解決。本次課程設(shè)計(jì),讓我知道了要想解決工程上的問(wèn)題,必須現(xiàn)將問(wèn)題具體化、模塊化,然后再逐個(gè)擊破,這樣才干更有效率地解決整個(gè)工程設(shè)計(jì)再到實(shí)物的問(wèn)題。附錄一:仿真圖附錄二:程序#include<AT89X52.H>#include<INTRINS.H>#defineTIME(0X10000-50000)#defineFLAG0XEF //鬧鐘標(biāo)志//引腳連接圖sbitrst=P3^5;sbitclk=P3^4;sbitdat=P3^3;sbitrs=P1^5;sbitrw=P1^6;sbite=P1^7;sbitDQ=P1^4;//溫度輸入口sbitACC_7=ACC^7;//全局變量及常量定義unsignedchari=20,j,time1[16]; unsignedcharalarm[2],time2[15],time[3];unsignedcharcodeDay[]={31,28,31,30,31,30,31,31,30,31,30,31};//12個(gè)月的最大日期(非閏年)//音律表unsignedintcodetable1[]={64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217};//發(fā)聲部分的延時(shí)時(shí)間unsignedcharcodetable2[]={0x82,1,0x81,0xf4,0xd4,0xb4,0xa4,0x94,0xe2,1,0xe1,0xd4,0xb4,0xc4,0xb4,4,0};//LCD自建字unsignedcharcodetab[]={0x18,0x1b,5,4,4,5,3,0,0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,//年0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,//月0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};//日//*******溫度小數(shù)部分用查表法**********//unsignedcharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//鬧鐘中用的全局變量unsignedcharth1,tl1;unsignedchartemp_data[2]={0x00,0x00};//讀出溫度暫放bitflag; //18b20存在標(biāo)志位/***********11微秒延時(shí)函數(shù)**********/delay(unsignedintt){ for(;t>0;t--);}/***********18B20復(fù)位函數(shù)**********/RST18B20(void){ unsignedchari; DQ=1;_nop_();_nop_(); DQ=0;// delay(50);//550us DQ=1;// delay(6);//66us for(i=0;i<0x30;i++) { if(!DQ) gotod1; } flag=0; //清標(biāo)志位,表達(dá)ds1820不存在 DQ=1; return;d1: delay(45);//延時(shí)500us flag=1; DQ=1; //置標(biāo)志位,表達(dá)ds1820存在}/**********18B20寫(xiě)命令函數(shù)*********///向1-WIRE總線上寫(xiě)一個(gè)字節(jié)voidWrite1Byte18B20(unsignedcharval){ unsignedchari; for(i=8;i>0;i--)// { DQ=1;_nop_();_nop_(); DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ=val&0x01;//最低位移出 delay(6);//66us val=val/2;//右移一位 } DQ=1; delay(1);}/*********18B20讀1個(gè)字節(jié)函數(shù)********///從總線上讀取一個(gè)字節(jié)unsignedcharRead1Byte18B20(void){ unsignedchari; unsignedcharvalue=0; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); value>>=1; DQ=0;// _nop_();_nop_();_nop_();_nop_();//4us DQ=1;_nop_();_nop_();_nop_();_nop_();//4us if(DQ) value|=0x80; delay(6);//66us } DQ=1; return(value);}/***********讀出溫度函數(shù)**********/Read18B20(){ RST18B20(); //總線復(fù)位 if(!flag) //判斷ds1820是否存在?若ds18b20不存在則返回 return; //Write1Byte18B20(0xCC); //SkipROM //Write1Byte18B20(0x44); //發(fā)轉(zhuǎn)換命令 //delay(70); Write1Byte18B20(0xCC); //發(fā)SkipROM命令 Write1Byte18B20(0xBE); //發(fā)讀命令 temp_data[0]=Read1Byte18B20();//溫度低8位 temp_data[1]=Read1Byte18B20();//溫度高8位 RST18B20(); Write1Byte18B20(0xCC); //SkipROM Write1Byte18B20(0x44); //發(fā)轉(zhuǎn)換命令}/***********溫度數(shù)據(jù)解決函數(shù)**********/DealTempData(){ unsignedcharn=0,m; if(temp_data[1]>127)//負(fù)溫度求補(bǔ)碼 { temp_data[1]=(256-temp_data[1]); temp_data[0]=(256-temp_data[0]); n=1; } time2[13]=ditab[temp_data[0]&0x0f]+'0'; time2[12]='.'; m=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);// if(n) { m-=16; } time2[9]=m/100+'0'; time2[11]=m%100; time2[10]=time2[11]/10+'0'; time2[11]=time2[11]%10+'0'; if(time2[9]=='0')//最高位為0時(shí)都不顯示 { time2[9]=0x20; if(n)//負(fù)溫度時(shí)最高位顯示"-" { time2[9]='-'; } if(time2[10]=='0') { if(n) { time2[10]='-'; time2[9]=0x20; } else time2[10]=0x20; if(time2[11]=='0'&&time2[13]=='0') time2[11]=time2[12]=0x20; } }}delay1ms(unsignedchartime) //延時(shí)1ms{ unsignedchari,j; for(i=0;i<time;i++) { for(j=0;j<250;j++); }}//使能1602EnableLCD(){ rs=0; rw=0; e=0; delay1ms(3); e=1;}//寫(xiě)LCD函數(shù)WriteLCD(unsignedchari){ P0=i; rs=1; rw=0; e=0; delay1ms(2); e=1;}//寫(xiě)LCD內(nèi)部地址函數(shù)WriteLCDRAM(unsignedchardata*address,m){ unsignedchari,j; for(i=0;i<m;i++,address++) { j=*address; WriteLCD(j); }}//LCD顯示LCDSHOW(){ P0=0XC; //顯示器開(kāi)、光標(biāo)關(guān) EnableLCD(); P0=0x80; //寫(xiě)入顯示起始地址 EnableLCD(); WriteLCDRAM(time1,16); P0=0xc1; //寫(xiě)入顯示起始地址 EnableLCD(); WriteLCDRAM(time2,15);}//自建字函數(shù)庫(kù)DesignHZ(){ unsignedchari; P0=0x40; EnableLCD(); for(i=0;i<32;i++) { WriteLCD(tab[i]); delay1ms(2); }}//寫(xiě)DS1302子程序WriteDS1302(unsignedcharaddress){ unsignedchari; clk=0; _nop_(); rst=1; _nop_(); for(i=0;i<8;i++) { dat=address&1; _nop_(); clk=1; address>>=1; clk=0; }}//讀DS1302子程序unsignedcharReadDS1302(){ unsignedchari,j=0; for(i=0;i<8;i++) { j>>=1; _nop_(); clk=0; _nop_(); if(dat) j|=0x80; _nop_(); clk=1; } return(j);}//部分顯示數(shù)據(jù)初始化TimeInit(){ time1[1]=time1[13]=time2[8]=time2[9]=time2[10]=0x20,time2[14]=0; time1[6]=1,time1[9]=2,time1[12]=3,time1[2]='2',time1[3]='0'; time1[14]='W',time2[2]=time2[5]=':'; WriteDS1302(0xc1); alarm[0]=ReadDS1302(); rst=0; WriteDS1302(0xc3); alarm[1]=ReadDS1302(); rst=0; WriteDS1302(0xc5); time1[0]=ReadDS1302(); rst=0;}//讀取時(shí)間ReadTime(){ unsignedchari,m,n; WriteDS1302(0x8d); //讀取年份 m=ReadDS1302(); rst=0; time1[4]=m/16+0x30; time1[5]=m%16+0x30; WriteDS1302(0x8b); //讀取星期 m=ReadDS1302(); rst=0; time1[15]=m+0x30; for(i=7,n=0x89;i<11;i+=3,n-=2) //讀取月份和日期 { WriteDS1302(n); m=ReadDS1302(); rst=0; time1[i]=m/16+0x30; time1[i+1]=m%16+0x30; } for(m=0,i=0,n=0x85;i<7;i+=3,n-=2,m++) //讀取時(shí),分,秒 { WriteDS1302(n); time[m]=ReadDS1302(); rst=0; time2[i]=time[m]/16+0x30; time2[i+1]=time[m]%16+0x30; }}time0()interrupt1using1{ i--; if(i==0) { if(j!=0) j--; i=20; } TH0=TIME/256,TL0=TIME%256; }//鬧鐘部分intime1()interrupt3{ TH1=th1,TL1=tl1; P3_2=!P3_2;}//顯示鬧鐘設(shè)立數(shù)據(jù)showalarm(){ unsignedchari,j,a,b,n; ET1=1; for(j=0;j<6;j++) { i=0; while(1) { a=table2[i]; if(a==0) break; b=a&0xf; a>>=4; if(a==0) { TR1=0; gotoD1; } a=((--a)<<1)/2; TH1=th1=table1[a]/256,TL1=tl1=table1[a]%256; TR1=1;D1: do { b--; for(n=0;n<3;n++) { ReadTime(); LCDSHOW(); P2=0xf7; if(P2==0xe7) { delay1ms(100); if(P2==0xe7) { TR1=0; ET1=0; return; } } } }while(b!=0); i++; } TR1=0; } ET1=0;}//根據(jù)日期的變動(dòng)自動(dòng)調(diào)整星期unsignedcharsetweek(){ unsignedchari=5,j,n; j=(time1[4]&0xf)*10+(time1[5]&0xf); n=j/4; i=i+5*n; n=j%4; if(n==1) i+=2; elseif(n==2) i+=3; elseif(n==3) i+=4; j=(time1[7]&0xf)*10+(time1[8]&0xf); if(j==2) i+=3; elseif(j==3) i+=3; elseif(j==4) i+=6; elseif(j==5) i+=1; elseif(j==6) i+=4; elseif(j==7) i+=6; elseif(j==8) i+=2; elseif(j==9) i+=5; elseif(j==11) i+=3; elseif(j==12) i+=5; if(n==0) if(j>2) i++; j=(time1[10]&0xf)*10+(time1[11]&0xf); i+=j; i%=7; if(i==0) i=7; return(i); }//設(shè)立時(shí)間settime(){ unsignedchari=0x85,year,month,day,n; time2[6]=time2[7]=0x30,time1[14]=time1[15]=0x20; LCDSHOW(); while(1) { P0=0xe; //顯示器開(kāi)、光標(biāo)開(kāi) EnableLCD(); P0=i; //定光標(biāo) EnableLCD(); P2=0xf7; if(P2!=0XF7) { delay1ms(100); //延時(shí)0.1s去抖動(dòng) if(P2!=0XF7) { j=7; if(P2==0X77) { i+=3; if(i==0x8e) i=0xc2; elseif(i>0xc5) i=0x85; } elseif(P2==0xb7) { year=(time1[4]&0xf)*10+(time1[5]&0xf); month=(time1[7]&0xf)*10+(time1[8]&0xf); day=(time1[10]&0xf)*10+(time1[11]&0xf); if(i==0x85) { year++; if(year>99) year=0; if((year%4)!=0) if(month==2&&day==29) day=28; } elseif(i==0x88) { month++; if(month>12) month=1; if(day>Day[month-1]) { day=Day[month-1]; if(month==2&&(year%4)==0) day=29; } } elseif(i==0x8b) { day++; if(day>Day[month-1]) { if(month==2&&(year%4)==0) { if(day>29) day=1; } if(month!=2) day=1; } } elseif(i==0xc2) { n=(time2[0]&0xf)*10+(time2[1]&0xf); n++; if(n>23) n=0; time2[0]=n/10+0x30; time2[1]=n%10+0x30; } else { n=(time2[3]&0xf)*10+(time2[4]&0xf); n++; if(n>59) n=0; time2[3]=n/10+0x30; time2[4]=n%10+0x30; } time1[4]=year/10+0x30; time1[5]=year%10+0x30; time1[7]=month/10+0x30; time1[8]=month%10+0x30; time1[10]=day/10+0x30; time1[11]=day%10+0x30; LCDSHOW(); } elseif(P2==0xd7) { WriteDS1302(0x8c); WriteDS1302((time1[4]&0xf)*16+(time1[5]&0xf)); rst=0; WriteDS1302(0x8a); WriteDS1302(setweek()); rst=0; for(i=7,n=0x88;i<11;i+=3,n-=2) { WriteDS1302(n); WriteDS1302((time1[i]&0xf)*16+(time1[i+1]&0xf)); rst=0; } for(i=0;i<7;i+=3,n-=2) { WriteDS1302(n); WriteDS1302((time2[i]&0xf)*16+(time2[i+1]&0xf)); rst=0; } TR0=0; time1[14]='W'; return; } else { TR0=0; time1[14]='W'; return; } } } if(j==0) { TR0=0; time1[14]='W'; return; } }}//設(shè)立鬧鐘setalarm(){ unsignedchari,n; for(i=1;i<16;i++) { time1[i]=0x20; } time2[0]=alarm[0]/16+0x30; time2[1]=(alarm[0]&0xf)+0x30; time2[3]=alarm[1]/16+0x30; time2[4]=(alarm[1]&0xf)+0x30; time2[6]=time2[7]=0x30; LCDSHOW(); i=0xc2; while(1) { P0=0xe; //顯示器開(kāi)、光標(biāo)開(kāi) EnableLCD(); P0=i; //定光標(biāo) EnableLCD(); P2=0xf7; if(P2!=0XF7) { delay1ms(100); //延時(shí)0.1s去抖動(dòng) if(P2!=0XF7) { j=7; if(P2==0X77) { i+=3; if(i>0xc5) i=0xc2; } elseif(P2==0xb7) { if(i==0xc2) { n=(time2[0]&0xf)*10+(time2[1]&0xf); n++; if(n>23) n=0; time2[0]=n/10+0x30; time2[1]=n%10+0x30; } else { n=(time2[3]&0xf)*10+(time2[4]&0xf); n++; if(n>59) n=0; time2[3]=n/10+0x30;

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論