12864液晶显示实时时钟.docx

上传人:b****2 文档编号:24294668 上传时间:2023-05-26 格式:DOCX 页数:8 大小:16.10KB
下载 相关 举报
12864液晶显示实时时钟.docx_第1页
第1页 / 共8页
12864液晶显示实时时钟.docx_第2页
第2页 / 共8页
12864液晶显示实时时钟.docx_第3页
第3页 / 共8页
12864液晶显示实时时钟.docx_第4页
第4页 / 共8页
12864液晶显示实时时钟.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

12864液晶显示实时时钟.docx

《12864液晶显示实时时钟.docx》由会员分享,可在线阅读,更多相关《12864液晶显示实时时钟.docx(8页珍藏版)》请在冰豆网上搜索。

12864液晶显示实时时钟.docx

12864液晶显示实时时钟

12864液晶显示实时时钟

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

下面是一段12864液晶显示实时时钟的程序:

/***************************************************************************************

时间:

2012.11.30

晶振:

11.0592MHz

芯片:

STC89C52RC

功能描述:

在12864上显示年、月、日、星期、时、分和秒等时间信息

***************************************************************************************/

#include;

#defineucharunsignedchar

sbitCLK=P1^4;//DS1302引脚定义

sbitIO=P1^5;

sbitCE=P1^6;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

sbitRS=P2^4;//12864引脚定义数据口为P0

sbitRW=P2^5;

sbitEN=P2^6;

sbitPSB=P2^1;

sbitRET=P2^3;

voidInput_1byte(ucharTD)//DS1302输入一字节数据

{

uchari;

ACC=TD;

for(i=8;i>;0;i--)

{

IO=ACC0;

CLK=1;

CLK=0;

ACC=ACC>;>;1;

}

}

ucharOutput_1byte(void)//DS1302输出一字节数据

{

uchari;

for(i=8;i>;0;i--)

{

ACC=ACC>;>;1;

ACC7=IO;

CLK=1;

CLK=0;

}

return(ACC);

}

voidWrite_DS1302(ucharadd,uchardat)//向DS1302写

{

CE=0;

CLK=0;

CE=1;

Input_1byte(add);

Input_1byte(dat);

CE=0;

}

ucharRead_DS1302(ucharadd)//从DS1302读

{

ucharinf;//信息临时存储变量

CE=0;

CLK=0;

CE=1;

Input_1byte(add);

inf=Output_1byte();

CE=0;

return(inf);

}

/**********************DS1302初始化*****************************/

voidinit_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);//打开写保护

}

}

/**********************延时函数*****************************/

voidDelayUs2x(unsignedchart)

{

while(--t);

}

voidDelayMs(unsignedchart)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

/**********************12864判忙*****************************/

voidcheck_busy()

{

RS=0;

RW=1;

EN=1;

while((P0&0x80)==0x80);

EN=0;

}

/**********************12864写指令*****************************/

voidwrite_com(ucharcom)

{

check_busy();

RS=0;

RW=0;

EN=1;

P0=com;

DelayUs2x(250);

EN=0;

DelayUs2x(250);

}

/**********************12864写数据*****************************/

voidwrite_data(uchardat)

{

check_busy();

RS=1;

RW=0;

EN=1;

P0=dat;

DelayUs2x(250);

EN=0;

DelayUs2x(250);

}

/**********************12864初始化函数*****************************/

voidinit()

{

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

}

/**********************清屏*****************************/

voidclrscreen()

{

write_com(0x01);

DelayMs(15);

}

/*********************************************************

主函数

********************************************************/

voidmain()

{

ucharsec,sec1,sec2;

ucharmin,min1,min2;

ucharhour,hour1,hour2;

uchardate,date1,date2;

ucharmon,mon1,mon2;

ucharday;

ucharyear,year1,year2;

uchartable1[]="年月日时分秒星期温度摄氏";//长度24

uchartable2[]={0XD2,0XBB,0XB6,0XFE,0XC8,0XFD,0XCB,0XC4,0XCE,0XE5,

0XCE,0XF9,0XC8,0XD5};//长度14

uchartable3[]="0123456789";//长度10

init();//液晶初始化

clrscreen();

DelayMs(200);

init_1302();//1302初始化只初始化一下就可以需要下载两次

DelayMs(50);

write_com(0x80);//显示20

write_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]);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1