小于时,通过电源读数据工作顺序单字节写入,上升沿置高电平,下降沿置低电平。当总线控制器将数据线从高电平拉到低电平时,读取序列开始,数据线必须至少保持,然后释放总线,如图所示。因此,在读取定时开始之后,总线控制器必须停止将脚驱动到低电平以读取脚状态。
目录
一.导言
二、总体设计思路
(一)设备的使用
(2)软件前期准备
(3)生产过程的简要描述
第三,分工
四。相关模块的原理和代码
(1) MCU模块
(2)模拟电路和电路模块
(3)闹钟和日历逻辑模块
(4)手机app模块
(5)取模模块
不及物动词个人总结和感受
一.导言
我们小组参加了华南理工大学自动化学院组织的第二轮创新项目——蓝牙电子钟的制作,可以说受益匪浅。所以制作这张唱片也是希望能帮助到其他想制作蓝牙电子钟或者学习51单片机、蓝牙串口通讯、简单手机软件的爱好者。
本次设计参考资料(相当于顺便安利一次):
1.CSDN-CSDN -专业开发者社区(参考文献很多,不一一赘述。有兴趣的可以自己查)。
2.bilibili51单片机入门教程——51单片机入门教程-2020版程序,全过程纯手工打字,从零开始,哔哩哔哩
以及蓝牙App制作——蓝牙APP制作(App inventor开发APP,AT命令配置蓝牙模块)。
3.简书(和CSDN一样,如果你有兴趣自省的话)
二。总体设计思路(一)此款蓝牙电子钟的设备包装:DS1302时钟芯片、STC89C52RC、LCD1602、有机发光二极管显示器、HC-06蓝牙模块、DS18B20温度传感器、5V无源蜂鸣器、晶体管Q9012、纽扣电池及其插座、11.0592Hz晶振、37.768kHz晶振。
(2)ST C-ISP的软件前期准备——负责烧录程序,发送/接收简单数据,获取简单延时函数和晶振相关函数。
keuvsion 4-主单片机编程。
Proteus-仿真电路图的制作。
pctold 2002——有机发光二极管汉字和数字显示器。
VS Studio 2019——编写程序内部部分,运行测试实际效果。
App Inventor——用最简单的可视化编程方法编写手机app。
(3)生产过程的简要说明。先学习所有相关知识,买两台设备(一台准备),用最小开发板分别实现各个功能;
其次,进行app开发(后对接)和电路仿真运行,设计确定电路图,进行焊接。
然后逐步分配功能:显示精确时间、蓝牙通信、蜂鸣器闹钟、日历和汉字取模、时间修改、app对接。
最后调试bug,完善外观功能。
3.分工A队员和B队员学习单片机相关知识,学习手机软件制作,学习模拟电路图进行闹钟设计和日历设计,学习oled进行基本功能模块设计,学习led,编写基本程序了解B队员编写的基本程序和完成的电路,准备app对焊电路。完成基本的硬件设置,连接app,蓝牙串口与MCU通讯,根据电路中的实际问题调试修改软件问题,整合程序完成外部镜像优化。四。相关模块原理及代码(一)MCU模块1。DS1302时钟芯片
(1)概念和优势
DS1302是DALLAS公司生产的实时时钟电路,具有涓流充电能力。它采用串行数据传输,可编程充电能力可由断电电池提供。它采用独特的32.768K晶体振荡器,具有强大的时钟功能。它是一个高性能、低功耗的实时时钟电路,带RAM,可以计时年、月、日、周、时、分、秒。DS1302有一个用于临时数据存储的31字节静态RAM寄存器。
(2) DS1302引脚功能
(3)DS1302的内部结构图
(4)工作原理
从上图可以看出,DS1302和MCU之间只有三个连接,分别是SCL(7)、I/O(6)、RST(5)。连接到CON2的备用电池通过DS1302的第8脚为DS1302提供低功耗电池备份。VCC2在双电源系统中提供主电源。这样,VCC1连接到备用电源。当系统没有主电源时,时间信息和数据不会丢失。DS1302由VCC1或VCC2中的较大者供电。当VCC2大于VCC1 0.2V时,VCC2向DS1302供电..当VCC2小于VCC1时,DS1302由VCC1供电。
DS1302读取数据的工作顺序
单字节写入
上升沿设置高电平,下降沿设置低电平。
从时序图可以看出DS1302是串联驱动的。首先通过I/O端口写入控制字,然后需要读取相应寄存器的数据。1302应在每次操作前初始化,RST应设置为高电平,8位地址和命令信息应载入移位寄存器。在数据SCLK的上升沿,前8位指定访问地址命令,并在随后的时钟周期中,指定读操作期间的数据输出和写操作期间的数据输入。在单字节模式下,脉冲数为8个地址加8位数据。
DS1302写数据的时序操作
在数据SCLK的上升沿,前8位指定访问地址命令,并在随后的时钟周期中,指定读操作期间的数据输出和写操作期间的数据输入。在单字节模式下,脉冲数为8个地址加8位数据。
日历、时钟寄存器配置
BCD码和十进制转换
DS1302的输出是8421码,也就是我们常说的BCD码。因此,在书写和阅读中使用BCD码代替十进制。
最常用的BCD码是用“0”到“9”十个数值的二进制码来表示的。其对应的代码如下:十进制BCD码0 = 0000;1=0001 ;2=0010 ;3=0011;4=0100 ;5=0101 ;6=0110;7=0111 ;8=1000;9=1001
下面是BCD码和十进制转换的例子。
十进制到BCD码:32/10 = 3 * 16 = 48(十进制)= 30(十六进制)32% 10 = 2 3小编2 = 32 * 16+32% 10 = 32 (BCD码)
BCD码到十进制:51/16 = 5 * 10(十六进制)= 50(十进制)51% 16 = 1 5小编1 = 51/16+51% 16 = 51(十进制)
部分代码如下:
# include sbit ds 1302 _ sclk = p1^0;sbit ds 1302 _ io = p1^1;sbit ds 1302 _ ce = p1^2;#定义DS1302_SECOND 0X80 //定义寄存器的位置#定义ds1302 _ minut0x82 #定义ds1302 _ hour0x84 #定义DS1302 _ DATE 0X86 #定义DS1302 _ MONTH 0X88 #定义DS1302_DAY 0X8A#定义DS1302 _ YEAR 0X8C #定义ds 1302 _ WP 0X8E unsigned char ds 1302 _ Time[]= { 21,11,9,//定义一个数组存储time void ds 1302 _ Init(void)//initialize { ds 1302 _ CE = 0;ds 1302 _ SCLK = 0;} void ds 1302 _ Write byte(unsigned char command,data)//将数据和指令写入1302 { unsigned char I;ds 1302 _ CE = 1;for(I = 0;我
评论前必须登录!
注册