序
🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:多功能闹钟的设计与实现
1 硬件设计
1.1 单片机最小系统
1.1.1 最小系统介绍
本设计的核心部位采用的是STC89C52RC单片机,此单片机是一种新型的拥有更高速率、更强抗干扰技术的单片机。它和51单片机相比,拥有灵巧的8k字节储存空间,比51单片机的储存空间大的多[1],但是指令和51单片机相差不大,它的512个字节的RAM可以集成在芯片上。
最小系统包含单片机以及设计当中所需要的必备元器件:电源、晶振、上拉电阻、时钟等等,这能保证单片机始终处于正常运行的状态。单片机最小系统肯定是应用系统里的核心部,对它可以进行存储器的扩展、增加外设、A/D扩展等等,最终使单片机完成本设计所需要的基本功能[2]。
STC89C52是一款内置拥有更大内存的可以读取数据和写入数据的核心配置。利用STC89C52单片机构成了最小系统,再给单片机设置上复位电路和时钟电路就可实现设计所需的基本操作。单片机的引脚图如下图1-1所示。
图1-1STC89C52RC引脚图
关于STC89C52RC的重要引脚功能说明如下:
VCC(40引脚):此引脚接的是电源+5V。
VSS(20引脚):接地引脚。
P0端口(P0.0~P0.7,39~32引脚):P0端为高电阻状态的8位准双向I/O口,如果要产生高电平,得借助上拉电阻。它使用的时候可以作为通用I/O。
P1端口(P1.0~P1.7,1~8引脚):P1端口是一个8位双向I/O端口,带有内部上拉电阻。P1.0端口负载能力为三个LSTTL门,。当“1”写入P1端口时,可以作为输出端口。如下表3-1特殊引脚功能特性所示:
表1-1特殊引脚功能特性
引脚号 | 功能特性 |
p1.0 | T2(定时器/计数器2外部计数输入),时钟输出 |
P1.1 | T2EX(定时器/计数器2捕获/重装触发和方向控制) |
P2端口(P2.0~P2.7,21~28引脚):和P1端口相同,可看作为输入口。
P3端口(P3.0~P3.7,10~17引脚):也可看做输入口。P3端口的引脚复用详细功能如下表3-2所示:
表3-2P3端口引脚复用功能 | |
引脚号 | 复用功能 |
P3.0 | RXD(串行输入口) |
P3.1 | TXD(串行输出口) |
P32 | (外部中断0) |
P3.3 | (外部中断1) |
P3.4 | T0(定时器0的外部输入) |
P3.5 | T1(定时器1的外部输入) |
P3.6 | (外部数据存储器写选通) |
P3.7 | (外部数据存储器读选通) |
1.1.2 时钟芯片电路
实验不宜采用单片机的内部时钟芯片,因为内部的会受环境影响,就会出现很大的误差,为了减小失误和消耗更小的功率所以选用DS1302为时钟芯片,利用串行通信方式传送数据。时钟电路就是提供一个节拍给单片机的振荡器,所以为了实现时钟准确无误的计时,就必须要加入时钟电路。这比直接用单片机的定时计数器要高效很多。时钟芯片内部的晶振为32.768KHz,之所以加入晶振,是因为通过振动计算时间,来决定时钟的准确性。DS1302时钟芯片内部主要包含:控制逻辑电路、移位寄存器、振荡器[3]。外接两个纽扣电池,为了保证就算掉电时也可也以保存时间,能够完成正常的计时也是通过纽扣电池来实现的。运行步骤如下:
1、首先系统中的复位引脚(RST)送到高电平状态下。
2、接着在产生的SCLK时钟脉冲中,转向控制I/O引脚向DS1302芯片输入命令。
3、使用SCLK时钟的脉冲为I/O堆栈写入相应的数据项。
经过以上步骤后与核心单片机之间的数据发送实现起来就容易很多[4]。
DS1302时钟芯片的供电方式有两种,因为它有两个供电源,其中VCC1为预备电源,也就是说当Vcc1的电压大于Vcc2的时候,就是VCC1来供电了,但是常规情况下都是Vcc2作为供电源。
在时间寄存器中,“CH”是时钟暂时停止符号位,当DS1302处于低功耗状态时,该位低电压输入,时钟就会运行。“WP”是写保护位,在对时钟和存储器进行写操作之前,此位必须达到低电平。“WP”=1时,WP会对所有寄存器进行写这项操作。时钟芯片电路图如下图1-2所示:
图1-2时钟芯片DS1302,其引脚分布图
如下表1-3时钟芯片引脚的介绍:
表1-3时钟芯片DS1302,其引脚功能
GND CE X1,X2 I/O SCLK VCC1 VCC2 | 接地线 复位端 32.768kHz晶振引脚 数据输入/输出端口 串行时钟端口 慢速充电引脚 电源引脚 |
时钟芯片内存空间介绍如下图1-3、1-4所示:
图1-3时钟、日历和闹钟数据模式——BCD模式(DM=0)
图1-4时钟、日历和闹钟数据模式——二进制模式(DM=1)
1.1.3 复位电路的实现
复位电路是整个设计电路里的主要电路,单片机启动时的一瞬间,它的复位引脚就会出现两个机械循环的高电平,这时单片机就完成了复位的操作。如果这种状态持续存在是高电平,单片机就无法正常的工作,而是处于一个死循环的状态。这个复位电路没有必要加复位按键。而本系统选用的是12MHz的晶振,所以一个机器周期为1毫秒,复位脉冲宽度为2毫秒。
复位操作分为上位复位和手动复位。上位复位则需要电源接通以后系统能自动完成这项操作。在上电延时期间把单片机锁定在复位状态。在单片机开始首次增大电压时,则MCU锁定在复位模式。并且一直保持一个延长时间,以便于电源电压上升到稳定的一个等待时间。在电源电压稳定了之后,再此插入延时,给时钟震荡器从起震到平稳的等待时间[5]。
在复位电路图中可以看到电容的大小为10uF,电阻是10k。根据计算可以得出电容中的电压如果是电源电压的0.7倍(5×0.7=3.5V)时,则需要0.1s的一个等待时间,就实现了系统自动复位。当复位按键按下的时候,电容被短路了,RST引脚得到了一个高电平,系统实现了自动的一个复位操作。实验复位电路如下图1-5所示:
图1-5复位电路图
1.2 按键设计
本设计中用到了5个按键,如下图4个都是是独立按键,只有一个是带有上拉电阻手动复位按键,就是可以开启系统的总按键。4个独立按键分别都和单片机的P3接口相接,如下图1-6所示:
图1-6按键电路图
四个按键的各个作用:K1为SET键、K2为UP键、K3为DOWN键、K4为OUT/STOP键。
SET键:当K1键被按下时,所处的界面立马进入时间校准状态,按键按第一次可以改变秒数,第二次按下可以改变分数,往下依次可进行各年、月、日以及时、分、秒的校准。只是在调整时,十位是累加上来的,十位不可以调整。
UP键:当K2键按下,UP对SET选定项中的内容进行加数,可以设置闹钟,每次都是从个位开始累加,十位上的数字是无法直接调整。而且星期和阴历也是根据阳历日期的改变而自动计算。
DOWN键:当K3键按下时,K3对选定项中选定的内容进行减数调整,来设置闹钟数值大小。
OUT/STOP键:当K4键按下系统退出当前界面,进入下一页面。显示闹钟和农历日期,再次按下OUT键时,进入闹钟设置界面,设置好闹钟的数值后,DOWN和UP键都可以打开或者关闭闹钟。
在多个按键焊接的过程中,可以利用按键的导通性,不用每个按键都接地或者接通电源。在按键的设计当中,因为涉及按键不多,所以采用独立按键。
1.3 1602LCD液晶显示模块
1.3.1 1602LCD液晶显示原理
此液晶显示1602LCD是一种点阵式LCD(就是专门用于显示英文字母、罗马数字和符号等[6]),本设计采用32位的字符型LCD1602,它带背光设置可用于夜间的液晶显示屏。液晶显示1602LCD引脚说明如下表1-4所示:
表3-41602LCD引脚说明 | |||||
编号 | 符号 | 引脚说明 | 编号 | 符号 | 引脚说明 |
1 | VSS | 电源地 | 9 | D2 | DateI/0 |
2 | VDD | 电源正极 | 10 | D3 | DateI/0 |
3 | VL | 液晶显示变压信号 | 11 | D4 | DateI/0 |
4 | RS | 数据/命令选择端 | 12 | D5 | DateI/0 |
5 | R/W | 读/写选择端 | 13 | D6 | DateI/0 |
6 | E | 使能信号 | 14 | D7 | DateI/0 |
7 | D0 | DateI/0 | 15 | BLA | 背光源正极 |
8 | D1 | DateI/0 | 16 | BLK | 背光源负极 |
第3脚:VL是液晶显示器对比度调节端口,想要对比度对比度最强时,此接口需要接地。想要想要对比度最弱,就要接正电眼。对比度过强的时候屏幕上会产生会重影,避免出现这个问题,在硬件设计的时候利用一个10K的电位器,就可以自动调整对比度,直到调整到最合适的亮度。
第4脚:RS为寄存器选择端,低电平选择的是指令寄存器,高电平则选择的是数据寄存器;
第5脚:R/W为读写信号端。
第6脚:当E端由高电平变化成低电平时,液晶模块开始行使命令。
1.3.2 1602LCD的RAM地址映射及标准字库表
液晶显示1602LCD屏幕显示比较缓慢,向它写入一条条指令之前,一定要先保证它的的忙标志处于低电平状态,因为为低电平时,则表示不忙。如果处于忙状态的话此指令就不会执行。想要显示字符,第一步就是写入显示字符的编码,表示指出显示的位置,如下图1-7所示:
图1-7液晶内部显示地址
例如:通俗的来说,字符位置是40H的字符,在编写代码时不能直接写40H,因为规定写入显示地址时要求最高位上的D7必须是高电平1,所以通过计算实际写入的数据应该是01000000B。
在初始化液晶模块的时候,第一步要设置液晶的工作状态,液晶屏幕开始显示字符时,整个屏幕不移动,光标自动向右边移动。每次执行指令时,要确保液晶模块是否在繁忙的状态。1602液晶显示内RAM存储了大量的点阵字符图形,有数字、英文字母、常用的一些特殊符号等等。每个字符都有属于它自己独一无二的编码,举一个例子:大写字母“A”的编码是01000001B(41H),显示时模块就把指向41H里的点阵字符图形显示出来,就在屏幕上看到“A”的字样。
1.3.3 1602LCD电路连接
液晶的V0接口加了两个电阻,其作用是控制屏幕的灰度,为了调整到合适的灰度让两个电阻分压[7],大约电阻小于1V是亮度才能合适,两个电阻的位置不可调换,不然屏幕会不显示或者亮度低。实验1602LCD电路连接如下图1-8所示。
图1-81602的电路连接
1.3.4 1602LCD背光的设计
液晶显示屏的背光采用三极管,当单片机接口p2.4向LCD输入一个低电平时,经过限流电阻,然后9012会导通,电流方向就是电源,然后经过a和K(实际就是这个背光的正负极)经过正极,然后负极经过小灯,然后负极出来,经过9013,9013是一个开关,就回到了D,这样背光就会亮起来[8]。背光源负极接三级管再连接至单片机,通过IO角控制背光是否开启。如果不接的话,背光灯不会亮。其显示图如1-9所示:
图1-9实物液晶显示屏
1.4 温度采集模块
1.4.1 DS18B20特性
DS18B20的主要特性:与常规的热敏电阻元件相媲美,它能够直观的看出被测温度的数据,根据常规要求,可用简单的程序达到9到12位的数字值读数的方式[9]。在电路连接方面非常的简单,即单线接口,就是仅利用一根线实现传输数据。适用于环境不太友好的环境测量温度值。此类新产品能在3V~5.5V之间的电压使用[10],让系统可以灵活和便捷。它的性能特点可归纳如下:
1.体积非常小,抗干扰性能强,功率消耗比较低。
2.测温范围:-55℃-125℃,分辨率非常小。
3.与单片机连接只需要一条I/O线,这样大大减少了外部硬件电路,降低实验难度。
4.零待机的功耗。
5.借助USB数据线供电,电压在3.0V与5.5V之间。
6.能辨认搜索报警的命令,所以就标出超过本程序所限定温度的元件;
7.当电源正负极性不小心反接时,不会由于高温而烧坏,而是停止正常的启动。
此实验里,利用DS18B20测量温高低,外接一个上拉电阻[11],上拉电阻主要起信号稳定的作用,上拉电阻的阻值通常选取在4.7k与10k之间,一般都会选用10k。
3.4.2 DS18B20基本操作指令
(1)ROM操作命令及其含义
ReadROM指令(33h):读ROM,读芯片中的编码值,在读取编码值的时候只能读到一个,如果检测到在线的温度探测器有多个时,系统就会出现错误。
MatchROM指令(55h):此命令执行的条件是有多个DS18B20在线的时候,匹配给定编码值。
SkipROM指令(CCh):此命令响应后,会把执行的命令发给所有的在线设备。
SearchROM指令(F0h):寻找ROM,确定在线的DS1820所有个数。
AlarmSearch指令(ECh):当检测到的实时温度数值超过了实验设定的温度数值时,温度探测器就会驱动蜂鸣器发声报警。
(2)存储器操作指令代码及其含义
WriteScratchpad指令(4Eh):可以写入三个字节的数据。
ReadScratchpad指令(BEh):读整个内部RAM,读取温度值。
CopyScratchpad指令(48h):备份温度值,确保温度不被丢失。。
RecallEEPROM指令(B8h):从E2中把TH和TL还有配置值读到内部RAM。
ReadPowerSupply指令(B4h):分辨芯片的供电方法,一是用电源地引脚供电,二是从数据线那边分一些电过来。
3.4.3DS18B20温度采集步骤
(1)ReadROM(33h):第一步,每次在温度采集之前,先要对它进行初始化,初始化是为了确定单总线已经被传感器紧紧连接上了。
(2)SearchROM(F0h):这条指令可以一一排除,辨别处于总线上的芯片的状态。
(3)MatchROM(55h):当DS1820精确的满足64位只读存储器(ROM)的序列时,才能开始其中的指令。有一条特殊指令可以通过使用SkipROM指令,越过单点测温这一步骤。
(4)ConvertT(44h):这是一条转换指令,这条指令发出后,搜索总线上的电平,为高电平时,即可完成温度的转换。
(5)ReadScratchpad(BEh):这条指令执行后,可以获取到一个二进制数这个数十来表示温度的(前提条件是在总线上)。
1.5 蜂鸣器电路模块
本实验所选用的蜂鸣器是为源蜂鸣器,接通电源后就会自动“滴”的响一声,蜂鸣器接单片机的21引脚。提供给蜂鸣器工作的电流是相对来说较大的,所以单片机的I/O口是无法开启的,所以单片机端口P2.0输入一个低电平给蜂鸣器时,经过限流电阻R2,然后9012被导通,经过三极管,三极管的基极和直流电源相连通,声音被放大,导通驱动蜂鸣器发出声音作为定时闹铃。本系统中设计到蜂鸣器的地方有很多,当闹钟时间到达已经设置的时间或者室内温度高于40摄氏度时,蜂鸣器就会产生间断的“滴”声,会持续一分钟停止,也可以手动停止,间断的声音是通过软件产生的[12]。
电路图中接三极管是为了放大声音信号,而且本实验选用的三极管是PNP型的,低电平才有效,其电路图如图1-10所示:
图1-10蜂鸣器电路图
11.6 电源模块
P1部分是一个DC电源接口,外部电源插入DC电源接口,经过自锁开关给整个电路供电,自锁开关的每一侧两边有两个触电,这两个触电都是常闭触电。本设计体积较大,如果选用电源供电则有些不妥。电源模块的原理图如图1-11所示:
图1-11电源电路图
2 制作和调试
在这次完成实验设计中,系统调试采用的是以前上课学过的C语言软件编辑。恰恰Keil是比较熟悉的一款单片机c语言开发软件,在虚拟实验时选择Proteus软件,也被称作EDA工具[14]。它是加上PCB设计、虚拟仿真和电路仿真为一体的多优点的软件。当针对执行效果调试时,首先点击键盘F12(快捷键),选择对应工具栏中的模块,左键单击进行运行,就会自动响应。接下来调试软件部分时,点击键盘上F10(快捷键),进入子程序一条一条的执行。然后执行start命令,在此仿真过程中牵扯到的单片机文件和所有用到的软件列表将在左边的debug菜单中全部出现,最后一步查看调试的数据,然后对数据进行分析、总结。联机调试的时候要根据以上所述到的Proteus软件调试的方法[15]。在它的供应电源和复位电路调试。前提要确保单片机可以无误的工作。
硬件调试步骤图如下
(1)初始界面显示阳历、星期、时分秒还有温度,如下图-1所示:
图2-1初始界面
(2)当按下按键k4时,跳到下一界面,显示农历和星期,如下图2-2所示:
图2-2农历界面
(3)第二次按下按键k4时,出现闹钟设置界面,如下图2-3所示:
图2-3闹钟未开启界面
设置闹钟数值,并开启闹钟,如下图2-4所示:
图2-4闹钟开启界面
系统实物图
实验原理图
如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!