时钟芯片DS1302的驱动程序

发布者:WhisperingWind最新更新时间:2016-12-30 来源: eefocus关键字:时钟芯片  DS1302  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

  1 ds1302的程序,不是很简洁,占的程序空间有点长

  2 

  3 程序:

  4 

  5 //////////////////////////////////

  6 //根据自己的接线改管脚定义

  7 sbit DS1302_cs=P1^2;

  8 sbit DS1302_data=P1^1;

  9 sbit DS1302_clk=P1^0;

 10 sbit ACC0=ACC^0;

 11 sbit ACC7=ACC^7;

 12 //////////////////////////////////

 13 #define uchar unsigned char

 14 #define uint unsigned int

 15 

 16 uchar year,month,date,hour,minute,second,week;//定义变量

 17 

 18 //////////////////////////////////

 19 //函数声明

 20 oid DS1302_init();//ds1302初始化 

 21 void DS1302_write(unsigned char DS1302_temp);  //写入一个字节  

 22 uchar DS1302_read(void); //读一字节 

 23 void DS1302_write_time(int command,int dat);//写入second or minute or hour...... or 写入一个命令  

 24 uchar DS1302_read_time(int command);//读取second or minute or hour......

 25 void DS1302_readdate();

 26 void DS1302_writedate();

 27 void long_ds1302_delay()  //长延时

 28 void short_ds1302_delay();//短延时

 29 ////////////////////////////////// 

 30 

 31 

 32 void short_ds1302_delay()

 33 {

 34   uchar i;

 35   for(i=0;i<5;i++);

 36 }

 37 

 38 void long_ds1302_delay()

 39 {

 40   uchar i;

 41   for(i=0;i<25;i++);

 42 }

 43 

 44 void DS1302_write(unsigned char DS1302_temp)  //写入一个字节 

 45 {

 46   uchar i,temp;

 47   long_ds1302_delay();

 48   temp=DS1302_temp;

 49   for(i=0;i<8;i++)

 50   {

 51     DS1302_data=temp&0x01;

 52  short_ds1302_delay();

 53  DS1302_clk=1;

 54  short_ds1302_delay();

 55  DS1302_clk=0;

 56  temp=temp>>1;

 57   }

 58 }

 59 

 60 unsigned char DS1302_read(void) //读一字节 

 61 {

 62   uchar i,temp;

 63   long_ds1302_delay();

 64   temp=0;

 65   for(i=0;i<8;i++)

 66   {

 67     temp=temp>>1;

 68  if(DS1302_data==1)

 69    temp=temp+0x80;

 70  DS1302_clk=1;

 71  short_ds1302_delay();

 72  DS1302_clk=0;

 73  short_ds1302_delay();

 74   }

 75   return temp;

 76 }

 77 /*

 78 /////////写操作设置,当a=0x80时禁止写操作,a=0x00时允许////////////////

 79 

 80 void DS1302_write_able(unsigned char a)

 81 {

 82   DS1302_cs=0;

 83 

 84   DS1302_clk=0;

 85   short_ds1302_delay();

 86   DS1302_cs=1;

 87   DS1302_write(0x8e);

 88   DS1302_data=1;

 89   DS1302_write(a);

 90   DS1302_cs=0;

 91   short_ds1302_delay();

 92   DS1302_clk=1;

 93 }

 94 

 95 /////////读操作设置,当a=0x80时禁止读操作,a=0x00时允许////////////////

 96 

 97 void DS1302_read_able(unsigned char a)

 98 {

 99   DS1302_cs=0;

100 

101   DS1302_clk=0;

102   short_ds1302_delay();

103   DS1302_cs=1;

104   DS1302_write(0x8f);

105   DS1302_data=1;

106   DS1302_write(a);

107   DS1302_cs=0;

108   short_ds1302_delay();

109   DS1302_clk=1;

110 }

111 */

112 ////////////////////ds1302初始化////////////////////////

113 void DS1302_init()

114 {

115   uchar i;

116   DS1302_write_time(0x8e,0x00);    //允许写操作

117 

118   DS1302_cs=0;

119 

120   DS1302_clk=0;

121   short_ds1302_delay();

122   DS1302_cs=1;

123   DS1302_write(0x81);

124   DS1302_data=1;

125   i=DS1302_read();

126   DS1302_cs=0;

127   short_ds1302_delay();

128   DS1302_clk=1;

129   second=((i>>4)&0x07)*10+(i&0x0f);

130 

131   DS1302_clk=0;

132   short_ds1302_delay();

133   DS1302_cs=1;

134   DS1302_write(0x80);

135   DS1302_data=1;

136   DS1302_write(0x7f&i);

137   DS1302_cs=0;

138   short_ds1302_delay();

139   DS1302_clk=1; 

140   

141   DS1302_clk=0;    //充电设置

142   short_ds1302_delay();

143   DS1302_cs=1;

144   DS1302_write(0x90);

145   DS1302_data=1;

146 //  DS1302_write(0xa6);    //允许充电,一个二极管 4k电阻

147   DS1302_write(0x00);    //禁止充电

148   DS1302_cs=0;

149   short_ds1302_delay();

150   DS1302_clk=1;  

151    

152   DS1302_write_time(0x8e,0x80);    //禁止写操作

153 }

154 

155 unsigned char DS1302_read_time(int command)//读取second or minute or hour......

156 {

157   uchar i;

158   DS1302_clk=0;

159   short_ds1302_delay();

160   DS1302_cs=1;

161   DS1302_write(command);

162   DS1302_data=1;

163   i=DS1302_read();

164   DS1302_cs=0;

165   short_ds1302_delay();

166   DS1302_clk=1;

167   return i;

168 }

169 void DS1302_readdate()

170 {

171   uchar i;

172   DS1302_cs=0;

173 

174   //读取second

175   i=DS1302_read_time(0x81);

176   second=((i>>4)&0x07)*10+(i&0x0f);

177 

178   //读取分minute

179   i=DS1302_read_time(0x83);

180   minute=((i>>4)&0x07)*10+(i&0x0f);

181 

182   //读取时hour

183   i=DS1302_read_time(0x85);

184   hour=((i>>4)&0x03)*10+(i&0x0f);

185 

186   //读取日date

187   i=DS1302_read_time(0x87);

188   date=((i>>4)&0x03)*10+(i&0x0f);

189 

190   //读取月份month

191   i=DS1302_read_time(0x89);

192   month=((i>>4)&0x01)*10+(i&0x0f);

193 

194   //读取周week

195   i=DS1302_read_time(0x8b);

196   week=i&0x07;

197 

198   //读取年份year

199   i=DS1302_read_time(0x8d);

200   year=((i>>4)&0x0f)*10+(i&0x0f);

201 }

202 

203 

204 void DS1302_write_time(int command,int dat)//写入second or minute or hour...... or 写入一个命令

205 {

206   DS1302_clk=0;

207   short_ds1302_delay();

208   DS1302_cs=1;

209   DS1302_write(command);

210   DS1302_data=1;

211   DS1302_write(dat);

212   DS1302_cs=0;

213   short_ds1302_delay();

214   DS1302_clk=1;

215 }

216 

217 void DS1302_writedate()

218 {

219 

220   DS1302_write_time(0x8e,0x00);    //允许写操作

221   DS1302_cs=0;  

222   DS1302_write_time(0x80,0x7f&(((second/10)<<4)+(second%10)));  //写second

223   DS1302_write_time(0x82,0x7f&(((minute/10)<<4)+(minute%10)));  //minute 

224   DS1302_write_time(0x84,0x3f&(((hour/10)<<4)+(hour%10)));  //hour

225   DS1302_write_time(0x86,0x3f&(((date/10)<<4)+(date%10)));  //date

226   DS1302_write_time(0x88,0x1f&(((month/10)<<4)+(month%10))); //month

227   DS1302_write_time(0x8a,0x07&week); //week

228   DS1302_write_time(0x8c,((year/10)<<4)+(year%10)); //year

229   DS1302_write_time(0x8e,0x80);    //禁止写操作

230 }


关键字:时钟芯片  DS1302  驱动程序 引用地址:时钟芯片DS1302的驱动程序

上一篇:HT6221发送红外HS0038解码程序
下一篇:直流电机驱动PWM频率

推荐阅读最新更新时间:2024-03-16 15:28

基于接口芯片的PCI总线接口卡的设计
1、引言   作为对PCI总线在仪器领域的扩展,PXI总线由于具有高性能、低价位等特点,使其在数据采集、工业自动化系统、计算机机械观测系统和图像处理等方面获得了广泛应用。   但是PXI总线协议十分复杂,其接口的实现比ISA困难得多,直接为它设计相匹配的数字逻辑控制电路难度很大。特别是对于那些没有PCI板卡设计经验的人来说,要想直接设计出能满足要求的PXI模块几乎是不可能的事。而PXI总线的电气规范大部份跟PCI相同,只是增加了一些仪器特性。基于以上考虑,我们决定通过设计一个PCI接口卡来系统地了解利用接口芯片PCI 9030开发PXI模块的过程和方法。 2、硬件设计   目前实现 PCI 接口的方法主要是采用可编
[嵌入式]
LCD12864驱动程序-51单片机
/*************************************************************/ /* */ /* Copyright (c) 2012, pcwebmaster */ /* All rights reserved. */ /* */ /* Email:pcwebmaste@163.com */ /*
[单片机]
双向传输设备驱动程序设计
  现有的大部分数据传输接口总线造价比较高,且难以满足实际运用中对传输速率的要求,成了阻碍整个系统性能提高的一大屏障。IEEE-1394是现今最高速的串行总线接口之一,IEEE1394lb更是在原有IEEE1394的基础上速度更快,支持距离更长,在实时批量数据传输方面有广泛的应用前景。   基于1394传输系统设备驱动文献,大部分都是基于IEEE1394a的,而IEEE1394b以其更高的速度展现出了更大的魅力,对实时大批量的数据传输具有重大意义,但是Microsoft并没有提供对1394b的支持,在Windows自带的1394不能支持其S800的速度,因此1394b在应用上受到局限,Unibrian提供了FireAPI SDK
[单片机]
时钟程序(LED+DS1302+AT89S52)
#include reg51.h /*************************ds1302与at89s52引脚连接********************/ sbit T_RST=P3^5; sbit T_CLK=P3^6; sbit T_IO=P3^7; sbit ACC0=ACC^0; sbit ACC7=ACC^7; unsigned char seg ={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //0~~9段码 /******************DS1302:写入操作(上升沿)**
[单片机]
RTEMS管理机制与USB驱动程序设计
引 言 在航空航天和工业控制等一些嵌入式应用领域,要求控制系统具有严格的实时性,能够为任务提供一个可预见的响应时间。一些实时操作系统的引入可以有效地满足任务的实时性要求,如RTEMS和VxWorks。在这样的系统中,如果系统通信模块的通信速度不高,或者通信质量不可靠,就会影响整个系统的实时性能。通用串行总线(USB)由于其高带宽、高可靠性的特点,必将越来越多地应用到这类系统中。然而由于多数实时操作系统目前并未提供USB主机和设备的驱动,而且USB协议相对于其他串行通信协议(RS232、SPI等)复杂度较高,使得USB驱动程序的开发难度较大。 1 RTEMS及其设备管理机制 1.1 RTEMS简介 RTEMS(Real—Ti
[电源管理]
RTEMS管理机制与USB<font color='red'>驱动程序</font>设计
3.点亮第一盏LED灯
看懂原理图——编写驱动程序 LED模块: 由图可知,LED阳极串联一个电阻(起到限流的作用),连接VCC,阴极连接P2口,点亮一盏LED需要对相应的IO赋予低电平(因为阳极VCC相当于高电平) 给某个引脚取名: sbit 变量名=地址值 (例如sbit led=P2^0,即为将P20口命名为led,而不能写成P2.0) 程序: #include reg51.h sbit led=P2^0;//第一盏led灯 void main() { while(1) { led=0;//设置led为低电平 } }
[单片机]
3.点亮第一盏LED灯
STM32F10x 利用环形缓冲区的串口驱动程序
这次讲讲利用串口收发中断来进行串口通讯。STM32 上为每个串口分配了一个中断。也就是说无论是发送完成还是收到数据或是数据溢出都产生同一个中断。程序需在中断处理函数中读取状态寄存器(USART_SR)来判断当前的是什么中断。下面的中断映像图给出了这些中断源是如何汇合成最终的中断信号的。图中也给出了如何控制每一个单独的中断源是否起作用。 另外,Cortex-M3 内核中还有个NVIC,可以控制这里的中断信号是否触发中断处理函数的执行,还有这些外部中断的级别。关于NVIC 可以参考《ARM CortexM3 权威指南》,里面讲解的非常详细。 简单的说,为了开启中断,我们需要如下的代码: NVIC_InitTypeDef N
[单片机]
STM32F10x 利用环形缓冲区的串口<font color='red'>驱动程序</font>
VxWorks操作系统下ComPactPCI总线驱动程序设计
引言     VxWorks是美国Wind River公司专门为嵌入式处理器设计的一种模块化、高性能的实时多任务操作系统。嵌入式软件多采用交叉开发的方式,即主机运行开发工具Tonado,通过某种连接方式连接目标机,硬件平台为PC/104+架构。这里提出一种VxWorks操作系统下CompactPCI总线驱动程序的设计及实现。该设计使用德国Kontron DT-64,它是一款高性能嵌入式计算机。采用Dual PentiLim 3 CPU,工作频率高达866 MHz,具有128 KB一级高速缓存和128 KB二级高速缓存。KontronDT-64与PC/AT标准完全兼容,并遵从PC/104+标准。具有PC/104结构的优点,适用于
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved