




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#define uchar unsigned char#define uint unsigned int/*-寄存器地址定义-*/#define WRITE_SECOND0x80 #define WRITE_MINUTE0x82 #define WRITE_HOUR0x84#define WRITE_DAY0x86#define WRITE_MONTH0x88#define WRITE_YEAR0x8C #define WRITE_PROTECT0x8E#define WRITE_WEEK0x8A#define WRITE_CURRENT 0x90 #define READ_SECOND0x81 #define READ_MINUTE0x83 #define READ_HOUR0x85#define READ_DAY0x87#define READ_MONTH0x89#define READ_WEEK0x8B#define READ_YEAR0x8D sbit RST=P35; /DS1302片选sbit DIO=P34; /DS1302数据信号sbit SCLK=P36; /DS1302时钟信号sbit ACC7=ACC7;sbit ACC0=ACC0; unsigned char count; sbit beep=P14;void INITIAL_1302(); unsigned char READ_1302(unsigned char addr); void WRITE_1302(unsigned char addr,unsigned char date);sbit LCD_E=P27; /液晶使能端sbit LCD_RS=P26; /液晶数据命令选择端sbit LCD_RW=P25; /液晶读写选择端sbit key0=P32; /功能键sbit key1=P33; /增大键sbit key2=P34; /减小键sbit DQ=P37; /18b20温度输入输出端char hour,minute,second,week,day,month,year,tem;unsigned char num,flag;unsigned char str1= 20 - - ;unsigned char str2= : : C;void delay(unsigned char z);void LCD_WRITE_COM(unsigned char com);void LCD_WRITE_DATA(unsigned char date);void LCD_WRITE_SFM(unsigned char addr,unsigned char date);void LCD_WRITE_NYR(unsigned char addr,unsigned char date);void LCD_WRITE_WEEK(unsigned char week);void LCD_INITIAL();void LCD_WRITE_TEMP(uchar addr,uchar temp);void keyscan();void INITIAL_TEMER0();uchar TMPH ,TMPL;void w1602c(uchar com);void w1602d(uchar data01);void delay2(uint ms);void delay3(uint us);uchar resert(void);uchar read_byte();void write_byte(uchar val);uint get_temp();void display();void delay3(uint us); /18b20uchar resert(void); /18b20uchar read_byte(); /18b20void write_byte(uchar val); /18b20uint get_temp(); /18b20 void main() LCD_INITIAL(); /液晶初始化 INITIAL_1302(); /DS1302初始化 INITIAL_TEMER0(); /定时器初始化 while(1) keyscan(); /按键扫描if(flag=0) /当标志位为0,允许读取DS1302数据,将数据送入液晶显示 second=READ_1302(0x81); LCD_WRITE_SFM(10,second); minute=READ_1302(0x83); LCD_WRITE_SFM(7,minute); hour=READ_1302(0x85); LCD_WRITE_SFM(4,hour); week=READ_1302(0x8b); LCD_WRITE_WEEK(week); day=READ_1302(0x87); LCD_WRITE_NYR(9,day); month=READ_1302(0x89); LCD_WRITE_NYR(6,month); year=READ_1302(0x8d); LCD_WRITE_NYR(3,year); tem=get_temp(); LCD_WRITE_TEMP(13,tem); /*1602BU份*/void delay(unsigned char z) /1602de延时函数 unsigned char x,y; for(x=z;x0;x-) for(y=110;y0;y-);void LCD_WRITE_COM(unsigned char com) LCD_RS=0; LCD_RW=0; LCD_E=1; P0=com; delay(5); LCD_E=0;void LCD_WRITE_DATA(unsigned char date) LCD_RS=1; LCD_RW=0; LCD_E=1; P0=date; delay(5); LCD_E=0;void LCD_WRITE_SFM(unsigned char addr,unsigned char date) unsigned char shi,ge; shi=date/10; ge=date%10; LCD_WRITE_COM(0x80+0x40+addr); LCD_WRITE_DATA(0x30+shi); LCD_WRITE_DATA(0x30+ge); void LCD_WRITE_NYR(unsigned char addr,unsigned char date) char shi,ge; shi=date/10; ge=date%10; LCD_WRITE_COM(0x80+addr); LCD_WRITE_DATA(0x30+shi); LCD_WRITE_DATA(0x30+ge);void LCD_WRITE_WEEK(unsigned char week) LCD_WRITE_COM(0x80+12); switch(week) case 1: LCD_WRITE_DATA(M);delay(5); LCD_WRITE_DATA(O);delay(5); LCD_WRITE_DATA(N);break; case 2: LCD_WRITE_DATA(T);delay(5); LCD_WRITE_DATA(U);delay(5); LCD_WRITE_DATA(E);break; case 3: LCD_WRITE_DATA(W);delay(5); LCD_WRITE_DATA(E);delay(5); LCD_WRITE_DATA(D);break; case 4: LCD_WRITE_DATA(T);delay(5); LCD_WRITE_DATA(H);delay(5); LCD_WRITE_DATA(U);break; case 5: LCD_WRITE_DATA(F);delay(5); LCD_WRITE_DATA(R);delay(5); LCD_WRITE_DATA(I);break; case 6: LCD_WRITE_DATA(S);delay(5); LCD_WRITE_DATA(A);delay(5); LCD_WRITE_DATA(T);break; case 7: LCD_WRITE_DATA(S);delay(5); LCD_WRITE_DATA(U);delay(5); LCD_WRITE_DATA(N);break; void LCD_WRITE_TEMP(uchar addr,uchar temp)char shi,ge; shi=temp/10; ge=temp%10; LCD_WRITE_COM(0x80+0x40+addr); LCD_WRITE_DATA(0x30+shi); LCD_WRITE_DATA(0x30+ge);void LCD_INITIAL() unsigned char i;LCD_WRITE_COM(0x38); LCD_WRITE_COM(0x0c); LCD_WRITE_COM(0x06); /经本人试验证明1602初始化不清屏也可实现LCD_WRITE_COM(0x80);for(i=0;i16;i+) LCD_WRITE_DATA(str1i); delay(5);LCD_WRITE_COM(0x80+0x40);/液晶第二行显示for(i=0;i0;i-) SCLK=0; ACC=addr; DIO=ACC0; addr=1; SCLK=1; for(i=8;i0;i-) SCLK=0; ACC=date; DIO=ACC0; date=1; SCLK=1; RST=0;unsigned char READ_1302(unsigned char addr) unsigned char i,date1,date2; RST=0; SCLK=0; RST=1; for(i=8;i0;i-) SCLK=0; ACC=addr; DIO=ACC0; addr=1; SCLK=1; for(i=8;i0;i-) ACC7=DIO; SCLK=1; ACC=1; SCLK=0; RST=0; date1=ACC; date2=date1/16; date1=date1%16; date1=date1+date2*10; return(date1) ;void INITIAL_1302() WRITE_1302(WRITE_SECOND,READ_1302(READ_SECOND)&0x7f); /启动DS1302/*键盘扫描部分*/void keyscan() if(key0=0)/确认功能键按下 delay(20); if(key0=0)/去抖 while(!key0);/释放 num+; switch(num) case 1: flag=1; /修改时间,禁止从DS1302读数据 TR0=0; /定时器关 LCD_WRITE_COM(0x0f); /光标开始闪烁 LCD_WRITE_COM(0x80+3);/第一次按下,光标定位到年位置 break; case 2: LCD_WRITE_COM(0x80+6);/第二次按下,光标定位到月位置 break; case 3: LCD_WRITE_COM(0x80+9);/第三次按下,光标定位到日位置 break; case 4: LCD_WRITE_COM(0x80+12);/第四次按下,光标定位到星期位置 break; case 5: LCD_WRITE_COM(0x80+0x40+4);/第五次按下,光标定位到时位置 break; case 6: LCD_WRITE_COM(0x80+0x40+7);/第六次按下,光标定位到分位置 break; case 7: LCD_WRITE_COM(0x80+0x40+10);/第七次按下,光标定位到秒位置 break; case 8: num=0;/第八次按下,记录清零 LCD_WRITE_COM(0x0c);/不显示光标 WRITE_1302(WRITE_PROTECT,0x00); /允许写操作 WRITE_1302(0x80,(second/10*16)+second%10);/将调节后的秒写入DS1302 WRITE_1302(0x82,(minute/10*16)+minute%10);/将调节后的分写入DS1302 WRITE_1302(0x84,(hour/10*16)+hour%10);/将调节后的时写入DS1302 WRITE_1302(0x8a,(week/10*16)+week%10);/将调节后的星期写入DS1302 WRITE_1302(0x86,(day/10*16)+day%10);/将调节后的日写入DS1302 WRITE_1302(0x88,(month/10*16)+month%10);/将调节后的月写入DS1302 WRITE_1302(0x8c,(year/10*16)+year%10);/将调节后的年写入DS1302 WRITE_1302(WRITE_PROTECT,0x80); /开写保护 flag=0; /时间修改完毕,允许液晶从DS1302读数据 TR0=1; break; if(num!=0) if(key1=0)/确认增大键按下 delay(20); if(key1=0)/增大键确实按下 while(!key1);switch(num) case 1:year+;/调节年 if(year=100)year=0; LCD_WRITE_NYR(3,year);/将调节后的年送入液晶显示 LCD_WRITE_COM(0x80+3);/光标回到指定处break; case 2: month+;/调节月 if(month=13)month=0; LCD_WRITE_NYR(6,month);/将调节后的月送入液晶显示 LCD_WRITE_COM(0x80+6);/光标回到指定处break; case 3: day+;/调节日 if(day=32)day=0; LCD_WRITE_NYR(9,day);/将调节后的日送入液晶显示 LCD_WRITE_COM(0x80+9);/光标回到指定处 break; case 4: week+; if(week=8)week=0; LCD_WRITE_WEEK(week);/将调节后的星期送入液晶显示 LCD_WRITE_COM(0x80+12);/光标回到指定处 break; case 5: hour+; if(hour=24)hour=0; LCD_WRITE_SFM(4,hour);/将调节后的小时送入液晶显示 LCD_WRITE_COM(0x80+0x40+4);/光标回到指定处 break; case 6: minute+; if(minute=60)minute=0; LCD_WRITE_SFM(7,minute);/将调节后的分送入液晶显示 LCD_WRITE_COM(0x80+0x40+7);/光标回到指定处 break; case 7: second+; if(second=60)second=0; LCD_WRITE_SFM(10,second);/将调节后的秒送入液晶显示 LCD_WRITE_COM(0x80+0x40+10);/光标回到指定处 break;default:break; if(key2=0)/确认减小键按下 delay(20); if(key2=0)/减小键确实按下 while(!key2);switch(num) case 1: year-;/调节年 if(year=-1)year=99; LCD_WRITE_NYR(3,year); LCD_WRITE_COM(0x80+3); break; case 2: month-;/调节月 if(month=-1)month=12; LCD_WRITE_NYR(6,month); LCD_WRITE_COM(0x80+6); break; case 3: day-;/调节日 if(day=-1)day=31; LCD_WRITE_NYR(9,day); LCD_WRITE_COM(0x80+9); break; case 4: week-;/调节星期 if(week=0)week=7; LCD_WRITE_WEEK(week); LCD_WRITE_COM(0x80+12); break; case 5: hour-;/调节时 if(hour=-1)hour=23; LCD_WRITE_SFM(4,hour); LCD_WRITE_COM(0x80+0x40+4); break; case 6: minute-;/调节分 if(minute=-1)minute=59; LCD_WRITE_SFM(7,minute); LCD_WRITE_COM(0x80+0x40+7); break; case 7: second-;/调节秒 if(second=-1)second=59; LCD_WRITE_SFM(10,second); LCD_WRITE_COM(0x80+0x40+10); break; default:break; /*蜂鸣器部分*/*-定时器0初始化-*/void INITIAL_TEMER0() TMOD=0x01; TH0=(65536-20000)/256; TL0=(65536-20000)%256; /晶振频率12MHZ 定时20ms作右 TR0=1; EA=1; ET0=1; /*-*/void timer0()interrupt 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邳州市小学数学试卷
- 2024年崇左市江州区濑湍镇卫生院招聘真题
- 平阳高三首考数学试卷
- 莆田高二质检数学试卷
- 2024年上海师范大学附属合肥实验学校教师招聘笔试真题
- 吉林省公考真题2025
- 评价上海高考数学试卷
- 2024年靖西市市直机关遴选考试真题
- 青岛三模数学试卷
- 期末考的数学试卷
- 陕西省专业技术人员继续教育2025公需课《专业技术人员综合素质拓展》4学时题库及答案
- 2025年摩托车发动机配行业深度研究分析报告
- 社保补助代理协议书
- 2物流行业2025年人力资源招聘策略研究
- 幼儿园大班家长会
- 非洲出国务工合同协议
- 大题04 板块模型(解析版)-【三轮冲刺】2025高考物理大题突破
- 统计分析在资产评估中的运用
- 网络基础知识课件教学
- 信号工-矿井提升运输安全培训课件
- 劳务派遣与工厂签合同
评论
0/150
提交评论