基于DS1302与LCD1602的电子日历时钟的设计与实现(7)

2019-02-26 10:36

* 函数功能 : 读取一个地址的数据 * 输 入 : addr * 输 出 : dat

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

uchar Ds1302Read(uchar addr) {

uchar n,dat,dat1; RST = 0; _nop_();

SCLK = 0;//先将SCLK置低电平。 _nop_();

RST = 1;//然后将RST(CE)置高电平。 _nop_();

for(n=0; n<8; n++)//开始传送八位地址命令 { DSIO = addr & 0x01;//数据从低位开始传送 addr >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); }

_nop_();

for(n=0; n<8; n++)//读取8位数据 { dat1 = DSIO;//从最低位开始接收 dat = (dat>>1) | (dat1<<7); SCLK = 1; _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); }

RST = 0;

_nop_(); //以下为DS1302复位的稳定时间,必须的。 SCLK = 1; _nop_(); DSIO = 0; _nop_(); DSIO = 1;

27

_nop_(); return dat; }

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

* 函 数 名 : Ds1302Init * 函数功能 : 初始化DS1302. * 输 入 : 无 * 输 出 : 无

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

void Ds1302Init() {

uchar n;

Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能 for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年 { Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); }

Ds1302Write(0x8E,0x80); //打开写保护功能 }

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

* 函 数 名 : Ds1302ReadTime * 函数功能 : 读取时钟信息 * 输 入 : 无 * 输 出 : 无

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

void Ds1302ReadTime() {

uchar n;

for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年 { TIME[n] = Ds1302Read(READ_RTC_ADDR[n]); } }

void LcdDisplay()

28

{

LcdWriteCom(0x80+0X40);

LcdWriteData('0'+TIME[2]/16); LcdWriteData('0'+(TIME[2]&0x0f)); LcdWriteData('-');

LcdWriteData('0'+TIME[1]/16); LcdWriteData('0'+(TIME[1]&0x0f)); LcdWriteData('-');

LcdWriteData('0'+TIME[0]/16); LcdWriteData('0'+(TIME[0]&0x0f));

LcdWriteCom(0x80); LcdWriteData('2'); LcdWriteData('0');

LcdWriteData('0'+TIME[6]/16); LcdWriteData('0'+(TIME[6]&0x0f)); LcdWriteData('-');

LcdWriteData('0'+TIME[4]/16); LcdWriteData('0'+(TIME[4]&0x0f)); LcdWriteData('-');

LcdWriteData('0'+TIME[3]/16); LcdWriteData('0'+(TIME[3]&0x0f)); LcdWriteCom(0x8D);

LcdWriteData('0'+(TIME[5]&0x07)); }

void main() {

LcdInit(); Ds1302Init(); while(1) { Ds1302ReadTime(); LcdDisplay(); } }

//时 //分

//秒

//年

//月

//日

//星期

29

附录四 元器件清单及其实物图

元器件名称 洞洞板 电解电容 100uF + 10uF STC89C52RC单片机+底座 瓷片电容 10uF + 30pF 自锁开关 按键 COM口 电阻 10K+1K USB-B 3V电子 MAX232+底座 DS1302 +底座 LED红 排针 排针插 LCD1602液晶

数量 1 1+1 1+1 7+3 1 1 1 2+10 1 1 1+1 1+1 1 2 1 1

附图3采购的元器件清单

30

附图 4 实物图

31


基于DS1302与LCD1602的电子日历时钟的设计与实现(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国际贸易概论试题3答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: