




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#i nclude 調(diào)用單片機(jī)頭文件#defi ne uchar un sig ned char/無(wú)符號(hào)字符型宏定義變量范圍0255#defi ne uint un sig ned int/無(wú)符號(hào)整型宏定義變量范圍065535#in clude eeprom52.h#i nclude non gli.hbyte_write(0x2001, shil);byte_write(0x2002, ope n1);byte_write(0x2058, a_a);把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom 中讀出來(lái) */sbit dq = P3A2;定義/蜂鳴器定義用作鬧鐘用的18b20 IO口的溫度變量農(nóng)歷陽(yáng)歷顯示
2、標(biāo)bit flag_200ms ;bit flag_100ms ; sbit beep = P3A7;bit flag_beep_e n; uint clock_value; / uint temperature ; / uchar flag_ nl; / 志位uchar menu _1,me nu_2;uchar key_time,flag_value;/用做連加的中間變量bit key_500ms ;uchar n_nian,n _yue ,n_ri;/農(nóng)歷顯示的函數(shù)void read_eeprom()fenl = byte_read(0x2000);shil = byte_read(0x
3、2001);ope n1 = byte_read(0x2002);a_a = byte_read(0x2058); /*開機(jī)自檢 eeprom 初始化*/void ini t_eeprom()read_eeprom();/ 先讀if(a_a != 1)/新的單片機(jī)初始單片機(jī)內(nèi)問eepromfenl = 3;shil = 8;open1 = 1;a_a = 1;write_eeprom(); /保存數(shù)據(jù)* 18b20初始化函數(shù) */把總線拿高15us/給復(fù)位脈沖750us/把總線拿高#i nclude ds1302.h#in clude lcd1602.h/*把數(shù)據(jù)保存到單片機(jī)I內(nèi)eeprom
4、中 */ void write_eeprom()SectorErase(0x2000);byte_write(0x2000, fenl);void in it_18b20()bit q;dq = 1;delay_ui nt(1); dq = 0;delay_ui nt(80); dq = 1;等待delay_ui nt(1O);110usq = dq;/讀取18b20初始化信號(hào)delay_u in t(20);200usdq = 1;II把總線拿高 釋放總線*18b20 內(nèi)的數(shù)據(jù)*/void write_18b20(uchar dat) uchar i;for(i=0;i= 1;/ 60us/
5、釋放總線*讀取18b20內(nèi)的數(shù)據(jù)*/uchar read_18b20() uchar i,value; for(i=0;i= 1; 位開始dq = 1;if(dq = 1) /value |= 0x80;delay_ uin t(5);讀一個(gè)時(shí)間隙最少要保持return value;/把總線拿低/讀數(shù)據(jù)是低/釋放總線 開始讀寫數(shù)據(jù)/60us60us的時(shí)間/返回?cái)?shù)據(jù)/* 讀取溫度的值讀出來(lái)的是小數(shù)*uint read_temp()uint value;uchar low;/在讀取溫度的時(shí)候如果中斷的太頻繁 了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到 18b20的時(shí)序in it_18b20();18b2
6、0write_18b20(0xcc);ROMwrite_18b20(0x44);溫度轉(zhuǎn)換命令delay_ui nt(50);/ 初始化/ 跳過64位/ 啟動(dòng)一次/500usin it_18b20();/ 初始化18b20write_18b20(0xcc); ROMwrite_18b20(0xbe);/發(fā)出讀取暫存器命令/ 跳過64位EA = 0;low = read_18b20(); / 讀溫 度低字 節(jié)value = read_18b20(); /讀溫度高字節(jié)EA = 1;value = 8;/把溫度的高位左移8位value |= low;/把讀出的溫度低位放到value的低八位中value
7、 *= 0.625; 轉(zhuǎn)換到溫度值小數(shù) return value;/ 返回讀出的溫度帶小 數(shù)1ms延時(shí)函數(shù)*/void delay_1ms( uint q)/*/*/示顯顯顯顯uint i,j;for(i=0;iq;i+) for(j=0;j120;j+);void write_week(ucharhan g,ucharadd,uchar week)/寫星期函數(shù)if(ha ng=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);switch(week)case 1:write_data(M);星期數(shù)為1時(shí),顯示write_data(O);
8、write_data(N); break;case 2:write_data(T);星期數(shù)據(jù)為2時(shí)顯示write_data(U); write_data(E); break;case 3:write_data(W);/星期數(shù)據(jù)為3時(shí)顯示write_data(E); write_data(D); break;case 4:write_data(T);/星期數(shù)據(jù)為4是顯示write_data(H);write_data(U); break;case 5:write_data(F);/星期數(shù)據(jù)為5時(shí)顯示write_data(R);write_data(T); break;case 6:write_d
9、ata(S);/星期數(shù)據(jù)為6時(shí)顯示write_data(T); write_data(A); break;case 0:write_data(S);/星期數(shù)據(jù)為7時(shí)顯示write_data(U);write_data(N); break;void in it_1602_ds1302()write_sfm2_ds1302(1,1,shi); /示時(shí)write_sfm2_ds1302(1,4,fe n); /示分write_sfm2_ds1302(1,7,miao);示秒write_week(2,12,week);/ write_sfm1(1,14,week);/示星期write_sfm3_18B
10、20(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_nia n);/ 顯示年write_sfm2_ds1302(2,5,n_yue); /顯示月write_sfm2_ds1302(2,8,n_ri);/顯示日*定時(shí)器0初始化程序*/void in it_time0()EA = 1;TMOD = 0X0
11、1;/定時(shí)器0、工作方式ET0 = 1;TR0 = 1;時(shí)/開總中斷1/開定時(shí)器0中斷/允許定時(shí)器0定*報(bào)警函數(shù)*/void men u_dis()static uchar mm,value; if(flag_100ms = 1) 執(zhí)行一次 flag_100ms = 0; if(ope n1 = 1)開/100ms/如果鬧鐘打if(miao = 0) & (fen =fen 1) & (shi = shi1)flag_beep_e n = 1;/有報(bào)警 打開蜂鳴器響的標(biāo)志位/鬧鐘以被打開clock_value+; if(clock_value 30)beep = 1;/蜂鳴器停1秒if(clo
12、ck_value40)0;clock_value =/ 1分鐘后自動(dòng)關(guān)閉鬧鐘value +;if(value = 10)value = 0;mm+;if(mm = 60) mm = 0;0flag_beep_e n =u,beep = 1;if(flag_beep_e n = 1)/*獨(dú)立按鍵程序void key() /獨(dú)立按鍵程序 static uchar key_ new; key_can = 20;按鍵值還原P3 |= 0x78;對(duì)應(yīng)的按鍵IO 口輸出為/!=0x78)& 0x78)/確認(rèn)是按鍵按下key_ new = 0;switch(P3 & 0x78)/*設(shè)置函數(shù)*/*/ ucha
13、r key_can; / 按鍵值1if(P3 & 0x78) != 0x78)鍵按下delay_1ms(1);鍵消抖動(dòng)if(P3(key_ new = 1)case 0x70:key_can=:4; break;得到按鍵值case 0x68:key_can=:3; break;得到按鍵值case 0x58:key_can=:2; break;得到按鍵值case 0x38:key_can=:1; break;得到按鍵值/write_sfm2(1,0,key_ca n);/顯示按鍵值elsekey_ new = 1;void key_with()if(key_can = 1)/ 設(shè)置鍵menu _
14、1+;if(me nu_1 = 1) /設(shè)置時(shí)間menu_2 = 1;write_stri ng(1,0, - - W:);write_stri ng(2,0,20-);if(me nu_1 = 2) /設(shè)置鬧鐘menu_2 = 1;write_stri ng(1,0,setclock);write_stri ng(2,0,Y00:00);if(me nu_1 2) /回到正常顯示menu_1 = 0;write_gua nbiao(1,2,0);/關(guān)閉光標(biāo)in it_1602_dis_csf();/初始化液晶顯示if(key_can = 2)/ 選擇鍵flag_200ms = 1;if(me
15、 nu_1 = 1) II設(shè)置時(shí)間menu_2 +;if(menu_2 7)menu_2 = 1;if(menu_1 = 2)II 設(shè)置 鬧鐘menu_2 +;if(menu_2 3)menu_2 = 1;if(me nu_1 = 1)if(me nu_2 = 1)/ 設(shè)置時(shí)if(key_can = 3)/ 力口shi+=OxO1;if(shi &0x0f)=0x0a)shi = (shi & OxfO) + 0x10;if(shi = 0x24)shi = 0;if(key_can = 4)/ 減if(shi = 0x00)shi = 0x24;if(shi &0x0f)=0x00)shi
16、= (shi | 0x0a)-0x10;shi -;if(me nu_2 = 2)/ 設(shè)置分if(key_can = 3)/ 力口fen+=0x01;if(fen&0x0f)=0x0a)fen=(fen & 0xf0)+ 0x10;if(fe n =0x60)fen=0;if(key_ca n =4)/ 減0x00) =0x5a;if(fe n =fenif(fen&0x0f)=0x00)fen=(fen | 0x0a)-0x10;fen -;if(me nu_2 = 3)/ 設(shè)置秒if(key_ca n =3)/加miao+=0x01;if(miao&0x0f)=0x0a)miao=(mia
17、o & 0xf0)+ 0x10;if(miao = 0x60)miao = 0;if(key_ca n = 4)/ 減if(miao = 0x00)miao = 0x5a;if(miao & 0x0f)=0x00)miao = (miao | 0x0a)-0x10;miao -;if(me nu_2 = 4)/ 設(shè)置星期if(key_can = 3)/ 力口week+=0x01;if(week & 0x0f)=0x0a)+ 0x10;0x00)-0x10;年0x0a)+ 0x10;0x00)-0x10;week = (week & OxfO)if(week = 0x08) week = 1;i
18、f(key_ca n = 4)if(week = 0x01)week = 0x08;if(week/減& 0x0f)week = (week | 0x0a)week -;if(me nu_2 = 5)/ 設(shè)置if(key_can = 3)/ 力口nia n+=0x01;if(nian& 0x0f)=nian = (nian & 0xf0)if(nian = 0x9a) nian = 1;if(key_ca n = 4)if(n ia n = 0x01)nian = 0x9a;if(n ia n/減& 0x0f)nian = (nian | 0x0a)nian ;if(me nu_2 = 6)/
19、 設(shè)置0x0a)+ 0x10;0x00)-0x10;if(key_can = 3)/ 力口yue+=0x01;if(yue & 0x0f)=yue = (yue & 0xf0) if(yue = 0x13)yue = 1;if(key_ca n = 4)/ 減if(yue = 0x01) yue = 0x13;if(yue & 0x0f)yue = (yue | 0x0a)yue -;if(me nu_2 = 7)/設(shè)置日if(key_ca n =ri+=0x01;:3)/加if(ri & 0x0f) = 0x0a)ri = (ri if(ri = 0x32)ri = 0;& 0xf0)+ 0
20、x10;if(key_ca n =:4)/ 減if(ri = 0x01)ri = 0x32;if(ri & 0x0f) = 0x00) ri = (ri | 0x0a)-0x10;ri -;5: break;6: break;7: break;/把時(shí)間寫1) / 設(shè)置鬧鐘開 write_sfm2_ds1302(1,2,shi);/顯示時(shí)write_sfm2_ds1302(1,5,fe n);/顯示分write_sfm2_ds1302(1,8,miao);/ 顯示秒write_sfm1(1,14,week); / 顯示星期write_sfm2_ds1302(2,3, nian);/ 顯示年wri
21、te_sfm2_ds1302(2,6,yue);/顯示月write_sfm2_ds1302(2,9,ri);/顯示日switch(me nu_2)/ 光標(biāo)顯示case1:write_guan biao(1,2,1); break;case2:write_guan biao(1,5,1); break;case3:write_guan biao(1,8,1); break;case4:write_guan biao(1,14,1); break;casewrite_gua nbiao(2,3,1);casewrite_gua nbiao(2,6,1); casewrite_gua nbiao(2
22、,9,1); write_time();進(jìn)去/* */if(me nu_1 = 2)if(me nu_2 =:關(guān)if(key_ca n =open1 =3)1;/鬧鐘開 if(key_ca n =open1 =4)0;/鬧鐘關(guān)if(me nu_2 = 2) /設(shè)置鬧鐘時(shí)if(key_can = 3)/ 力口shi1+=OxO1;if(shi1 & OxOf) =0x0a)shi1 = (shi1 & OxfO)+ 0x10;if(shi1 = 0x24)shi1 = 0;if(key_ca n = 4)/ 減if(shi1 = 0x00)shi1 = 0x5a;if(shi1 & 0x0f)=0x00)shi1 = (shi1 | 0x0a)-0x10;shi1 -;if(me nu_2 = 3)/ 設(shè)置秒if(key_can = 3)/ 力口fen 1+=0x01;if(fen1 & 0x0f)=0x0a)fen1 = (fen1 & 0xf0) + 0x10;if(fen1 = 0x60)f
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年萍鄉(xiāng)市稅務(wù)系統(tǒng)遴選面試真題附解析含答案
- 某智慧園區(qū)中心變電所運(yùn)行維護(hù)服務(wù)競(jìng)標(biāo)方案
- 魯北監(jiān)獄醫(yī)用設(shè)備需求
- 老年人居家醫(yī)療服務(wù)試點(diǎn)工作方案 (一)
- 老年患者護(hù)理
- 老師的職業(yè)道德培訓(xùn)課件
- 2025年安全工作述職報(bào)告范本(六)
- 車棚鋼結(jié)構(gòu)焊接與質(zhì)量檢測(cè)服務(wù)合同
- 建筑工程采購(gòu)合同施工進(jìn)度與質(zhì)量跟蹤服務(wù)協(xié)議
- 老妖精消防視頻課件
- 中國(guó)硒化汞行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告2024-2029版
- 水庫(kù)安保服務(wù)方案
- INSAR技術(shù)在城市地面沉降監(jiān)測(cè)中的應(yīng)用
- 產(chǎn)品審核VDA6.5培訓(xùn)課件
- 艾滋病乙肝梅毒知識(shí)講座
- 九年級(jí)化學(xué)下冊(cè) 第11單元 課題2 化學(xué)肥料課件 新人教版
- 暖氣片報(bào)價(jià)單范本
- 臨床醫(yī)學(xué)研究中心年度考核細(xì)則
- PSSE軟件操作說(shuō)明
- 22S803 圓形鋼筋混凝土蓄水池
- 級(jí)配碎石試驗(yàn)段施工總結(jié)報(bào)告
評(píng)論
0/150
提交評(píng)論