找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6479|回复: 8
收起左侧

基于DS1302的可调时间时钟 有闹铃,流水灯 含设计报告,仿真图,PCB工程,程序源码

  [复制链接]
ID:237239 发表于 2018-6-24 15:42 | 显示全部楼层 |阅读模式
该时钟有四个模式
模式一:正常的时钟,在此模式下可以修改时间(修改时间有bug,不能自己跳时间,例如可以调出25:00)
模式二:倒计时,倒计时结束后有闹铃,流水灯
模式三:闹铃,仅仅显示闹铃
模式4:流水灯
PS:没有验证,这是 一个多月前做的。
感谢论坛一些大佬的指导。压缩包内含设计报告,仿真图,PCB工程,程序源码。

摘要
学习辅助时钟的idea主要来自于知乎的一个话题:用自己的专业知识做的小发明。看到有一位答主分享了自己舍友利用C语言编了一款“我要当学霸”应用程序,主要功能是设定时间提醒学习,并取得了不错的效果。在羡慕计算机学生的编程能力之余我萌生了一个想法,利用自己学的51单片机来设计一个学习辅助时钟,主要功能是时钟显示,定时学习,闹钟还有一个绚丽的LED流水灯,既可以用于辅助学习,还可以用作装饰。时钟源由外设的DS1302提供,显示屏采用LCD1602,加上按键矩阵模块用于调整时间,选择单片机运行模式。


目录

五邑大学电子设计大赛单片机组

摘要

目录

1              学习辅助时钟的总体布局

2              学习辅助时钟各模块设计原理

2.1              最小系统:

2.2              时钟模块:

2.2.1              时钟芯片DS1302:

2.2.2              DS1302进行读写:

2.3              显示屏LCD1602:

2.3.1              显示屏1602液晶模块引脚功能

2.4              闹钟铃声

2.5              基于74HC595流水灯

2.5.1              芯片74HC595工作原理

3              工作过程:

3.1              其控制程序如下:

3.2              lcd1602显示程序:

3.3              流水灯程序:

4              功能介绍:

4.1              时钟功能

4.2              闹钟功能

4.3              LED装饰功能

5              参考文献

6              程序附录

1            学习辅助时钟的总体布局
图1-学习辅助时钟
图2-系统控制结构框图
0.png

2            学习辅助时钟各模块设计原理
2.1    最小系统:
图3-最小系统原理图
2.2    时钟模块:2.2.1  时钟芯片DS1302:
图4-时钟模块控制电路
图4-DS1302芯片说明
美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。
图5-DS1302寄存器说明
1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄存器的该位置改写为0时,时钟才能开始运行。
2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位
3、控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。
2.2.2  DS1302进行读写:
 上面的电路图可以看出,除了电源和接地,DS1302只有三根线和单片机连接,SCLK、I/O和RST(有的也写成CE),先看时序图:
图6-DS1302读写时序图
DS1302的数据读写是通过I/O串行进行的。当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作,以及操作的地址。第二个字节就是要读或写的数据了。
  我们先看单字节写:在进行操作之前先得将CE(也可说是RST)置高电平,然后单片机将控制字的位0放到I/O上,当I/O的数据稳定后,将SCLK置高电平,DS1302检测到SCLK的上升沿后就将I/O上的数据读取,然后单片机将SCLK置为低电平,再将控制字的位1放到I/O上,如此反复,将一个字节控制字的8个位传给DS1302。接下来就是传一个字节的数据给DS1302,当传完数据后,单片机将CE置为低电平,操作结束。
单字节读操作的一开始写控制字的过程和上面的单字节写操作是一样,但是单字节读操作在写控制字的最后一个位,SCLK还在高电平时,DS1302就将数据放到I/O上,单片机将SCLK置为低电平后数据锁存,单机机就可以读取I/O上的数据。如此反复,将一个字节的数据读入单片机。读与写操作的不同就在于,写操作是在SCLK低电平时单片机将数据放到IO上,当SCLK上升沿时,DS1302读取。而读操作是在SCLK高电平时DS1302放数据到IO上,将SCLK置为低电平后,单片机就可从IO上读取数据。
图7-DS1302读写时序图
位0就是读写位,当位0为1时,就是告诉DS1302,下面是进行读出操作,而当位0为0时就是写入操作。
位0-位5是要进行操作的DS1302寄存器地址。
位6就是告诉DS1302,是要对RAM进行操作还是对CLK寄存器进行操作,0就是对时间寄存器操作,一般我们都是对时间寄存器进行操作。
位7就是固定的1。为什么是1呢。还记得上面说的单字节读操作吗?在写控制字的最后一个位也就是位7时,DS1302已将它的寄存器数据位0放到IO上了,要是控制字的位7是0的话,DS1302就无法将它的随后的数据放到IO上了。
这也是为什么控制字80H是写秒寄存器,而80H是读秒寄存!80H换成二进制就是10000000。而81H的二进制就是10000001,一个是写操作,另一个是读操作!
2.3    显示屏LCD1602:
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。
图5-稳压芯片
2.3.1  显示屏1602液晶模块引脚功能
表1-各引脚接口说明
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
表2-各指令说明
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H,光标复位到地址00H位置。
指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。
指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:字符发生器RAM地址设置。
指令8:DDRAM地址设置。
指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据。
指令11:读数据。
2.4    闹钟铃声
声音是通过振动产生的。单片机对某一引脚以一定的频率循环置1置0,该引脚便产生一定频率的方波,方波通过放大,作用于一定的物理实件(蜂鸣器),就产生了一定频率的声音。若改变输出方波的频率,产生的声音随之改变。通过控制输出方波的时间长短,声音的长短也可以得到控制,因此,根据乐谱,以类似的音及同样的节拍,单片机就可以产生电子音乐。音乐的播放选择可以通过按键的输入得以实现。
为简便起见,以一定的频率方波产生的音在其每个周期内高低幅值得时间各占一半因此,输出引脚在每个方波周期内要动作两次:一次升高,一次降低。即输出引脚的频率是原音频率的两倍。
方波的产生由定时器控制。定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。一般中断响应时间为3~6个机器周期,经过反复试验取5个机器周期作为校正最为恰当,表1中所给的定时初值就是考虑中断响应后的定时常数。另外,为避免T1中断可能引起杂音,应将定时器T0中断设为高优先级。这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐。
在音乐中使用的各个固定频率的音叫音级。常用符号C、D、E、F、G、A、B、c、d、e、……a1、b1、c2、d2……表示,它们对应于钢琴上的白键。两音之间音高的距离叫音程。在上述音级中,E与F、B与C之间音高的距离仅为其它相邻音级之间距离的一半,称它们之间的音程为半音音程,而称其它相邻各音之间的距离为全音音程。在这些全音音程之间又加入新的半音音级,用符号﹟C、﹟D、﹟F、﹟G、﹟A、﹟c、﹟d、﹟f、……表示,对应于钢琴上的黑键。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。

0.png
2.5    基于74HC595流水灯2.5.1  芯片74HC595工作原理
74HC595可以将单片机的串行输入转换为并行输出,因此可以大大降低单片机I/O口的使用率,节省硬件资源,简化硬件电路,降低生产成本,操作方便。
74HC595的引脚功能及主要性能参数
符号
引脚
描述
Q0…Q7
15, 1, 7
并行数据输出
GND
8
Q7’
9
串行数据输出
MR
10
主复位(低电平)
SHCP
11
移位寄存器时钟输入
STCP
12
存储寄存器时钟输入
OE
13
输出有效(低电平)
DS
14
串行数据输入
VCC
16
电源

74595的控制端说明:
MR (10脚): 低点平时将移位寄存器的数据清零。通常将它接Vcc。
SHCP (11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)
STCP (12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将STCP置为低点平,当移位结束后,在STCP端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
OE (13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。
74HC595时序图
3            工作过程:
  开机先时钟初始化,等待按键扫描选择运行功能,通过扫描矩阵电平变化确定哪个按键按下,从而运行相对的功能。工作状态也可以选择模式,可以从当前运行模式换到别的模式。
4            功能介绍:4.1    时钟功能
提供年份日期星期24小时格式时间显示,初始化后可以设置时间,选择模式一后可设置,通过对应按键加减调整时钟。
4.2    闹钟功能
初始化的闹钟为45分钟倒计时,可以根据按键调整倒计时时间,时间到了会发出闹钟铃声,灯光闪烁,可以通过按键停止提醒。
4.3    LED装饰功能
通过按键选择装饰功能,LED灯展示不同样式的亮灯模式

   结束语
第一次设计单片机作品,用的是51单片机,程序写起来不难,感觉复杂而且多,运行功能的程序函数基本上都是要编写的,能够调用的函数很少。程序修改了很多遍,一次又一次的试错,最终完成了最后的程序。这个过程需要耐心,更需要扎实的c语言基础。因为基础不过关,需要的耐心就更多了,好在我们都克服了这两个困难。时间上的紧迫也是我们面临的一大问题,在进行这个比赛设计的同时,我们还有两门课程设计需要进行,时间基本上重叠,为了平衡时间,我们不得不放弃了原先的一些设想,比如倒计时时间可以通过键盘输入,增设单片机播放mp3功能,设计心形流水灯,时间的紧迫让我们没有办法进行更多的开发。好在还是很满意最后的作品,虽然功能不多,当时很实用,可以用来督促学习,作为学习辅助,能够完成自身的任务。

0.png 0.png


全部资料51hei下载地址:
基于DS1302的可调时钟.zip (1.44 MB, 下载次数: 161)

评分

参与人数 2黑币 +80 收起 理由
星星x + 30 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:436945 发表于 2019-12-25 21:10 | 显示全部楼层
楼主这个很流弊啊,佩服楼主的功力。
回复

使用道具 举报

ID:682838 发表于 2020-1-8 13:20 来自手机 | 显示全部楼层
为什么我运行proteus有错误,而且AD原理图和仿真图不符
回复

使用道具 举报

ID:683548 发表于 2020-1-8 14:22 来自手机 | 显示全部楼层
很赞很厉害
回复

使用道具 举报

ID:682838 发表于 2020-1-8 14:26 来自手机 | 显示全部楼层
楼主能不能审核一下呀,有没有无暇版的
回复

使用道具 举报

ID:237239 发表于 2020-4-7 14:08 | 显示全部楼层
15840552594 发表于 2020-1-8 14:26
楼主能不能审核一下呀,有没有无暇版的

啥,有什么问题
回复

使用道具 举报

ID:724172 发表于 2020-4-7 16:39 | 显示全部楼层
这,这有什么问题的?
回复

使用道具 举报

ID:737450 发表于 2020-4-26 11:03 | 显示全部楼层
太强了
回复

使用道具 举报

ID:574748 发表于 2023-1-21 21:06 | 显示全部楼层
请问计时和倒计时是用中断实现的吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表