![2022年源程序代碼_第1頁(yè)](http://file4.renrendoc.com/view/7720055a4802e40611916293d49ab718/7720055a4802e40611916293d49ab7181.gif)
![2022年源程序代碼_第2頁(yè)](http://file4.renrendoc.com/view/7720055a4802e40611916293d49ab718/7720055a4802e40611916293d49ab7182.gif)
![2022年源程序代碼_第3頁(yè)](http://file4.renrendoc.com/view/7720055a4802e40611916293d49ab718/7720055a4802e40611916293d49ab7183.gif)
![2022年源程序代碼_第4頁(yè)](http://file4.renrendoc.com/view/7720055a4802e40611916293d49ab718/7720055a4802e40611916293d49ab7184.gif)
![2022年源程序代碼_第5頁(yè)](http://file4.renrendoc.com/view/7720055a4802e40611916293d49ab718/7720055a4802e40611916293d49ab7185.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
..精選文檔精選文檔.精選文檔#include<reg52.h> //調(diào)用單片機(jī)頭文件#defineucharunsignedchar//無(wú)符號(hào)字符型宏定義 變量范圍0~255#defineuintunsignedint //無(wú)符號(hào)整型宏定義 變量范圍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)歷陽(yá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中讀出來(lái)*****************/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)問(wèn)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初始化信號(hào) 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;//把總線拿低寫時(shí)間隙開始 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; //把總線拿低讀時(shí)間隙開始 value>>=1; //讀數(shù)據(jù)是低位開始 dq=1; //釋放總線 if(dq==1) //開始讀寫數(shù)據(jù) value|=0x80; delay_uint(5); //60us 讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間 } returnvalue; //返回?cái)?shù)據(jù)}/*************讀取溫度的值讀出來(lái)的是小數(shù)***************/uintread_temp(){ uintvalue; ucharlow; //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否那么會(huì)影響到18b20的時(shí)序 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過(guò)64位ROM write_18b20(0x44); //啟動(dòng)一次溫度轉(zhuǎn)換命令 delay_uint(50); //500us init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過(guò)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í)函數(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時(shí),顯示 write_data('O'); write_data('N'); break; case2:write_data('T');//星期數(shù)據(jù)為2時(shí)顯示 write_data('U'); write_data('E'); break; case3:write_data('W');//星期數(shù)據(jù)為3時(shí)顯示 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時(shí)顯示 write_data('R'); write_data('I'); break; case6:write_data('S');//星期數(shù)據(jù)為6時(shí)顯示 write_data('T'); write_data('A'); break; case0:write_data('S');//星期數(shù)據(jù)為7時(shí)顯示 write_data('U'); write_data('N'); break; }}/*************時(shí)鐘顯示***************/voidinit_1602_ds1302(){ write_sfm2_ds1302(1,1,shi); //顯示時(shí) 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)//顯示陽(yáng)歷 { 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); //顯示日 } } /*************定時(shí)器0初始化程序***************/voidinit_time0() { EA=1; //開總中斷 TMOD=0X01; //定時(shí)器0、工作方式1 ET0=1; //開定時(shí)器0中斷 TR0=1; //允許定時(shí)器0定時(shí)}/*************鬧鐘報(bào)警函數(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; //有報(bào)警翻開蜂鳴器響的標(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分鐘后自動(dòng)關(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;//對(duì)應(yīng)的按鍵IO口輸出為1 if((P3&0x78)!=0x78) //按鍵按下 { delay_1ms(1); //按鍵消抖動(dòng)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è)置時(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è)置時(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è)置時(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); //顯示時(shí) 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(); //把時(shí)間寫進(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è)置鬧鐘時(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); //顯示鬧鐘時(shí) 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í)間 } }/*****************主函數(shù)********************/voidmain(){ beep=0; //開機(jī)叫一聲 delay_1ms(150); P0=P1=P2=P3=0xff; //單片機(jī)IO口初始
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)六年級(jí)口算題卡
- 小學(xué)六年級(jí)800道數(shù)學(xué)口算題
- 2025年沈陽(yáng)貨運(yùn)從業(yè)資格試題及答案詳解
- 2025年太原貨車從業(yè)資格證答題技巧
- 監(jiān)控錄像管理協(xié)議書(2篇)
- 2024-2025學(xué)年高中地理課時(shí)分層作業(yè)13噪聲污染及其防治含解析湘教版選修6
- 2024-2025學(xué)年八年級(jí)數(shù)學(xué)上冊(cè)第十一章三角形11.2與三角形有關(guān)的角作業(yè)設(shè)計(jì)新版新人教版
- 人事行政助理年終工作總結(jié)
- 公司辦公室工作總結(jié)
- 人力資源部年度個(gè)人工作計(jì)劃
- 2024年中考語(yǔ)文名著閱讀知識(shí)(考點(diǎn))專題10《水滸傳》真題精練(單一題)(解析版)
- 新能源電力市場(chǎng)與電力交易
- 第15課 記憶小竅門(教學(xué)設(shè)計(jì))-蘇教版心理健康四年級(jí)上冊(cè)
- 華能火力發(fā)電機(jī)組節(jié)能降耗技術(shù)導(dǎo)則(2023年版)
- 基礎(chǔ)知識(shí)3500個(gè)常用漢字附拼音
- 中考英語(yǔ)必背單詞
- 酒店財(cái)務(wù)部SOP(標(biāo)準(zhǔn)操作手冊(cè))4092
- JJF(紡織)072-2018紡織滾筒式烘干機(jī)校準(zhǔn)規(guī)范
- 干部人事檔案專項(xiàng)審核認(rèn)定表
- 北京故宮作文600字
- 羊水栓塞的應(yīng)急預(yù)案演練腳本
評(píng)論
0/150
提交評(píng)論