锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

12864液晶显示实时时钟

时间:2024-05-26 15:07:11

DS1302是美国DALLAS公司推出的一种高性能、低功耗的芯片,附加31字节静态RAM,采用I三线与进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和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); //写RAM        Write_DS1302(0x8e,0x80); //打开写保护  }} /**********************延时函数*****************************/void DelayUs2x(unsigned char t){    while(--t);}void DelayMs(unsigned char t){      while(t--) {     //大致延时1mS     DelayUs2x(245);DelayUs2x(245); }} /**********************12864判忙*****************************/void check_busy(){RS=0;RW=1;EN=1;while((P0&0x80)==0x80);EN=0;} /**********************12864写指令*****************************/void write_com(uchar com){check_busy();RS=0;RW=0;EN=1;P0=com;DelayUs2x(250);EN=0;DelayUs2x(250);} /**********************12864写数据*****************************/void write_data(uchar dat){check_busy();RS=1;RW=0;EN=1;P0=dat;DelayUs2x(250);EN=0;DelayUs2x(250);} /**********************12864初始化函数*****************************/void init(){     DelayMs(40);           //大于40MS的延时程序   PSB=1;                 //设置为8BIT并口工作模式   DelayMs(1);            //延时   RET=0;                 //复位   DelayMs(1);            //延时   RET=1;                 //复位置高   DelayMs(200);   write_com(0x30);       //选择基本指令集   DelayUs2x(250);         //延时大于100us   write_com(0x30);       //选择8bit数据流   DelayUs2x(200);         //延时大于37us   write_com(0x0c);       //开显示(无游标、不反白)   DelayUs2x(250);         //延时大于100us   write_com(0x01);       //清除显示,并且设定地址指针为00H   DelayMs(200);           //延时大于10ms   write_com(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动   DelayUs2x(250);         //延时大于100us} /**********************清屏*****************************/void clrscreen(){write_com(0x01);DelayMs(15);} /*********************************************************                            主函数 ********************************************************/void main(){	uchar sec,sec1,sec2;uchar min,min1,min2;uchar hour,hour1,hour2;uchar date,date1,date2;uchar mon,mon1,mon2;uchar day;uchar year,year1,year2;uchar table1[]="年月日时分秒星期温度摄氏"; //长度24uchar table2[]={0XD2,0XBB,  0XB6,0XFE,  0XC8,0XFD,  0XCB,0XC4,  0XCE,0XE5,                                     0XCE,0XF9,  0XC8,0XD5};  //长度14uchar table3[]="0123456789";  //长度10init();	//液晶初始化clrscreen();DelayMs(200);init_1302(); //1302初始化 只初始化一下就可以 需要下载两次DelayMs(50);write_com(0x80);  //显示20write_data('2');write_data('0');write_com(0x82);  //显示年write_data(table1[0]);write_data(table1[1]);write_com(0x84);  //显示月write_data(table1[2]);write_data(table1[3]);write_com(0x86);  //显示日write_data(table1[4]);write_data(table1[5]);write_com(0x91);  //显示时write_data(table1[6]);write_data(table1[7]);write_com(0x93);  //显示分write_data(table1[8]);write_data(table1[9]);write_com(0x95);  //显示秒write_data(table1[10]);write_data(table1[11]);write_com(0x88);  //显示星期write_data(table1[12]);write_data(table1[13]);  write_data(table1[14]);write_data(table1[15]);while(1){	sec=Read_DS1302(0x81);   ////读秒sec1=sec&0x0f;	//个位sec2=sec>>4;	//十位min=Read_DS1302(0x83);   ////读分min1=min&0x0f;	//个位min2=min>>4;	//十位hour=Read_DS1302(0x85);   ////读时hour1=hour&0x0f;	//个位hour2=hour>>4;	//十位date=Read_DS1302(0x87);   ////读日date1=date&0x0f;	//个位date2=date>>4;	//十位mon=Read_DS1302(0x89);   ////读月mon1=mon&0x0f;	//个位mon2=mon>>4;	//十位year=Read_DS1302(0x8d);   ////读年year1=year&0x0f;	//个位year2=year>>4;	//十位day=Read_DS1302(0x8b);   ////读星期write_com(0x94);                //送显示内容write_data(table3[sec2]);	//秒   write_data(table3[sec1]); write_com(0x92);write_data(table3[min2]);  //分write_data(table3[min1]); write_com(0x90);write_data(table3[hour2]);  //时write_data(table3[hour1]);write_com(0x85);write_data(table3[date2]);  //日write_data(table3[date1]);	write_com(0x83);write_data(table3[mon2]);  //月write_data(table3[mon1]);write_com(0x81);write_data(table3[year2]);  //年write_data(table3[year1]);write_com(0x8a);write_data(table2[2*day-2]);  //星期write_data(table2[2*day-1]);}} 

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章