ds1302模块的一个arduino程序
/*
* 读写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程序的更多相关文章
- 【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 ...
- 谈谈.net模块依赖关系及程序结构
技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ...
- 第一个PyQt程序
这个程序虽然小,具备pyqt程序的皱型,可以作为一个模板使用了 #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtW ...
- Coding girl一个老程序员谈到的一个女程序员的故事
因为有人说我给一个女程序员的建议不靠谱,我不服,因为我的工作经历中的一些女程序员都很不错,比那些男程序员都强,所以,我在新浪微博和twitter上征集女程序员的故事和想法,这两天来,我收到了好几封邮件 ...
- OD调试1--第一个win32程序
OD调试一:第一个Win32程序的修改 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误.而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果.由于 ...
- 编译:一个 C 程序的艺术之旅(转载)
C 程序为什么要编译才能执行?一个 C 程序在变成可执行文件的过程中,为什么要经过预处理.编译.汇编.链接这四道工序?让我们从这段简单的 C 程序开始. 为什么要编译 这并不是一个简单的问题.我们知道 ...
- 2、Spring的 IoC详解(第一个Spring程序)
Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 ...
- 【Owin 学习系列】1. 第一个 Owin 程序
IIS 中的 Owin 在 IIS 里面部署 Owin,既能得到 Owin 管道模型的灵活性和模块特性,也能很好地利用 IIS 成熟的配置,Owin 程序将会跑在 ASP.NET request 的管 ...
- (一)你的第一个Socket程序
概述 本文通过一个最简单的Socket通信来对每一步做通俗易懂的讲解让你了解这些函数到底是干什么用的.下面的代码虽然是用Pyhton实现的,但是你要知道这些通信机制并不是Python所定义的,因为这些 ...
随机推荐
- SGU 323 Aviamachinations
Aviamachinations Time Limit: 4500ms Memory Limit: 65536KB This problem will be judged on SGU. Origin ...
- JS 中 this 与闭包的结合产生的问题
代码片段一: var name = "The Window"; var object = { name : "My Object", getNameFunc : ...
- oracle 01578
http://blog.itpub.net/7728585/viewspace-670597/ http://www.2cto.com/database/201208/149056.html http ...
- HDU——T 3072 Intelligence System
http://acm.hdu.edu.cn/showproblem.php?pid=3072 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- 深度学习2015年文章整理(CVPR2015)
国内外从事计算机视觉和图像处理相关领域的著名学者都以在三大顶级会议(ICCV.CVPR和ECCV)上发表论文为荣,其影响力远胜于一般SCI期刊论文.这三大顶级学术会议论文也引领着未来的研究趋势.CVP ...
- windows下搭建hadoop-2.6.0本地idea开发环境
概述 本文记录windows下hadoop本地开发环境的搭建: OS:windows hadoop执行模式:独立模式 安装包结构: Hadoop-2.6.0-Windows.zip - cygwinI ...
- 11.Axis客户端接收不同参数类型
转自:http://www.guance.com/708.html axis只支持简单类型的返回值.在这里逐一介绍axis的各种返回值接受. 1. axis接受基本类型,如int, string等 引 ...
- POJ 2430 状压DP
题意: 思路: 先预处理出所有格子的statement statement=1–>只有上边的格子被覆盖 statement=2–>只有下边的格子被覆盖 statement=3–>上下 ...
- 使用pandas导出PostgreSQL 模式下的所有表数据并保存
PostgreSQL PostgreSQL 是一个非常强大的数据库,它是一个免费的对象-关系数据库服务器(数据库管理系统).PostgreSQL支持大部分 SQL 标准, 在语句上也有很大的相似的地方 ...
- Vue 学习记录<2>
一.Vue https://vue-loader.vuejs.org/zh-cn/ https://vuejs-templates.github.io/webpack/structure.html