首页 > 编程知识 正文

门控时钟Verilog代码,基于ds1302与数码管的可调时钟

时间:2023-05-05 18:29:53 阅读:146889 作者:3068

STM32WIFI自动校准语音报时可调时钟(带源代码)概述STM32f103C8T6最小系统共阴数码管74HC595芯片JQ5600语音模块ESP8266-01SWIFI模块ds1307模块按钮结语

概要

这次主要写的是关于硬件的理解和大致的想法,也是笔记吧。

文末有资料和源代码的下载地址。 还有视频演示地址。

本实验的硬件材料如下

STM32f103C8T6最低系统、共阴数字码、74HC595芯片、JQ5600语音模块、0.5W8R扬声器、ESP8266-01SWIFI模块、ds1307模块和密钥。

软件是keil5。

实验的目的是用WIFI自动校正时的声音时报制作可调时钟。 另外,每次电源关闭时自动计时,以便即使在电源关闭时和没有WIFI时也能正确显示时间。

STM32f103C8T6最小系统STM32f103C8T6最小系统包括三个通用16位计时器;

两个IIC接口(支持SMBus/PMBus );

三个USART接口(使USART2和USART3时钟与USART1不同)满足本实验的要求。

共阴数码管这次实验使用了两个0.56英寸的4位数码管(型号05641A )和一个0.8英寸的4位时钟数码管(型号8402AS )。 对应的引脚图如下。

两个0.56英寸4位数码管用于显示WiFi连接、星期几、月份和日期,两个0.8英寸4位时钟数码管用于显示时间。 没有使用两位数码管。

如果需要控制74HC595芯片1位的数码管,则需要控制8个不同引脚输出的不同高低电平来高亮或暗区每个段,在硬件上占用资源; 从软件程序来看,要在这种一位数字管道上显示不同数字的字母,需要在8个GPIO上分别显示GPIO_Setbit ()和GPIO_Resetbit (),甚至总共12位数字此时,可以使用名为74HC595的串行输入并行输出的移位寄存器。

74hc595内部有锁存显示,显示稳定,亮度高,无闪光灯,成本低。 (我买的几毛钱一个邮寄)比用晶体管控制更节约成本,减少IO端口占用,电路简单,有利于集成化、模块化,而且可以无限级联扩展。

我在这里采用了三块74HC595芯片级联,共控制12位数字管道,共占用6个IO端口。

首先看看74HC595芯片的引线图:

接下来是我的连接图:

时钟码的7、8针分别连接在地线和IO端口上。

如果需要进一步控制亮度,请使用PWM方法控制13只脚的抽屉的亮度(在网上进行了调查)。 我已经焊接了,所以没有考试)。

JQ5600语音模块JQ6500是提供串行端口的MP3芯片,完美集成了MP3、WMV的硬解码。 此外,软件还支持TF卡驱动程序,支持电脑直接更新spi flash内容,支持FAT16、FAT32文件系统。 通过简单的串行命令完成指定的音乐播放、播放调节等功能,无需繁琐的基础操作,使用方便、稳定可靠、成本低。

我用事先准备的报时声音内容,直接在电脑上更新spi flash的内容。 另外,并联了2个0.5W8R的扬声器。

导线图:

连接图:

串行连接方式:

ESP8266-01SWIFI模块ESP8266-01S是wifi串行模块,功能简单说就是从wifi接收数据,然后串行输出; 从串行端口接收数据,wifi输出数据。

ESP8266-01S的典型默认波特率为115200。 刚买的东西一般也是刷AT固件的,想详细了解的话请自己找资料。 就这样用就行了。

设置波特率后,可以在串行端口上发送AT命令以获取网络时间。 如果您想详细了解ESP8266-01SAT命令和网络时间,您可以自行查找资料,但这里不介绍)。

1 .使用串行端口发送命令AT CWMODE=1将模块wi-fi APP应用模式设置为Station模式;

2 .发送命令AT RST重新启动模块,使应用模式更改生效;

3 .命令AT CWJAP=“ssid”、“pwd”连接AP;

4 .发送命令AT CIPMUX=0将模块设置为单向连接模式,模块默认设置为单向连接模式;

5 .发送命令AT CIPSTART=“TCP”、“api.k780.com”,80与服务器建立TCP连接;

6 .发送命令at CIP模式=1将模块传送模式设置为透明模式;

7 .发送命令AT CIPSEND打开透明模式并向服务器发送数据。 模块接收此命令后换行再返回。 ';

8 .还有就是get http://API.k780.com :88/app=life.time appkey=10003 sign=b59 bc3 ef 6191 EB9f 747 dd4 e 83 c99 F2 a4 format=JSON hton

*退出直通模式后也只是发送,不需要发送新行。 rn不需要添加到程序中。

写程序时值得注意的是 '才是',\才是反斜杠。

接线图:

为了确保在掉电、WiFi信号恶化、没有WiFi时能够准确显示时间,ds1307模块

采用ds1307来计时,并读取ds1307的数据显示。
DS1307是低功耗、提供IIC接口、日历和时钟数据、按BCD码存取的时钟/日历芯片。它提供秒、分、小时、星期、日期、月和年等时钟日历数据,并具有闰年补偿功能。计年上限2100。AM/PM 标志位决定时钟工作于24小时或12小时模式。芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能。
只需要接VCC、GND、IIC四个引脚即可使用。要注意刚拿到ds1307模块要进行初始化才能正常使用(我的ds1307模块是这样)。

按键

四个按键的一端分别与4个IO口相连,另一端接地,配置为“上拉输入”方式,按键松开时为高电平,按键按下时为低电平。
第一个按键的功能:选择要调那一位数据(星期、月份、日期、小时、分钟),按下后会闪烁选择的数据。
第二个按键的功能:没按下第一个按键前的功能是WiFi模块初始化,如果WiFi模块出现死机或其他情况可以进行初始化;当按下第一个按键之后是对应闪烁的数据加一。
第三个按键的功能:没按下第一个按键前的功能是选着连接哪一个WiFi(以防万一我设置了两个WiFi可以连接),当按下之后第一和第二个按键是选择连那个WiFi(当然WiFi是事先设置好的);当按下第一个按键之后是对应闪烁的数据减一。
第四个按键的功能:没按下第一个按键前的功能是自动校时(按下自动校时);当按下第一个按键之后是退出选择。

结语

时钟基本实现所想功能,当然加一些判断就可以实现闹钟功能,我就没做了。
还有就是一直有个bug我不能理解:
每次用完WiFi就要关闭串口中断,不然就进入hard_fault死循环,通过keil的软件仿真我也没找出具体原因!!!也希望有大佬可以发现问题可以告诉我。

下面附上资料与源代码(两个链接下载的资料都一样):
1、https://download.csdn.net/download/cmlwt_ybz/12430148(博客下载链接)

2、 链接:https://pan.baidu.com/s/1olrRmViq3eXtS-jxKEi77A(网盘下载链接)
提取码:pxlq

视频演示地址:https://www.bilibili.com/video/BV1JZ4y1p7qp

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。