通信電子專業(yè)畢業(yè)設(shè)計(jì)基于單片機(jī)的多功能萬年歷的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
通信電子專業(yè)畢業(yè)設(shè)計(jì)基于單片機(jī)的多功能萬年歷的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
通信電子專業(yè)畢業(yè)設(shè)計(jì)基于單片機(jī)的多功能萬年歷的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
通信電子專業(yè)畢業(yè)設(shè)計(jì)基于單片機(jī)的多功能萬年歷的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
通信電子專業(yè)畢業(yè)設(shè)計(jì)基于單片機(jī)的多功能萬年歷的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

畢業(yè)設(shè)計(jì)基于單片機(jī)的多功能萬年歷的設(shè)計(jì)與實(shí)現(xiàn)選題的背景及意義二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時(shí)代,而單片機(jī)在數(shù)字化高速發(fā)展的時(shí)代扮演著極為重要的角色。電子萬年歷的開發(fā)與研究在信息化時(shí)代的今天亦是當(dāng)務(wù)之急,因?yàn)樗鼞?yīng)用在學(xué)校、機(jī)關(guān)、企業(yè)、部隊(duì)等單位禮堂、訓(xùn)練場(chǎng)地、教學(xué)室、公共場(chǎng)地等場(chǎng)合,可以說遍及人們生活的每一個(gè)角落。所以說電子萬年歷的開發(fā)是國(guó)家之所需,社會(huì)之所需,人民之所需。由于社會(huì)對(duì)信息交換不斷提高的要求及高新技術(shù)的逐步發(fā)展,促使電子萬年歷發(fā)展并且投入市場(chǎng)得到廣泛應(yīng)用。設(shè)計(jì)任務(wù)及要求(1)用4個(gè)按鍵實(shí)現(xiàn)所有功能,計(jì)時(shí)準(zhǔn)確。(2)可以設(shè)定鬧鐘功能。(3)有陰歷功能,平年閏年準(zhǔn)確無誤。(4)數(shù)碼管能顯示年、月、日、星期、時(shí)、分、秒、溫度。三、項(xiàng)目分析與方案論證1.過程分析分析要設(shè)計(jì)的多功能萬年歷該有的系統(tǒng)的控制要求。1)控制多功能萬年歷計(jì)時(shí)的功能2)具有溫度顯示功能3)具有整點(diǎn)報(bào)時(shí)功能4)具有設(shè)置鬧鐘功能5)能夠顯示年月日功能6)具有智能模式2.方案論證選擇方案1:?jiǎn)纹瑱C(jī)是一種集成電路芯片,單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上,它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件,在工業(yè)控制領(lǐng)域廣泛應(yīng)用。方案2:可編程序控制器(PLC)是綜合了計(jì)算機(jī)技術(shù)、自動(dòng)控制技術(shù)和通訊技術(shù)而發(fā)展起來的一種新型的工業(yè)控制裝置,它具有可靠性高、編程簡(jiǎn)單、維護(hù)方便等優(yōu)點(diǎn),已在工業(yè)控制領(lǐng)域得到廣泛地應(yīng)用。若利用PLC來控制多功能萬年歷,成本較高,而且設(shè)備龐大,占用空間較多。因此,我們選擇方案1單片機(jī)來實(shí)現(xiàn)的多功能萬年歷系統(tǒng)的設(shè)計(jì)。四、項(xiàng)目設(shè)計(jì)本設(shè)計(jì)由數(shù)據(jù)顯示模塊、溫度采集模塊、時(shí)間處理模塊和調(diào)整設(shè)置模塊四個(gè)模塊組成。系統(tǒng)以STC89C52單片機(jī)為控制器,以串行時(shí)鐘日歷芯片DS1302記錄日歷和時(shí)間,它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬年歷采用直觀的數(shù)字顯示,數(shù)據(jù)顯示采用數(shù)碼管顯示模塊,可以在LCD上同時(shí)顯示年、月、日、星期、時(shí)、分、秒,還具有時(shí)間校準(zhǔn)等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),具有廣闊的市場(chǎng)前景。如圖1所示圖1五、項(xiàng)目實(shí)施過程1.成員任務(wù)安排從接受任務(wù)后具體成員的任務(wù)安排及時(shí)間安排如表1所示:表1任務(wù)實(shí)施計(jì)劃實(shí)施計(jì)劃時(shí)間主要任務(wù)負(fù)責(zé)人階段成果2022.9-2022.10方案設(shè)計(jì)與電路設(shè)計(jì)陳嘉宇、蔣敏初步方向確立2022.10-202.12Proteus仿真,焊接電路顧嘉誠(chéng)、高煜琪電路板完成2023.3-2023.4系統(tǒng)整體調(diào)試以及相關(guān)實(shí)驗(yàn)資料整理蔣敏、顧嘉誠(chéng)顧嘉誠(chéng),王鑫實(shí)體完成2023.4-2023.5項(xiàng)目所有資料的完善陳嘉宇、王鑫總體完成2.原理圖繪制利用proteus軟件對(duì)項(xiàng)目進(jìn)行原理圖的繪制,如圖2所示:圖23.硬件焊接根據(jù)原理圖焊接元器件,形成的硬件電路板如圖3所示:圖34.pcbpcb圖如圖4所示圖4流程圖5.多功能萬年歷的調(diào)試(1)調(diào)試步驟1)按照原理圖連接。2)編程:編寫多功能萬年歷的程序。3)將程序下載到51單片機(jī),電路上電運(yùn)行。。4)觀察并記錄能否實(shí)現(xiàn)程序的功能,如有錯(cuò)誤,檢查硬件接線是否錯(cuò)誤,如果連接正確,再檢查程序,直到調(diào)試成功為止。(2)調(diào)試要點(diǎn)1)如果在硬件調(diào)試時(shí),某些元器件沒起到作用,應(yīng)該用萬用表測(cè)量元器件的好壞,還有可能是電阻阻值選用不合理等問題。2)將設(shè)計(jì)好的程序下載到51單片機(jī)中,首先要做的就是仔細(xì)檢查程序,是否出現(xiàn)語法錯(cuò)誤,延時(shí)時(shí)間是否算對(duì),主程序是否成功調(diào)用子程序。程序一般先在仿真軟件上調(diào)試,然后再在焊接成功的電路板上調(diào)試。六、總結(jié)與體會(huì)本次學(xué)期從選題到設(shè)計(jì),原理圖的繪制到PCB圖的設(shè)計(jì),程序的設(shè)計(jì)以及軟硬件的調(diào)試等工作,歷時(shí)一個(gè)學(xué)期之久。設(shè)計(jì)項(xiàng)目最終實(shí)現(xiàn)了預(yù)定的功能,外觀也是比較漂亮和時(shí)尚的,應(yīng)該說取得了一定的成果。這次學(xué)期項(xiàng)目感受最深的是團(tuán)隊(duì)合作,畢竟個(gè)人能力有限,掌握的知識(shí)不夠全面。所以在項(xiàng)目執(zhí)行過程中,團(tuán)隊(duì)分工合作,在每個(gè)時(shí)間節(jié)點(diǎn)積極完成所需要完成的工作。另外,在這里要感謝蘇老師的認(rèn)真指導(dǎo),經(jīng)常與我們小組交流設(shè)計(jì)理念,并且在一定程度上幫助了我們大多數(shù)難題,包括程序上的、硬件上的一些問題。程序:#include<reg52.h> //調(diào)用單片機(jī)頭文件#defineucharunsignedchar//無符號(hào)字符型宏定義 變量范圍0~255#defineuintunsignedint //無符號(hào)整型宏定義 變量范圍0~65535//數(shù)碼管段選定義012345 6 7 8 9 ucharcodesmg_du[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa,0x20,0x28, 0x30,0x25,0xe4,0x23,0x64,0x74,0xff}; //斷碼//數(shù)碼管位選定義ucharcodesmg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//數(shù)碼管位選定義uchardis_smg[8]={0}; bitflag_200ms;bitflag_100ms;sbitbeep=P3^7; //蜂鳴器定義bitflag_beep_en;uintclock_value;//用作鬧鐘用的ucharflag_s=0x03;//控制數(shù)碼管閃爍的變量sbitdq=P3^1; //18b20IO口的定義uinttemperature;//溫度變量sbitclk=P1^3; //ds1302時(shí)鐘線定義sbitio=P1^4; //數(shù)據(jù)線sbitrst=P1^5; //復(fù)位線 //秒分時(shí)日月年星期 ucharcodewrite_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};//寫地址ucharcoderead_add[]={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};//讀地址ucharmiao,fen,shi,ri,yue,week,nian;uchari;ucharfen1=3,shi1=8; //鬧鐘變量的定義ucharopen1;ucharmenu_1,menu_2;sbitkey1=P3^6; //按鍵IO口定義sbitkey2=P3^5; //按鍵IO口定義sbitkey3=P3^4; //按鍵IO口定義sbitkey4=P3^3; //按鍵IO口定義/*************寫一個(gè)數(shù)據(jù)到對(duì)應(yīng)的地址里***************/voidwrite_ds1302(ucharadd,uchardat){ rst=1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk=0; //時(shí)鐘線拿低開始寫數(shù)據(jù) io=add&0x01; add>>=1; //把地址右移一位 clk=1; //時(shí)鐘線拿高 } for(i=0;i<8;i++) { clk=0; //時(shí)鐘線拿低開始寫數(shù)據(jù) io=dat&0x01; dat>>=1; //把數(shù)據(jù)右移一位 clk=1; //時(shí)鐘線拿高 } rst=0; //復(fù)位線合低}/*************從對(duì)應(yīng)的地址讀一個(gè)數(shù)據(jù)出來***************/ucharread_ds1302(ucharadd){ ucharvalue,i; rst=1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk=0; //時(shí)鐘線拿低開始寫數(shù)據(jù) io=add&0x01; add>>=1; //把地址右移一位 clk=1; //時(shí)鐘線拿高 } for(i=0;i<8;i++) { clk=0; //時(shí)鐘線拿低開始讀數(shù)據(jù) value>>=1; if(io==1) value|=0x80; clk=1; //時(shí)鐘線拿高 } rst=0; //復(fù)位線合低 returnvalue; //返回讀出來的數(shù)據(jù)}/*************把要的時(shí)間年月日都讀出來***************/voidread_time(){ miao=read_ds1302(read_add[0]); //讀秒 fen=read_ds1302(read_add[1]); //讀分 shi=read_ds1302(read_add[2]); //讀時(shí) ri=read_ds1302(read_add[3]); //讀日 yue=read_ds1302(read_add[4]); //讀月 nian=read_ds1302(read_add[5]); //讀年 week=read_ds1302(read_add[6]); //讀星期}/*************把要寫的時(shí)間年月日都寫入ds1302里***************/voidwrite_time() //把時(shí)間寫進(jìn)去{ write_ds1302(0x8e,0x00); //打開寫保護(hù) write_ds1302(write_add[0],miao); //寫秒 write_ds1302(write_add[1],fen); //寫分 write_ds1302(write_add[2],shi); //寫時(shí) write_ds1302(write_add[3],ri); //寫日 write_ds1302(write_add[4],yue); //寫月 write_ds1302(write_add[5],nian); //寫星期 write_ds1302(write_add[6],week); //寫年 write_ds1302(0x8e,0x80); //關(guān)閉寫保護(hù)}/***********************延時(shí)函數(shù)************************/voiddelay_uint(uintq){ while(q--);}/***********************1ms延時(shí)函數(shù)*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/********************獨(dú)立按鍵程序*****************/ucharkey_can; //按鍵值voidkey() //獨(dú)立按鍵程序{ ucharkey_new;//key_new這個(gè)變量的功能是做按鍵松手檢測(cè)的 key_can=0;//按鍵值還原成0 if(key1==0||key2==0||key3==0||key4==0) //有按鍵按下 { delay_1ms(1); //按鍵延時(shí)消抖動(dòng) if(key_new==1) { key_new=0; //key_new=0說明按鍵已按下 if(key1==0) //確認(rèn)是按鍵按下 key_can=1; //得到按鍵值 if(key2==0) //確認(rèn)是按鍵按下 key_can=2; //得到按鍵值 if(key3==0) //確認(rèn)是按鍵按下 key_can=3; //得到按鍵值 if(key4==0) //確認(rèn)是按鍵按下 key_can=4; //得到按鍵值 } } else key_new=1; //key_new=1說明按鍵已經(jīng)松開了 }/**********************設(shè)置函數(shù)************************/voidkey_with(){ if(key_can==1) //設(shè)置鍵 { menu_1++; menu_2=1; if(menu_1==1) //設(shè)置時(shí)間 flag_s=0x03; if(menu_1==2) //設(shè)置年月日 flag_s=0x03; if(menu_1==3) //設(shè)置星期鬧鐘的開和關(guān) flag_s=0x03; if(menu_1==4) ////設(shè)置鬧鐘 flag_s=0x0c; if(menu_1>4)//回到正常顯示 { menu_1=0; } } if(key_can==2) //選擇鍵 { flag_200ms=1; if((menu_1==1)||(menu_1==2)) //設(shè)置時(shí)間 { menu_2++; if(menu_2>3) menu_2=1; if(menu_2==1) flag_s=0x03; if(menu_2==2) flag_s=0x18; if(menu_2==3) flag_s=0xc0; } if(menu_1==3) //設(shè)置星期鬧鐘的開和關(guān) { menu_2++; if(menu_2>2) menu_2=1; if(menu_2==1) flag_s=0x03; if(menu_2==2) flag_s=0xf8; } if(menu_1==4) //設(shè)置鬧鐘 { menu_2++; if(menu_2>2) menu_2=1; if(menu_2==1) flag_s=0x0c; if(menu_2==2) flag_s=0x60; } } if(menu_1==1) // { if(menu_2==1) //設(shè)置秒 { if(key_can==3) //加鍵 { miao+=0x01; //設(shè)置秒鐘加1 if((miao&0x0f)>=0x0a) miao=(miao&0xf0)+0x10; if(miao>=0x60) miao=0; } if(key_can==4) //減鍵 { if(miao==0x00) miao=0x5a; if((miao&0x0f)==0x00) miao=(miao|0x0a)-0x10; miao--; //設(shè)置秒減1 } } if(menu_2==2) //設(shè)置分 { if(key_can==3) //加鍵 { fen+=0x01; //設(shè)置分鐘加1 if((fen&0x0f)>=0x0a) fen=(fen&0xf0)+0x10; if(fen>=0x60) fen=0; } if(key_can==4) //減鍵 { if(fen==0x00) fen=0x5a; if((fen&0x0f)==0x00) fen=(fen|0x0a)-0x10; fen--; //設(shè)置分鐘減1 } } if(menu_2==3) //設(shè)置時(shí) { if(key_can==3) //加鍵 { shi+=0x01; //設(shè)置時(shí)鐘加1 if((shi&0x0f)>=0x0a) shi=(shi&0xf0)+0x10; if(shi>=0x24) shi=0; } if(key_can==4) //減鍵 { if(shi==0x00) shi=0x24; if((shi&0x0f)==0x00) shi=(shi|0x0a)-0x10; shi--; //設(shè)置時(shí)鐘減1 } } write_time(); //把時(shí)間寫進(jìn)去 } if(menu_1==2) //設(shè)置年月日 { if(menu_2==1) //設(shè)置日 { if(key_can==3) //加鍵 { ri+=0x01; //設(shè)置日加1 if((ri&0x0f)>=0x0a) ri=(ri&0xf0)+0x10; if(ri>=0x32) ri=0; } if(key_can==4) //減鍵 { if(ri==0x01) ri=0x32; if((ri&0x0f)==0x00) ri=(ri|0x0a)-0x10; ri--; //設(shè)置日減1 } } if(menu_2==2) //設(shè)置月 { if(key_can==3) //加鍵 { yue+=0x01; //設(shè)置月加1 if((yue&0x0f)>=0x0a) yue=(yue&0xf0)+0x10; if(yue>=0x13) yue=1; } if(key_can==4) //減鍵 { if(yue==0x01) yue=0x13; if((yue&0x0f)==0x00) yue=(yue|0x0a)-0x10; yue--; //設(shè)置月減1 } } if(menu_2==3) //設(shè)置年 { if(key_can==3) //加鍵 { nian+=0x01; //設(shè)置年加1 if((nian&0x0f)>=0x0a) nian=(nian&0xf0)+0x10; if(nian>=0x9a) nian=1; } if(key_can==4) //減鍵 { if(nian==0x01) nian=0x9a; if((nian&0x0f)==0x00) nian=(nian|0x0a)-0x10; nian--; //設(shè)置年減1 } } write_time(); //把時(shí)間寫進(jìn)去 } if(menu_1==3) //設(shè)置星期鬧鐘的開和關(guān) { if(menu_2==1) //設(shè)置星期 { if(key_can==3) //加鍵 { week+=0x01; //設(shè)置星期加1 if((week&0x0f)>=0x0a) week=(week&0xf0)+0x10; if(week>=0x08) week=1; } if(key_can==4) //減鍵 { if(week==0x01) week=0x08; if((week&0x0f)==0x00) week=(week|0x0a)-0x10; week--; //設(shè)置星期減1 } } if(menu_2==2) //設(shè)置鬧鐘的開和關(guān) { if((key_can==4)||(key_can==3)) //加 open1++; if(open1>=2) open1=0; } write_time(); //把時(shí)間寫進(jìn)去 } if(menu_1==4) //設(shè)置鬧鐘 { if(menu_2==1) //設(shè)置分 { if(key_can==3) //加鍵 { fen1+=0x01; //設(shè)置鬧鐘分加1 if((fen1&0x0f)>=0x0a) fen1=(fen1&0xf0)+0x10; if(fen1>=0x60) fen1=0; } if(key_can==4) //減鍵 { if(fen1==0x00) fen1=0x5a; if((fen1&0x0f)==0x00) fen1=(fen1|0x0a)-0x10; fen1--; //設(shè)置鬧鐘分減1 } } if(menu_2==2) //設(shè)置時(shí) { if(key_can==3) //加鍵 { shi1+=0x01; //設(shè)置鬧鐘時(shí)加1 if((shi1&0x0f)>=0x0a) shi1=(shi1&0xf0)+0x10; if(shi1>=0x24) shi1=0; } if(key_can==4) //減鍵 { if(shi1==0x00) shi1=0x5a; if((shi1&0x0f)==0x00) shi1=(shi1|0x0a)-0x10; shi1--; //設(shè)置鬧鐘時(shí)減1 } } write_time(); //把時(shí)間寫進(jìn)去 }}/************菜單處理函數(shù)****************/voidmenu_dis(){ if((menu_1==1)) //選設(shè)置時(shí)分秒 { dis_smg[0]=smg_du[miao%16];//顯示秒 dis_smg[1]=smg_du[miao/16];// dis_smg[2]=0x7f; dis_smg[3]=smg_du[fen%16];//顯示分 dis_smg[4]=smg_du[fen/16];// dis_smg[5]=0x7f; dis_smg[6]=smg_du[shi%16];//顯示秒 dis_smg[7]=smg_du[shi/16];// } if((menu_1==2)) //選設(shè)置年月日 { dis_smg[0]=smg_du[ri%16];//顯示日 dis_smg[1]=smg_du[ri/16];// dis_smg[2]=0xfe; dis_smg[3]=smg_du[yue%16];//顯示月 dis_smg[4]=smg_du[yue/16];// dis_smg[5]=0xfe; dis_smg[6]=smg_du[nian%16];//顯示年 dis_smg[7]=smg_du[nian/16];// } if((menu_1==3)) //設(shè)置星期和鬧鐘的開和關(guān) { dis_smg[0]=smg_du[week%16];//顯示星期 dis_smg[1]=smg_du[week/16];// dis_smg[2]=0x7f; if(open1==1) //開鬧鐘 { dis_smg[3]=0xb0; //OPEN dis_smg[4]=0x64; dis_smg[5]=0x70; dis_smg[6]=0xa0; }else { dis_smg[3]=0x74; //OFF dis_smg[4]=0x74; dis_smg[5]=0xa0; dis_smg[6]=0xFF; } } if(menu_1==4) //選設(shè)置時(shí)分秒 { dis_smg[0]=0xff;// dis_smg[1]=0xff;// dis_smg[2]=smg_du[fen1%16];//顯示分 dis_smg[3]=smg_du[fen1/16];// dis_smg[4]=0x7f; dis_smg[5]=smg_du[shi1%16];//顯示秒 dis_smg[6]=smg_du[shi1/16];// dis_smg[7]=0xff; }}/*************鬧鐘報(bào)警函數(shù)***************/voidclock_dis(){ if(flag_100ms==1) //100ms執(zhí)行一次 { flag_100ms=0; if(open1==1) //如果鬧鐘打開 { if((miao==0)&&(fen==fen1)&&(shi==shi1)) { flag_beep_en=1; //有報(bào)警打開蜂鳴器響的標(biāo)志位 } if(flag_beep_en==1) //鬧鐘以被打開 { beep=~beep; //蜂鳴器叫3秒 } if((miao==0)&&(fen==fen1+1)&&(shi==shi1)) { flag_beep_en=0; //1分鐘后關(guān)閉鬧鐘 } } }}/*************定時(shí)器0初始化程序***************/voidtime_init() { EA=1; //開總中斷 TMOD=0X01; //定時(shí)器0、工作方式1 ET0=1; //開定時(shí)器0中斷 TR0=1; //允許定時(shí)器0定時(shí)}/***********************18b20初始化函數(shù)*****************************/voidinit_18b20(){ bitq; dq=1; //把總線拿高 delay_uint(8); dq=0; //給復(fù)位脈沖再將數(shù)據(jù)線從高拉低,要求保持480~960us delay_uint(80); dq=1; //把總線拿高等待 delay_uint(8); q=dq; //讀取18b20初始化信號(hào) delay_uint(4); dq=1; //把總線拿高釋放總線}/*************寫18b20內(nèi)的數(shù)據(jù)***************/voidwrite_18b20(uchardat){ uchari; for(i=0;i<8;i++) //單總線寫8位的數(shù)據(jù)需要循環(huán)8次才能寫完 { //寫數(shù)據(jù)是低位開始 dq=0; //把總線拿低寫時(shí)間隙開始 dq=dat&0x01;//向18b20總線寫一位數(shù) delay_uint(4); dq=1; //釋放總線 dat>>=1; //將dat中的各二進(jìn)制位數(shù)據(jù)右移1位 } delay_uint(4); //稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間}/*************讀取18b20內(nèi)的數(shù)據(jù)***************/ucharread_18b20(){ uchari,value; for(i=0;i<8;i++) { dq=0; //把總線拿低讀時(shí)間隙開始 value>>=1; //讀數(shù)據(jù)是低位開始 dq=1; //釋放總線 if(dq==1) //開始讀寫數(shù)據(jù) value|=0x80; delay_uint(4); } returnvalue; //返回?cái)?shù)據(jù)}/*************讀取溫度的值讀出來的是小數(shù)***************/uintread_temp(){ uintvalue; ucharlow; //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0x44); //啟動(dòng)一次溫度轉(zhuǎn)換命令 delay_uint(50); //轉(zhuǎn)換一次溫度需要時(shí)間延時(shí)一下 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0xbe); //發(fā)出讀取暫存器命令 low=read_18b20(); //讀溫度低字節(jié) value=read_18b20();//讀溫度高字節(jié) value<<=8; //把溫度的高位左移8位 value|=low; //把讀出的溫度低位放到value的低八位中 value*=0.625; //轉(zhuǎn)換到溫度值小數(shù) returnvalue; //返回讀出的溫度帶小數(shù)}/*************時(shí)鐘顯示***************/voidxianshi_ds1302(){ ucharvalue; value++; if(value<=5*2)//2秒 { dis_smg[0]=smg_du[miao%16];//顯示秒 dis_smg[1]=smg_du[miao/16];// dis_smg[2]=0x7f; dis_smg[3]=smg_du[fen%16];//顯示分 dis_smg[4]=smg_du[fen/16];// dis_smg[5]=0x7f; dis_smg[6]=smg_du[shi%16];//顯示秒 dis_smg[7]=smg_du[shi/16];// } elseif(value<=5*4)//2秒 { dis_smg[0]=smg_du[ri%16];//

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論