1、12864液晶显示实时时钟12864液晶显示实时时钟 DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。 下面是一段12864液晶显示实时时钟的程序:/*时间:2012.11.30晶振:11.0592MHz芯片:STC89C52RC功能描述:在12864上显示年、月、日、星期、时、分和秒等时间信息*/#include;#define uchar unsign
2、ed charsbit CLK=P14; /DS1302引脚定义sbit IO=P15;sbit CE=P16;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit RS=P24; /12864引脚定义 数据口为P0sbit RW=P25;sbit EN=P26;sbit PSB=P21;sbit RET=P23;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输出
3、一字节数据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);/*
4、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_DS1
5、302(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)
6、=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并口工作模式
7、 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 writ
8、e_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
9、table1="年月日时分秒星期温度摄氏" /长度24uchar table2=0XD2,0XBB, 0XB6,0XFE, 0XC8,0XFD, 0XCB,0XC4, 0XCE,0XE5, 0XCE,0XF9, 0XC8,0XD5; /长度14 uchar table3="0123456789" /长度10init();/液晶初始化clrscreen();DelayMs(200);init_1302(); /1302初始化 只初始化一下就可以 需要下载两次DelayMs(50);write_com(0x80); /显示20write_data(2);wr
10、ite_data(0);write_com(0x82); /显示年write_data(table10);write_data(table11);write_com(0x84); /显示月write_data(table12);write_data(table13);write_com(0x86); /显示日write_data(table14);write_data(table15);write_com(0x91); /显示时write_data(table16);write_data(table17);write_com(0x93); /显示分write_data(table18);wri
11、te_data(table19);write_com(0x95); /显示秒write_data(table110);write_data(table111);write_com(0x88); /显示星期write_data(table112);write_data(table113);write_data(table114);write_data(table115);while(1)sec=Read_DS1302(0x81); /读秒sec1=sec&0x0f;/个位sec2=sec;4;/十位min=Read_DS1302(0x83); /读分min1=min&0x0f;/个位min2=m
12、in;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); /送显示内
13、容write_data(table3sec2);/秒write_data(table3sec1);write_com(0x92);write_data(table3min2); /分write_data(table3min1);write_com(0x90);write_data(table3hour2); /时write_data(table3hour1);write_com(0x85);write_data(table3date2); /日write_data(table3date1);write_com(0x83);write_data(table3mon2); /月write_data(table3mon1);write_com(0x81);write_data(table3year2); /年write_data(table3year1);write_com(0x8a);write_data(table22*day-2); /星期write_data(table22*day-1);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1