




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
sbit DS1302CE=P00;sbit DS1302CK=P02;sbit DS1302IO=P01;extern bit DS18B20_Reset(void);extern void DS18B20_Write(unsigned char command);extern unsigned char DS18B20_Read(void);sbit DQ=P10;#define RSCLR P0_5=0/PORTC &= BIT(PORTC0)#define RSSET P0_5=1/PORTC |= BIT(PORTC0)#define RWCLR P0_6=0/PORTC &= BIT(PORTC1)#define RWSET P0_6=1/PORTC |= BIT(PORTC1)#define ENCLR P0_7=0/PORTC &= BIT(PORTC2)#define ENSET P0_7=1/PORTC |= BIT(PORTC2)extern void lcd_delay(unsigned int delaytime);extern void write_lcd_command(unsigned char write_command);extern void write_lcd_data(unsigned char write_data);extern void initize_lcd(void);extern void lcd_displaystr(unsigned char x,unsigned char y,const unsigned char *str);extern void lcd_displaystr_ram(unsigned char x,unsigned char y,unsigned char *str);带温度测量LCD显示的实时时钟extern void Init_DS1302_RTC(void);extern unsigned char Read_DS1302_RTC(unsigned char RTC_Address);extern void Write_DS1302_RTC(unsigned char RTC_Address,unsigned char RTC_Data);#include #include 1602LCDDriver.h#include DS18B20Driver.h#include DS1302Driver.h/#include tiaozheng.h#include struct TimerStruct unsigned char Year; unsigned char Month; unsigned char Day; unsigned char Week; unsigned char Hour; unsigned char Minute; unsigned char Second; /const unsigned char DATECODE1=Tiaosh;/const unsigned char DATECODE=Date:;/const unsigned char TIMECODE=Time:;const unsigned char DATECODE1=TH;const unsigned char DATECODE2=DF;const unsigned char DATECODE3=DJ;/const unsigned char DATECODE4= ;sbit key1=P12;sbit key2=P13;sbit key3=P14;sbit sound=P11;sbit k1=P03;sbit k2=P04;unsigned char mins,hours,days,months,weeks,years;unsigned char a,b,c,k,flag1,flag2,flag3,flag4,flag5;unsigned char Minute1,Hour1,Day1,Month1,Week1,Year1;unsigned char Minute2,Hour2,Day2,Month2,Week2,Year2;unsigned char DATECODE221= ;unsigned char DATECODE331= ; /struct TimerStruct *Real;struct TimerStruct RealClock;unsigned char DateBuffer1=2006/08/18/5;unsigned char TimeBuffer1= 23:50:00;/const unsigned char DATECODE=Date:;/const unsigned char TIMECODE=Time:;unsigned char DateBuffer=2005/01/01/5;unsigned char TimeBuffer= 00:00:00;unsigned char LCDDisplayBuffer= ;unsigned int SecondCounter;/蜂鸣器测试void fmq_fre(unsigned char f) unsigned int i,j; for(i=f;i0;i-) for(j=248;j0;j-); /延时0.5MS void fmq_delay(unsigned char delaytimef) unsigned char j,h; for(j=delaytimef;j0;j-) /for(k=200;k0;k-) for(h=248;h0;h-) sound=1; fmq_fre(1); sound=0; fmq_fre(1); /jdq的测试void jdq_delay(unsigned char delaytimej) unsigned char k,i,j; for (k=delaytimej;k0;k-) for(i=200;i0;i-) for(j=248;j0;j-); void jdq(void) k1=0; k2=0; /时间调整void tiao_delay(void) unsigned char i,j; for(i=10;i0;i-) for(j=248;j0;j-); unsigned char change( void ) while(flag1) if(key2=0) tiao_delay(); if(key2=0) a+; if(key3=0) tiao_delay(); if(key3=0) a-; switch(k) case 1: mins=a%60; break; case 2: hours=a%24; break; case 3: days=a%32; break; case 4: weeks=a%8; break; case 5: months=a%13; break; case 6: years=a; break; TimeBuffer14=mins%10+0x30; /分个位 TimeBuffer13=mins/10+0x30; TimeBuffer11=hours%10+0x30; /时 TimeBuffer10=hours/10+0x30; DateBuffer19=days%10+0x30; /日 DateBuffer18=days/10+0x30; DateBuffer16=months%10+0x30;/月 DateBuffer15=months/10+0x30; DateBuffer111=weeks%10+0x30;/星期 DateBuffer13=years%10+0x30; /年 DateBuffer12=years/10+0x30;jdq_delay(2); if(key1=0) tiao_delay(); if(key1=0) flag1=0;write_lcd_command(12);lcd_displaystr_ram(0,1,DateBuffer1); lcd_displaystr_ram(1,1,TimeBuffer1); void tiao1(void) mins=mins-mins/16*6; hours=hours-hours/16*6; days=days-days/16*6; months=months-months/16*6; years=years-years/16*6; TimeBuffer14=mins%10+0x30; /分个位 TimeBuffer13=mins/10+0x30; TimeBuffer11=hours%10+0x30; /时 TimeBuffer10=hours/10+0x30; DateBuffer19=days%10+0x30; /日 DateBuffer18=days/10+0x30; DateBuffer16=months%10+0x30;/月 DateBuffer15=months/10+0x30; DateBuffer111=weeks%10+0x30;/星期 DateBuffer13=years%10+0x30; /年 DateBuffer12=years/10+0x30; lcd_displaystr_ram(0,1,DateBuffer1); lcd_displaystr_ram(1,1,TimeBuffer1); write_lcd_command(0x0f); write_lcd_command(0x80+0x45); jdq_delay(2); k=1,a=mins,flag1=1; change(); /分 write_lcd_command(0x0f); write_lcd_command(0x80+0x42); jdq_delay(2); k+,a=hours,flag1=1; change(); /时 write_lcd_command(0x0f); write_lcd_command(0x80+10); jdq_delay(2); k+,a=days,flag1=1; change(); /日void tiao2(void) write_lcd_command(0x0f); write_lcd_command(0x80+12); jdq_delay(2); k+,a=years,flag1=1; change(); /星期 write_lcd_command(0x0f); write_lcd_command(0x80+7); jdq_delay(2); k+,a=months,flag1=1; change(); /月 write_lcd_command(0x0f); write_lcd_command(0x80+4); jdq_delay(2); k+,a=years,flag1=1; change(); /年 mins=mins+mins/10*6; hours=hours+hours/10*6; days=days+days/10*6; months=months+months/10*6; years=years+years/10*6; jdq_delay(5);/调整1302时间void tiaozheng(struct TimerStruct *Real) lcd_displaystr(0,14,DATECODE1); mins=Real-Minute; hours=Real-Hour; days=Real-Day; months=Real-Month; weeks=Real-Week; years=Real-Year; tiao1(); tiao2(); write_lcd_command(0x01);/清屏 Write_DS1302_RTC(0x8e,0x00); /写控制 Write_DS1302_RTC(0x80,0x00); /写秒 Write_DS1302_RTC(0x82,mins); /写分 Write_DS1302_RTC(0x84,hours); /写时 Write_DS1302_RTC(0x86,days); /写日 Write_DS1302_RTC(0x88,months); /写月 Write_DS1302_RTC(0x8a,weeks); /写星期 Write_DS1302_RTC(0x8c,years); /写年 Write_DS1302_RTC(0x8e,0x80); /控制 initize_lcd(); Init_DS1302_RTC(); /调整蜂鸣器定时void dingshif(void) flag3=1; lcd_displaystr(0,14,DATECODE2); mins=Minute1; hours=Hour1; days=Day1; /months=Month1; /weeks=Week1; /years=Year1; tiao1(); tiao_delay(); mins=mins+mins/10*6; hours=hours+hours/10*6; days=days+days/10*6; Minute1=mins; Hour1=hours; Day1=days; /Month1=months; /Week1=weeks; /Year1=years; write_lcd_command(0x01);/清屏 DATECODE220=&; if(flag4=1) DATECODE330=!; jdq_delay(5); lcd_displaystr(0,14,DATECODE22); lcd_displaystr(0,15,DATECODE33);/调整继电器定时void dingshij(void) flag4=1; lcd_displaystr(0,14,DATECODE3); mins=Minute2; hours=Hour2; days=Day2; /months=Month2; /weeks=Week2; /years=Year2; tiao1(); mins=mins+mins/10*6; hours=hours+hours/10*6; days=days+days/10*6; Minute2=mins; Hour2=hours; Day2=days; / Month2=months; /Week2=weeks; /Year2=years; k1=k2=1; write_lcd_command(0x01); /清屏 DATECODE330=!; if(flag3=1) DATECODE220=&; jdq_delay(5); lcd_displaystr(0,14,DATECODE22); lcd_displaystr(0,15,DATECODE33);/蜂鸣器报警void dingshifmq(void) flag3=0;flag2=10; if( RealClock.Hour=Hour1) if( RealClock.Day=Day1) /if( RealClock.Month=Month1) / if( RealClock.Year=Year1) while(flag2) fmq_delay(1); flag2-; if(key1=0) tiao_delay(); if(key1=0) flag2=0; if(key1=0) tiao_delay(); if(key1=0) flag2=0; if(key1=0) tiao_delay(); if(key1=0) flag2=0; if(key1=0) tiao_delay(); if(key1=0) flag2=0; Minute1=Minute1-2; write_lcd_command(0x01);/清屏DATECODE220= ; if(flag4=0) DATECODE330= ; jdq_delay(5); lcd_displaystr(0,14,DATECODE22); lcd_displaystr(0,15,DATECODE33); jdq_delay(10); /继电器取消void dingshijdq(void) flag4=0; if( RealClock.Hour=Hour2) if( RealClock.Day=Day2) / if( RealClock.Month=Month2) / if( RealClock.Year=Year2)tiao_delay(); k1=0,k2=0;write_lcd_command(0x01);/清屏DATECODE330= ; if(flag3=0) DATECODE220= ; jdq_delay(5); lcd_displaystr(0,14,DATECODE22); lcd_displaystr(0,15,DATECODE33); Minute2=Minute2-1; /主函数void main(void) jdq(); RealClock.Minute=Minute1=Minute2; RealClock.Hour=Hour1=Hour2; RealClock.Day=Day1=Day2; RealClock.Month=Month1=Month2; RealClock.Year=Year1=Year2; flag5=1; fmq_delay(1); initize_lcd(); Init_DS1302_RTC(); /Write_DS1302_RTC(0x8e,0x00); /写控制 Write_DS1302_RTC(0x80,0x00); /写秒 /Write_DS1302_RTC(0x82,0x30); /写分 /Write_DS1302_RTC(0x84,0x12); /写时 /Write_DS1302_RTC(0x86,0x15); /写日 /Write_DS1302_RTC(0x88,0x08); /写月 /Write_DS1302_RTC(0x8a,0x3); /写星期 /Write_DS1302_RTC(0x8c,0x06); /写年 /Write_DS1302_RTC(0x8e,0x80); /控制 while(1) unsigned int Temp,Temperature; unsigned char TemperatureH; unsigned char TemperatureL; /struct TimerStruct RealClock; while(DS18B20_Reset(); DS18B20_Write(0xCC); DS18B20_Write(0xBE); TemperatureL=DS18B20_Read(); /低位 TemperatureH=DS18B20_Read(); /高位 while(DS18B20_Reset(); DS18B20_Write(0xCC); DS18B20_Write(0x44); Temp=TemperatureH*256+TemperatureL; /左移8位 if(Temp & 0xf800)/去除低7位 LCDDisplayBuffer0= ; Temp=(Temp)+1; TemperatureL=Temp%256; TemperatureH=Temp/256; Temp=4; Temperature=Temp;/右移四位 LCDDisplayBuffer1=Temp/10+0x30; LCDDisplayBuffer2=Temp%10+0x30; Temp=TemperatureL; Temp&=0x000F;/保留低四位 Temp*=625; /化小数 Temp/=100; LCDDisplayBuffer3=.; LCDDisplayBuffer4=Temp/10+0x30; LCDDisplayBuffer5=Temp%10+0x30; LCDDisplayBuffer6=C; Temp=Read_DS1302_RTC(0x81); /秒 RealClock.Second=Temp; TimeBuffer7=Temp%16+0x30; TimeBuffer6=Temp/16+0x30; Temp=Read_DS1302_RTC(0x83); /分 RealClock.Minute=Temp; TimeBuffer4=Temp%16+0x30; TimeBuffer3=Temp/16+0x30; /时 Temp=Read_DS1302_RTC(0x85); RealClock.Hour=Temp; TimeBuffer1=Temp%16+0x30; TimeBuffer0=Temp/16+0x30; Temp=Read_DS1302_RTC(0x87); /日 RealClock.Day=Temp; DateBuffer9=Temp%16+0x30; DateBuffer8=Temp/16+0x30; Temp=Read_DS1302_RTC(0x89); /月 RealClock.Month=Temp; DateBuffer6=Temp%16+0x30; DateBuffer5=Temp/16+0x30; Temp=Read_DS1302_RTC(0x8b); /星期 RealClock.Week=Temp; DateBuffer11=Temp%16+0x30; Temp=Read_DS1302_RTC(0x8d); /年 RealClock.Year=Temp; DateBuffer3=Temp%16+0x30; DateBuffer2=Temp/16+0x30; lcd_displaystr_ram(0,1,DateBuffer); lcd_displaystr_ram(1,1,TimeBuffer); lcd_displaystr_ram(1,sizeof(TimeBuffer),LCDDisplayBuffer); if(key1=0) tiao_delay(); if(key1=0) tiaozheng(&RealClock); if(key2=0) tiao_delay(); if(key2=0) dingshif(); if(key3=0) dingshij(); if(key3=0) tiao_delay(); if(RealClock.Minute=Minute1) dingshifmq(); if(RealClock.Minute=Minute2) dingshijdq(); if(RealClock.Minute=0x00) if(flag5=1) fmq_delay(2),flag5=0; if(RealClock.Minute=0x02) flag5=1; /if(Temperature=0x3500) fmq_delay(1); /if(Temperature=0x3300) fmq_delay(2); 1602LCDDriver#include #include 1602LCDDriver.hvoid lcd_delay(unsigned int delaytime) while(delaytime)delaytime-;void write_lcd_command(unsigned char write_command) lcd_delay(25); RSCLR; RWCLR; /LCDPORT=write_command; P2_0=(bit)(write_command & 0x80); write_command+=write_command; P2_1=(bit)(write_command & 0x80); write_command+=write_command; P2_2=(bit)(write_command & 0x80); write_command+=write_command; P2_3=(bit)(write_command & 0x80); write_command+=write_command; P2_4=(bit)(write_command & 0x80); write_command+=write_command; P2_5=(bit)(write_command & 0x80); write_command+=write_command; P2_6=(bit)(write_command & 0x80); write_command+=write_command; P2_7=(bit)(write_command & 0x80); ENSET; ENCLR;void write_lcd_data(unsigned char write_data) lcd_delay(25); RSSET; RWCLR; /LCDPORT=write_data; P2_0=(bit)(write_data & 0x80); write_data += write_data; P2_1=(bit)(write_data & 0x80); write_data+=write_data; P2_2=(bit)(write_data & 0x80); write_data+=write_data; P2_3=(bit)(write_data & 0x80); write_data+=write_data; P2_4=(bit)(write_data & 0x80); write_data+=write_data; P2_5=(bit)(write_data & 0x80); write_data+=write_data; P2_6=(bit)(write_data & 0x80); write_data+=write_data; P2_7=(bit)(write_data & 0x80); ENSET; ENCLR;void initize_lcd(void) unsigned char i; ENCLR; for(i=200;i0;i-)lcd_delay(248); write_lcd_command(0x3f); for(i=4;i0;i-)lcd_delay(248); write_lcd_command(0x3f); write_lcd_command(0x0f); write_lcd_command(0x01); for(i=4;i0;i-)lcd_delay(248); write_lcd_command(0x06);void lcd_displaystr(unsigned char x,unsigned char y,const unsigned char *str) switch(x) case 0: write_lcd_command(0x80+y); break; case 1: write_lcd_command(0xc0+y); break; while(*str) write_lcd_data(*str); str+; void lcd_displaystr_ram(unsigned char x,unsigned char y,unsigned char *str) switch(x) case 0: write_lcd_command(0x80+y); break; case 1: write_lcd_command(0xc0+y); break; while(*str) write_lcd_data(*str); str+;DS18B20Driver#include #include #include DS18B20Driver.hbit DS18B20_Reset(void) unsigned char i; DQ=0; /for(i=255;i0;i-); for(i=255;i0;i-); DQ=1; / for(i=60;i0;i-); for(i=60;i0;i-); return(DQ); /for(i=200;i0;i-); for(i=200;i0;i-);void DS18B20_Write(unsigned char command) unsigned cha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加法减法考试题目及答案
- 2025年事业单位工勤技能考试试题预测试卷【预热题】附答案详解
- 2025年辽宁职业学院单招考试文化素质物理试题预测试卷及答案详解一套
- 冬季加绒打底衫穿着指南
- 一、档案袋封皮填写说明及范例
- 景观园林设计与施工一体化项目合同样本
- 类第号上海证券交易所投资者保护基金管理合同
- 离婚财产分割与婚前协议实施及权益保障合同
- 夫妻一方出轨并转移财产导致离婚诉讼起诉合同
- 离婚时房产、车辆等资产分割协议参考样例
- 2024年内蒙古人力资源和社会保障厅事业单位笔试真题
- 升降机风险辨识及防范措施
- 中医治未病健康宣教
- 食堂员工服务培训
- 提升心理抗压能力的技巧
- 中医医术确有专长人员(多年实践人员)医师资格考核申请表
- 低空飞行器设计
- 《穴位埋线疗法》课件
- 【大型集装箱船舶港口断缆事故预防应急处理及案例探析7500字(论文)】
- 脑梗塞并出血护理查房
- 三对三篮球赛记录表
评论
0/150
提交评论