/*
* 读写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. opencms9.0安装

    今天安装opencms 9.0遇到了一些问题,因为是初次安装和使用,导致耽误了非常多时间.所以在此记录一下以备以后借鉴. 首先附上安装步骤链接: http://www.51testing.com/ht ...

  2. ubuntu下eclipse java ee首次打开提示找不到jdk的问题

    最近想搭建一个本地服务器,方便写一些网络请求相关的demo,遂下载了eclipse  ee版 ( IDEA证书好贵,暂时不想买-=-),下载---解压 一切正常,但是当在terminal下打开ecli ...

  3. 洛谷P2891 [USACO07OPEN]吃饭Dining

    题目描述 Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she w ...

  4. Kinect 开发 —— 进阶指引 (下)

    运动识别 利用运动识别(motion detection)来进行近景识别是最有意思的一种方式.实现运动识别的基本原理是设置一个起始的基准RGB图像,然后将从摄像头获取的每一帧影像和这个基准图像进行比较 ...

  5. HDU 2689 Tree

    Tree Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. Gym 100952 G. The jar of divisors

    http://codeforces.com/gym/100952/problem/G G. The jar of divisors time limit per test 2 seconds memo ...

  7. ajax关于主流中的异类:应对Opera(四)

    修改示例以支持Opera <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  8. PHP 7.1安装xhprof进行性能分析

    安装扩展该 xhprof扩展版本是从 https://github.com/longxinH/xhprof 获取的(第三方的一个库,官方版本不支持php7) 下载并编译xhprof扩展在web的htm ...

  9. 【习题 8-8 UVA - 1612】Guess

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] double千万不要用==判断相等... 而且两个保留2位有效数字的数字x,y 判断它们相等应该这样. int temp1 = ro ...

  10. hdu 3294 Girls&#39; research

    #include<stdio.h> #include<string.h> #define MAX 200020 char s[MAX],ss[MAX*2],str[2]; in ...