什么网站做海报,建设微信网站设计制作,wordpress 首页域名,长沙营销型网站制1、实时时钟#xff08;Real Time Clock#xff09;
RTC#xff0c;全称为实时时钟#xff08;Real Time Clock#xff09;#xff0c;是一种能够提供实时时间信息的电子设备。RTC通常包括一个计时器和一个能够记录日期和时间的电池。它可以独立于主控芯片工作#xff…1、实时时钟Real Time Clock
RTC全称为实时时钟Real Time Clock是一种能够提供实时时间信息的电子设备。RTC通常包括一个计时器和一个能够记录日期和时间的电池。它可以独立于主控芯片工作即使断电也能继续运行并保持时间的精确度。
RTC一般用于需要准确时间的应用场合如计算机系统的时间同步、数据采集系统的时间记录等。RTC可以提供秒、分、时、日、月、年等时间信息还可以具备闹钟、定时器等功能。
在计算机系统中RTC可以通过串行接口如I2C、SPI接口与主控芯片进行通信。主控芯片通过读取RTC的寄存器来获取当前时间并可以通过写入寄存器来设置时间或功能。
除了计算机系统RTC还可以用于其他电子设备中如手机、电视等。
2、DS1302
(1)实时时钟芯片
DS1302是一款实时时钟芯片由美国达拉斯半导体Dallas Semiconductor公司生产。它集成了时钟、日历和电池供电管理等功能。
DS1302通过3根线数据线、时钟线和使能线与外部控制器通信。它内部有一个32位的静态RAM用于存储时间和日期等信息。它还有一个时钟输出引脚CLKOUT可以输出时钟信号。此外DS1302还包括一个电池供电管理电路可以在外部电源断开时维持时钟运行。 DS1302的主要特点如下
时钟精度±2分钟/月工作电压2V~5.5V时钟频率具有多个可选频率最高可达到8MHz时钟输出可输出1Hz至32.768kHz的时钟信号数据传输采用串行方式传输速率最高可达到2.048Mb/s电源管理具有电源失效检测和切换功能可以自动切换到备用电池供电
DS1302广泛应用于各种需要实时时钟功能的设备例如计算器、电子表、温度计、计步器、电子秤等。由于其低功耗和高精度的特点它也常被用于嵌入式系统和物联网应用中。
(2)与树莓派接线 VCC接树莓派的 3.3V 输出
GND接树莓派的 Ground地
CLK接树莓派的 GPIO21BOARD 物理引脚编号40
DAT接树莓派的 GPIO20BOARD 物理引脚编号38
RST接树莓派的 GPIO8BOARD 物理引脚编号24 (3)说明
DS1302的接线我特别说明下我这里卡了一天给我整懵了。我按照网上的接法接SLCKID_SDCE0运行程序老出问题引脚功能报错我估计接法不对如果有同学整明白可以给我留言。我估计之前的接法是针对树莓派其他版本的。如果有时间还是要看下手册。
DS1302的接法还可以接到clk和IO引脚可以接树莓派SCL和SDA不过不建议这样接占用了OLED的引脚。如果接到这个IIC引脚上通过sudo i2cdetect -y 1 命令也是查不到0x68这个1302器件ID。我这里也是搞了很长时间。
由于DS1302的驱动在51和STM32都是通过IIC总线完成的只要接到GPIO口根据芯片手册的时序信号模拟IIC总线来发送与接收数据主要有起始结束、应答、非应答信号再编写发送与接收字节函数总之相比对程序员硬件软件要求比较高。在树莓派4B开发板中DS1302也是基于IIC总线的也有相应的C驱动和例程但是我们还是用Pyhton来写。 3、DS1302驱动代码
import time
import RPi.GPIO
from datetime import datetime# 使用物理编码
SCL 40
IO 38
RST 24# 数据读写的间隔
CLK_PERIOD 0.00001# 关闭GPIO警告
RPi.GPIO.setwarnings(False)
# 配置树莓派GPIO接口 使用物理编码
RPi.GPIO.setmode(RPi.GPIO.BOARD)# 写入一个字节的数据
def writeByte(Byte):for Count in range(8):# 将SCL置为低电平 开启一次传输time.sleep(CLK_PERIOD)RPi.GPIO.output(SCL, 0)# 取一位数据进行写入Bit Byte % 2Byte int(Byte / 2)# 通过IO引脚进行写入time.sleep(CLK_PERIOD)RPi.GPIO.output(IO, Bit)# 将SCL置为高电平 结束一次传输time.sleep(CLK_PERIOD)RPi.GPIO.output(SCL, 1)# 读取一个字节的数据
def readByte():# 将IO引脚设置为输入RPi.GPIO.setup(IO, RPi.GPIO.IN, pull_up_downRPi.GPIO.PUD_DOWN)Byte 0for Count in range(8):# 先将SCL重置为高电平time.sleep(CLK_PERIOD)RPi.GPIO.output(SCL, 1)# 将SCL置为低电平 开启一次传输time.sleep(CLK_PERIOD)RPi.GPIO.output(SCL, 0)# 读取一位数据time.sleep(CLK_PERIOD)Bit RPi.GPIO.input(IO)Byte | ((2 ** Count) * Bit)return Byte# 重置一些数据
def resetDS1302():# SCL引脚设置为输出RPi.GPIO.setup(SCL, RPi.GPIO.OUT)# RST引脚设置为输出RPi.GPIO.setup(RST, RPi.GPIO.OUT)# IO引脚设置为输出RPi.GPIO.setup(IO, RPi.GPIO.OUT)# SCL和IO都置为低电平RPi.GPIO.output(SCL, 0)RPi.GPIO.output(IO, 0)time.sleep(CLK_PERIOD)# RST置为高电平RPi.GPIO.output(RST, 1)# 结束操作
def endDS1302():# SCL引脚设置为输出RPi.GPIO.setup(SCL, RPi.GPIO.OUT)# RST引脚设置为输出RPi.GPIO.setup(RST, RPi.GPIO.OUT)# IO引脚设置为输出RPi.GPIO.setup(IO, RPi.GPIO.OUT)# SCL和IO都置为低电平RPi.GPIO.output(SCL, 0)RPi.GPIO.output(IO, 0)time.sleep(CLK_PERIOD)# RST置为低电平RPi.GPIO.output(RST, 0)# 进行时间校准
def setDatetime(year, month, day, hour, minute, second, dayOfWeek):# 引脚重置resetDS1302()# 设置写始终数据脉冲指令writeByte(int(10111110, 2))# 开始依次写数据# 写入秒数据*16的作用是把十位右移4位 下面同writeByte((second % 10) | int(second / 10) * 16)# 写入分钟数据writeByte((minute % 10) | int(minute / 10) * 16)# 写入小时数据writeByte((hour % 10) | int(hour / 10) * 16)# 写入日期数据writeByte((day % 10) | int(day / 10) * 16)# 写入月份数据writeByte((month % 10) | int(month / 10) * 16)# 写入星期数据writeByte(dayOfWeek)# 写入年份数据writeByte((year % 100 % 10) | int(year % 100 / 10) * 16)# 结束数据写入writeByte(int(00000000, 2))# 结束任务endDS1302()# 获取DS1302硬件时钟实践
def getDatetime():# 重置引脚resetDS1302()# 0xBF指令开始时钟脉冲串读取数据writeByte(int(10111111, 2))Data # 依次读取# 先读出秒数据Byte readByte()second (Byte % 16) int(Byte / 16) * 10# 分钟数据Byte readByte()minute (Byte % 16) int(Byte / 16) * 10# 小时数据Byte readByte()hour (Byte % 16) int(Byte / 16) * 10# 日期数据Byte readByte()day (Byte % 16) int(Byte / 16) * 10# 月份数据Byte readByte()month (Byte % 16) int(Byte / 16) * 10# 星期数据Byte readByte()day_of_week (Byte % 16)# 年数据Byte readByte()year (Byte % 16) int(Byte / 16) * 10 2000# 结束任务endDS1302()return datetime(year, month, day, hour, minute, second)# 时间格式化
def format_time(dt):if dt is None:return fmt %m/%d/%Y %H:%Mreturn dt.strftime(fmt)def parse_time(s):fmt %m/%d/%Y %H:%Mreturn datetime.strptime(s, fmt)
主要有2个函数一个是setDatetime(year, month, day, hour, minute, second, dayOfWeek)一个是getDatetime()。日期参数可以删掉也可以随便给一个。在主程序中如果要引用这个驱动文件.py使用 from ds1302 import * 。
4、主程序
from datetime import datetimefrom ds1302 import *import time# 初始化程序def datetime_setup():print ()print ()print (getDatetime()) # 获取时间信息print ()print ()ds_a input( Do you want to setup date and time?(y/n/c)\n c:Set the current time to the system time\n) # 是否更新时间if ds_a y or ds_a Y: # 重新更新时间ds_date input(Input date:(YYYY MM DD) ) # 输入年月日ds_time input(Input time:(HH MM SS) ) # 输入时分秒ds_date list(map(lambda x: int(x), ds_date.split())) # 判断格式 ds_time list(map(lambda x: int(x), ds_time.split())) # 判断格式print ()print ()setDatetime(ds_date[0], ds_date[1], ds_date[2], ds_time[0], ds_time[1], ds_time[2],33) # 设置时间dt getDatetime() # 获取当前时间print (You set the date and time to:, dt) # 打印出当前时间if ds_a c or ds_a C: current_datetime()print (current time is:, getDatetime()) # 循环函数def datetime_loop():while True:dt getDatetime() # 获取时间print (dt) # 打印出时间time.sleep(1) # 延时1S# 释放资源def resource_destory():endDS1302() # 释放资源#获取当前时间写入ds1302def current_datetime():current datetime.now()year current.yearmonth current.monthday current.dayhour current.hourminute current.minutesecond current.secondweek current.weekday()setDatetime(year,month,day,hour,minute,second,week)# 程序入口if __name__ __main__: datetime_setup()try:datetime_loop() # 循环函数except KeyboardInterrupt: # 当按下CtrlC时将执行destroy()子程序。resource_destory() # 释放资源
启动后可以不设置时间n可以设置时间y也可以读取系统时间设置到DS1302C。设置后每隔一秒读取寄存器日期时间值打印到屏幕上面。也可以显示到OLED上面。 显示到OLED上面需要把之前的显示封装成函数在主程序中获取日期时间后调用。 5、问题
具体显示的结果参考之前的接线实物图但是OLED显示会出现闪烁问题就是用time.sleep(1)导致的这个和C中的delay函数一样对于这个问题解决办法是将获取时间函数直接放到OLED显示函数里面。
def Oled_display(x,y):global devicedevice load_device()font ImageFont.truetype(STKAITI.TTF,16)while True:with canvas(device) as draw:draw.rectangle(device.bounding_box, outline0, fill0)draw.text((x,y),str(getDatetime()),fontfont, fillwhite)
文章转载自: http://www.morning.drggr.cn.gov.cn.drggr.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.fksdd.cn.gov.cn.fksdd.cn http://www.morning.gpnfg.cn.gov.cn.gpnfg.cn http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.sffwz.cn.gov.cn.sffwz.cn http://www.morning.shyqcgw.cn.gov.cn.shyqcgw.cn http://www.morning.yongkangyiyuan-pfk.com.gov.cn.yongkangyiyuan-pfk.com http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn http://www.morning.jytrb.cn.gov.cn.jytrb.cn http://www.morning.hxbps.cn.gov.cn.hxbps.cn http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.sfcfy.cn.gov.cn.sfcfy.cn http://www.morning.nkyqh.cn.gov.cn.nkyqh.cn http://www.morning.btlsb.cn.gov.cn.btlsb.cn http://www.morning.lmqw.cn.gov.cn.lmqw.cn http://www.morning.qbfqb.cn.gov.cn.qbfqb.cn http://www.morning.dmzzt.cn.gov.cn.dmzzt.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.yrmpz.cn.gov.cn.yrmpz.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn http://www.morning.fnxzk.cn.gov.cn.fnxzk.cn http://www.morning.qjlkp.cn.gov.cn.qjlkp.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.lcxdm.cn.gov.cn.lcxdm.cn http://www.morning.blznh.cn.gov.cn.blznh.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.gqflj.cn.gov.cn.gqflj.cn http://www.morning.mttck.cn.gov.cn.mttck.cn http://www.morning.qlpq.cn.gov.cn.qlpq.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.mmkrd.cn.gov.cn.mmkrd.cn http://www.morning.bmtkp.cn.gov.cn.bmtkp.cn http://www.morning.cczrw.cn.gov.cn.cczrw.cn http://www.morning.mhfbf.cn.gov.cn.mhfbf.cn http://www.morning.zwhtr.cn.gov.cn.zwhtr.cn http://www.morning.kyflr.cn.gov.cn.kyflr.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn http://www.morning.zlqyj.cn.gov.cn.zlqyj.cn http://www.morning.mlgsc.com.gov.cn.mlgsc.com http://www.morning.nlywq.cn.gov.cn.nlywq.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.mhnr.cn.gov.cn.mhnr.cn http://www.morning.fengnue.com.gov.cn.fengnue.com http://www.morning.tqhpt.cn.gov.cn.tqhpt.cn http://www.morning.pjxw.cn.gov.cn.pjxw.cn http://www.morning.ttxnj.cn.gov.cn.ttxnj.cn http://www.morning.fhykt.cn.gov.cn.fhykt.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.lgznf.cn.gov.cn.lgznf.cn http://www.morning.rljr.cn.gov.cn.rljr.cn http://www.morning.jhrkm.cn.gov.cn.jhrkm.cn http://www.morning.bxnrx.cn.gov.cn.bxnrx.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.vjdofuj.cn.gov.cn.vjdofuj.cn http://www.morning.kpgft.cn.gov.cn.kpgft.cn http://www.morning.cnqwn.cn.gov.cn.cnqwn.cn http://www.morning.bpmz.cn.gov.cn.bpmz.cn http://www.morning.jhxdj.cn.gov.cn.jhxdj.cn http://www.morning.wljzr.cn.gov.cn.wljzr.cn http://www.morning.kpcdc.cn.gov.cn.kpcdc.cn http://www.morning.yxkyl.cn.gov.cn.yxkyl.cn http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn http://www.morning.yqrfn.cn.gov.cn.yqrfn.cn http://www.morning.smkxm.cn.gov.cn.smkxm.cn http://www.morning.wspjn.cn.gov.cn.wspjn.cn http://www.morning.rkzk.cn.gov.cn.rkzk.cn http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.nzdks.cn.gov.cn.nzdks.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.rfwkn.cn.gov.cn.rfwkn.cn http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn http://www.morning.mzcsp.cn.gov.cn.mzcsp.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn