基于MSP430单片机的简单门禁系统

来源:互联网 发布:手机漏洞修复软件 编辑:程序博客网 时间:2024/04/30 04:42

一、课设选题

基于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.1Keyboard模块

 

 

简单介绍:矩阵键盘(key board)的读取

矩阵按键的识别利用行列扫描交叉点,如果按下,该交叉点的值由01

键盘扫描程序一般应包括以下内容:                       

1)判别有无键按下。  

2)键盘扫描取得闭合键的行、列值。                  

3)用查表法得到键值。  

4)判断闭合键是否释放,如没释放则继续等待。  

5)将闭合键键号保存,同时转去执行该闭合键的功能。

 

4.1.2LED Segment模块

 

4.1.3TM1638驱动芯片

简单介绍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.4DC 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\<user>, C:\Documents and Settings\<user>

为你所有的工程使用单一目录检查 使用该目录为默认。

可维持多个workspace(工作区),每个工作区又可以维持多个工程,但是只能有一个工程活跃

4.3.2、新建工程

首先打开CCS并确定工作区间,然后选择Project ->New CCS Project创建工程,注意选择工程名、输出类型、工程位置、芯片型号等。

 

 

a、输出类型:

可执行( Executable ): 构建一个完整的可执行程序;

静态库(Static Library):其他工程所使用的功能集合;

b、选择芯片类型:

选择家族: MSP430

选择系列:MSP430x6xx Family

选择型号: MSP430F6638

cProject 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、主程序

0 0