版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE7實(shí)踐項(xiàng)目報(bào)告項(xiàng)目名稱基于51單片機(jī)萬(wàn)年歷設(shè)計(jì)項(xiàng)目類(lèi)別?產(chǎn)品設(shè)計(jì)□生產(chǎn)制造□質(zhì)量管理□檢測(cè)維修□設(shè)備維護(hù)□采購(gòu)營(yíng)銷(xiāo)□其他:學(xué)生姓名班級(jí)學(xué)號(hào)聯(lián)系電話校內(nèi)指導(dǎo)教師姓名聯(lián)系電話校外指導(dǎo)教師姓名聯(lián)系電話項(xiàng)目簡(jiǎn)介(500字,宋體小四)電子萬(wàn)年歷是一種目前非常廣泛日常計(jì)時(shí)工具,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有多種功能,而且DS1302的使用壽命長(zhǎng),誤差小。對(duì)于數(shù)字電子萬(wàn)年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒和溫度等信息,并且還具有時(shí)間校準(zhǔn)等功能。該電路采用STC89C51單片機(jī)作為核心,該功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。本設(shè)計(jì)是基于51系列的單片機(jī)進(jìn)行的電子萬(wàn)年歷設(shè)計(jì),可以顯示年月日時(shí)分秒及周信息,具有可調(diào)整日期和時(shí)間功能。在設(shè)計(jì)的同時(shí)對(duì)單片機(jī)的理論基礎(chǔ)和外圍擴(kuò)展知識(shí)進(jìn)行了比較全面準(zhǔn)備。硬件部分主要由AT89C52單片機(jī),LED顯示電路,以及調(diào)時(shí)按鍵電路等組成。在單片機(jī)的選擇上本人使用了AT89C52單片機(jī),該單片機(jī)適合于許多較為復(fù)雜控制應(yīng)用場(chǎng)合。顯示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。7SEG-MPX8-CA是一種八個(gè)共陽(yáng)二極管顯示器,7SEG-MPX4-CA是一種四個(gè)共陽(yáng)二極管顯示器。為了能更輕松的控制這三片顯示器,本人使用了3片74HC164來(lái)驅(qū)動(dòng)。74HC164是8位邊沿觸發(fā)式移位寄存器,串行輸入數(shù)據(jù),然后并行輸出。軟件方面主要包括日歷程序、時(shí)間調(diào)整程序,公歷轉(zhuǎn)陰歷程序,顯示程序等。程序采用匯編語(yǔ)言編寫(xiě),以便更簡(jiǎn)單地實(shí)現(xiàn)調(diào)整時(shí)間及陰歷顯示功能。所有程序編寫(xiě)完成后,在wave軟件中進(jìn)行調(diào)試,確定沒(méi)有問(wèn)題后,在Proteus軟件中嵌入單片機(jī)內(nèi)進(jìn)行仿真。最后總在老師同學(xué)的幫助以及自己的努力下完成了此次電子萬(wàn)年歷的設(shè)計(jì)。項(xiàng)目任務(wù)和要求(250字,宋體小四)設(shè)計(jì)一個(gè)基于51單片機(jī)的電子萬(wàn)年歷,能夠顯示時(shí)間、日期、溫度等信息。并且具備調(diào)整時(shí)間、日期、定時(shí)等功能。要求:使用單片機(jī),溫度傳感器以及時(shí)鐘芯片和51單片機(jī)技術(shù)制作一個(gè)電子萬(wàn)年歷2.萬(wàn)年歷的設(shè)計(jì)是幾個(gè)簡(jiǎn)單模塊的組合,硬件上是這樣,軟件上也是這樣,要熟悉相關(guān)模塊的設(shè)計(jì)思路;3.通過(guò)萬(wàn)年歷的設(shè)計(jì)熟練掌握單片機(jī)的各個(gè)功能,并且能對(duì)單片機(jī)有一個(gè)總體的把握,在設(shè)計(jì)的過(guò)程中能夠憑借對(duì)單片機(jī)各功能的了解,達(dá)到理想的設(shè)計(jì)效果;4.通過(guò)該設(shè)計(jì)掌握時(shí)鐘芯片DS1302、溫度傳感器DS18B20等芯片的使用方法。(二)實(shí)施過(guò)程硬件設(shè)計(jì)框架如下圖1:各電路硬件電路原理圖及功能介紹如下:89C51單片機(jī)主控制模塊單片機(jī)主控制模塊:如圖3,單片機(jī)用12MHz高精度的晶振,以獲得較穩(wěn)定的時(shí)鐘頻率,減小時(shí)差。在本設(shè)計(jì)中用12MHz比較適當(dāng),相對(duì)的電容取為20PF。時(shí)鐘芯片(“DS1302時(shí)鐘芯片:”)DS1302為時(shí)鐘芯片,它的引腳分別是VCC2、VCC1、X1、X2、SCLK、RST、GND其中Vcc1為該芯片的電源,在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行DS18B20溫度管(DS18B20為溫度管:)使用數(shù)字溫度傳感器“DS18B20”,它是一種數(shù)字式溫度傳感器,這種傳感器只需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,Vcc端接電源,Vss端接地。既可以工作LCD1602液晶顯示LCD1602為液晶顯示:如上圖,LCD1602液晶顯示器是一種目前市場(chǎng)上用的一種較多的字符型液晶顯示模塊。它是由字符液晶顯示屏(LCD)、這款顯示屏的優(yōu)點(diǎn)是耗電量低、體積小、輻射低,所以目前市場(chǎng)上小家電電器中使用的較多LCD1602顯示屏主要用來(lái)顯示數(shù)字、字母、圖形以及少量自定義程序設(shè)計(jì)流程圖如下:讀取時(shí)間寄存器數(shù)據(jù)讀取時(shí)間寄存器數(shù)據(jù)數(shù)據(jù)處理送顯示緩沖區(qū)調(diào)顯示子程序判斷有按鍵按下調(diào)定時(shí)開(kāi)關(guān)子程序開(kāi)始軟件設(shè)計(jì)流程圖軟件設(shè)計(jì)邏輯:電子萬(wàn)年歷的軟件程序主要完成時(shí)間顯示和定時(shí)輸出判斷功能。而年月日顯示和各時(shí)間單元進(jìn)位,時(shí)間設(shè)定時(shí),調(diào)定時(shí)間設(shè)定時(shí)等功能全部在中斷服務(wù)程序中完成。從本設(shè)計(jì)的原理圖上可以看出,單片機(jī)從P3口輸出位選碼,從P0口輸出段選碼,LED就會(huì)顯示出數(shù)字來(lái)。但P0口的輸出的數(shù)據(jù)是要BCD碼,各存儲(chǔ)單元存儲(chǔ)的是二進(jìn)制數(shù),也就是和要顯示出的字符表達(dá)的含義是不一致的??梢?jiàn),將要顯示的存儲(chǔ)單元的數(shù)據(jù)直接送到P0口去驅(qū)動(dòng)LED數(shù)碼管顯示是不能正確表達(dá)的,必須在系統(tǒng)內(nèi)部將要顯示的數(shù)據(jù)經(jīng)過(guò)BCD碼行轉(zhuǎn)換后,將各個(gè)單元數(shù)據(jù)的段選代碼送入P0口,給74LS164譯碼后去驅(qū)動(dòng)數(shù)碼管顯示。軟件設(shè)計(jì)流程如圖15(三)、結(jié)果和成果(1).在測(cè)試中遇到發(fā)光二極管、LED數(shù)碼管為不顯示時(shí),首先使用試測(cè)儀對(duì)電路進(jìn)行測(cè)試,觀察是否存在漏焊,虛焊,或者元件損壞.(2).LED數(shù)碼管顯示不正常,還有亮度不夠,首先使用試測(cè)儀對(duì)電路進(jìn)行測(cè)試,觀察電路是否存在短路現(xiàn)象。查看燒寫(xiě)的程序是否正確無(wú)誤,對(duì)程序進(jìn)行認(rèn)真修改??偨Y(jié)(300字,宋體小四)過(guò)這次制作使我了解了整個(gè)萬(wàn)年歷的工作過(guò)程和各個(gè)部分的工作過(guò)程,使我體會(huì)到利用單片機(jī)設(shè)計(jì)的電子萬(wàn)年歷便于操作、直觀。經(jīng)實(shí)際使用觀察證明,該萬(wàn)年歷能達(dá)到任務(wù)書(shū)上的要求,能正確的顯示年、月、日、星期、時(shí)、分、秒,能通過(guò)按鍵切換調(diào)時(shí),誤差為12秒/天,達(dá)到了本次設(shè)計(jì)的要求,總體來(lái)說(shuō)還是比較成功的在該次制作中,也遇到了很多問(wèn)題,但經(jīng)過(guò)了指導(dǎo)老師、與同班同學(xué)的指導(dǎo),這些問(wèn)題基本上得到了解決。另外軟件部分還需要多多向老師或同學(xué)學(xué)習(xí)。在這個(gè)設(shè)計(jì)中還有待提高的地方,由于本次制作時(shí)間緊迫,有些元器件還沒(méi)能通過(guò)軟件程序得到運(yùn)用,有些問(wèn)題還待解決。比如一開(kāi)始插上電源使用時(shí)做調(diào)時(shí)切換用的按鍵不靈活等。內(nèi)容的一次完美總結(jié)。從外圍硬件選型到功能電路的搭建,從軟件邏輯的設(shè)計(jì)到整機(jī)邏輯的調(diào)試,在企業(yè)實(shí)習(xí)的這幾個(gè)月讓我逐漸明白了一位電子工程師的工作內(nèi)容,了解到了企業(yè)第一線所需要的專(zhuān)業(yè)技能,明白了做好一個(gè)產(chǎn)品需要付出多大的努力,需要多少工程師一起配合,以及團(tuán)隊(duì)之間溝通重要性。為我將來(lái)職業(yè)的道路打下了堅(jiān)實(shí)的基礎(chǔ),也更加確定了將來(lái)發(fā)展的目標(biāo)。附件1原理圖及PCB圖:附件2實(shí)物圖:附件3核心程序詳細(xì)代碼:include<reg52.h>//#include"DS18B20_3.H"#include<string.h>#include<intrins.h>sbitset=P1^4; //設(shè)置鍵sbitadd=P3^2; //加鍵sbitdec=P3^3; //減鍵sbitseeNL_NZ=P3^7; //查看農(nóng)歷/鬧鐘sbitDQ=P1^1; //sbitbuzzer=P1^2; //蜂鳴器,通過(guò)三極管8550驅(qū)動(dòng),端口低電平響//sbitled=P2^4; //LCD背光開(kāi)關(guān)bitled1=1;bitZDK=1,NZK=1; //整點(diǎn)報(bào)時(shí),鬧鐘開(kāi)關(guān)控制位=0時(shí),關(guān)閉,=1時(shí),開(kāi)啟bitzdkg=0,nzkg=0;unsignedchartemp_miao;unsignedcharbltime;//背光亮的時(shí)間//DS1302時(shí)鐘芯片與C51之間的引腳連接定義sbitIO=P2^1;sbitSCLK=P2^0;sbitRST=P2^2;uchara,miao,shi,fen,ri,yue,nian,week,setn,temp;uintyear_moon,month_moon,day_moon,week;sbitACC0=ACC^0;sbitACC7=ACC^7;/************************************************************ACC累加器=AACC.0=E0H***************************************************************///********陽(yáng)歷轉(zhuǎn)換陰歷表************************************codeucharyear_code[597]={0x04,0xAe,0x53,//190100x0A,0x57,0x48,//190230x55,0x26,0xBd,//190360x0d,0x26,0x50,//190490x0d,0x95,0x44,//1905120x46,0xAA,0xB9,//1906150x05,0x6A,0x4d,//1907180x09,0xAd,0x42,//1908210x24,0xAe,0xB6,//19090x04,0xAe,0x4A,//19100x6A,0x4d,0xBe,//19110x0A,0x4d,0x52,//19120x0d,0x25,0x46,//19130x5d,0x52,0xBA,//19140x0B,0x54,0x4e,//19150x0d,0x6A,0x43,//19160x29,0x6d,0x37,//19170x09,0x5B,0x4B,//19180x74,0x9B,0xC1,//19190x04,0x97,0x54,//19200x0A,0x4B,0x48,//19210x5B,0x25,0xBC,//19220x06,0xA5,0x50,//19230x06,0xd4,0x45,//19240x4A,0xdA,0xB8,//19250x02,0xB6,0x4d,//19260x09,0x57,0x42,//19270x24,0x97,0xB7,//19280x04,0x97,0x4A,//19290x66,0x4B,0x3e,//19300x0d,0x4A,0x51,//19310x0e,0xA5,0x46,//19320x56,0xd4,0xBA,//19330x05,0xAd,0x4e,//19340x02,0xB6,0x44,//19350x39,0x37,0x38,//19360x09,0x2e,0x4B,//19370x7C,0x96,0xBf,//19380x0C,0x95,0x53,//19390x0d,0x4A,0x48,//19400x6d,0xA5,0x3B,//19410x0B,0x55,0x4f,//19420x05,0x6A,0x45,//19430x4A,0xAd,0xB9,//19440x02,0x5d,0x4d,//19450x09,0x2d,0x42,//19460x2C,0x95,0xB6,//19470x0A,0x95,0x4A,//19480x7B,0x4A,0xBd,//19490x06,0xCA,0x51,//19500x0B,0x55,0x46,//19510x55,0x5A,0xBB,//19520x04,0xdA,0x4e,//19530x0A,0x5B,0x43,//19540x35,0x2B,0xB8,//19550x05,0x2B,0x4C,//19560x8A,0x95,0x3f,//19570x0e,0x95,0x52,//19580x06,0xAA,0x48,//19590x7A,0xd5,0x3C,//19600x0A,0xB5,0x4f,//19610x04,0xB6,0x45,//19620x4A,0x57,0x39,//19630x0A,0x57,0x4d,//19640x05,0x26,0x42,//19650x3e,0x93,0x35,//19660x0d,0x95,0x49,//19670x75,0xAA,0xBe,//19680x05,0x6A,0x51,//19690x09,0x6d,0x46,//19700x54,0xAe,0xBB,//19710x04,0xAd,0x4f,//19720x0A,0x4d,0x43,//19730x4d,0x26,0xB7,//19740x0d,0x25,0x4B,//19750x8d,0x52,0xBf,//19760x0B,0x54,0x52,//19770x0B,0x6A,0x47,//19780x69,0x6d,0x3C,//19790x09,0x5B,0x50,//19800x04,0x9B,0x45,//19810x4A,0x4B,0xB9,//19820x0A,0x4B,0x4d,//19830xAB,0x25,0xC2,//19840x06,0xA5,0x54,//19850x06,0xd4,0x49,//19860x6A,0xdA,0x3d,//19870x0A,0xB6,0x51,//19880x09,0x37,0x46,//19890x54,0x97,0xBB,//19900x04,0x97,0x4f,//19910x06,0x4B,0x44,//19920x36,0xA5,0x37,//19930x0e,0xA5,0x4A,//19940x86,0xB2,0xBf,//19950x05,0xAC,0x53,//19960x0A,0xB6,0x47,//19970x59,0x36,0xBC,//19980x09,0x2e,0x50,//19992940x0C,0x96,0x45,//20002970x4d,0x4A,0xB8,//20010x0d,0x4A,0x4C,//20020x0d,0xA5,0x41,//20030x25,0xAA,0xB6,//20040x05,0x6A,0x49,//20050x7A,0xAd,0xBd,//20060x02,0x5d,0x52,//20070x09,0x2d,0x47,//20080x5C,0x95,0xBA,//20090x0A,0x95,0x4e,//20100x0B,0x4A,0x43,//20110x4B,0x55,0x37,//20120x0A,0xd5,0x4A,//20130x95,0x5A,0xBf,//20140x04,0xBA,0x53,//20150x0A,0x5B,0x48,//20160x65,0x2B,0xBC,//20170x05,0x2B,0x50,//20180x0A,0x93,0x45,//20190x47,0x4A,0xB9,//20200x06,0xAA,0x4C,//20210x0A,0xd5,0x41,//20220x24,0xdA,0xB6,//20230x04,0xB6,0x4A,//20240x69,0x57,0x3d,//20250x0A,0x4e,0x51,//20260x0d,0x26,0x46,//20270x5e,0x93,0x3A,//20280x0d,0x53,0x4d,//20290x05,0xAA,0x43,//20300x36,0xB5,0x37,//20310x09,0x6d,0x4B,//20320xB4,0xAe,0xBf,//20330x04,0xAd,0x53,//20340x0A,0x4d,0x48,//20350x6d,0x25,0xBC,//20360x0d,0x25,0x4f,//20370x0d,0x52,0x44,//20380x5d,0xAA,0x38,//20390x0B,0x5A,0x4C,//20400x05,0x6d,0x41,//20410x24,0xAd,0xB6,//20420x04,0x9B,0x4A,//20430x7A,0x4B,0xBe,//20440x0A,0x4B,0x51,//20450x0A,0xA5,0x46,//20460x5B,0x52,0xBA,//20470x06,0xd2,0x4e,//20480x0A,0xdA,0x42,//20490x35,0x5B,0x37,//20500x09,0x37,0x4B,//20510x84,0x97,0xC1,//20520x04,0x97,0x53,//20530x06,0x4B,0x48,//20540x66,0xA5,0x3C,//20550x0e,0xA5,0x4f,//20560x06,0xB2,0x44,//20570x4A,0xB6,0x38,//20580x0A,0xAe,0x4C,//20590x09,0x2e,0x42,//20600x3C,0x97,0x35,//20610x0C,0x96,0x49,//20620x7d,0x4A,0xBd,//20630x0d,0x4A,0x51,//20640x0d,0xA5,0x45,//20650x55,0xAA,0xBA,//20660x05,0x6A,0x4e,//20670x0A,0x6d,0x43,//20680x45,0x2e,0xB7,//20690x05,0x2d,0x4B,//20700x8A,0x95,0xBf,//20710x0A,0x95,0x53,//20720x0B,0x4A,0x47,//20730x6B,0x55,0x3B,//20740x0A,0xd5,0x4f,//20750x05,0x5A,0x45,//20760x4A,0x5d,0x38,//20770x0A,0x5B,0x4C,//20780x05,0x2B,0x42,//20790x3A,0x93,0xB6,//20800x06,0x93,0x49,//20810x77,0x29,0xBd,//20820x06,0xAA,0x51,//20830x0A,0xd5,0x46,//20840x54,0xdA,0xBA,//20850x04,0xB6,0x4e,//20860x0A,0x57,0x43,//20870x45,0x27,0x38,//20880x0d,0x26,0x4A,//20890x8e,0x93,0x3e,//20900x0d,0x52,0x52,//20910x0d,0xAA,0x47,//20920x66,0xB5,0x3B,//20930x05,0x6d,0x4f,//20940x04,0xAe,0x45,//20950x4A,0x4e,0xB9,//20960x0A,0x4d,0x4C,//20970x0d,0x15,0x41,//20980x2d,0x92,0xB5,//2099};///月份數(shù)據(jù)表codeucharday_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};codeuintday_code2[3]={0x111,0x130,0x14e};/*函數(shù)功能:輸入BCD陽(yáng)歷數(shù)據(jù),bitc_moon;dataucharyear_moon,month_moon,day_moon,week;month_p,uinttable_addr){ uchartemp;switch(month_p){case1:{temp=year_code[table_addr]&0x08;if(temp==0)return(0);elsereturn(1);}case2:{temp=year_code[table_addr]&0x04;if(temp==0)return(0);elsereturn(1);}case3:{temp=year_code[table_addr]&0x02;if(temp==0)return(0);elsereturn(1);}case4:{temp=year_code[table_addr]&0x01;if(temp==0)return(0);elsereturn(1);}case5:{temp=year_code[table_addr+1]&0x80;if(temp==0)return(0);elsereturn(1);}case6:{temp=year_code[table_addr+1]&0x40;if(temp==0)return(0);elsereturn(1);}case7:{temp=year_code[table_addr+1]&0x20;if(temp==0)return(0);elsereturn(1);}case8:{temp=year_code[table_addr+1]&0x10;if(temp==0)return(0);elsereturn(1);}case9:{temp=year_code[table_addr+1]&0x08;if(temp==0)return(0);elsereturn(1);}case10:{temp=year_code[table_addr+1]&0x04;if(temp==0)return(0);elsereturn(1);}case11:{temp=year_code[table_addr+1]&0x02;if(temp==0)return(0);elsereturn(1);}case12:{temp=year_code[table_addr+1]&0x01;if(temp==0)return(0);elsereturn(1);}case13:{temp=year_code[table_addr+2]&0x80;if(temp==0)return(0);elsereturn(1);}}}/*函數(shù)功能:year,ucharmonth,ucharday){//c=0為21世紀(jì),c=1為19世紀(jì)輸入輸出數(shù)據(jù)均為BCD數(shù)據(jù)uchartemp1,temp2,temp3,month_p;uinttemp4,table_addr;bitflag2,flag_y;temp1=year/16;//BCD->hex先把數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制temp2=year%16;//year=temp1*10+temp2; year=temp1*16+temp2;temp1=month/16;temp2=month%16;//month=temp1*10+temp2; month=temp1*16+temp2;temp1=day/16;temp2=day%16;//day=temp1*10+temp2; day=temp1*16+temp2;//定位數(shù)據(jù)表地址if(c==0){table_addr=(year+0x64-1)*0x3;}else{table_addr=(year-1)*0x3;}if(temp1==0x1){temp3=temp2-1;}else{day_code2[11-10]+10-1if(month<10){temp4=day_code1[month-1]+day-1;}else{temp4=day_code2[month-10]+day-1;}//從數(shù)據(jù)表中取該年的閏月月份,如為0則該年無(wú)閏月while(temp4>=temp1){temp4-=temp1;month_p+=1;if(month==temp2){flag_y=~flag_y;if(flag_y==0)month+=1;}elsemonth+=1;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temp1=0x1d;{//公歷日在春節(jié)前使用下面代碼進(jìn)行運(yùn)算temp3-=temp4;if(year==0x0){year=0x63;c=1;}elseyear-=1;table_addr-=0x3;month=0xc;temp2=year_code[table_addr]&0xf0;temp2=_cror_(temp2,4);if(temp2==0) month_p=0xc;else month_p=0xd;//flag_y=0;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temp1=0x1d;elsetemp1=0x1e;while(temp3>temp1){temp3-=temp1;month_p-=1;if(flag_y==0)month-=1;if(month==temp2)flag_y=~flag_y;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temp1=_crol_(temp1,4);temp2=year%10;year_moon=temp1|temp2;temp1=month/10;temp1=_crol_(temp1,4);temp2=month%10;month_moon=temp1|temp2;temp1=day/10;temp1=_crol_(temp1,4);temp2=day%10;day_moon=temp1|temp2;}/*函數(shù)功能:輸入BCD陽(yáng)歷數(shù)據(jù),codeuchartable_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};p2=p2+day+table_week[month-1];if(year%0x4==0&&month<3)p2-=1;week=p2%0x7;}/**************************************************************///******************************************************************************voidDelayns(intnum)//延時(shí)函數(shù){ while(num--);} //******************************************************************************voidInit_DS18B20(void)//初始化ds1820{ unsigned Delayns(20);}//******************************************************************************unsignedcharReadOneChar(void)//讀一個(gè)字節(jié){ unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//給脈沖信號(hào) dat>>=1; DQ=1;//給脈沖信號(hào) if(DQ) dat|=0x80; Delayns(4); } return(dat);}//******************************************************************************void Delayns(5); DQ=1; dat>>=1; }}//****************************************************************************** WriteOneChar(0x44); WriteOneChar(0xBE);//讀取溫度寄存器 a=ReadOneChar();//讀低8位 b=ReadOneChar();//讀高8位 t=b; t<<=8; t=t|a; tt=t*0.0625; t=tt*10+5;//放大10倍輸出并四舍五入 return(t);}//*****************************************************************************//延時(shí)函數(shù),后面經(jīng)常調(diào)用voiddelay(uintxms)//延時(shí)函數(shù),有參函數(shù){ uintx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}/******** //delay(3); }}/*********************over***********************//***************DS1302有關(guān)子函數(shù)********************/voidwrite_byte(uchardat)//寫(xiě)一個(gè)字節(jié){ ACC=dat; RST=1; for(a=8;a>0;a--) { IO=ACC0; SCLK=0; SCLK=1; ACC=ACC>>1; }}ucharread_byte()//讀一個(gè)字節(jié){ RST=1; for(a=8;a>0;a--) { ACC7=IO; SCLK=1; SCLK=0; ACC=ACC>>1; } return(ACC);}//voidwrite_1302(ucharadd,uchardat)//向1302芯片寫(xiě)函數(shù),指定寫(xiě)入地址,數(shù)據(jù){ RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0;}ucharread_1302(ucharadd)//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址{ uchartemp; RST=0; SCLK=0; RST=1; write_byte(add); temp=read_byte(); SCLK=1; RST=0; return(temp);}uchar//1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4){ RST=0; SCLK=0; write_1302(0x8e,0x00);//允許寫(xiě),禁止寫(xiě)保護(hù) miao=read_1302(0x81); miao=0x7F&miao; write_1302(0x80,miao); //write_1302(0x80,0x00);10// write_1302(0x80,0x00); write_1302(0x8e,0x80);//打開(kāi)寫(xiě)保護(hù)}////溫度顯示子函數(shù)void sw=dat%100/10;//取得十位數(shù)字 gw=dat%10;//取得個(gè)位數(shù)字 write_1602com(er+add);//er是頭文件規(guī)定的值0x80+0x40 write_1602dat(0x30+bw); write_1602dat(0x30+sw);//數(shù)字 }//,sw; gw=dat%10; }////,sw; gw=dat%10;}////;//數(shù)字+30得到該數(shù)字的LCD1602顯示碼 write_1602dat('0'+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼 write_1602dat('0'+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼 }// write_1602dat('I'); break; case6:write_1602dat('S');//星期數(shù)據(jù)為6時(shí)顯示 write_1602dat('T'); write_1602dat('A'); break; case0:write_1602dat('S');//星期數(shù)據(jù)為7時(shí)顯示 write_1602dat('U'); write_1602dat('N'); break; } write_1602dat('');}//****************鍵盤(pán)掃描有關(guān)函數(shù)**********************voidkeyscan(){ uintnian_temp; if(seeNL_NZ==0) { delay(9); if(seeNL_NZ==0) { led1=0; bltime=0; if(timeron==1) { TR2=~TR2; if(TR2==0) { buzzer=1; } } else { if((setn==0)&&(setNZn==0)) //在沒(méi)有進(jìn)入調(diào)時(shí)模式時(shí)才可按動(dòng) { buzzer=0;//蜂鳴器短響一次 delay(20); buzzer=1; if(TR1==1) { TR1=0; } else { T_NL_NZ++; if(T_NL_NZ==3) { setn=0; setNZn=0; T_NL_NZ=0; } } } } while(seeNL_NZ==0); } } if(set==0)//set為功能鍵(設(shè)置鍵) { delay(9);//延時(shí),用于消抖動(dòng) if(set==0)//延時(shí)后再次確認(rèn)按鍵按下 { led1=0; bltime=0; do { if(add==0) zdkg=1; if(dec==0) nzkg=1; } while((!set)||(!add)||(!dec)); if((nzkg==1)||(zdkg==1)) { if(nzkg==1) { NZK=~NZK; if(NZK==0) { TR2=0; buzzer=1; } } else { if(zdkg==1) { ZDK=~ZDK; if(ZDK==0) { TR1=0; buzzer=1; } } } if(((NZK==1)&&(nzkg==1))||((ZDK==1)&&(zdkg==1))) { buzzer=0; delay(10); buzzer=1; } else { buzzer=0; delay(5); buzzer=1; delay(5); buzzer=0; delay(5); buzzer=1; } nzkg=0; zdkg=0; } else { buzzer=0;//蜂鳴器短響一次 delay(20); buzzer=1; if(T_NL_NZ==0x02) } switch(setNZn) { case0: //正常顯示日期時(shí)間 write_1602com(0x0c); //置光標(biāo)不閃? write_1602com(er); //時(shí)間顯示固定符號(hào)寫(xiě)入位置? for(a=0;a<16;a++) write_1602dat(NZd[a]); //寫(xiě)顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào) write_sfm(8,nz_shi); //鬧鐘時(shí) write_sfm(11,nz_fen); //鬧鐘分 write_sfm(14,nz_miao); write_1602com(0x0f); write_1602com(0x0f); //設(shè)置光標(biāo)為閃爍 break; case1: //鬧鐘時(shí)光標(biāo)閃爍 write_1602com(er+9); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)//er+0x09; write_1602com(0x0f); //設(shè)置光標(biāo)為閃爍 break; } } else //證明是對(duì)時(shí)間及日期進(jìn)行設(shè)置 { if(T_NL_NZ==0) { setn++; if(setn==7) setn=0; //設(shè)置按鍵共有秒、分、時(shí)、星期、日、月、年、返回,8個(gè)功能循環(huán) switch(setn) { case6://TR0=0;//關(guān)閉定時(shí)器 //TR1=0; write_1602com(er+7);//設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)//er+0x09; break; case5: write_1602com(er+4);//按2次fen位置顯示光標(biāo)//er+0x06 //write_1602com(0x0f); break; case4: write_1602com(er+1);//按動(dòng)3次,shi //write_1602com(0x0f); break; // case4:write_1602com(yh+0x0e);//按動(dòng)4次,week //write_1602com(0x0f); // break; case3:write_1602com(yh+0x0a);//按動(dòng)4次,ri //write_1602com(0x0f); break; case2:write_1602com(yh+0x07);//按動(dòng)5次,yue //write_1602com(0x0f); break; case1:TR0=0; write_1602com(yh+0x04);//按動(dòng)6次,nian write_1602com(0x0f);//設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;//秒數(shù)據(jù)寫(xiě)入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);//miao write_1302(0x8e,0x80); //write_1602com(0x0f); break; case0: write_1602com(0x0c); //按動(dòng)到第7次,設(shè)置光標(biāo)不閃爍 // temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); //允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x80,0x00|temp); //miao數(shù)據(jù)寫(xiě)入DS1302 write_1302(0x8e,0x80); //打開(kāi)寫(xiě)保護(hù) TR0=1;//打開(kāi)定時(shí)器 break; } } } } } }//加鍵add if((setn!=0)&&(setNZn==0))//當(dāng)set按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零) { if(add==0)//上調(diào)鍵 { delay(10); if(add==0) { led1=0; bltime=0; buzzer=0;//蜂鳴器短響一次 delay(20); buzzer=1; while(!add); switch(setn) { case write_1602com(er+7);//因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,光標(biāo)自動(dòng)右移,所以要指定返回 //write_1602com(0x0b); break; case5:fen++; if(fen==60) fen=0; write_sfm(0x03,fen);//令LCD在正確位置顯示"加"設(shè)定好的分?jǐn)?shù)據(jù) break; case4:shi++; if(shi==24) shi=0; write_sfm(0x00,shi);//令LCD在正確的位置顯示"加"設(shè)定好的小時(shí)數(shù)據(jù) break; /* case4:week++; if(week==8) week=1; temp=(week)/10*16+(week)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 break; */ case3:ri++; if((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12)) { if(ri==32) ri=1; } else { if(yue==2) { if(p_r==1) { if(ri==30) ri=1; } else { if(ri==29) ri=1; } } else { if(ri==31) ri=1; } } Conver_week(nian,yue,ri); write_week(week); write_nyr(9,ri);// case2:yue++; if(yue==13) yue=1; if((yue==4)||(yue==6)||(yue==9)||(yue==11)) { if(ri>30) ri=1; } else { if(yue==2) { if(p_r==1) { if(ri>29) ri=1; } else { if(ri>28) ri=1; } } } Conver_week(nian,yue,ri); write_week(week); write_nyr(6,yue);//令LCD在正確的位置顯示"加"設(shè)定好的月份數(shù)據(jù) case1:nian++; if(nian==100) nian=0; nian_temp=2000+nian; if((nian_temp%400==0)||((nian_temp%100!=0)&&(nian_temp%4==0)))//判斷是否為閏年 p_r=1; else p_r=0; Conver_week(nian,yue,ri); write_week(week); write_nyr(3,nian);//令LCD在正確的位置顯示"加"設(shè)定好的年份數(shù)據(jù) '加鍵'注釋 if(dec==0) { delay(10);//調(diào)延時(shí),消抖動(dòng) if(dec==0) { led1=0; bltime=0; buzzer=0;//蜂鳴器短響一次 delay(20); buzzer=1; while(!dec); switch(setn) { case6: miao--; if(miao==-1) miao=59;// //write_1602com(0x0b); break; case5: fen--; if(fen==-1) fen=59; write_sfm(3,fen); write_1602com(er+4);// break; case4: shi--; if(shi==-1) shi=23; write_sfm(0,shi); temp=(shi)/10*16+(shi)%10; break; /* case4:week--; if(week==0) week=7; write_1602com(yh+0x0C);//指定'加'后的周數(shù)據(jù)顯示位置 write_week(week);//指定周數(shù)據(jù)顯示內(nèi)容 temp=(week)/10*16+(week)%10; break; */ case3: ri--; if((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12)) { if(ri==0) ri=31; } else { if(yue==2) { if(p_r==1) { if(ri==0) ri=29; } else { if(ri==0) ri=28; } } else { if(ri==0) ri=30; } } Conver_week(nian,yue,ri); write_week(week); write_nyr(9,ri); temp=(ri)/10*16+(ri)%10;//十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 case2: yue--; if(yue==0) yue=12; if((yue==4)||(yue==6)||(yue==9)||(yue==11)) { if(ri>30) ri=1; } else { if(yue==2) { if(p_r==1) { if(ri>29) ri=1; } else { if(ri>28) ri=1; } } } Conver_week(nian,yue,ri); write_week(week); write_nyr(6,yue); temp=(yue)/10*16+(yue)%10; case1: nian--; if(nian==-1) nian=99; nian_temp=2000+nian; if((nian_temp%400==0)||((nian_temp%100!=0)&&(nian_temp%4==0)))//判斷是否為閏年 p_r=1; else p_r=0; Conver_week(nian,yue,ri); write_week(week); write_nyr(3,nian); break; } } } } if((setNZn!=0)&&(setn==0)) { if(add==0)//上調(diào)鍵 { delay(10); if(add==0) { led1=0; bltime=0; buzzer=0;//蜂鳴器短響一次 delay(20); buzzer=1; while(!add); switch(setNZn) { case3: nz_miao++; //設(shè)置鍵按動(dòng)1次,調(diào)秒 if(nz_miao==60) nz_miao=0;//秒超過(guò)59,再加1,就歸零 2: nz_fen++; if(nz_fen==60) nz_
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年無(wú)接觸式服務(wù)解決方案項(xiàng)目可行性研究報(bào)告
- 2025年智能購(gòu)物車(chē)技術(shù)研發(fā)項(xiàng)目可行性研究報(bào)告
- 2025年智慧社區(qū)安全管理系統(tǒng)項(xiàng)目可行性研究報(bào)告
- 2025年高效廢物處理設(shè)施建設(shè)項(xiàng)目可行性研究報(bào)告
- 美甲學(xué)徒合同協(xié)議
- 安全監(jiān)督崗筆試題及解析
- 行政顧問(wèn)面試題及答案
- 建筑公司人事專(zhuān)員的崗位職責(zé)與面試題集解
- 房產(chǎn)中介公司客服崗面試問(wèn)題集
- 2025年新型信息傳播平臺(tái)開(kāi)發(fā)項(xiàng)目可行性研究報(bào)告
- 臺(tái)安N2變頻器說(shuō)明書(shū)
- 2025國(guó)家開(kāi)放大學(xué)《公共部門(mén)人力資源管理》期末機(jī)考題庫(kù)
- JG/T 545-2018衛(wèi)生間隔斷構(gòu)件
- 物業(yè)管理服務(wù)三方協(xié)議書(shū)全
- 瀝青攤鋪培訓(xùn)課件
- 項(xiàng)目群管理中期匯報(bào)
- 電梯作業(yè)人員理論考試練習(xí)題庫(kù)
- 2025既有建筑改造利用消防設(shè)計(jì)審查指南
- 2025年安徽合肥蜀山科技創(chuàng)新投資集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- SOX404條款的實(shí)施-控制例外事項(xiàng)與缺陷的評(píng)估框架課件
- 《《家庭、私有制和國(guó)家的起源》導(dǎo)讀》課件
評(píng)論
0/150
提交評(píng)論