当前位置:文档之家› 东南大学MCU课程设计报告

东南大学MCU课程设计报告

东南大学自动化学院
《MCU技术及课程设计》
课程设计报告
姓名:学号:
专业:自动化实验室:金智楼组别:同组人员:
设计时间:2017年 08月28日—— 2017年09月06日评定成绩:审阅教师:
目录
一. 课程设计的目的与要 (3)
二. 原理设计 (3)
三. 方案论证 (8)
四.方案实现与测试 (8)
五.分析与总结 (9)
一.课程设计的目的与要求
本次设计使用MSP430F6638实现一基于单片机的电子密码锁的设计,其主要具有如下功能:
1.密码通过键盘输入,若密码正确,则绿灯亮,表示密码锁打开,若密码错误,红灯亮,表示密码锁关闭。

2.按AC键可以清除已输入的密码,重新输入。

二. 原理设计
1.数码管显示
(1) TM1638 控制芯片
TM1638 是带键盘扫描接口的 LED驱动控制专用电路,内部集成有 MCU 数
字接口、数据锁存器、 LED 高压驱动、键盘扫描等电路。

主要应用于冰箱、空
调、家庭影院等产品的高段位显示屏驱动。

TM1638 原理图如5-1所示,其中 SEG_DIO, SEG_CLK, SEG_STB 与 MSP430
芯片中 P3.5, P3.4, P3.2 三个 IO 口相连,仅占用 3 个端口即可完成数据的
输入输出,大大节约单片机的 IO 口和开发板的空间,降低了布线的难度。

TM1638 与 MSP 430 实验箱连接示意图如图 4-1 所示,实验开发板 LED 数码管对
应关系见图 5-2。

(2) TM1638 接收数据
串行数据传输格式:读取和接收 1 个 BIT 都在时钟的上升沿操作。

数据接收(写数据)时序如图 5-4 所示。

以下写数据代码仅作为参考。

(更多关于 TM1638 的程序请参考给出的
TM1638.h 和 TM1638.c 两个文件以及芯片说明书)
void TM1638_Write(unsigned char DATA) //写数据函数 { unsigned char i; DIO_OUT; //将 DIO 配置为输出状态 for(i=0;i<8;i++) { CLK_low; if(DATA & 0x01)
{ DIO_high; } else {
DIO_low;
} CLK_high; DATA>>=1; //数据左移一位 } }
(3) LED 数码管显示
图 5-5 共阴极数码管连接图
图 5-5 给出一个共阴数码管的连接示意图,如果让该数码管显示“0”,那你
需要在 GRID1 为低电平的时候让 SEG1, SEG2, SEG3, SEG4, SEG5, SEG6
为高电平, SEG7 为低电平,即在 00H 地址单元里面写数据 3FH 就可以让数码
管显示“0”。

共阴极 LED 数码管编码如表 5-1 所示。

(4) 开发板上 LED 地址
开发板共有 8 个 LED 数码管, 从左至右其地址分别为:08h,
0ah,0ch,0eh,00h,02h,04h,06h。

2.键盘读取
(1) 矩阵键盘的读取如图 5-6 所示,该键盘为 8*3bit。

一旦有按键按下,TM1638 中相关的寄存器的值就会改变(按键按下时相应
字节由 0 变 1),具体对应关系如图 5-7 所示。

(键盘不全,没有加、减、等于、
AC 等几个键)
注意: 1) 键盘用坐标形式表示,空白位表示本开发板暂未用到; 2) TM1638 最多可以读4 个字节,不允许多读。

读数据字节只能按顺序从BYTE1-BYTE4 读取,不可跨字节读。

例如:硬件上的 K2 与 KS8 对应按键按下时,此时想要读到此按键数据,必须需要读到第 4 个字节的第 5BIT 位,才可读出数据; 3) 当 K1 与 KS8,K2 与 KS8,K3 与 KS8 三个按键同时按下时,此时 BYTE4所读数据的 B4,B5,B6 位均为 1; 4) 组合键只能是同一个 KS,不同的 K 引脚才能做组合键;同一个 K 与不同的 KS 引脚不可以做成组合键使用; 5) 例
如:如果 Keyboard 的按键’1’按下,根据图 5-8,我们可以从<BYTE1,B2>读取按键值,
程序实现参考:(注意本例对键值的定义只是一个示例,按键1 的键值保存为 BIT1,按键 2
的键值保存为 BIT2,按键 3 的键值保存为 BIT3,
以此类推。

当然也可以保存为任意自己定义的值,比如说 1 保存为 0x01,2
保存为 0x02,按键 3 键值保存为 0x03,等等。

对于加、减、乘、除和 AC
等几个特殊的键,可以单独定义不重复的键值)
unsigned char c[4]; //对应BYTE1-BYTE4 unsigned int key_value=0x00;
//暂存TM1638读取的按键值 unsigned int i; STB_high; STB_low; TM1638_Write(0x42); //写地址 _delay_us(1); for(i=0;i<4;i++) c[i]=TM1638_Read();
//读取按键值 STB_high; if(c[0]&BIT2) //根据图5-8判断读取的按键
{ key_value |= BIT1; //如果是<BYTE1,B2>,则判断为按键’1’按下 }
下面给出 TM1638.c 中 read_key 主体函数,编写自己的 main 函数调用
read_key 来实现所需功能。

实际应用中可能需要根据要求将对键盘的处理程
序 read_key 进行自定义修改,比如本次实验中可以直接根据键值进行显示。

unsigned char Read_key(void) { unsigned char c[4]; unsigned int key_value=0x00; unsigned int i; STB_high; STB_low; TM1638_Write(0x42); _delay_us(1);
for(i=0;i<4;i++) c[i]=TM1638_Read(); STB_high; if(c[0]&BIT2) { key_value |= BIT1; }
else if(c[0]&BIT6) { key_value |= BIT4; } else if…… //此处编写对应
按键关系判断,key_value可任意定义的! for(i=0;i<16;i++) if((0x01<<i)==key_value)
break; return i; //注意返回值,是数字1-15,分别对应1-F按键。

返回值小于16有意
义,大于等于16则无意义。

如果需要定义其它按键(如+、-、*、/、AC等),则需要修改
返回值定义。

当然,更简单的可直接返回key_value,比返回i更好! }
三.方案论证
方案:
1.输入密码用矩形键盘,包括数字键和功能键。

2.LED数码管显示输入密码。

3.用发光二极管代替开锁的电路,绿灯表示开锁,红灯表示关锁。

4.按AC键清空数码管显示,并清除输入记录。

5.设置初始密码为“76543210”。

四. 方案实现与测试
1.将PC与开发板相连;
2.建立CCS工程;
3.选择对该工程进行编译链接,生成.out 文件。

然后选择,
将程序下载到实验板中。

程序下载完毕之后,可以选择全速运行程序,也可以选择
单步调试程序,选择 F3 查看具体函数。

也可以程序下载之后,按下
,软件界面恢复到原编辑程序的画面。

再按下实验板的复位键,运行程序。

测试:
输入正确密码:
输入错误密码:
五.分析与总结
在本次实验中,我们只实现了密码锁的最简单功能,由于时间原因,并未将原本计划的更改密码、错误报警等功能加入。

通过本次实验,我对于MSP430单片机有了一定的了解,基本能够熟练掌握应用。

本次实验为团队实验,考验的不光是我们对于单片机的理解与应用,更是对我们团队合作
能力的考察与锻炼,也是因为团队的合作,我们才能完成这次课程设计。

相关主题