单片机之电子钟相关案例

我们今天来接触一下新的案例,电子钟在我们的生活中出现的非常多,那我们就尝试用代码将其显示在我们的八位数码管上
相关案例为:

  • 扫描频率可改变的电子钟
  • 实时时钟测试
  • 可校准的实时时钟
  • 多功能电子钟
  • 可与PC通信的实时时钟

我们将主要介绍扫描频率可改变的电子钟


扫描频率可改变的电子钟
实验现象

数字钟是通过计数模拟时钟,将计数值转换成时间形式,以格式时-分-秒在LED数码管上进行显示,并通过按键调节扫描频率
该实验分8个等级,通过对应8个二极管从左至右指示扫描频率越来越高的8中扫描频率。总体达到软件计时,扫描频率可调的效果

工作原理

操作流程
在这里插入图片描述

代码解析
  • 全局变量设置
bit btKey1Current;   //key1当前的状态
bit btKey1Past;      //key1前一个状态
uchar ucLedCnt;           //流水灯累计延时器
uint  uiDigSelectCnt;     //数码管位选延时器
  • P0(8位)和P2.3需要设置成推挽输出,以驱动电路正常发光。
    按键作为输入,不需推挽

涉及寄存器及配置值如下:

P2M1=0x00;
P2M0=0xff;

P0M1=0x00;
P0M0=0xff;

P3M0=0x00;
P3M1=0x00;
  • 通过定时器0,采用方式1,在定时器中断中进行计数值的累加

涉及寄存器(含可位寻址)及配置如下:

TMOD=0x01;//定时器0,方式1

EA=1;//打开总的中断
ET0=1;//开启定时器中断      

TH0=(65535-1000)/256;
TL0=(65535-1000)%256;

TR0=1;//启动定时器
PT0=1;

P2M1=0x00;
P2M0=0xff;

P0M1=0x00;
P0M0=0xff;

具体的过程的代码就不详细叙述了

实时时钟测试
实验现象

数码管会出现实时的时钟,断开USB端口,不给实验板外部供电,时钟依然走秒

实验原理
  • 实时时钟的核心是晶振,晶振频率为32768 Hz 。
  • 它为分频计数器提供精确的与低功耗的实基信号。
  • 它可以用于产生秒、分、时、日等信息。
  • 为了确保时钟长期的准确性,晶振必须正常工作,不能够收到干扰

那实时时钟的晶振频率为什么是32768Hz?
实时时钟时间是以振荡频率来计算的。
故它不是一个时间器而是一个计数器。而一般的计数器都是16位的。
又因为时间的准确性很重要,故震荡次数越低,时间的准确性越低。所以必定是个高次数。
32768 Hz = 2^15 即分频15次后为1Hz,周期 = 1s;
经过工程师的经验总结32768 Hz,时钟最准确。

电路原理图

在这里插入图片描述

  • DS1302的2、3引脚外接32.768kHz 晶振的晶振,为芯片提供计时脉冲
    通过秒寄存器的最高位控制晶振的工作状态
    当为高时,停止工作;当为低时,晶振开始工作,实时模块自动计时。

  • RTC_SCLK引脚作为输入引脚,用于在串行接口上控制数据的输入与输出

  • RTC_IO引脚作为输入输出引脚,为实时时钟的数据线。

  • RTC_/RST引脚作为输入引脚,在读、写数据时必须置为高电平。
    该引脚有两个功能:
    第一,CE开始控制字访问移位寄存器的控制逻辑;
    其次,CE 提供结束单字节或多字节数据传输的方法,

传输方法如下所示:
在这里插入图片描述

  • 单个字节读:
    在前8个SCLK时钟周期内,上升沿写入控制字,在后8个SCLK时钟周期内,下降沿读取数据字;均从最低位开始

  • 单个字节写:
    在前8 个 SCLK 时钟周期,上升沿写入控制字,在后 8 个 SCLK 时钟周期,上升沿写入数据字;均从最低位开始

可校准的实时时钟
实验现象

数码管会出现实时的时钟,通过按键key1以及导航键可以实现时间的精确校准

实验原理

程序主要是利用导航按键和数字按键综合校准时钟,利用ADC口对来自导航按键不同方向的电压值进行采集,并将采集后的转换结果获取高三位值,将此值作为导航按键方向判断标准。

导航按键是通过ADC采集电压的改变从而判断按下的方向
数字按键是通过电平的直接改变判断是否按下

导航按键的上键:控制时分秒的数值增1;
导航按键的下键:控制时分秒的数值减1;
K1键:进入或退出时间设置状态;

我们前面已经说过了时钟的原理图
这里直接介绍导航按键的原理图

在这里插入图片描述
导航按键的不同方向对应的不同的电压值,通过不同的AD值实现不同的按键操作,从而实现对值的设置
注意:
左边小正方形中对应的就是导航键,不同方向,由于电阻不同,其电压也不同
右下角三个为K3-K1这三个按键,一旦按下,其对应的KEY1 KEY2 KEY3就会显示低电平

多功能电子钟
实验现象

各按键功能:
(故可以实现年月日设置,时间设置,闹钟设置)
导航按键的上键:控制时分秒的数值增1;
导航按键的下键:控制时分秒的数值减1;
导航按键的左键:对小时进行调节;
导航按键中心按下:多分钟进行调节;
导航按键的右键:对秒钟进行调节;

K1键:开始进行走秒;
K2键:进入时分秒设置状态或者闹钟设置状态
K3键:进入或退出万年历设置状态;

实验原理

实验原理与上一个相似,只是要实现的功能更复杂,这主要就是需要代码来实现了

可与PC通信的实时时钟
实验现象

从DS1302芯片中读取实时时钟模块的年、月、日、时、分、秒,对获取实时时钟模块的数据信息通过串口发送给上位机进行显示,
同时上位机可以发送指令给单片机,包含地址、校准值信息,来修改单片机寄存器值,实现单片机校时功能

实验原理

由于是需要上位机,下位机来实现通信,即可以相互发送信息等
我们就需要先来了解一下串口通信的电路图
在这里插入图片描述
这幅图我目前还没看懂,就先不解释了/(ㄒoㄒ)/~~

对于我们这个实验,我们需要只要是如何实现的

  • 读取实时时钟信息
    从实时时钟模块读取到年、月、日、时、分、秒信息,通过年、月、日计算阴历年、月、日、星期,将年、月、日、星期、时、分、秒、阴历年、阴历月、阴历日10个字节通过定时器定时地、连续地通过串口发送给上位机
  • 上位机对获取到的10个字节进行解析并进行显示到对应的控件上面。上位机通过选定地址、校准值,点击发送按钮,连续发送0xf0、寄存器地址、校准值3个字节给下位机,
  • 下位机通过缓存保存串口收到的数据,判断接收到的第一个字节是0xf0,第二个字节对应地址、第三个字节对应校准值,对实时时钟进行写操作,在写之前注意禁止写保护,晶振停止工作,寄存器写入数据,启动晶振,重写写保护。同时按键1控制年月日、时分秒的显示。

实验总框图设计流程
在这里插入图片描述

后面如何学习有所体会会继续补充的哈!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值