ds1302实时时钟c程序加仿真原理图.doc

上传人:M****1 文档编号:559046389 上传时间:2023-07-21 格式:DOC 页数:19 大小:168.51KB
返回 下载 相关 举报
ds1302实时时钟c程序加仿真原理图.doc_第1页
第1页 / 共19页
ds1302实时时钟c程序加仿真原理图.doc_第2页
第2页 / 共19页
ds1302实时时钟c程序加仿真原理图.doc_第3页
第3页 / 共19页
ds1302实时时钟c程序加仿真原理图.doc_第4页
第4页 / 共19页
ds1302实时时钟c程序加仿真原理图.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《ds1302实时时钟c程序加仿真原理图.doc》由会员分享,可在线阅读,更多相关《ds1302实时时钟c程序加仿真原理图.doc(19页珍藏版)》请在金锄头文库上搜索。

1、#ifndef _1602_yejing_#define _1602_yejing_#include#define uchar unsigned char#define uint unsigned intsbit lcden=P34;sbit lcdrs=P35; void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); void write_com(uchar com)lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar date)lcdrs=1

2、;P0=date;delay(5);lcden=1;delay(5);lcden=0;void write_lcd(uchar x,char *cha) uchar length,i=0;write_com(x);for(length=0;chalength!=0;length+); for(i=0;i4)&0x0f)+0;write_data(ch2);write_data(ch1);void write_fd(float t)/显示float型函数uchar s1,s2,s3,s4;uint tt;tt=t*100;s1=tt/1000;s1+=0x30;s2=tt%1000/100;s2

3、+=0x30;s3=tt%1000%100/10;s3+=0x30;s4=tt%10;s4+=0x30;write_data(s1);write_data(s2);write_data(46);write_data(s3);write_data(s4); void init()lcden=0;write_com(0x38);/设置16*2显示 write_com(0x0c);/设置开显示,不显示光标write_com(0x06);/写一个字符后地址指针加1write_com(0x01);/显示清0,数据指针清0 #endif/* THE REAL TIMER DS1302 DRIVER LIB

4、 COPYRIGHT (c) 2010 BY ZYK. - ALL RIGHTS RESERVED - File Name: DS1302.h Author: ZHANG YUAN KE Created: 2010/06/21 Modified:NO Revision: 1.0 */#ifndef _DS1302_2010_06_21_#define _DS1302_2010_06_21_sbit SCLK = P16; /实时时钟时钟线引脚 sbit DIO = P17; /实时时钟数据线引脚 sbit CE = P15; /实时时钟复位线引脚sbit ACC0 = ACC0;sbit AC

5、C7 = ACC7;char sec,min,hour,day,mon,week,year;char *tab7=Sun,Mon,Tue,Wed,Thu,Fri,Sat,;void write_1302(uchar add,uchar dat)uchar i;ACC=add;CE=0;SCLK=0;CE=1;for(i=0;i=1;ACC=dat;for(i=0;i=1;CE=0;uchar read_1302(uchar add)uchar i;ACC=add;CE=0;SCLK=0;CE=1;for(i=8;i0;i-) / 为什么不能for(i=0;i=1;SCLK=0; for(i=8

6、;i0;i-)ACC=1;ACC7=DIO;SCLK=1;SCLK=0;return(ACC); CE=0; void inputbyte(uchar d) /实时时钟写入一字节(内部函数) uchar i; ACC=d; for(i=8;i0;i-) DIO=ACC0; /相当于汇编中的 RRC SCLK=1; SCLK=0; ACC=1; uchar outputbyte() /实时时钟读取一字节(内部函数) uchar i; for(i=8; i0; i-) ACC=ACC1; /相当于汇编中的 RRC ACC7=DIO; SCLK=1; SCLK=0; return(ACC); voi

7、d write_1302(uchar add,uchar dat)/ucAddr: DS1302地址, ucData: 要写的数据 CE=0; SCLK=0; CE=1; inputbyte(add); / 地址,命令 inputbyte(dat); / 写1Byte数据 CE=0; uchar read_1302(uchar add)/读取DS1302某地址的数据 uchar dat; CE=0; SCLK=0; CE=1; inputbyte(add); / 地址,命令 dat=outputbyte(); / 读1Byte数据 CE=0; return(dat);void setprote

8、ct(bit flag)if(flag)write_1302(0x8e,0x80);elsewrite_1302(0x8e,0x00);void gettime_1302()sec=read_1302(0x81);min=read_1302(0x83);hour=read_1302(0x85);day=read_1302(0x87);mon=read_1302(0x89);week=read_1302(0x8b);year=read_1302(0x8d); void stop_time(bit flag) / 是否将时钟停止unsigned char dat;dat=read_1302(0x8

9、1);setprotect(0);if(flag)write_1302(0x80, dat|0x80);elsewrite_1302(0x80, dat&0x7F);void init_1302() uchar second=read_1302(0x81); if(second&0x80) write_1302(0x80,0); /*void BurstWrite1302(unsigned char *pWClock)/往DS1302写入时钟数据(多字节方式) unsigned char i; Write1302(0x8e,0x00); / 控制命令,WP=0,写操作? DS1302_RST

10、= 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(0xbe); / 0xbe:时钟多字节写命令 for (i = 8; i0; i-) /8Byte = 7Byte 时钟数据 + 1Byte 控制 DS1302InputByte(*pWClock); / 写1Byte数据 pWClock+; DS1302_CLK = 1; DS1302_RST = 0; void BurstRead1302(unsigned char *pRClock)/读取DS1302时钟数据(时钟多字节方式) unsigned char i; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(0xbf); / 0xbf:时钟多字节读命令 for (i=8; i0; i-) *pRClock = DS1302OutputByte(); / 读1Byte数据 pRClock+; DS1302_CLK = 1; DS1302_RST = 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号