




已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
#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();/讀出十進制數(shù),提供給按鍵進行數(shù)據(jù)的+/-的處理temperature=read_temperature();init_18B20_fail=DS18B20_Init();if(init_18B20_fail=0)/temperature=read_temperature();if(temperature&0x8000)=0x8000)/判斷讀取的溫度是正溫度還是負溫度 symbol=0x2D;/write_symbol(0x0A,0x2C);/顯示負號temperature=temperature+1;/負溫度時處理,原數(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;/*讀出分的十進制數(shù)*/uchar readminute(void)uchar dat;dat=Read_DS1302(0x83);minute=(dat&0x70)4)*10+(dat&0x0f);return minute;/*讀出小時的十進制數(shù)*/uchar readhour(void)uchar dat;dat=Read_DS1302(0x85);hour=(dat&0x70)4)*10+(dat&0x0f);return hour;/*讀出天的十進制數(shù)*/uchar readday(void)uchar dat;dat=Read_DS1302(0x87);day=(dat&0x70)4)*10+(dat&0x0f);return day;/*讀出月的十進制數(shù)*/uchar readmonth(void)uchar dat;dat=Read_DS1302(0x89);month=(dat&0x70)4)*10+(dat&0x0f);return month;/*讀出周的十進制數(shù)*/uchar readweek(void)uchar dat;dat=Read_DS1302(0x8b);week=(dat&0x70)4)*10+(dat&0x0f);return week;/*讀出年的十進制數(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省無錫錫東片2025屆初三語文試題中考模擬試題含解析
- 五邑大學《開放性實驗》2023-2024學年第二學期期末試卷
- 蘆溪縣2025年數(shù)學三下期末統(tǒng)考模擬試題含解析
- 遼寧稅務高等??茖W校《機電工程專業(yè)英語》2023-2024學年第一學期期末試卷
- 嘉興職業(yè)技術學院《臨床流行病學》2023-2024學年第二學期期末試卷
- 擔保協(xié)議書的范例二零二五年
- 二零二五場地轉(zhuǎn)租協(xié)議書
- 知識產(chǎn)權委托代理協(xié)議書二零二五年
- 學校校長聘用合同書協(xié)議書二零二五年
- 二零二五影視劇導演聘用勞動合同書例文
- 2025年財務管理考試題目分析試題及答案
- 鍍銀鏡子原片行業(yè)直播電商戰(zhàn)略研究報告
- 浙江省嘉興市2025屆高三下學期4月二模試題 地理 含解析
- 2025年杭州市高三英語4月二模質(zhì)檢考試卷附答案解析
- 養(yǎng)老院安全知識培訓課件
- 基礎教育教學研究項目結項鑒定審批書
- 中小學生心理健康教育課件
- 2025年03月北京住房公積金管理中心(北京市住房資金管理中心)公開招聘8人筆試歷年參考題庫考點剖析附解題思路及答案詳解
- 預防觸電知識培訓
- 中藥煎藥室工作制度和流程
- 京瓷哲學學習與應用課件
評論
0/150
提交評論