




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
..精選文檔精選文檔.精選文檔#include<reg52.h> //調(diào)用單片機(jī)頭文件#defineucharunsignedchar//無符號字符型宏定義 變量范圍0~255#defineuintunsignedint //無符號整型宏定義 變量范圍0~65535#include"eeprom52.h"#include"nongli.h"bitflag_200ms;bitflag_100ms;sbitbeep=P3^7; //蜂鳴器定義bitflag_beep_en;uintclock_value;//用作鬧鐘用的sbitdq=P3^2; //18b20IO口的定義uinttemperature;//溫度變量ucharflag_nl;//農(nóng)歷陽歷顯示標(biāo)志位ucharmenu_1,menu_2;ucharkey_time,flag_value;//用做連加的中間變量bitkey_500ms;ucharn_nian,n_yue,n_ri; //農(nóng)歷顯示的函數(shù)#include"ds1302.h"#include"lcd1602.h"/******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/voidwrite_eeprom(){ SectorErase(0x2000); byte_write(0x2000,fen1); byte_write(0x2001,shi1); byte_write(0x2002,open1); byte_write(0x2058,a_a); }/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/voidread_eeprom(){ fen1=byte_read(0x2000); shi1=byte_read(0x2001); open1=byte_read(0x2002); a_a=byte_read(0x2058);}/**************開機(jī)自檢eeprom初始化*****************/voidinit_eeprom(){ read_eeprom(); //先讀 if(a_a!=1) //新的單片機(jī)初始單片機(jī)內(nèi)問eeprom { fen1=3; shi1=8; open1=1; a_a=1; write_eeprom(); //保存數(shù)據(jù) } }/***********************18b20初始化函數(shù)*****************************/voidinit_18b20(){ bitq; dq=1; //把總線拿高 delay_uint(1); //15us dq=0; //給復(fù)位脈沖 delay_uint(80); //750us dq=1; //把總線拿高等待 delay_uint(10); //110us q=dq; //讀取18b20初始化信號 delay_uint(20); //200us dq=1; //把總線拿高釋放總線}/*************寫18b20內(nèi)的數(shù)據(jù)***************/voidwrite_18b20(uchardat){ uchari; for(i=0;i<8;i++) { //寫數(shù)據(jù)是低位開始 dq=0;//把總線拿低寫時間隙開始 dq=dat&0x01;//向18b20總線寫數(shù)據(jù)了 delay_uint(5); //60us dq=1; //釋放總線 dat>>=1; } }/*************讀取18b20內(nèi)的數(shù)據(jù)***************/ucharread_18b20(){ uchari,value; for(i=0;i<8;i++) { dq=0; //把總線拿低讀時間隙開始 value>>=1; //讀數(shù)據(jù)是低位開始 dq=1; //釋放總線 if(dq==1) //開始讀寫數(shù)據(jù) value|=0x80; delay_uint(5); //60us 讀一個時間隙最少要保持60us的時間 } returnvalue; //返回數(shù)據(jù)}/*************讀取溫度的值讀出來的是小數(shù)***************/uintread_temp(){ uintvalue; ucharlow; //在讀取溫度的時候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否那么會影響到18b20的時序 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0x44); //啟動一次溫度轉(zhuǎn)換命令 delay_uint(50); //500us init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0xbe); //發(fā)出讀取暫存器命令 EA=0; low=read_18b20(); //讀溫度低字節(jié) value=read_18b20();//讀溫度高字節(jié) EA=1; value<<=8; //把溫度的高位左移8位 value|=low; //把讀出的溫度低位放到value的低八位中 value*=0.625;//轉(zhuǎn)換到溫度值小數(shù) returnvalue;//返回讀出的溫度帶小數(shù)}/******************1ms延時函數(shù)*******************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/******************寫星期函數(shù)*******************/voidwrite_week(ucharhang,ucharadd,ucharweek)//寫星期函數(shù){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); switch(week) { case1:write_data('M');//星期數(shù)為1時,顯示 write_data('O'); write_data('N'); break; case2:write_data('T');//星期數(shù)據(jù)為2時顯示 write_data('U'); write_data('E'); break; case3:write_data('W');//星期數(shù)據(jù)為3時顯示 write_data('E'); write_data('D'); break; case4:write_data('T');//星期數(shù)據(jù)為4是顯示 write_data('H'); write_data('U'); break; case5:write_data('F');//星期數(shù)據(jù)為5時顯示 write_data('R'); write_data('I'); break; case6:write_data('S');//星期數(shù)據(jù)為6時顯示 write_data('T'); write_data('A'); break; case0:write_data('S');//星期數(shù)據(jù)為7時顯示 write_data('U'); write_data('N'); break; }}/*************時鐘顯示***************/voidinit_1602_ds1302(){ write_sfm2_ds1302(1,1,shi); //顯示時 write_sfm2_ds1302(1,4,fen); //顯示分 write_sfm2_ds1302(1,7,miao);//顯示秒 write_week(2,12,week);// write_sfm1(1,14,week); //顯示星期 write_sfm3_18B20(1,11,temperature); //顯示溫度 if(flag_nl==0)//顯示陽歷 { write_sfm2_ds1302(2,2,nian);//顯示年 write_sfm2_ds1302(2,5,yue); //顯示月 write_sfm2_ds1302(2,8,ri); //顯示日 } else //顯示農(nóng)歷 { write_sfm2_ds1302(2,2,n_nian); //顯示年 write_sfm2_ds1302(2,5,n_yue); //顯示月 write_sfm2_ds1302(2,8,n_ri); //顯示日 } } /*************定時器0初始化程序***************/voidinit_time0() { EA=1; //開總中斷 TMOD=0X01; //定時器0、工作方式1 ET0=1; //開定時器0中斷 TR0=1; //允許定時器0定時}/*************鬧鐘報警函數(shù)***************/voidmenu_dis(){ staticucharmm,value; if(flag_100ms==1) //100ms執(zhí)行一次 { flag_100ms=0; if(open1==1) //如果鬧鐘翻開 { if((miao==0)&&(fen==fen1)&&(shi==shi1)) { flag_beep_en=1; //有報警翻開蜂鳴器響的標(biāo)志位 } if(flag_beep_en==1) //鬧鐘以被翻開 { clock_value++; if(clock_value<=30) beep=~beep; //蜂鳴器叫3秒 elseif(clock_value>30) { beep=1; //蜂鳴器停1秒 if(clock_value>40) { clock_value=0; } } //1分鐘后自動關(guān)閉鬧鐘 value++; if(value>=10) { value=0; mm++; if(mm>=60) { mm=0; flag_beep_en=0; beep=1; } } } } }}/********************獨(dú)立按鍵程序*****************/ucharkey_can; //按鍵值voidkey() //獨(dú)立按鍵程序{ staticucharkey_new; key_can=20;//按鍵值復(fù)原 P3|=0x78;//對應(yīng)的按鍵IO口輸出為1 if((P3&0x78)!=0x78) //按鍵按下 { delay_1ms(1); //按鍵消抖動if(((P3&0x78)!=0x78)&&(key_new==1)) { //確認(rèn)是按鍵按下 key_new=0; switch(P3&0x78) { case0x70:key_can=4;break; //得到按鍵值 case0x68:key_can=3;break; //得到按鍵值 case0x58:key_can=2;break; //得到按鍵值 case0x38:key_can=1;break; //得到按鍵值 } write_sfm2(1,0,key_can); //顯示按鍵值 } } else key_new=1; }/**********************設(shè)置函數(shù)************************/voidkey_with(){ if(key_can==1) //設(shè)置鍵 { menu_1++; if(menu_1==1) //設(shè)置時間 { menu_2=1; write_string(1,0,"--W:"); write_string(2,0,"20--"); } if(menu_1==2) //設(shè)置鬧鐘 { menu_2=1; write_string(1,0,"setclock"); write_string(2,0,"Y00:00"); } if(menu_1>2)//回到正常顯示 { menu_1=0; write_guanbiao(1,2,0); //關(guān)閉光標(biāo) init_1602_dis_csf();//初始化液晶顯示 } } if(key_can==2) //選擇鍵 { flag_200ms=1; if(menu_1==1) //設(shè)置時間 { menu_2++; if(menu_2>7) menu_2=1; } if(menu_1==2) //設(shè)置鬧鐘 { menu_2++; if(menu_2>3) menu_2=1; } } if(menu_1==1) { if(menu_2==1) //設(shè)置時 { if(key_can==3) //加 { shi+=0x01; 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--; } } if(menu_2==2) //設(shè)置分 { if(key_can==3) //加 { fen+=0x01; 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--; } } if(menu_2==3) //設(shè)置秒 { if(key_can==3) //加 { miao+=0x01; 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--; } } if(menu_2==4) //設(shè)置星期 { if(key_can==3) //加 { week+=0x01; 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--; } } if(menu_2==5) //設(shè)置年 { if(key_can==3) //加 { nian+=0x01; 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--; } } if(menu_2==6) //設(shè)置月 { if(key_can==3) //加 { yue+=0x01; 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--; } } if(menu_2==7) //設(shè)置日 { if(key_can==3) //加 { ri+=0x01; 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--; } } write_sfm2_ds1302(1,2,shi); //顯示時 write_sfm2_ds1302(1,5,fen); //顯示分 write_sfm2_ds1302(1,8,miao); //顯示秒 write_sfm1(1,14,week); //顯示星期 write_sfm2_ds1302(2,3,nian); //顯示年 write_sfm2_ds1302(2,6,yue); //顯示月 write_sfm2_ds1302(2,9,ri); //顯示日 switch(menu_2) //光標(biāo)顯示 { case1:write_guanbiao(1,2,1);break; case2:write_guanbiao(1,5,1);break; case3:write_guanbiao(1,8,1);break; case4:write_guanbiao(1,14,1);break; case5:write_guanbiao(2,3,1);break; case6:write_guanbiao(2,6,1);break; case7:write_guanbiao(2,9,1);break; } write_time(); //把時間寫進(jìn)去 } /***************設(shè)置鬧鐘*********************/ if(menu_1==2) { if(menu_2==1) //設(shè)置鬧鐘開關(guān) { if(key_can==3) { open1=1; //鬧鐘開 } if(key_can==4) { open1=0; //鬧鐘關(guān) } } if(menu_2==2) //設(shè)置鬧鐘時 { if(key_can==3) //加 { shi1+=0x01; 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--; } } if(menu_2==3) //設(shè)置秒 { if(key_can==3) //加 { fen1+=0x01; 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--; } } if(open1==1) write_string(2,4,"Y"); else write_string(2,4,"N"); write_sfm2_ds1302(2,7,shi1); //顯示鬧鐘時 write_sfm2_ds1302(2,10,fen1); //顯示鬧鐘分 switch(menu_2) //光標(biāo)顯示 { case1:write_guanbiao(2,4,1);break; case2:write_guanbiao(2,7,1);break; case3:write_guanbiao(2,10,1);break; } write_eeprom();//保存鬧鐘時間 } }/*****************主函數(shù)********************/voidmain(){ beep=0; //開機(jī)叫一聲 delay_1ms(150); P0=P1=P2=P3=0xff; //單片機(jī)IO口初始
溫馨提示
- 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年中國蘋果醋低糖精釀行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2021-2026年中國貼標(biāo)機(jī)械行業(yè)深度分析及投資規(guī)劃研究建議報告
- 車輛結(jié)算合同范本
- 飯莊轉(zhuǎn)讓合同范本
- 產(chǎn)權(quán)過戶合同范本
- 電影員工合同范本
- 葡萄采摘機(jī)器人的視覺感知與低損抓持
- 基于同步仿形的低損大豆割臺設(shè)計與試驗(yàn)
- 電商平臺中多語言切換的體驗(yàn)設(shè)計研究
- 校車事故預(yù)防措施及應(yīng)急處理方案
- 甘草種植技術(shù)課件
- 冀教版英語九年級Unit 5 單詞短語預(yù)習(xí)復(fù)習(xí)單
- 公司安全生產(chǎn)監(jiān)督管理辦法
- 鋼筋工工藝與實(shí)習(xí)(第二版)課件匯總?cè)珪娮咏贪竿暾嬲n件最全幻燈片(最新)課件電子教案幻燈片
- 煤礦從業(yè)人員考試題庫全答案(word版)
- 洞頂回填技術(shù)交底
- 最簡易的帕累托圖制作方法簡介PPT通用課件
- 城市軌道交通應(yīng)急處理課程標(biāo)準(zhǔn)
- 初二下分式混合計算練習(xí)1(附答案)
- (完整版)振幅調(diào)制與解調(diào)習(xí)題及其解答
- 抗震支架施工安裝合同
評論
0/150
提交評論