版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 單片機萬年歷程序#include /調(diào)用單片機頭文件#define uchar unsigned char /無符號字符型 宏定義變量范圍0255#define uint unsigned int /無符號整型 宏定義變量范圍065535#include eeprom52.h#include nongli.hbit flag_200ms ;bit flag_100ms ;sbit beep = P37; /蜂鳴器定義bit flag_beep_en;uint clock_value; /用作鬧鐘用的sbit dq = P31; /18b20 IO口的定義uint temperature ;
2、/溫度變量uchar flag_nl; /農(nóng)歷 陽歷顯示標(biāo)志位uchar menu_1,menu_2;uchar key_time,flag_value; /用做連加的中間變量bit key_500ms ;uchar n_nian,n_yue,n_ri;/農(nóng)歷顯示的函數(shù)#include ds1302.h#include lcd1602.h/*把數(shù)據(jù)保存到單片機內(nèi)部eeprom中*/void write_eeprom()SectorErase(0x2000);byte_write(0x2000, fen1);byte_write(0x2001, shi1);byte_write(0x2002,
3、open1);byte_write(0x2058, a_a);/*把數(shù)據(jù)從單片機內(nèi)部eeprom中讀出來*/void read_eeprom()fen1 = byte_read(0x2000);shi1 = byte_read(0x2001);open1 = byte_read(0x2002);a_a = byte_read(0x2058);/*開機自檢eeprom初始化*/void init_eeprom()read_eeprom();/先讀if(a_a != 1)/新的單片機初始單片機內(nèi)問eepromfen1 = 3;shi1 = 8;open1 = 1;a_a = 1;write_eep
4、rom(); /保存數(shù)據(jù)/*18b20初始化函數(shù)*/void init_18b20()bit q;dq = 1;/把總線拿高delay_uint(1); /15usdq = 0;/給復(fù)位脈沖delay_uint(80);/750usdq = 1;/把總線拿高 等待delay_uint(10);/110usq = dq;/讀取18b20初始化信號delay_uint(20);/200usdq = 1;/把總線拿高 釋放總線/*寫18b20內(nèi)的數(shù)據(jù)*/void write_18b20(uchar dat)uchar i;for(i=0;i= 1;/*讀取18b20內(nèi)的數(shù)據(jù)*/uchar read_
5、18b20()uchar i,value;for(i=0;i= 1; /讀數(shù)據(jù)是低位開始dq = 1; /釋放總線if(dq = 1) /開始讀寫數(shù)據(jù) value |= 0x80;delay_uint(5); /60us讀一個時間隙最少要保持60us的時間return value; /返回數(shù)據(jù)/*讀取溫度的值 讀出來的是小數(shù)*/uint read_temp()uint value;uchar low; /在讀取溫度的時候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會影響到18b20的時序init_18b20(); /初始化18b20write_18b20(0xcc); /跳過64位ROMwri
6、te_18b20(0x44); /啟動一次溫度轉(zhuǎn)換命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳過64位ROMwrite_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ù)return value; /返回讀
7、出的溫度 帶小數(shù)/*1ms 延時函數(shù)*/void delay_1ms(uint q)uint i,j;for(i=0;iq;i+)for(j=0;j120;j+);/*寫星期函數(shù)*/void write_week(uchar hang,uchar add,uchar week)/寫星期函數(shù)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add); switch(week)case 1:write_data(M);/星期數(shù)為1時,顯示 write_data(O); write_data(N); break; case 2:write_
8、data(T);/星期數(shù)據(jù)為2時顯示 write_data(U); write_data(E); break;case 3:write_data(W);/星期數(shù)據(jù)為3時顯示 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時顯示 write_data(R); write_data(I); break;case 6:write_data(S);/星期數(shù)據(jù)為6時顯示 write_dat
9、a(T); write_data(A); break;case 0:write_data(S);/星期數(shù)據(jù)為7時顯示 write_data(U); write_data(N); break;/*時鐘顯示*/void init_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,temp
10、erature); /顯示溫度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初始化程序*/void init_time0() EA = 1; /開總中斷TMOD = 0X01;
11、/定時器0、工作方式1ET0 = 1; /開定時器0中斷 TR0 = 1; /允許定時器0定時/*鬧鐘報警函數(shù)*/void menu_dis()static uchar mm,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 = 1;
12、 /蜂鳴器停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;/*獨立按鍵程序*/uchar key_can; /按鍵值void key() /獨立按鍵程序static uchar key_new;key_can = 20; /按鍵值還原P3 |= 0x78; /對應(yīng)的按鍵IO口輸出為1if(P3 & 0x78) != 0x78)/按鍵按下delay_1ms(1); /按鍵消抖動if(P3
13、 & 0x78) != 0x78) & (key_new = 1)/確認是按鍵按下key_new = 0;switch(P3 & 0x78)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_can); /顯示按鍵值else key_new = 1;/*設(shè)置函數(shù)*/void key_with()if(key_can
14、 = 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, set clock );write_string(2,0, Y 00: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)/選擇鍵fl
15、ag_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 & 0x
16、0f) = 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+
17、=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)
18、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) = 0
19、x00)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
20、;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
21、(2,3,nian); /顯示年write_sfm2_ds1302(2,6,yue); /顯示月write_sfm2_ds1302(2,9,ri); /顯示日switch(menu_2) / 光標(biāo)顯示case 1: write_guanbiao(1,2,1); break;case 2: write_guanbiao(1,5,1); break;case 3: write_guanbiao(1,8,1); break;case 4: write_guanbiao(1,14,1); break;case 5: write_guanbiao(2,3,1); break;case 6: write_
22、guanbiao(2,6,1); break;case 7: write_guanbiao(2,9,1); break;write_time(); /把時間寫進去/*設(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 =
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年環(huán)保物聯(lián)網(wǎng)項目實施與運營合同
- 2024年度大數(shù)據(jù)分析與處理信息技術(shù)咨詢服務(wù)協(xié)議3篇
- 2024年軟件使用許可標(biāo)準(zhǔn)化協(xié)議
- 貝雷片租賃贈與合同
- 2024旅行社旅游推廣宣傳承包合作協(xié)議3篇
- 2024年財產(chǎn)轉(zhuǎn)讓協(xié)議:詳細所有權(quán)變更指南3篇
- 2024年甲乙雙方關(guān)于養(yǎng)老服務(wù)提供與收費協(xié)議
- 2024年退場項目員工安置與補償協(xié)議范本3篇
- 2024年綜合項目管理咨詢服務(wù)協(xié)議
- 2025版供應(yīng)鏈金融服務(wù)-倉單質(zhì)押庫存融資合作協(xié)議3篇
- JB-T 4088.1-2022 日用管狀電熱元件 第1部分:通用要求
- JGJT341-2014 泡沫混凝土應(yīng)用技術(shù)規(guī)程
- 鋼結(jié)構(gòu)安裝工程旁站監(jiān)理記錄表
- 人教版英語五年級上冊 Unit 2 Part A
- 常見中藥價格表
- IDC云數(shù)據(jù)中心機房運維服務(wù)解決方案
- 維西縣城市生活垃圾熱解處理工程環(huán)評報告
- GB/T 9128.2-2023鋼制管法蘭用金屬環(huán)墊第2部分:Class系列
- 網(wǎng)絡(luò)經(jīng)濟學(xué)PPT完整全套教學(xué)課件
- 2023年主治醫(yī)師(中級)-臨床醫(yī)學(xué)檢驗學(xué)(中級)代碼:352考試參考題庫附帶答案
- 機械原理課程設(shè)計鎖梁自動成型機床切削機構(gòu)
評論
0/150
提交評論