16x64点阵+ds1302实时时钟.doc_第1页
16x64点阵+ds1302实时时钟.doc_第2页
16x64点阵+ds1302实时时钟.doc_第3页
16x64点阵+ds1302实时时钟.doc_第4页
16x64点阵+ds1302实时时钟.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

16x64LED点阵+ds1302实时时钟-游政园/*头文件*/# include STC12C5A60S2.h# include macroandconst.h# include /*接口定义*/sbit R=P22; /定义数据输入端口P20sbit CLK=P20; /时钟信号sbit STB=P21;/595锁存信号sbit keymenue=P10;sbit keyup=P11;sbit keydown=P12;sbit keyswitch=P13;sbit keyok=P14;/*调用外部变量与函数声明*/extern uchar code table;extern uchar code table1;extern uchar set;/按键选择标志位;extern char key_flag;/按键加减标志位;extern uchar menue;/菜单选择标志位;extern uchar ok;/确认标志位;extern char miao,fen,shi,ri,yue,zhou,nian;/*时间日期数值标志位;*/extern uchar l_tmpDate;/秒分时日月周年08-05-15 12:00:00extern uchar l_tmpdisplay;extern void Write_Ds1302( unsigned char address,unsigned char dat );extern void Read_RTC(void);int num;void Delay10ms()/11.0592MHzunsigned char i, j;i = 108;j = 145;dowhile (-j); while (-i);/*按键扫描*/void key() /*判断选择按键是否按下;如果按下了当松开的时候让背光打开;set+;*/ if(keyswitch=0) Delay10ms();if(keyswitch=0) Delay10ms();while(keyswitch=0);set+;if(set8)set=0;menue=0; /*up和down按键的检测;加减标志位*/if(keyup=0)Delay10ms();if(keyup=0) Delay10ms();while(keyup=0); key_flag+;if(keydown=0)Delay10ms();if(keydown=0) Delay10ms();while(keydown=0);key_flag-; if(keymenue=0)Delay10ms();if(keymenue=0) /菜单选择标志位; Delay10ms();while(keymenue=0); menue+; if(menue3)menue=0; if(keyok=0) Delay10ms(); if(keyok=0) /确认标志位; Delay10ms(); while(keyok=0); ok+; if(ok1) ok=0; menue=0; set=0; /*595写数据部分*/void WriteByte(uchar dat) uchar i;for (i=0;i1; /右移一位,取出该字节的最低位R=CY; /将该字节的最低位传给RCLK=0; /上升沿将数据移入595CLK=1;void writebyteshuzi(uchar n)WriteByte(tablenum+n*16);void writebytehanzi(uchar n)WriteByte(table12*num+n*32);WriteByte(table12*num+n*32+1);/*调时部分*/void set_date_time()if(set=2)menue=0;miao=l_tmpdisplay10*10+l_tmpdisplay11;miao=miao+key_flag;if(key_flag59)miao=0;miao=miao%10+(miao/10)*16;Write_Ds1302(0x8E,0x00);Write_Ds1302(0x80,miao);Write_Ds1302(0x8E,0x80);if(set=3) menue=0;fen=l_tmpdisplay8*10+l_tmpdisplay9;fen=fen+key_flag;if(fen59)fen=0;if(key_flag0)&(fen23)shi=0;if(key_flag0)&(shi31)ri=1;if(key_flag0)&(ri7)zhou=1;if(key_flag0)&(zhou12)yue=1;if(key_flag0)&(yue79)nian=0;if(key_flag0)&(nian7)zhou=1;if(key_flag0)&(zhou1)zhou=7;zhou=zhou%10+(zhou/10)*16;Write_Ds1302(0x8E,0x00);Write_Ds1302(0x8A,zhou);Write_Ds1302(0x8E,0x80);key_flag=0; /*日期、时间、星期数据的转化*/void data_change()l_tmpdisplay0=l_tmpDate6/16;l_tmpdisplay1=l_tmpDate6%16;/年;l_tmpdisplay2=l_tmpDate4/16;l_tmpdisplay3=l_tmpDate4%16;/月;l_tmpdisplay4=l_tmpDate3/16;l_tmpdisplay5=l_tmpDate3%16;/日;l_tmpdisplay6=l_tmpDate2/16;l_tmpdisplay7=l_tmpDate2%16;/小时;l_tmpdisplay8=l_tmpDate1/16;l_tmpdisplay9=l_tmpDate1%16;/分钟;l_tmpdisplay10=l_tmpDate0/16;l_tmpdisplay11=l_tmpDate0%16;/秒钟;l_tmpdisplay12=l_tmpDate5%16;/显示当前星期;/*星期显示处理*/void week()if(l_tmpdisplay12=1)writebyteshuzi(13);writebytehanzi(7);writebytehanzi(8);writebytehanzi(0);writebyteshuzi(13);if(l_tmpdisplay12=2)writebyteshuzi(13);writebytehanzi(7);writebytehanzi(8);writebytehanzi(1);writebyteshuzi(13);if(l_tmpdisplay12=3)writebyteshuzi(13);writebytehanzi(7);writebytehanzi(8);writebytehanzi(2);writebyteshuzi(13);if(l_tmpdisplay12=4)writebyteshuzi(13);writebytehanzi(7);writebytehanzi(8);writebytehanzi(3);writebyteshuzi(13);if(l_tmpdisplay12=5)writebyteshuzi(13);writebytehanzi(7);writebytehanzi(8);writebytehanzi(4);writebyteshuzi(13);if(l_tmpdisplay12=6)writebyteshuzi(13);writebytehanzi(7);writebytehanzi(8);writebytehanzi(5);writebyteshuzi(13);if(l_tmpdisplay12=7)writebyteshuzi(13);writebytehanzi(7);writebytehanzi(8);writebytehanzi(6);writebyteshuzi(13);void shijian() writebyteshuzi(l_tmpdisplay6); /时;writebyteshuzi(l_tmpdisplay7);writebyteshuzi(11);writebyteshuzi(l_tmpdisplay8);writebyteshuzi(l_tmpdisplay9); /分;writebyteshuzi(11);writebyteshuzi(l_tmpdisplay10);writebyteshuzi(l_tmpdisplay11);/秒;void riqi()writebyteshuzi(l_tmpdisplay0);writebyteshuzi(l_tmpdisplay1); /年;writebyteshuzi(10);writebyteshuzi(l_tmpdisplay2);writebyteshuzi(l_tmpdisplay3); /月;writebyteshuzi(10);writebyteshuzi(l_tmpdisplay4);writebyteshuzi(l_tmpdisplay5); /日;/*主函数*/void main()/Set_RTC();menue=0;Write_Ds1302(0x8E,0x00);Write_Ds1302(0x90,0x80);Write_Ds1302(0x8E,0x80);while(1)key();for(num=0;num16;num+)Read_RTC();/读取时钟data_change();/时钟数据处理set_date_time();if(menue=0)if(set=2)/调整标志位;writebyteshuzi(l_tmpdisplay6); /时;writebyteshuzi(l_tmpdisplay7);writebyteshuzi(11);writebyteshuzi(l_tmpdisplay8);writebyteshuzi(l_tmpdisplay9); /分;writebyteshuzi(11);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay10*16); WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay11*16);else if(set=3)writebyteshuzi(l_tmpdisplay6); /时;writebyteshuzi(l_tmpdisplay7);writebyteshuzi(11);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay8*16);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay9*16);writebyteshuzi(11);writebyteshuzi(l_tmpdisplay10);writebyteshuzi(l_tmpdisplay11);/秒;else if(set=4)WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay6*16);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay7*16);writebyteshuzi(11);writebyteshuzi(l_tmpdisplay8);writebyteshuzi(l_tmpdisplay9);/分;writebyteshuzi(11);writebyteshuzi(l_tmpdisplay10);writebyteshuzi(l_tmpdisplay11);/秒;else shijian(); else if(menue=1) if(set=5) /日期调整标志位;writebyteshuzi(l_tmpdisplay0); /年;writebyteshuzi(l_tmpdisplay1);writebyteshuzi(10);writebyteshuzi(l_tmpdisplay2);writebyteshuzi(l_tmpdisplay3); /月;writebyteshuzi(10);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay4*16); WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay5*16); /日;else if(set=6)writebyteshuzi(l_tmpdisplay0); /年;writebyteshuzi(l_tmpdisplay1);writebyteshuzi(10);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay2*16);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay3*16);/月;writebyteshuzi(10);writebyteshuzi(l_tmpdisplay4);writebyteshuzi(l_tmpdisplay5);/日;else if(set=7)WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay0*16);WriteByte(tablenum+(12*16)&(tablenum+l_tmpdisplay1*16);/年;writebyteshuzi(10);writebyteshuzi(l_tmpdisplay2);writebyteshuzi(l_tmpdisplay3);/月;writebyteshuzi(10);writebyteshuzi(l_tmpdisplay4);writebyteshuzi(l_tmpdisplay5);/日;else riqi();else if(menue=2) week();else menue=0;if (set11)&(l_tmpdisplay10*10+l_tmpdisplay1126)&(l_tmpdisplay10*10+l_tmpdisplay1141)&(l_tmpdisplay10*10+l_tmpdisplay1156)&(l_tmpdisplay10*10+l_tmpdisplay1159)week();else shijian();P0=num; STB=1; STB=0;# include STC12C5A60S2.h# include macroandconst.h# include uchar l_tmpDate=0,0,0,1,1,1,13;/秒分时日月周年08-05-15 12:00:00uchar l_tmpdisplay13;code uchar Write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分时日月周年 最低位读写位code uchar Read_RTC_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; sbit SCK = P15;/DS1302时钟;sbit SDA = P16;/DS1302数据;sbit RST = P17;/ DS1302复位;uchar set=0;/按键选择标志位;char key_flag=0;/按键加减标志位;uchar menue=0;/菜单选择标志位;uchar ok=0;/确认标志位;char miao,fen,shi,ri,yue,zhou,nian;/*时间日期数值标志位;*/*/* DS1302写一个字节 */*/void Write_Ds1302_Byte(unsigned char temp) unsigned char i; for (i=0;i=1; /右移一位 SCK=1; /*/* 写入DS1302 */*/void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0;_nop_(); SCK=0;_nop_(); RST=1; _nop_(); /启动 Write_Ds1302_Byte(address);/发送地址 Write_Ds1302_Byte(dat);/发送数据 RST=0; /恢复/*/* 读出DS1302数据 */*/unsigned char Read_Ds1302 ( uchar address ) unsigned char i,temp=0x00; RST=0;_nop_();_nop_(); SCK=0;_nop_();_nop_(); RST=1;_nop_();_nop_(); Write_Ds1302_Byte(address); for (i=0;i=1;/右移一位SCK=1; _nop_(); _nop_(); SCK=0; RST=0;_nop_(); /以下为DS1302复位的稳定时间 _nop_();RST=0;SCK=0;_nop_();_nop_();_nop_();_nop_();SCK=1;_nop_();_nop_();SDA=0;_nop_();_nop_();SDA=1;_nop_();_nop_();return (temp);/返回/*/* 读时钟数据 */*/void Read_RTC(void) /读取 日历 unsigned char i,*p; p=Read_RTC_address; /地址传递 for(i=0;i7;i+) /分7次读取 秒分时日月周年 l_tmpDatei=Read_Ds1302(*p); p+; /*/* 设定时钟数据 */*/void Set_RTC(void) /设定 日历uchar i,*p,tmp;for(i=0;i7;i+) /BCD处理 tmp=l_tmpDatei/10;l_tmpDatei=l_tmpDatei%10;l_tmpDatei=l_tmpDatei+tmp*16; Write_Ds1302(0x8E,0X00); /关闭写保护; p=Write_rtc_address;/传地址 for(i=0;i7;i+)/7次写入 秒分时日月周年 Write_Ds1302(*p,l_tmpDatei); p+; Write_Ds1302(0x8E,0x80); /打开写保护; /*字模部分*/# include STC12C5A60S2.h# include macroandconst.h/*8x16字模*/uchar code table=/*- 文字: 0 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*- 文字: 1 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*- 文字: 2 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00,/*- 文字: 3 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,/*- 文字: 4 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00,/*- 文字: 5 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,/*- 文字: 6 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*- 文字: 7 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,/*- 文字: 8 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*- 文字: 9 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00,/*- 文字: - -*/10;/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*- 文字: : -*/11;/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,/*- 文字: _ -*/12/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,/*空格*13*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* ,0*/14 a-83;0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x78,0x44,0x42,0x42,0xFC,0x00,0x00,/*a,0*/0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x26,0x1A,0x00,0x00,/*b,1*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x02,0x02,0x02,0x44,0x38,0x00,0x00,/*c,2*/0x00,0x00,0x00,0x60,0x40,0x40,0x40,0x78,0x44,0x42,0x42,0x42,0x64,0xD8,0x00,0x00,/*d,3*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x02,0x02,0x42,0x3C,0x00,0x00,/*e,4*/0x00,0x00,0x00,0xF0,0x88,0x08,0x08,0x7E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*f,5*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C,/*g,6*/0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*h,7*/0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*i,8*/0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x1E,/*j,9*/0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x72,0x12,0x0A,0x16,0x12,0x22,0x77,0x00,0x00,/*k,10*/0x00,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*l,11*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x92,0x92,0x92,0x92,0x92,0xB7,0x00,0x00,/*m,12*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*n,13*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,/*o,14*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x26,0x42,0x42,0x42,0x22,0x1E,0x02,0x07,/*p,15*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x44,0x78,0x40,0xE0,/*q,16*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x4C,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,/*r,17*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00,/*s,18*/0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00,/*t,19*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x42,0x42,0x42,0x42,0x62,0xDC,0x00,0x00,/*u,20*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x08,0x08,0x00,0x00,/*v,21*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEB,0x49,0x49,0x55,0x55,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论