序
🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机一种智能药盒设计
3系统的硬件设计
3.1STC89C52RC单片机介绍
STC89C52RC是一种带8K字节闪烁可编程可擦除ROM的低电压,高性能COMOS8的微处理器。具有超强的抗干扰能力,指令代码完全兼容传统8051单片机。STC89C52RC虽然使用的是51系列单片机的内核,但在该基础上进行了创新。所以相比于传统的51系列单片机,它多了很多新的功能。也因此相比于51系列单片机更加使用广泛,控制的系统可以更加复杂。
3.1.1引脚介绍
STC89C52RC单片机的40个引脚可分为主电源、外接晶体振荡、多功能I/O口、控制和复位等。引脚图如图3.1所示。
图3.1STC89C52引脚图
(1)VCC对应的是40引脚相当于电源电压。
(2)VSS对应的是20引脚,其作用是接地。
(3)多功能I/O口:
本单片机一共有4组I/O口分别是P0、P1、P2、P3,独立地用作输入或输出是每组I/O接口的基本功能。其中P0是双向口;P1、P2、P3为准双向口:
P0组I/O端口对应的是32~39引脚,主要功能是作为输入/输出口和地址/数据总线口。
P1组I/O端口对应的是1~8引脚,每个口都可以独立地控制。此外,1引脚和2引脚有复位功能,功能特性参见下表:
表3-1引脚复用功能
引脚号 | 功能特性 |
P1.0 | T2(定时器/计数器2外部计数输入),时钟输出 |
P1.1 | T2EX(定时器/计数器2捕获/重装触发和方向控制) |
P2组I/O端口对应的是21~28引脚,主要功能是作为输入/输出接口或者用于高八位地址总线。
P3组I/O端口对应的是10~17引脚,主要功能是作为一般I/O接口,并还有一些复用功能,引脚功能特性参考下表所示:
表3-2P3口引脚复用功能
引脚号 | 复用功能 |
P3.0 | RXD(串行输入口) |
P3.1 | TXD(串行输出口) |
P3.2 | /INTO(外部中断0) |
P3.3 | /INTO1(外部中断1) |
P3.4 | T0(定时器0的外部输入) |
P3.5 | T1(定时器1的外部输入) |
P3.6 | /WR(外部数据存储器写选通) |
P3.7 | /RD(外部数据存储器读选通) |
控制和复位等引脚的介绍如下表3-3所示:
表3-3各引脚功能
引脚序号 | 引脚名称 | 功能描述 |
9 | RST | 复位端 |
18 | XTAL2 | 是振荡器反相放大器的输入端 |
19 | XTAL1 | 荡器反相放大器和内部时钟发生电路的输入端 |
29 | PSEN | 外部程序存储器选通信号输出引脚 |
30 | ALE | 访问外部程序存储器时,锁存低8位地址的输出脉冲 |
31 | VPP | 内外程序存储器的选择端 |
3.2晶振电路
晶振电路的作用是给系统提供时钟信号。本设计选用的内部时钟方式,尽管单片机的XTAL1和XTAL2内部有振荡器,但依旧需要在该两端连接一个晶振和两个瓷片电容才能组成自激振荡器。晶振就是给单片机提供工作脉冲信号的。晶振的取值范围通常一般在24MHz以下,不然系统会不稳定。本文选择的是12MHz,是一个在取值范围且很常用的晶振频率。瓷片电容的取值范围通常是20~30pF,本设计选取了两个30pF的瓷片电容。振荡周期是时钟周期的1/2倍,振荡周期是机器周期的1/12倍,振荡周期是晶振频率的倒数。
本设计使用的12MHz的晶振频率,则由上述的各个时序之间的转换关系可以得出振荡周期=1/12μS,时钟周期=1/6μS,机器周期=12*1/12μS=1μS。晶振电路图如图3.2所示:
图3.2晶振电路
3.3复位电路
复位电路如同计算机的重启功能,如果在使用计算机的过程中出现故障,按下重新启动的按钮,计算机内部的程序又会被从头到尾的重新执行。放在集成电路芯片里也同理,在集成电路芯片工作的时候,但受到环境的干扰,使得程序运行退出时,按下复位按键,内部的程序将自动从前排启动。在单片机中当电平被拉高且时间持续在两个机械周期以上则会形成复位现象。本设计采用的是按键复位。
在主控芯片工作的时候,若按下复位键,电容处于一个短路的状态,VCC的+5V的电平会直接,加到RET端,导致RET引脚上的电位迅速被拉高。而这种状态直到我们按下复位键时,被拉高的电平才会释放。这就是按键复位的原理和实现条件。
复位电路的电容的取值最低不能低于10uF,最高不能高于30uF,且电容值与复位时间成反比。本设计中我采用了10uF的电容和10k的电阻,通过之前的计算可知,该设计的机械周期为1us,而复位电路形成的条件是需要将电平拉高两个机械周期或者两个以上才可以。因此该设计中需要将RES引脚的电平拉高持续2μS或以上才行。可以算出该电容充电到电源电压的0.7倍,电源电压为5V,所需的时间为电容值乘以电阻值,结果是0.1S。在这0.1S中,电容两端的电压的大小在0V到3.5V之间。单片机复位电路如图3.3所示:
图3.3复位电路
3.4键盘电路
在本设计,按键设计的是独立的键盘模块,所需的按键比较少仅仅只需5个键盘按键,分别是“设置”键、“+”键、“-”键、“确定”键以及一个开关键。按键属于机械装置,在按下按键或者松掉按键的一刹那会发生抖动,在硬件设计中防抖设计比较困难,所以本设计会在软件设计中加入防抖程序。键盘按键的电路连接如图3.4所示:
图3.4键盘电路
3.5显示电路
3.5.1LCD12864简介
液晶显示屏是一款常用的图形液晶显示模块,能够在水平方向显示一百二十八个点,在竖直方向显示六十四个点,总共有128x64=8192个点。一次能传送8位数据,运行速度快。LCD12864有两种显示方式,分别是字符显示和绘图显示。
3.5.2引脚定义
如表3-3所示:
表3-3LCD12864主要引脚功能
引脚 | 名称 | 方向 | 说明 | 引脚 | 名称 | 方向 | 说明 |
1 | VSS | - | 接地(0V) | 11 | DB4 | I | 数据4 |
2 | VDD | - | 电源正端 | 12 | DB5 | I | 数据5 |
3 | VO | - | LCD驱动电压输入端 | 13 | DB6 | I | 数据6 |
4 | RS(CS) | O | H/L并行的指令/数据选择信号,串行的片选信号 | 14 | DB7 | I | 数据7 |
5 | R/W(SID) | O | H/L并行的读写选择信号,串行的数据口 | 15 | PSB | O | H:并行模式 |
6 | E(SCLK) | O | H/L并行的使能信号,串行的同步时钟 | 16 | NC | - | L:串行模式 |
7 | DB0 | I | 数据0 | 17 | /RST | O | 空脚 |
8 | DB1 | I | 数据1 | 18 | NC | - | 复位低电平有效空脚 |
9 | DB2 | I | 数据2 | 19 | LEDA | - | 背光源负极 |
10 | DB3 | I | 数据3 | 20 | LEDK | - | 背光源正极 |
LCD12864液晶电路如图3.5所示:
图3.5LCD12864液晶电路
3.6蜂鸣器报警电路
本设计中集成电路芯片的P2.0引脚与电子讯响器相互连接。当集成电路芯片管脚输出稳定频率的电平时,蜂鸣器开始工作。蜂鸣器所发出的声音是由振动所形成的,其电路连接图如图3.6所示:
图3.6蜂鸣器电路
通常当P2.0脚电平处于高电平。当药盒开始需要报警时,集成电路芯片控制P2.0管脚输出一定频率的方波,蜂鸣器振动发出声音,完成声音报警功能。
3.7发光二极管电路
LED二极管可以简称为LED灯,由半导体材料制作而成,多用作指示灯、显示LED板等。LED灯在系统中与蜂鸣器相结合同步工作,起到声光报警的作用。发光二极管接线图如图3.7所示:
图3.7发光二极管电路
在本设计中发光二级管的阴极与主控芯片的P1.1管脚连接,通常P1.1管脚是高电平的时候,LED灯处于熄灭的状态。在开始报警的时候,单片机会从I/O进行输出,P1.1管脚会从高电平拉低成低电平,LED灯就会导通并亮起。LED灯的阳极与VCC相连接,通过电源供电。电阻的作用是对LED灯的电流起到调节的作用,确保LED灯能正常发光。
3.8MP3模块
3.8.1HSC003简介
HSC003是一款稳定可靠的串口MP3芯片,拥有MP3和WMV的硬解码。软件支持USB或者t-flash卡驱动,适用16位文件分配表和32位文件分配表的文件系统。播放所指定的音乐只需要根据简单的串口指令,并不需要过多的复杂工作,USB同时也可以当作读卡器用,插入存储卡即可。
3.8.2引脚定义
HSC003引脚图如图3.8所示:
图3.8HSC003引脚图
芯片引脚介绍如表3-5所示:
表3-5HSC003引脚介绍
引脚序号 | 引脚名称 | 功能描述 | 备注 |
1 | SPK+ | 功放输出正 | 外接喇叭(3W)输出 |
2 | GND | 地 | 电源地 |
3 | VDD | 电源输入 | 3.3V-5.4V |
4 | SPK- | 功放输出负 | 外接喇叭(3W)输出 |
5 | MUTE | 低电平时播放声音(L) | 静音控制 |
6 | USBDP | USBDP | 用于播放USB和下载音乐 |
7 | USBDM | USBDM | 用于播放USB和下载音乐 |
8 | ADK | 按键 | 多组ADK按键 |
9 | TX | UART串行数据输出 | TTL电平(3.3V) |
10 | RX | UART串行数据输入 | TTL电平(3.3V) |
3.8.3MP3模块电路
MP3模块电路如图3.9所示:
图3.9MP3模块电路
3.9时钟电路
3.9.1DS1302简介
DS1302是一款有着31字节数据存储随机存取存储器的实时时钟芯片。它不但能够提供秒、分、小时、日期、月、年等信息,还具有闰年自行校准的功能,其功耗很低,工作电压很宽,大概是2.0V~5.5V的范围内都不会出现故障。
3.9.2引脚定义
DS1302的引脚定义如表3-6所示:
表3-5DS1302引脚定义
引脚序号 | 引脚名称 | 功能描述 |
1 | VCC2 | 主电源引脚 |
2~3 | X1~X2 | 晶振管脚 |
4 | GND | 接地 |
5 | RST | 复位端输入端 |
6 | I/O | 双向通信引脚,读写数据都是通过该引脚完成 |
7 | SCLK | 时钟信号输入引脚 |
8 | VCC1 | 备用电源引脚 |
3.9.3时钟电路的设计
DS1302与集成电路芯片的接口是由3根数据线来进行的,集成电路芯片的P2.2与DS1302的数据传输端相接,P2.1用来作为SCLK的控制端,RST由P2.3控制。本设计方案的接口电路如图3.10所示。
图3.10时钟电路
3.10存储电路
3.10.124C02简介
24C02是EEPROM元器件。EEPROM意思是带电可擦除可编程ROM。因为它是ROM,所以可以在断电后依旧能继续存储数据,另外也能在上拉电阻的作用下擦除和重写。这很大程度上便于单片机对该存储电路的开发。
3.10.2引脚定义
24C02引脚定义如表3-6所示:
表3-624C02引脚定义
引脚序号 | 引脚名称 | 功能描述 |
1~3 | AO~A2 | 器件地址输出 |
4 | GND | 接地 |
5 | SDA | 串行数据输入输出 |
6 | SCL | 串行时钟输出 |
7 | WP | 写保护 |
8 | VCC |
3.10.3存储电路的设计
存储芯片24C02与单片机STC89C52RC的接口是由3条线来完成的,单片机STC89C52RC的P2.5与存储芯片24C02的硬件数据保护端相连,P2.6用来作为存储芯片24C02串行时钟输出SCL的控制端,P2.7控制存储芯片24C02的串行数据输入输出端。本设计方案的接口电路如图3.11所示。
图3.11存储电路
3.11重量采集电路
3.11.1ADC0832简介
ADC0832是一款普及率很高的、8位逐次逼近、双通道A/D转换芯片。它转换速度快,性能稳定,体积比较小,兼容性以及性价比都很高。目前已经有很高的使用率。
ADC0832与主控芯片的接口有4条数据线。数据信号输入端与数据信号输出端在使用时只能一端有效,不能同时有效,并且与主控芯片的接口是双向的,所以可以节约I/O口,让数据输入端和数据输出端并联在同一个数据线上应用。在未开始A/D转换时,CS输入端为上拉电阻,这时AD转换器禁止工作。在收到单片机指令开始转换时,CS输入需要将电平变成低电平,并且该状态需要保持到A/D转换结束。同时ADC0832开始转换的工作,由CPU向CLK端输入时钟脉冲信号,采用数据输入通道功能挑选的数据信号。
3.11.2ADC0832引脚定义
ADC0832引脚定义如表3-7所示:
表3-7ADC0832引脚定义
引脚序号 | 引脚名称 | 功能描述 |
1 | CS_ | 片选使能,低电平芯片使能 |
2 | CH0 | 模拟输入通道0,或作为IN+/-使用 |
3 | CH1 | 模拟输入通道1,或作为IN+/-使用 |
4 | GND | 接地 |
5 | DI | 数据信号输入,选择通道控制 |
6 | DO | 数据信号输出,转换数据输出 |
7 | CLK | 芯片时钟输入 |
8 | VCC/REF | 电源输入及参考电压输入(复用) |
3.11.3FSR402薄膜压力传感器简介
FSR402薄膜压力传感器是一种重量较轻,感应精度很高,超薄型电阻式压力传感器。该压力传感器是ForceSensingResistor传感器薄膜区域感受到压力后,将压力值转换成电阻值的变化,从而获得压力信息。其压力大小与电阻大小成反比。主要用于压力0g-10kg的设计。
简单来说,在开始阶段,当压力突破一定压力临界值后,导通电阻有一个突破,ForceSensingResistor在这个临界值之前等同于是一个开关。当突破这个临界值的时候,电阻与压力之间就出现一种不断变化的关系。电阻与压力的关系如图3.12所示:
图3.12压力曲线图
3.11.4重量采集电路的设计
在本设计中,因为在药盒分为三个格子分别装有三种药品,需要采集三个重量数据。所以我连接了三个薄膜压力传感器分别检测三个药盒格子的重量,以及两个A/D转换器以确保重量采集的工作能顺利完成。接口电路图如图3.13所示:在本设计中,因为在药盒分为三个格子分别装有三种药品,需要采集三个重量数据。所以我连接了三个薄膜压力传感器分别检测三个药盒格子的重量,以及两个A/D转换器以确保重量采集的工作能顺利完成。接口电路图如图3.13所示:
图3.13重量采集电路图
4系统的软件设计
4.1keil5软件介绍
KeilC51一款非常友好和强大的51系列兼容微处理器C语言软件开发系统。C语言与汇编语言相比,虽然效率和对硬件的可操控性都不如汇编语言,但是C语言更容易维护,且可移植性要比汇编语言好。所以Keil采用的是C语言编程。Keil包含微控制器开发所有的所有组件,包括IDE、编辑器、ARMC/C++编辑器、uVision调试跟踪器和PackInstaller。
4.2系统主程序
系统的主程序模块主要完成系统各部分的初始化和调用各个功能子程序。各个程序模块的结构如图4-1所示:
图4.1各程序模块结构图
在本设计的源程序中,无论主程序执行到哪一个环节,都必须在时钟的驱动下,第一步先进行对每个子程序的初始化,第二步才能开始循环。开始循环程序后,对键盘扫描子程序进行读取,开始扫描使用者在键盘上所输入的各种信息,通过运算后调用进入数据刷新子程序将输入的信息内容同步在LCD12864上显示出,完成四次用药时间的定时和每个药物的用量的设置,完成对实时时间的调节,比对实时时间和设置的定时时间,相同时开始声光报警程序。主程序流程图如图4.2所示:
图4.2主程序流程图
原理图
PCB图
如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!