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所定义的,因为这些 ...
随机推荐
- [BZOJ4184]shallot 线段树+线性基
链接 题意:给你每个数字出现的时间和消失的时间,求每个时刻最大异或和 题解 按照时间建立线段树,线段树每个节点开个vector存一下这个时间区间有哪些数,然后递归进入的时候加入线性基,开一个栈记录一下 ...
- Centos 7 JDK验证 解决java -version 报错: bash: /home/jdk1.8.0_161/bin/java: Permission denied
2.vim /etc/profile 编辑profile 文件,在里面添加: #set java enviroment JAVA_HOME=/usr/java/jdk1.8.0_144 JRE_H ...
- C/C++(基础-运算符详解)
运算符 任何表达式是有值的 int a = 2; int b = 3; a*=b+4;//a=a*(b+4);"*"*=的优先级层次和=号的层次一样. printf("% ...
- java+spark-sql查询excel
Spark官网下载Spark Spark下载,版本随意,下载后解压放入bigdata下(目录可以更改) 下载Windows下Hadoop所需文件winutils.exe 同学们自己网上找找吧,这里就不 ...
- Centos安装FastDFS+Nginx(一天时间搞定)
最近在研究和使用Fastdfs,别人搭的环境,终究是别人的,绝知此事要躬行~躬行啊~ 下面的脚本主要参考了官方的INSTALL文件,这个是比较权威的,部分地方和实际情况不一致.比如配置文件的 ...
- 洛谷 P1102 A-B数对
P1102 A-B数对 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,题目是这样的:给出一串数以及一个数字C,要求 ...
- [Python's] Python's list comprehensions a
# Python's list comprehensions are awesome. vals = [expression for value in collection if condition] ...
- transfer learning(matlab 实现)
一句话总结 transfer learning 的核心即是对一个已训练模型微调,使其适应新的应用,如下图示: 为 matlab 接口所训练完成的经典深度神经网络下载地址:Index of /matco ...
- 15.Node.js REPL(交互式解释器)
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电 ...
- FZU 2205 据说题目很水
2205 据说题目很水 Accept: 199 Submit: 458Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Descr ...