一、课设选题
基于MSP430单片机的门禁
二、选题介绍
门禁系统通过6位密码的键入,然后与设定密码比较,若相同,门开启(电动机转动),同时人数计数器加一。若不同,按AC键清零,重新键入密码。
三、课设设备
MSP430F6638实验箱 1台
电脑 1台
四、前期准备
4.1、硬件设备
DY-FFTB6638 V3.0硬件实验系统
本次实验主要用到的硬件模块有:
a、KeyBoard模块和
b、LED Segment模块
c、TM1638驱动芯片
d、DC motor模块和DRV8833驱动芯片
4.1.1、Keyboard模块
简单介绍:矩阵键盘(key board)的读取
矩阵按键的识别利用行列扫描交叉点,如果按下,该交叉点的值由0变1。
键盘扫描程序一般应包括以下内容:
(1)判别有无键按下。
(2)键盘扫描取得闭合键的行、列值。
(3)用查表法得到键值。
(4)判断闭合键是否释放,如没释放则继续等待。
(5)将闭合键键号保存,同时转去执行该闭合键的功能。
4.1.2、LED Segment模块
4.1.3、TM1638驱动芯片
简单介绍:TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。
TM1638管脚功能说明:
符号 |
管脚名称 |
说明 |
DIO |
数据输入/输出 |
在时钟上升沿输入/输出串行数据,从低位开始; |
STB |
片选 |
在上升沿或者下降沿初始化串行接口,随后等待接受指令,STB为低后的第一个字节作为指令,当处理指令时,当前其他处理被终止。当STB为高时,CLK被忽略; |
CLK |
时钟输入 |
上升沿输入/输出串行数据; |
K1~K3 |
键盘数据输入 |
输入该教的数据在显示周期结束后被锁存; |
SEG1~SEG8 |
输出(段) |
段输出(也用按键扫描),P管开通漏输出; |
SEG9~SEG10 |
输出(段) |
段输出,P管开通漏输出; |
GRID1~GRID8 |
输出(位) |
位输出,N管开漏输出; |
VDD |
逻辑电源 |
5V + 10%; |
GND |
逻辑地 |
接系统地; |
4.1.4、DC motor模块和DRV8833驱动芯片
电机驱动芯片DRV8833简单介绍
A、双通道H桥电流控制电机驱动器,能够驱动两个直流(DC)电机或一个双极性步进电机、低MOSFET导通电阻、HS+L360mΩ
B、PWM绕组电流调节/限制
C、电源电压范围 2.7V~10.8V
4.2、软件设备
4.2.1、MSP430的两种主要集成开发环境 (IDEs):
Code Composer Studio version 5 (CCSv5)
IAR Embedded Workbench (EWB) IDE
其中,CCSv5是TI官方提供的IDE,IAR是第三方软件。这两种软件均支持用汇编语言和C语言开发。并且本次软件也配置CSSv5。
4.2.2、CCSv5 安装
1、CCS的安装过程主要包括接受协议和选择安装目录、安装模式、安装组件、处理器等。
2、安装完成后,第一次打开CCSv5需要设置工作目录
4.3 CCSv5 工程开发
4.3.1、工作区(workspace)目录
建立一个工作区:目录包含所有元素(工程,工程的链接,可行性源代码) 用于开发:
默认: C:\Users\
为你所有的工程使用单一目录: 检查 使用该目录为默认。
可维持多个workspace(工作区),每个工作区又可以维持多个工程,但是只能有一个工程活跃
4.3.2、新建工程
首先打开CCS并确定工作区间,然后选择Project ->New CCS Project创建工程,注意选择工程名、输出类型、工程位置、芯片型号等。
a、输出类型:
可执行( Executable ): 构建一个完整的可执行程序;
静态库(Static Library):其他工程所使用的功能集合;
b、选择芯片类型:
选择家族: MSP430;
选择系列:MSP430x6xx Family;
选择型号: MSP430F6638;
c、Project Templates and examples:
可选工程模板,包括标准C和汇编的工程或空工程等;
4.3.3、新建.h或.c文件
a、导入现有的.h或.c文件
将现有的源文件添加到工程,选择Project --> Add Files....
Copy(副本)或 Link(创建一个快捷方式)文件;
b、导入现有文件夹
将现有的源文件添加到工程,选择Import… -> General ->File System
建议:文件导入最好采用copy的方式,文件夹导入采用link的方式
4.3.4、导入已有工程:
首先打开CCS并确定工作区,选择Project ->Import Existing CCS/CCE Eclipse Project弹出导入工程对话框。
4.3.5、激活工程:
工程浏览视图中显示了所有打开的工程,但是一个工作区不能被多个运行的CCS实例共享,即在同一时刻,只能有一个CCS实例是处于active状态的。
4.3.6、启动调试器
创建一个工程之后的下一步就是是运行程序的调试器,下面有三种调试工具:
TI官方MSP430专业仿真器:FET430UIF;
Launchpad板载仿真器外接(推荐);
自制板载仿真器;
Build(编译) 基本调试
Debug(调试) 程序复位到main
全速运行 芯片复位
设置断点 退出运行
4.3.7、通过USB连接目标板至PC
五、遇到的问题以及解决方法
问题1、设置密码时,无法得到预期的效果
原因:设置六位密码是,由于数字过大,发生整数转换,造成截断。
尝试解决办法:换成了四位密码,避免了上述警告,但是也无法得到期望的结果。
最终解决方法:设置两个数组。其中一个为passwd_set数组,设定密码,另外一个保存键入的密码,然后通过for循环,比较是否两个数组完全相等,相等则电机转。
问题2、最初只能键入一次且只能键入六位密码。
原因:在循环中运用break语句错误,没有正确的跳出它所在的loop。
解决方法:将AC按钮作为清零键,且同时产生一个标签,该标签作为break语句执行的条件语句。
问题3、电机无法自主停止
原因:若电机执行,它并不会转动一段时间而停止
尝试解决办法:调用延时函数,可是只是暂时的解决了这个问题,一定时间后,电机还是会启动。
最终解决方法:电机启动过后,调用一定的延时,然后执行电机不使能语句。
问题4、键入密码错误,之前密码痕迹并没有抹除
尝试解决办法:将数码管自动写入0值,但是也无法解决这个问题。
最终解决办法:将数码管设置0值(不是写入值),然后清楚所有显示。
问题5、输入密码正确时,按AC电机会继续开启,人数计数器加一
原因:比较之后,寄存器没有清零
最终解决办法:将每个数码管自动写入0,表示清零。
六、程序
见附录
1、直流电机(DC motor)的头文件及源程序
2、电机驱动DRV8833头文件及源程序
3、TM1638驱动芯片、KeyBoard和LED Segment的头文件及源程序
4、主程序