DS1302是美国DALLAS公司推出的一种高性能、低功耗的实不时钟芯片,附加31字节静态RAM,选用SPI三线接口与CPU进行同步通讯,并可选用突发方法一次传送多个字节的时钟信号和RAM数据。实不时钟可提供秒、分、时、日、星期、月和年,一个月小与31地利能够主动调整,且具有闰年补偿功用。
下面是一段12864液晶显现实不时钟的程序:
/***************************************************************************************时刻:2012.11.30晶振:11.0592MHz芯片:STC89C52RC功用描绘:在12864上显现年、月、日、星期、时、分和秒等时刻信息***************************************************************************************/ #include#define uchar unsigned charsbit CLK=P1^4; //DS1302引脚界说sbit IO=P1^5;sbit CE=P1^6;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit RS=P2^4; //12864引脚界说 数据口为P0sbit RW=P2^5;sbit EN=P2^6;sbit PSB=P2^1;sbit RET=P2^3;void Input_1byte(uchar TD) //DS1302输入一字节数据{uchar i;ACC=TD;for(i=8;i>0;i--){IO=ACC0;CLK=1;CLK=0;ACC=ACC>>1;}}uchar Output_1byte(void) //DS1302输出一字节数据{uchar i;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=IO;CLK=1;CLK=0;}return(ACC);}void Write_DS1302(uchar add,uchar dat)//向DS1302写{CE=0;CLK=0;CE=1;Input_1byte(add);Input_1byte(dat);CE=0;}uchar Read_DS1302(uchar add) //从DS1302读{uchar inf; //信息暂时存储变量CE=0;CLK=0;CE=1;Input_1byte(add);inf=Output_1byte();CE=0;return(inf);}/**********************DS1302初始化*****************************/void init_1302(){if(Read_DS1302(0xd1)==0x55) //判别内存单元的内容,是否进行初始化{ return; } else {Write_DS1302(0x8e,0x00); //封闭写保护Write_DS1302(0x90,0x00); //电池充电设置Write_DS1302(0x80,0x00); //秒Write_DS1302(0x82,0x54); //分Write_DS1302(0x84,0x20); //时Write_DS1302(0x86,0x30); //日Write_DS1302(0x88,0x11); //月Write_DS1302(0x8a,0x05); //星期Write_DS1302(0x8c,0x12); //年Write_DS1302(0xd0,0x55); //写RAMWrite_DS1302(0x8e,0x80); //翻开写保护 }}/**********************延时函数*****************************/void DelayUs2x(unsigned char t){ while(--t);}void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/**********************12864判忙*****************************/void check_busy(){RS=0;RW=1;EN=1;while((P0&0x80)==0x80);EN=0;}