/*
* 读写DS1302 时钟芯片
* @author Yangtf
* 很棒的文档 http://www.21ic.com/jichuzhishi/datasheet/DS1302/data/185858.html
* 时序图 http://www.21ic.com/d/file/201307/0a93263a0126e1580cc71c89dce1fda9.jpg
*
*/
#define RST 13 //这是模块的引脚
#define SCLK 11
#define IO 12
//#define L(item) digitalWrite((item),LOW)
//#define H(item) digitalWrite((item),HIGH) #define uchar unsigned char
void setup() { //这个就是初始化,这个是固定的函数之一
pinMode(RST,OUTPUT);
pinMode(SCLK,OUTPUT);
pinMode(IO,OUTPUT);
Serial.begin();
attachInterrupt(, settm, FALLING ); //这个是中断的设置,但是这个???
}
void writeData(unsigned char addr,unsigned char dat){ //向芯片里面写数据,
pinMode(IO,OUTPUT);
digitalWrite(RST,LOW); //下拉低,再拉高
digitalWrite(SCLK,LOW) ; //SCLK的上升沿, 芯片会读取IO端口
delayMicroseconds();
digitalWrite(RST,HIGH); int i;
for(i =;i<;i++){
digitalWrite(SCLK,LOW);
digitalWrite(IO, addr&);
addr =addr>>;
digitalWrite(SCLK,HIGH);
delayMicroseconds();
} for(i =;i<;i++){
digitalWrite(SCLK,LOW);
digitalWrite(IO, dat&);
dat =dat>>;
digitalWrite(SCLK,HIGH);
delayMicroseconds();
}
digitalWrite(RST,LOW);
} uchar readData(uchar addr){ //从芯片里去读源数据,但是数据还是要经过一定的格式化才行啊
addr = addr | ; //读操作最低位置为1 要看懂这些就需要查看芯片的手册才是呀 pinMode(IO,OUTPUT);
digitalWrite(RST,LOW); //下拉低,再拉高
digitalWrite(SCLK,LOW) ; //SCLK的上升沿, 芯片会读取IO端口
delayMicroseconds();
digitalWrite(RST,HIGH); int i;
for(i =;i<;i++){ //读取命令是先要写一些命令代码,根据代码,芯片会吐出相应的元素.
digitalWrite(SCLK,LOW);
digitalWrite(IO, addr&);
addr =addr>>;
digitalWrite(SCLK,HIGH);
delayMicroseconds();
}
pinMode(IO,INPUT); //设置io口为向内读入.这样这个引脚就可以读取数据了. int dat = ;
for(i =;i<;i++){
digitalWrite(SCLK,LOW);
delayMicroseconds();
uchar b = digitalRead(IO);
dat = dat >>; //先向右平移 dat = dat | (b<<); //将所得放入最高位
digitalWrite(SCLK,HIGH);
delayMicroseconds();
}
digitalWrite(RST,LOW);
return dat ;
} #define SECOND 0x80 //这是一些命令的编号代码. 感觉写的似乎有点不是很整齐,有点乱
#define MIN 0x82
#define HOUR 0x84
#define DAY 0x86
#define MONTH 0x88
#define YEAR 0x8C
#define WEEK 0x8A void writeTimeUnit(uchar TYPE,uchar data){ uchar high = data / ;
uchar low = data % ;
uchar d = ((data /) << ) | (data % );
writeData(TYPE,data);
}
uchar readTimeUnit(uchar TYPE){ //这个是从ds1302芯片中读取一个元素,,,这个参数,决定了要提取的是哪个??
uchar r = readData(TYPE);
r = *(r >> )+ (r & 0xf); //这个可能是格式的变换
return r;
}
void writeAllTm(uchar tm[]){
uchar s = SECOND;
for(uchar i=;i<;i++){
writeTimeUnit(s,tm[-i]);
s+=;
}
writeTimeUnit(YEAR,tm[]);
}
void readAllTm(uchar tm[]){ //不知道这个是什么???,既然tm是个全局变量,又何必穿过来,??
uchar s = SECOND;
for(uchar i=;i<;i++){
tm[-i] = readTimeUnit(s); //这个就是从芯片里读取一个数来.
s+=;
}
tm[] = readTimeUnit(YEAR);
tm[] = readTimeUnit(WEEK);
} void printTm(uchar tm[]){
Serial.print(tm[]);
Serial.print("-");
Serial.print(tm[]);
Serial.print("-");
Serial.print(tm[]);
Serial.print(" "); Serial.print(tm[]);
Serial.print(":"); Serial.print(tm[]);
Serial.print(":"); Serial.print(tm[]);
Serial.print(" week "); Serial.print(tm[]);
Serial.println();
}
uchar st = ;
void loop() { //这里相当于主函数,主函数里的while
uchar tm[] = {}; //年月日,时分秒,星期,一个共是七个数 readAllTm(tm);
printTm(tm); delay(); } void settm()//中断函数
{
uchar tm[] = {,,,,, ,}; // 2011-12-22 3:4:1
Serial.println("set tm ...");
writeAllTm(tm);
}

上面是从网上摘来的。

但是这个中断我还是不会,所以把中断去掉把,这样直接显示串口的东西

ds1302模块的一个arduino程序的更多相关文章

  1. 【Arduino学习笔记02】第一个Arduino项目——点亮LED Blink.ino程序解读 Arduino程序基本结构 pinMode() digitalWrite() delay()

    /* Blink Turns an LED on for one second, then off for one second, repeatedly. */// define variables ...

  2. 谈谈.net模块依赖关系及程序结构

    技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ...

  3. 第一个PyQt程序

    这个程序虽然小,具备pyqt程序的皱型,可以作为一个模板使用了 #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtW ...

  4. Coding girl一个老程序员谈到的一个女程序员的故事

    因为有人说我给一个女程序员的建议不靠谱,我不服,因为我的工作经历中的一些女程序员都很不错,比那些男程序员都强,所以,我在新浪微博和twitter上征集女程序员的故事和想法,这两天来,我收到了好几封邮件 ...

  5. OD调试1--第一个win32程序

    OD调试一:第一个Win32程序的修改 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误.而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果.由于 ...

  6. 编译:一个 C 程序的艺术之旅(转载)

    C 程序为什么要编译才能执行?一个 C 程序在变成可执行文件的过程中,为什么要经过预处理.编译.汇编.链接这四道工序?让我们从这段简单的 C 程序开始. 为什么要编译 这并不是一个简单的问题.我们知道 ...

  7. 2、Spring的 IoC详解(第一个Spring程序)

    Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 ...

  8. 【Owin 学习系列】1. 第一个 Owin 程序

    IIS 中的 Owin 在 IIS 里面部署 Owin,既能得到 Owin 管道模型的灵活性和模块特性,也能很好地利用 IIS 成熟的配置,Owin 程序将会跑在 ASP.NET request 的管 ...

  9. (一)你的第一个Socket程序

    概述 本文通过一个最简单的Socket通信来对每一步做通俗易懂的讲解让你了解这些函数到底是干什么用的.下面的代码虽然是用Pyhton实现的,但是你要知道这些通信机制并不是Python所定义的,因为这些 ...

随机推荐

  1. jq 克隆 移除table

    function addRow2(node){ var obj = $("tr[name='info']:last"); var objClone = $(obj).clone() ...

  2. 时间格式化函数strftime

     #include <time.h> #include <stdio.h> #include <string.h> int main() {   char ti ...

  3. Linq查询案例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. jq ---- 实现浏览器全屏

    // 点击进入全屏 方法. var fullscreen=function(){ elem=document.body; if(elem.webkitRequestFullScreen){ elem. ...

  5. js中的this详解

    在web前端开发中,javascript中的this和其他的JAVA,C#等大型语言一样,是一个重要概念.但是要注意的是,在javascript中,由于 javascript的动态性,this的指向在 ...

  6. Impala储存与分区

    不多说,直接上干货! hive的元数据存储在/user/hadoop/warehouse Impala的内部表也在/user/hadoop/warehouse. 那两者怎么区分,看前面的第一列. 下面 ...

  7. How to anti-Obfuscated code

    Author:jin can zhu from China Source:http://blog.csdn.net/clever101 Now many software makers have us ...

  8. maven项目引入sqljdbc4 找不到包的完美 解决方案

    今天碰到了这个问题,解决了,顺便做一下记录.首先来 重现 一下这个问题,maven install报错,说 找不到这个包,但是其实 我已经安装了. 我们 再来 看看 maven本地仓库里面有 什么,这 ...

  9. ping---测试主机之间网络的连通性

    ping命令用来测试主机之间网络的连通性.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 选项 -d:使用Socke ...

  10. Word Ladder II [leetcode]

    本题有几个注意点: 1. 回溯找路径时.依据路径的最大长度控制回溯深度 2. BFS时,在找到end单词后,给当前层做标记find=true,遍历完当前层后结束.不须要遍历下一层了. 3. 能够将字典 ...