![基于51單片機(jī)的DS1302+LCD12864+DS18B20小綜合.doc_第1頁](http://file.renrendoc.com/FileRoot1/2019-11/11/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb1.gif)
![基于51單片機(jī)的DS1302+LCD12864+DS18B20小綜合.doc_第2頁](http://file.renrendoc.com/FileRoot1/2019-11/11/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb2.gif)
![基于51單片機(jī)的DS1302+LCD12864+DS18B20小綜合.doc_第3頁](http://file.renrendoc.com/FileRoot1/2019-11/11/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb3.gif)
![基于51單片機(jī)的DS1302+LCD12864+DS18B20小綜合.doc_第4頁](http://file.renrendoc.com/FileRoot1/2019-11/11/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb4.gif)
![基于51單片機(jī)的DS1302+LCD12864+DS18B20小綜合.doc_第5頁](http://file.renrendoc.com/FileRoot1/2019-11/11/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb/c7bcf0ea-b84c-4cb3-9682-f1e43a71cbbb5.gif)
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
#include#include#define uint unsigned int#define uchar unsigned char#define first_line 0x80#define second_line 0x90#define third_line 0x88#define forth_line 0x98#define sec_addr_pos 0x04#define min_addr_pos 0x02#define hor_addr_pos 0x00#define day_addr_pos 0x05#define mon_addr_pos 0x03#define yer_addr_pos 0x01#define wek_addr_pos 0x02#definesbl_addr_pos 0x04#define Tep_addr_pos 0x05#define Tmp_addr_pos 0x06uchar code line_one=2016年10月31日 ;uchar code line_two=14:22:45 ;uchar code line_three=星期五 - 23 ;uchar str_wek=一二三四五六日;char second,minute,hour,day,week,month,year;uchar key_flag,mode_cnt;uint temperature,symbol;/用于存儲DS18B20采集的整個數(shù)據(jù)uchar DS18B20_H;/用于存儲DS18B20數(shù)據(jù)采集的整數(shù)部分uchar DS18B20_L;/用于存儲DS18B20數(shù)據(jù)采集的小數(shù)部分uchar init_18B20_fail;sfr LCD_DATA=0x80;sbit LCD_EN=P27;sbit LCD_RS=P26;sbit LCD_RW=P25;sbit DS_CLK=P36;sbit DS_RST=P35;sbit DS_IO=P34;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit key_1=P24;sbit key_2=P23;sbit key_3=P22;sbit DQ=P37; void delay_ms(uint ms);void delay_us(uint us);bit busy(void);void write_command(uchar command);void write_data(uchar dat);void lcd_pos(uchar x,uchar y);void LCD_init(void);void Input_1byte(uchar TD);uchar Output_1byte(void);uchar Read_DS1302(uchar DS_ADD);void write_DS1302(uchar DS_ADD,uchar DS_DATE);void write_time(uchar addr,uchar num);uchar BCD_to_Dec(uchar num);void write_week(uchar num);void write_date(uchar addr,uchar num);uchar readsecond(void);uchar readminute(void);uchar readhour(void);uchar readday(void);uchar readmonth(void);uchar readweek(void);uchar readyear(void);void readtime(void);void DS1302_init(void);void key_scan(void);uchar DS18B20_read_byte(void);void DS18B20_write_byte(uchar byte);uchar DS18B20_Init(void);uint read_temperature(void);void write_temp(uchar temp_h);void write_symbol(uchar addr,uchar symbol);void display_18B20_err(void);void main(void)key_flag=0;second=20;minute=30;hour=10;day=31;week=3;month=12;year=16;LCD_init();/*while(1)write_date(day_addr_pos,day);write_date(mon_addr_pos,month);write_date(yer_addr_pos,year);write_time(sec_addr_pos,second);write_time(min_addr_pos,minute);write_time(hor_addr_pos,hour);write_week(week);*/if(!(Read_DS1302(0x8E)&0x80)DS1302_init();while(1)key_scan();if(key_flag=0)second=Read_DS1302(0x81);write_time(sec_addr_pos,BCD_to_Dec(second);minute=Read_DS1302(0x83);write_time(min_addr_pos,BCD_to_Dec(minute); hour=Read_DS1302(0x85);write_time(hor_addr_pos,BCD_to_Dec(hour);week=Read_DS1302(0x8B);write_week(week); day=Read_DS1302(0x87);write_date(day_addr_pos,BCD_to_Dec(day);month=Read_DS1302(0x89);write_date(mon_addr_pos,BCD_to_Dec(month);year=Read_DS1302(0x8D);write_date(yer_addr_pos,BCD_to_Dec(year);readtime();/讀出十進(jìn)制數(shù),提供給按鍵進(jìn)行數(shù)據(jù)的+/-的處理temperature=read_temperature();init_18B20_fail=DS18B20_Init();if(init_18B20_fail=0)/temperature=read_temperature();if(temperature&0x8000)=0x8000)/判斷讀取的溫度是正溫度還是負(fù)溫度 symbol=0x2D;/write_symbol(0x0A,0x2C);/顯示負(fù)號temperature=temperature+1;/負(fù)溫度時處理,原數(shù)取反再加1elsesymbol=0xfe;/write_symbol(0x0A,0xfe);/不顯示正號/write_symbol(0x0A,symbol);DS18B20_H=(temperature4)&0x7f;/取溫度讀數(shù)的整數(shù)部分DS18B20_L=temperature&0x0f;/取溫度讀數(shù)的小數(shù)部分write_symbol(sbl_addr_pos,symbol);write_temp(DS18B20_H);elsedisplay_18B20_err();void delay_us(uint us)while(us-);void delay_ms(uint ms)uchar i;while(ms-)for(i=250;i0;i-)_nop_();_nop_();_nop_();_nop_();bit busy(void)bit result;LCD_RS=0;LCD_RW=1;LCD_EN=1;result=(bit)(LCD_DATA&0x80);LCD_EN=0;return result;void write_command(uchar command)while(busy();LCD_RS=0;LCD_RW=0;LCD_EN=1;delay_us(1);LCD_DATA=command;delay_us(1);LCD_EN=0;void write_data(uchar dat)while(busy();LCD_RS=1;LCD_RW=0;LCD_EN=1;delay_us(1);LCD_DATA=dat;delay_us(1);LCD_EN=0;void lcd_pos(uchar x,uchar y)uchar pos;if(x=0)x=0x80;else if(x=1)x=0x90;else if(x=2)x=0x88;else if(x=3)x=0x98;pos=x+y;write_command(pos);void LCD_init(void)uchar i;write_command(0x30);delay_ms(1);write_command(0x30);delay_ms(1);write_command(0x0C);delay_ms(1);write_command(0x01);delay_ms(1);write_command(0x06);delay_ms(1);write_command(first_line); for(i=0;i16;i+) write_data(line_onei); write_command(second_line); for(i=0;i16;i+) write_data(line_twoi); write_command(third_line);for(i=0;i0;i-) DS_IO=ACC0;DS_CLK=1;DS_CLK=0;ACC=ACC1;uchar Output_1byte(void) uchar i; for(i=8;i0;i-) ACC=ACC1; ACC7=DS_IO; DS_CLK=1; DS_CLK=0; return(ACC);uchar Read_DS1302(uchar DS_ADD) uchar DS_INF; DS_RST=0; DS_CLK=0; DS_RST=1; Input_1byte(DS_ADD); DS_INF=Output_1byte(); DS_CLK=1; DS_RST=0; return(DS_INF); void write_DS1302(uchar DS_ADD,uchar DS_DATE) DS_RST=0; DS_CLK=0; DS_RST=1; Input_1byte(DS_ADD); Input_1byte(DS_DATE); DS_CLK=1; DS_RST=0;void DS1302_init(void)second=57;minute=59;hour=23;day=30;month=3;week=5;year=16;write_DS1302(0x8E,0x00);/NWPwrite_DS1302(0x80,(second/10)4|(second%10);write_DS1302(0x82,(minute/10)4|(minute%10);write_DS1302(0x84,(hour/10)4|(hour%10);write_DS1302(0x86,(day/10)4|(day%10);write_DS1302(0x88,(month/10)4|(month%10);write_DS1302(0x8A,(week/10)4|(week%10);write_DS1302(0x8C,(year/10)4;NUM_L=num&0x0f;NUM=(NUM_H*10)+NUM_L;return NUM;void write_week(uchar num)uchar i;switch(num)case 1:write_command(third_line+wek_addr_pos);for(i=0;i2;i+)write_data(str_weki);delay_ms(5);break;case 2:write_command(third_line+wek_addr_pos);for(i=2;i4;i+)write_data(str_weki);delay_ms(5);break;case 3:write_command(third_line+wek_addr_pos);for(i=4;i6;i+)write_data(str_weki);delay_ms(5);break;case 4:write_command(third_line+wek_addr_pos);for(i=6;i8;i+)write_data(str_weki);delay_ms(5);break;case 5:write_command(third_line+wek_addr_pos);for(i=8;i10;i+)write_data(str_weki);delay_ms(5);break;case 6:write_command(third_line+wek_addr_pos);for(i=10;i12;i+)write_data(str_weki);delay_ms(5);break;case 7:write_command(third_line+wek_addr_pos);for(i=12;i4)*10+(dat&0x0f);return second;/*讀出分的十進(jìn)制數(shù)*/uchar readminute(void)uchar dat;dat=Read_DS1302(0x83);minute=(dat&0x70)4)*10+(dat&0x0f);return minute;/*讀出小時的十進(jìn)制數(shù)*/uchar readhour(void)uchar dat;dat=Read_DS1302(0x85);hour=(dat&0x70)4)*10+(dat&0x0f);return hour;/*讀出天的十進(jìn)制數(shù)*/uchar readday(void)uchar dat;dat=Read_DS1302(0x87);day=(dat&0x70)4)*10+(dat&0x0f);return day;/*讀出月的十進(jìn)制數(shù)*/uchar readmonth(void)uchar dat;dat=Read_DS1302(0x89);month=(dat&0x70)4)*10+(dat&0x0f);return month;/*讀出周的十進(jìn)制數(shù)*/uchar readweek(void)uchar dat;dat=Read_DS1302(0x8b);week=(dat&0x70)4)*10+(dat&0x0f);return week;/*讀出年的十進(jìn)制數(shù)*/uchar readyear(void)uchar dat;dat=Read_DS1302(0x8d);year=(dat&0xf0)4)*10+(dat&0x0f);return year;void key_scan(void)if(key_1=0)delay_ms(5);if(key_1=0)while(!key_1);mode_cnt+;key_flag=1;write_DS1302(0x8E,0x00);write_DS1302(0x80,0x80);write_DS1302(0x8E,0x80);if(mode_cnt=8)key_flag=0;mode_cnt=0;write_command(0x0C);write_DS1302(0x8E,0x00);write_DS1302(0x80,0x00);write_DS1302(0x80,(second/10)4|(second%10);write_DS1302(0x82,(minute/10)4|(minute%10);write_DS1302(0x84,(hour/10)4|(hour%10);write_DS1302(0x86,(day/10)4|(day%10);write_DS1302(0x88,(month/10)4|(month%10);write_DS1302(0x8A,(week/10)4|(week%10);write_DS1302(0x8C,(year/10)=30)day=1;/month+;elseif(day=29)day=1;/month+;if(month=4|month=6|month=9|month=11)if(day=31)day=1;/month+;write_date(day_addr_pos,day);delay_ms(5);write_command(first_line+day_addr_pos);delay_ms(5);break;case 2:month+;if(month=13)month=1;write_date(mon_addr_pos,month);delay_ms(5);write_command(first_line+mon_addr_pos);delay_ms(5);break;case 1:year+;if(year=100)year=0;write_date(yer_addr_pos,year);delay_ms(5);write_command(first_line+yer_addr_pos);delay_ms(5);break;if(key_3=0)delay_ms(5);if(key_3=0)while(!key_3);switch(mode_cnt)case 6:second-;if(second0)second=59;write_time(sec_addr_pos,second);delay_ms(5);/write_command(second_line+11);write_command(second_line+sec_addr_pos);delay_ms(5);break;case 5:minute-;if(minute0)minute=59;write_time(min_addr_pos,minute);delay_ms(5);/write_command(second_line+8);write_command(second_line+min_addr_pos);delay_ms(5);break;case 4:hour-;if(hour0)hour=23;write_time(hor_addr_pos,hour);delay_ms(5);/write_command(second_line+5);write_command(second_line+hor_addr_pos);delay_ms(5);break;case 7:week-;if(week=0)week=7;write_week(week);delay_ms(5);write_command(third_line+wek_addr_pos);delay_ms(5);break;case 3:day-;if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)if(day=0)day=31;/month+;if(month=2)if(year+2000)%4=0&(year+2000)%100!=0|(year+2000)%400=0)if(day=0)day=29;/month+;elseif(day=0)day=28;/month+;if(month=4|month=6|month=9|month=11)if(day=0)day=30;/month+;write_date(day_addr_pos,day);delay_ms(5);write_command(first_line+day_addr_pos);delay_ms(5);break;case 2:month-;if(month=0)month=12;write_date(mon_addr_pos,month);delay_ms(5);write_command(first_line+mon_addr_pos);delay_ms(5);break;case 1:year-;if(year0)year=99;write_date(yer_addr_pos,year);delay_ms(5);write_command(first_line+yer_addr_pos);delay_ms(5);break;void DS18B20_write_byte(uchar byte)uchar i=0;for(i=0;i=1;delay_us(5);uchar DS18B20_read_byte(void)uchar i,temp=0;for(i=0;i=1;DQ=1;if(DQ)temp=temp|0x80;d
溫馨提示
- 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標(biāo)準(zhǔn)版?zhèn)€人購房合同書
- 2025合伙買車合同
- 2024-2025學(xué)年新教材高中生物 第二章 基因和染色體的關(guān)系 微專題四 伴性遺傳的解題方法說課稿 新人教版必修第二冊
- 預(yù)制樓板施工方案
- 肇慶鋼板樁支護(hù)施工方案
- 別墅電梯出售合同范例
- 2023九年級數(shù)學(xué)下冊 第二十九章 投影與視圖29.1 投影第2課時 正投影說課稿 (新版)新人教版001
- 2024年四年級英語上冊 Unit 3 Let's Go Lesson 15 In the City說課稿 冀教版(三起)
- 自然補(bǔ)償管道施工方案
- 2024年四年級英語上冊 Unit 1 My classroom The fifth period(第五課時)說課稿 人教PEP
- 2025年熱管換熱氣行業(yè)深度研究分析報告
- 職業(yè)學(xué)院學(xué)生晚出、晚歸、不歸管理辦法
- 2025年陜西西安市經(jīng)濟(jì)技術(shù)開發(fā)區(qū)管委會招聘30人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025山東能源集團(tuán)中級人才庫選拔高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《安利蛋白質(zhì)粉》課件
- 【可行性報告】2024年數(shù)據(jù)標(biāo)注與審核項(xiàng)目可行性研究分析報告
- 2024-2025學(xué)年滬科版數(shù)學(xué)七年級上冊期末綜合測試卷(一)(含答案)
- 2025門診護(hù)理工作計劃
- 《針法灸法》課件-溫灸器灸
- 電氣領(lǐng)域知識培訓(xùn)課件
- 山東省部分學(xué)校2024-2025學(xué)年高一上學(xué)期12月選科指導(dǎo)聯(lián)合測試地理試題( 含答案)
評論
0/150
提交評論