实验名称:智能药盒的设计与实现
姓 名
学 院
专 业
班 级
学 号
2021
年 11 月 8 日
一、 任务要求
很多老年人随着年龄的增长,会伴随着健忘的问题。对于老年人
来说,在生病的时候,甚至是日常生活中按时吃药是一个难题。如果
需要在不同时间吃不同的药,几乎很难独立完成。而设计实现一个具
有计时提醒功能的智能药盒就是为这些老年人所设计的。
1.1 基本要求
1.智能药盒有三个药格,对应老年人每天早中晚的三次服药,每
个药格有对应的提醒灯。按下 BTN0 键进入开机初始状态,三个药格
的提醒灯在 8×8 点阵中显示下图的红、绿、黄图案。
2.三个药格可通过 BTN1 键切换设定服药时间,切换到哪个药格,
相应药格的提醒图案进行闪烁显示。服药时间的设定采用 4×4 矩阵
键盘,每个药格可设定一个时间,设定时间范围在 0~59 秒之间,在
设定过程中采用数码管 DISP1 和 DISP0 分别显示所设定的服药时间。
当三个药格的服药时间设定结束后药格提醒图案停止闪烁。
3.按下智能药盒工作键 BTN2 后,药盒开始工作,并从 0 开始进行
60 秒计时,数码管 DISP1 和 DISP0 显示计时时间。当计时计到各个
药格设定的服药时间时,点阵上相应药格的提醒图案将会快速闪烁提
醒,同时蜂鸣器报警,按 BTN3 键后报警和闪烁停止。
4.智能药盒计到 60 秒后重复开始服药计时和提醒,直到按下 BTN0
键后智能药盒关闭,点阵全灭,计时停止。
1.2 提高要求
1.采用液晶 LCD 显示设定的服药时间。
2.增加高级模式,每个药格可设定 1~2 个服药时间进行提醒。
二、 系统设计
2.1 设计思路
由于智能药盒控制电路的各个模块关联性较强,在不同的工作环
节中工作方式不同,因此将整个工作流程由状态机控制实现。以状态
控制模块为核心,控制分频模块、点阵显示模块、倒计时模块、蜂鸣
器模块、4*4 键盘模块及 LCD 液晶显示模块的工作。
1. 状态控制模块(状态机):根据系统的工作流程,电路上电后,按下
按键 btn0 后开机;之后三次按下 btn1 切换设置服药时间,且对应药
盒闪烁显示,数码管显示设定的服药时间;按下 btn2 后,药盒开始
工作并计时;当计时计到各个药格设定的服药时间时,对应药盒报警;
按下 btn3 后报警停止;最后按下 btn0 后,智能药盒关闭。因此可将
系统分为关机状态、开机状态、设定服药时间状态、报警状态及关机
状态。状态机输出状态信号 state,控制其余模块的工作。由于输出
信号不仅与当前状态有关,还与输入信号(倒计时开始信号、倒计时
结束信号、礼花结束信号)有关,因此为 Mealy 型状态机。
2. 点阵显示模块:当点阵的每一行依次显示,且切换速度足够快时,
我们将看到点阵的每一行都在同时显示,根据人眼视觉暂留的最低要
求,我们用 1kHz 的时钟对点阵进行逐行扫描,得到稳定的点阵显示
状态。用 1Hz、2Hz 的时钟信号来控制点阵闪烁,模 拟 药盒设置时间
及报警效果。
3. 分频模块:因所用模块需要 1kHz,5Hz,1Hz 信号,可由 50MHz
的时钟信号分频得到。
4. 数码管模块:多个数码管显示原理与点阵显示模块相同,即利用
1kHz 的时钟信号对数码管进行扫描。倒计时状态下利用 1Hz 的时钟
信号切换数字,从而达到倒计时的目的。
5. 4*4 键盘模块:4*4 键盘是由 16 个按键构成的 4 行 4
列键盘矩阵,
有 8 个控制端,其中 4 个行信号,4 个列信号。根据题目要求,使用
时读取两路行信号,如果 2 位都为‘1’,则没有按键被按下,如果某一
位为‘0’,则需要根据当前行、列信号为‘0’的位置判断被按下的按键。
6. LCD 模块:将 50MHz 的时钟信号分频后得到 1000Hz 的信号以控
制 LCD 屏的字符显示。
7. 防抖模块:由于按键为机械弹性开关,为了保证按键识别的准确性,
应该对按键进行消抖处理,本实验利用延时消抖的方法进行消抖。
2.2 总体框图
50000
分频器
clk
row_input[3..0]
点阵
按键防抖
4*4键盘
译码器 LCD显示
状态机
col_r[7..0]
col_g[7..0]
200
分频器
1000
分频器
btn0
btn1
btn2
btn3
row[7..0]
buzz
sw0
sw1
sw2
col_output[3..0]
seg_output[6..0]
cat_output[7..0]
LCD_RS
LCD_RW
LCD_EN
LCD_data[7..0]
50MHz
1k
Hz
btn0
btn1
btn2
btn3
btn0_out
btn1_out
btn2_out
btn3_out
1Hz
5Hz
row_input
1kHz
state
1kHz
1Hz
sw0
sw1
sw2
state_in
data
data_decoded
系统各模块之间信号的传输关系如图所示。其中状态机模块为系
统的核心模块,经防抖模块处理后,其输入信号有开关机信号
btn0_out、切换设置时间信号 btn1_out、倒计时开始信号 btn_2_out、
分频后 1kHz 时钟信号及 4*4 键盘的状态输入 state_in。状态机模块的
输出信号为 state,对应当前的工作状态,分别输入至 4*4 键盘模块
与点阵显示模块,以控制键盘在不同状态的输入和点阵在不同状态下
的显示。4*4 键盘输出信号给译码器模块,译码器模块将输入的定时
数据信号输入给 LCD 屏模块,显示在 LCD 屏幕上。
2.3 分块设计
1. 状态机
状态转换表如下:
状态转换
当前状态 含义 下一可能状态 含义
0000 关机 0001 开机
0001
开机
0010(0000)
设置红盒时间(关机)
0010
设置红盒时间
0011(0000)
设置绿盒时间(关机)
0011
设置绿盒时间
0100(0000)
设置黄盒时间(关机)
0100
设置黄盒时间
0101(0000)
计时(关机)
0101
计时
0110、0111、1000(0000)
红盒报警、绿盒报警、黄盒报警(关机)
0110 红盒报警 0101(0000) 计时(关机)
0111 绿盒报警 0101(0000) 计时(关机)
1000 黄盒报警 0101(0000) 计时(关机)
状态转换图如下(为简略表示,省去关机其它状态到关机状态
(0000)的连线):
0000
0001
0010 0011 0100
01010110
0111
1000
btn0
btn1
btn1 btn1
btn2
btn3
btn3
btn3
红盒时间到
黄盒时间到
该状态机是一个 Mealy 型的有限状态机。0000 状态为关机;当按
下 btn0 后,药盒开机,状态切换为 0001;按下 btn1 三次,依次进
入 0010、0011、0100 状态设置红盒、绿盒、黄盒时间;设置时间完
- 1
- 2
前往页