时钟芯片ds1307 制作一个数字时钟, 用6个led单片机数码管时钟程序显示的 软件程序该怎么写呢

摘& 要:在简单介绍串行时钟芯片DS1307的基础上,介绍了时钟的RS485接口设计。本文所设计的时钟电路具有体积小、抗干扰性能强、通用性好、调时方便等特点。&&& 关键词:串行时钟;接口;;DS1307
&&& 由单片机构成的测控系统或智能显示屏中,经常需要实时日历时钟,为节省CPU资源,增强实时时钟电路的通用性,本文介绍DS1307的应用及其接口设计,该时钟系统用RS485接口,采用SN75176差分平衡驱动接收,具有抗干扰能力强,可与PC机进行远距离的通信也可以与其他控制电路相连;时钟调时可方便地用PC机或电路中设置的按键进行时间设定和修改。
1 串行时钟DS1307简介&& DS1307是I2C总线接口的日历时钟芯片,片内有8个特殊寄存器和56 B的SRAM,是一种低功耗、BCD码的8引脚实时时钟芯片。&&& DS1307的主要技术性能如下:&&& 具有秒、分、时、日、星期、月、年的计数功能,并具有12小时制和24小时制计数模式, 可自动调整每月天数及闰年;&&& 具有自动掉电保护和上电复位功能;&&& 可输出不同的方波信号&&& (1) DS1307的引脚排列图如图1所示。&&& V:+5 V;&&& VBAT:+3 V电池输入;&&& X1,X2:32.768 k的输入端;&&& SDA:数据线;&&& SCL:时钟线;&&& SQW/OUT:方波信号输出端。?
500)this.style.width=500;" border=0>
&&& (2) DS1307的特殊寄存器地址分配&&& DS1307内部有8个特殊寄存器即00H~07H单元,其中00H~06H分别为秒~年时间计数寄存器,07H为控制寄存器。其详细的空间分配如表1所示。?
500)this.style.width=500;" border=0>
&&& 控制寄存器07H单元用于控制芯片7脚产生不同频率的方波信号。具体作用如表2所示。?
500)this.style.width=500;" border=0>
其中:OUT为控制位,SQWE是使能位。&&& 当SQWE=0时,如果OUT=0,则SQW/OUT引脚输出低,如果OUT=1,则SQW/OUT引脚输出为高电平。当SQWE=1时,由RS1,RS0决定引脚SQW/OUT输出不同频率的方波信号。RS1,RS0与输出频率的关系为表3所示。?
500)this.style.width=500;" border=0>
&&& (3) DS1307的工作时序&&& DS1307通过双向数据线SDA和时钟SCL与外界进行数据交换,其时序关系如图2所示。&&& 从时序图2中可看出,DS1307有2种操作方式:&&& (1)写操作:把SDA数据线上的数据按RAM指定的首地址(Word Address)依次写入?N?个字节数据,其格式为:?
500)this.style.width=500;" border=0>
&&& (2)读操作:按RAM指定的首地址依次读出?N?个字节数据,其格式为:
500)this.style.width=500;" border=0>
&&& 其中:S为起始信号,1101000为DS1307的口地址,A应答信号,A非应答信号,P停止信号。2时钟系统的硬件设计&&& 该系统由89C51单片机、时钟芯片DS1307,RS485接口电路及显示电路组成。主要原理框图如图3所示。?
500)this.style.width=500;" border=0>500)this.style.width=500;" border=0>
2.189C51部分&&& 本文利用89C51的P1.6,P1.7来模拟I2C总线的时钟线(SCL)和数据线(SDA)对时钟芯片DS1307的时钟数据进行读写操作,并把读来的数据送显示。利用P3.0,P3.1实现串行输入输出,用P1.5来控制PC机输出数据对显示时间的影响,当P1.5=1时才允许显示传送,利用89C51的外部中断INT0对按键调整时间进行中断控制。?2.2DS1307部分&&& 通过DS1307的SDA,SCL将时钟芯片的00H~06H单元的秒、分、时、星期、日、月和年送到数码管显示。DS1307的写地址为B,读地址为B。?2.3RS485接口部分&&& 为便于远距离、高速率下的多机通信,采用RS485接口。由MC1489将RS232成TTL电平,由MC1488实现TTL电平到RS232电平的转换,并用SN75176传输线驱动、接收器实现差分平衡型电路的转换,以增强电路的抗干扰能力。?3软件设计&&& 该时钟系统软件有89C51与DS1307之间的数据交换、与PC机的串行通讯、按键时间调整及显示程序4大部分构成。下面择其主要程序简单介绍如下:&&& (1) 89C51对DS1307数据读、写操作&&& 该程序是整个时钟电路的核心部分。利用单片机的P1.6,P1.7 I/O口,根据DS1307的数据传输格式用软件实现数据的读写操作;下面给出对DS1307进行写操作的部分参考子程序。&&& 发送起始位子程序SAT:500)this.style.width=500;" border=0>&&& 发送一个字节数据子程序WRBYT;500)this.style.width=500;" border=0>&&& SETB P1.6&&& CLR P1.6&&& CLR P1.7WLP1:DJNZ R0,WLP&&& RET发送应答信号子程序MACK:MACK:CLRP1.7;&&& SETB P1.6 ;&&& CLR P1.7 ;&&& SETB P1.6 ;&&& RET发送非应答信号子程序MNACK:MNACK:SETB P1.7;&&& SETB& P1.6 ;&&& CLR& P1.7 ;&&& CLR& P1.6 ;&&& RET&&& (2) 与PC机的串行通讯&&& 软件功能PC机将键盘输入的字符发送给单片机,单片机接受PC机发来的数据后回送同一数据给PC机,并在屏幕上显示出来。&&& 通讯约定波特率设置。&&& 数据格式8个数据位,一个停止位。&&& 传送方式PC机采用查询方式收发数据,单片机采用中断方式接收数据。&&& (3) 单键时间调整&&& 软件功能为节省单片机资源用单键方式实现时间的调整,即利用89C51的中断0实现中断。&&& 当有键按下时,首先由秒显示闪烁,表示可以对秒进行调整,闪烁一定时间(如5 s),在此时间内如接收不到调整信号,则自动闪烁下一位,直至年调整为止。?4结语&&& 本文选择实时时钟芯片DS1307和单片机89C51设计了一个日历时钟系统,该系统体积小,具有RS485接口,通用性强、调时方便。已在许多智能显示屏中得到成功应用,也可用于实时测控系统。?
[1]江正战?串行通信接口标准RS423/422/485及其应用[J]?电子技术应用,1994[2]北京四通股份公司工控二部内部资料?串行时钟DS1307,DALLAS Sconductor
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670&用发光二极管做的数码管时钟(不用时钟芯片)|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
以前做的数码管时钟,总觉得太小了,远处看不清,就用发光二极管自己制作了一个数码管,这样就亮多了。技术的含量不是很高,但是费功夫,单片机程序是在书上看到的,作了一些小修改。硬件中没有用DS1302,单片机晶振用12M(程序以12M晶振进行计算的),走时比用DS1302还要准。接口:数码管:P0^0~P0^7位选:&& P2^0~P2^3设置键&& P1^5~P1^7(短按:设置显示时间,长按:设置闹钟时间)加1键&&&&P1^6减1键&&&&P1^7Beep&&&& P3^7[attachment=2211156][attachment=2211158][attachment=2211159]
赞助商链接
换成其他颜色会不会更漂亮?
赞助商链接
制作的不错,收下了,谢谢!
这个实用性会比1602好。清楚,
很漂亮!做工也很好。不过楼主说比DS1302还准,我就不是很相信了!
DS1302不准是因为没有找到好的32768hz的晶振~!并不是1302的原因
用单片机内的定时器也是很准的,除非单片机用RC时钟。
停电就杯具了
哈哈,装个18650做后备电就不怕了。
下载看了,怎么没找到设置键&& P1^5加1键&&&&P1^6减1键&&&&P1^7这几个键的定义~~你忘了还是我没找到
LED怎么驱动的,
按键部分写得有特色,够隐蔽的。
有定义的,那个0x60就是设置键,0110就是P^5接口。
LED是共阳的,用P2^0~P2^3输出位选,驱动。
我又学到新的东西了,谢谢了!
我在void set_time(uchar *tp)加了以下语句,能否实现我要的功能?编译通过。else if(k==KINC&&k==KDEC)&&&&&&&&//如果是加1键减1键同时按&&&&&&&&&&{ tp[p]=0;&&&&&&&&&&&&//时/分清零&&&&&&&&&&}如果可以,我想同时按加1键减1键,小时和分钟跳到某个数值(比如13:45) ,要怎么写呢? 还有我想加入一个按键控制led亮灭,要加在哪个函数里呢?直接加在主函数里可以吗?本来想加入可调光台灯程序,找到了几个,想整合进时钟程序里,没有头绪。 时钟硬件部分还没搭,只是实验了几个小程序(流水灯等)。最近刚玩单片机,指点下啊。
这么厉害啊&&比DS1302还准哇
这个好啊,好像评论过了.
好 但是看不懂 争取弄明白
电路搭起来了,可是不能设置时间,为什么呢?一上电就是12.25 过一会12.26闪烁&&p1.5 p1.6 p1.7 接下地停止闪烁。为啥楼主?
不是很懂单片机 这是c51?有原理图吗想仿制一个这个很实用我这屋里想知道时间 只能看电脑谢谢
确实很准,如果加上月和日,循环显示,也不错。
共阳数码管:P0^0~P0^7(a,b,c,d,e,f,g,dp)(每段我串联了个510欧电阻)&&&&&&&& 位选:&&P2^0~P2^3 (4,3,2,1)&& 单片机通过10K电阻(看情况)控制,9012)来控制数码管(4,3,2,1)设置键&& P1^5~P1^7(短按:设置显示时间,长按:设置闹钟时间)加1键&&&&P1^6减1键&&&&P1^7Beep&&&& P3^7我做出来按键没反映(用10K电阻上拉后也没反应)。但是闹钟响时,按按键能停止闹钟。我用AT89S52&&12M晶振 ,可能晶振误差,时钟走时偏快,把中断次数4000增加到4488。这个你自己看下误差再修改。
楼主怎么不出来帮忙解决下问题呢。
请问#define&&KSET&&&&&& 0x60&&&& //设置当前时间键#define&&KSET_LONG&&0x61&&&&//设置闹铃时间键#define&&KINC&&&&&& 0x50&&&& //加1键#define&&KDEC&&&&&& 0x30&&&&&&&&//减1键 这几个键是接哪几个IO口,请告诉一下,我看不懂。谢谢。我只会用sbit&& xx,例如#define&&KSET&&&&&& 0x60&&&& //设置当前时间键,怎么改成 sbit&& xx 呢。
我也是卡在这里“#define&&KINC&&&&&& 0x50&&&& //加1键”怎么就是表示P1.6呢?而不是表示P2.6 或者P3.6之类的?&&0x50= 表示第6个端口是0不过改成“sbit&& xx”,程序里面好多地方要改了,很多地方调用了。我用面包板搭出来了,只是按按键没反应,不知道为什么。
怎么不发电路图啊?
楼主咋不来解答一下那~~~
楼主,快来帮帮忙哦。
uchar getkey(void){ uchar&&&&uchar&&t;&&disp();&&if((key=P3&0x70)==0x70) return 0&&&&&&&& //0x70是没有键按下,这个数因按键接不同引脚而不同&&for(t=0;t&5;t++) disp();&&if((key=P3&0x70)==0x70) return 0&&&&&&&&&& //0x70因按键接不同引脚而不同&&while((P3&0x70)!=0x70)&&&&&&&& //检测按键时间,0x70因按键接不同引脚而不同&&&&&&&& { disp();&&&&&&&&&&&&&&&& //&&&&不同的键按下,得到不同的返回值,如0x50,0x30等&&&&&&&&&& if(t&250) t++;&&&&&&&& }&&if((t&200)&&(key==0x60)) return 0x61;&&&&//0x60是有键按下,0x61是按下时间长,这2个数因按键接不同引脚而不同&&}0x70是 ,就是P3口4、5、6脚接按键,现在都是1,所以没有按下。下面的数差不多意思。
不错,这个寒假我也打算学习单片机。
什么语言写的?看不懂呀
汇编语言写的不过楼主&&你是不是买到假的DS1302了啊&& 居然没12Mhz的晶振准的话dallas可以去屎了
还是加入一个电路图吧,实际应用中,位选是通过四个9012来驱动的,用74LS04应该也可以的。[attachment=2250042]
源程序有误,按照源程序,设置键应该是p1.4 。我弄了好久,把源程序修改了下,才是图上的p1.5 p1.6 p1.7 。还加了个调光台灯功能。刚刚硬件实验成功…明天空了上修改后的程序。
不是程序有错误啊,是我注解说错了,应该是P1^4 P1^5和P1^6。图也发错了。抱歉了大家。
M币不顾没办法看啊,只能顶你了!
我已贴出源码,并加了调光台灯功能。
关键的led接法没贴出来,其他的无关紧要
做出红色的应该好看点
1602根本就不适合做时钟,12864弄个大字的勉强行。建议LZ再来个亮度自动调节,就更好了。。
请问有没有人懂汇编啊!谁可以给我份汇编的《》数据表啊
查看完整版本: [--
Powered by
Gzip enabledArduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验
虽然我们读到了Scratchpad的数据,但是显示的是HEX16进制代码,我们还需要转化成我们能读的温度格式。这里推荐一个叫Dallas
Temperature Control的Library,大大简化了这个过程。官方地址:
ARDUINO CODECOPY
#include &OneWire.h&
&DallasTemperature.h&
// Data wire is plugged into port 2 on the
ONE_WIRE_BUS&2
// Setup a oneWire instance to communicate
with any OneWire devices (not just Maxim/Dallas temperature
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas
Temperature.
DallasTemperature sensors(&oneWire);
void&setup(void)
&&// start serial
&&Serial.begin(9600);
&&Serial.println("Dallas
Temperature IC Control Library Demo");
&&// Start up the
&&sensors.begin();
void&loop(void)
sensors.requestTemperatures() to issue a global
temperature
&&// request to all
devices on the bus
&&Serial.print("Requesting
temperatures...");
&&sensors.requestTemperatures();&//
Send the command to get temperatures
&&Serial.println("DONE");
&&Serial.print("Temperature
for the device 1 (index 0) is: ");
&&Serial.println(sensors.getTempCByIndex(0));&&
代码下载好以后,打开串口监视器,就可以看到当前室温了。&
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://image./forum//dywbm3jj7ymw2w.jpg" STYLE="max-width:690" WIDTH="422" HEIGHT="497" NAME="image_operate_91296"
ALT="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验"
TITLE="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验" />
下面我们试用一下DS1307时钟芯片功能。
先把下面库自带测试代码下载进入arduino控制板
ARDUINO CODECOPY
#include &WProgram.h&
#include &Wire.h&
#include &DS1307.h&
int&rtc[7];
int&ledPin
void&setup()
&&DDRC|=_BV(2)&|_BV(3);&&//
POWER:Vcc Gnd
|=_BV(3);&&//
&&pinMode(ledPin,&OUTPUT);&&
&&Serial.begin(9600);
&&RTC.stop();
&&RTC.set(DS1307_SEC,1);
&&RTC.set(DS1307_MIN,57);
&&RTC.set(DS1307_HR,17);
&&RTC.set(DS1307_DOW,2);
&&RTC.set(DS1307_DATE,18);
&&RTC.set(DS1307_MTH,1);
&&RTC.set(DS1307_YR,10);
&&RTC.start();
void&loop()
&&RTC.get(rtc,true);
&&for(int&i=0;
&&Serial.print(rtc[i]);
&&Serial.print("
&&Serial.println();
&&&digitalWrite(ledPin,&HIGH);
&&&delay(500);
&&&digitalWrite(ledPin,&LOW);
&&&delay(500);
然后打开串口监视器,就能看到类似下图的样子。&
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://image./forum//204504bvb84dvhhh8dk3d8.jpg" STYLE="max-width:690" WIDTH="385" HEIGHT="475"
ALT="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验"
TITLE="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验" />
这个模块上还有一个T24C32A
EEPROM存储器。。。下面上一个全面一点的代码,对各个期间进行测试。其中刚开始会对I2C器件进行扫描。。。代码不错,大家可以参考下。&
ARDUINO CODECOPY
#include &OneWire.h&
#include&"Wire.h"
#include &WProgram.h&
#include &DS1307.h&
#include &avr/io.h&
extern&"C"&{
#include&"utility/twi.h"&&//
from Wire library, so we can do bus scanning
byte&start_address
byte&end_address
OneWire&&ds(2);&&//
byte&Tdata[12];
int&sensorValue
&&&// value read from
int&rtc[7];
float&TT=0.0;
// Scan the I2C bus between addresses
from_addr and to_addr.
// On each address, call the callback
function with the address and result.
// If result==0, address was found,
otherwise, address wasn't found
// (can use result to potentially get
other status on the I2C bus, see twi.c)
// Assumes Wire.begin() has already been
void&scanI2CBus(byte&from_addr,&byte&to_addr,
&&void(*callback)(byte&address,&byte&result)&)
&&byte&data
not used, just an address to feed to
twi_writeTo()
&&for(&byte&addr
= from_ addr &= to_
addr++&)&{
twi_writeTo(addr,
&data,&0,&1);
&&if(rc==0)&callback(&addr,
// Called when address is found in
scanI2CBus()
// Feel free to change this as
// (like adding I2C comm code to figure
out what kind of I2C device is there)
void&scanFunc(&byte&addr,&byte&result&)&{
&&Serial.print("addr:
&&Serial.print(addr,DEC);
&&Serial.print("\t
HEX: 0x");
&&Serial.print(addr,HEX);
&&Serial.println(&(result==0)&?&"\t
found!":"&
//&&Serial.print(
(addr%4) ? "\t":"\n");
&&void&i2c_eeprom_write_byte(&int&deviceaddress,&unsigned&int&eeaddress,byte&data&)&{
&&int&rdata
&&Wire.beginTransmission(deviceaddress);
&&Wire.send((int)(eeaddress
&&&8));&//
&&Wire.send((int)(eeaddress
& 0xFF));&//
&&Wire.send(rdata);
&&Wire.endTransmission();
&&// WARNING:
address is a page address, 6-bit end will wrap
&&// also, data can
be maximum of about 30 bytes, because the Wire library has a buffer
of 32 bytes
&&void&i2c_eeprom_write_page(&int&deviceaddress,&unsigned&inteeaddresspage,&byte*
data,&byte&length&)&{
&&Wire.beginTransmission(deviceaddress);
&&Wire.send((int)(eeaddresspage
&&&8));&//
&&Wire.send((int)(eeaddresspage
& 0xFF));&//
&& &Wire.send(data[c]);
&&Wire.endTransmission();
&&byte&i2c_eeprom_read_byte(&int&deviceaddress,&unsigned&int&eeaddress&){
&&byte&rdata
&&Wire.beginTransmission(deviceaddress);
&&Wire.send((int)(eeaddress
&&&8));&//
&&Wire.send((int)(eeaddress
& 0xFF));&//
&&Wire.endTransmission();
&&Wire.requestFrom(deviceaddress,1);
&&if&(Wire.available())&rdata
=&Wire.receive();
&&// maybe let's not
read more than 30 or 32 bytes at a time!
&&void&i2c_eeprom_read_buffer(&int&deviceaddress,&unsigned&inteeaddress,&byte&*buffer,&int&length&)&{
&&Wire.beginTransmission(deviceaddress);
&&Wire.send((int)(eeaddress
&&&8));&//
&&Wire.send((int)(eeaddress
& 0xFF));&//
&&Wire.endTransmission();
&&Wire.requestFrom(deviceaddress,length);
&& &if&(Wire.available())&buffer[c]&=&Wire.receive();
void&DS1302_SetOut(byte&data&)&{
&&Wire.beginTransmission(B1101000);
&&Wire.send(7);&//
&&Wire.send(data);
&&Wire.endTransmission();
byte&DS1302_GetOut(void)&{
&&byte&rdata
&&Wire.beginTransmission(B1101000);
&&Wire.send(7);&//
&&Wire.endTransmission();
&&Wire.requestFrom(B1101000,1);
&&if&(Wire.available())&{
=&Wire.receive();
&& &Serial.println(rdata,HEX);
void&showtime(void){
&&Serial.print("Time=");
&&DS1302_SetOut(0x00);
&&RTC.get(rtc,true);&&
&&for(int&i=0;
&&Serial.print(rtc[i]);
&&Serial.print("
void&readBatVcc(void){
sensorValue =&analogRead(A1);
sensorValue*0.0047;
&&Serial.print("Battery:
&&Serial.print(TT);
&&Serial.print("V");
// standard Arduino
void&setup()
DDRC|=_BV(2)&|_BV(3);
&&Wire.begin();
&&Serial.begin(19200);
&&Serial.println("---
I2C Bus Scanner Test---");
&&Serial.print("starting
scanning of I2C bus from ");
&&Serial.print(start_address,DEC);
&&Serial.print("
&&Serial.print(end_address,DEC);
&&Serial.println("...");
&&// start the scan,
will call "scanFunc()" on result from each
scanI2CBus(&start_address,
end_address, scanFunc&);
&&Serial.println("\n");
&&Serial.println("---
EEPROM Test---");
&&char&somedata[]&=&"this
is data from the eeprom";&// data to
i2c_eeprom_write_page(0x50,&0,&(byte&*)somedata,&sizeof(somedata));//
write to EEPROM
&&delay(100);&//add
a small delay
&&Serial.println("Written
&&delay(10);
&&Serial.print("Read
EERPOM:");
= i2c_eeprom_read_byte(0x50,&0);&//
access the first address from the memory
&&int&addr=0;&//first
&&while&(b!=0)
&& &Serial.print((char)b);&//print
content to serial port
&addr++;&//increase
i2c_eeprom_read_byte(0x50,
addr);&//access
an address from the memory
&Serial.println("\n");
&&Serial.println("");
&&Serial.println("---
DS11307 RTC Test---");&&
&&showtime();
&&if(rtc[6]&2011){
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,52);
RTC.set(DS1307_HR,16);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,25);
RTC.set(DS1307_MTH,1);
RTC.set(DS1307_YR,11);
RTC.start();
&&Serial.println("SetTime:");
showtime();&
&&Serial.println("\n\n");
&&Serial.println("---
Reserve Power Test---");
&&Serial.println("&&Close
POWER!:");
&=~_BV(3);
&for(time=0;time&5;time++){
&&&digitalWrite(13,HIGH);
&&&delay(500);
&&&digitalWrite(13,LOW);
&&&delay(500);&
&&&readBatVcc();
&&&Serial.println("");
&Serial.println("\n&&POWER
&& &delay(500);
&showtime();
&&Serial.println("\n");
&&Serial.println("===&&Done&
&&Serial.println("\n");
// standard Arduino
void&loop()
&&byte&present
&&unsigned&int&Temper=0;
readBatVcc();
ds.reset();
ds.write(0xCC,1);
ds.write(0x44,1);&
&& &// start
conversion, with parasite power on at the end
&&digitalWrite(13,HIGH);
&&delay(450);
&&digitalWrite(13,LOW);
&&delay(450);
& & present =
ds.reset();
ds.write(0xCC,1);&
ds.write(0xBE);&
&& &// Read
Scratchpad
&&&// we need 9
&Tdata[i]&=
ds.read();
& & Temper
=&(Tdata[1]&&8&|
Tdata[0]);
=Temper*0.0625;
&&if(TT&200){
&&&Serial.println("\t
DS18B20 Not installed!");
&& &Serial.print("\t
Temperature=");
&& &Serial.println(TT);
&&Serial.println("");
然后打开串口监视器,波特率要调节为19200.&
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://image./forum//204506ghic72006xne6rx4.jpg" STYLE="max-width:690" WIDTH="532" HEIGHT="669" NAME="image_operate_36267"
ALT="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验"
TITLE="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验" />
附件是这次需要用到的库:&
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://www./static/image/filetype/rar.gif" BORDER="0" ALT="" NAME="image_operate_4382" STYLE="word-wrap: break- vertical-align:"
TITLE="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验" />&&(8.59
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://www./static/image/filetype/rar.gif" BORDER="0" ALT="" STYLE="word-wrap: break- vertical-align:"
TITLE="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验" />&&(2.59
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://www./static/image/filetype/zip.gif" BORDER="0" ALT="" STYLE="word-wrap: break- vertical-align:"
TITLE="Arduino学习笔记27(B)&-&DS1307&RTC时钟芯片与DS18B20数字温度传感器实验" />&&(22.44
转载自极客工坊:http://www.
创易工作室淘宝链接:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。用80c51做芯片.用DS1307做的时钟芯片,求设计原理图和程序.最好有简单说明,小白一个 谢谢 _百度知道
用80c51做芯片.用DS1307做的时钟芯片,求设计原理图和程序.最好有简单说明,小白一个 谢谢
我有更好的答案
当然可以,用一片小型CPLD或者FPGA就行,
其他类似问题
为您推荐:
时钟芯片的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 数码管显示电子时钟 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信