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所定义的,因为这些 ...
随机推荐
- PHP获取一周后的时间戳
echo strtotime("now");//相当于将英文单词now直接等于现在的日期和时间,并把这个日期时间转化为unix时间戳.这个效果跟echo time();一样. ec ...
- 三种连接 & DOS & SYNFLOOD & 防御
accept的时候,三次连接是建立的. 有一种DOS攻击是SYN FLOOD,就是大量的SYN到达,但是没有ACK,无法建立起连接. 防御的方法,有多种,如下: 比如,禁止部分源地址: 到达一定阈值之 ...
- Codeforces 164 D Minimum Diameter
题目链接~~> 做题感悟:越来越感觉CF的题非常好,非常有深度. 解题思路: 这题须要注意 k 的大小.由于 k 仅仅有 30 个,终于形成的点的直径一定是某个确定的值,所以我们能够枚举这个值. ...
- 自己定义控件-DownSlidingDrawer
一.描写叙述 能够下拉的 SlidingDrawer 二.效果图 图片是网上找到,可是效果是一样的 三.源代码 https://github.com/mentor811/Demo_MySlidingD ...
- RvmTranslator6.0 - AVEVA Marine Hull Model
eryar@163.com 1. Introduction RvmTranslator can translate the RVM file exported by AVEVA Plant(PDMS) ...
- Vue v-bind的使用
1.src <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- BZOJ 1355 KMP中next数组的应用
思路: 我们知道 next[i]是失配的i下一步要去哪儿 next[n]就是失配的n要去哪儿 n-next[n]就是答案(即最短周期)啦 //By SiriusRen #include <cst ...
- private SortedDictionary<string, object> Dic_values = new SortedDictionary<string, object>();
private SortedDictionary<string, object> Dic_values = new SortedDictionary<string, object&g ...
- 竖向 两级手风琴 TAB 栏
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 通过一个案例彻底读懂10046 trace--字节级深入破解
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/37840583 2014.7.23晚20:30 Oracle support组猫大师分享&l ...