微控制器应用及系统设计Word文件下载.docx
- 文档编号:21108226
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:718.51KB
微控制器应用及系统设计Word文件下载.docx
《微控制器应用及系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《微控制器应用及系统设计Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
2.3系统核心器件选型4
3系统硬件设计5
3.1电源模块设计5
3.2LED显示模块设计6
3.3KEY模块设计7
4系统软件设计8
4.1系统软件总体结构及总流程图8
4.2LED显示模块程序设计9
4.3KEY模块程序设计10
4.4温度数据采集模块程序设计11
5系统调试与结果分析12
5.1系统调试步骤12
5.2遇到的问题及解决方案13
5.3实验结果14
6结论与心得体会15
参考文献16
附录17
摘要:
本文设计并实现了一款基于MSP430单片机的通过猜数进行拆弹的游戏。
主要讨论了包括LCD、键盘、时钟模块在内的硬件电路的设计和软件编程方案,并在调试通过后将程序下载到开发板上检验其功能的实现。
最终的结果表明,本设计运行稳定,人机界面友好,可较好的实现该款游戏的功能。
关键字:
MSP430单片机,猜数游戏,键盘,LCD
1引言
随着经济的发展,社会生活节奏进一步加快,越来越多的人希望通过一些轻松的游戏来减轻工作生活的压力,因此游戏在人们休闲娱乐中的地位日益提高。
本设计正是基于这一点,利用MSP430开发板的资源,实现了一款简单轻松的猜数拆弹游戏。
本设计采用的MSP430系列单片机是美国TI公司推出的一种16位超低功耗、具有精简指令集的混合信号处理器。
该处理器具有处理能力强、运算速度快、超低功耗、片内资源丰富等优点,具有良好的性价比,并且由于采用了串行在线编程方式,为用户编程和控制参数提供灵活的空间。
MSP430F449具有强大的中断功能及输出、功能选择、中断等多个寄存器,使得功能口和通用I/O口复用。
2系统总体设计
2.1系统功能介绍及总体工作流程
该款游戏设定了如下背景:
一个定时炸弹即将于两分钟之后爆炸,需要游戏参与者通过猜取系统预先设定的0—99之间的一个数进行拆弹。
两分钟倒计时开始后游戏者可以通过键盘输入数字(以“#”键结束),系统将会通过LCD显示界面提示所猜的数是否正确,如果正确的话会停止倒计时,拆弹成功;
如果错误会提示是偏大还是偏小,以缩小范围增大猜对的概率,但与此同时作为猜错的惩罚会将倒计时的时间自动减去10秒。
两分钟内若游戏者猜出正确的数即游戏胜利,危险成功解除,如果未能猜出正确的数则游戏失败,炸弹爆炸,游戏结束后可按“*”键重新开始。
大致工作流程图如下:
2.2系统组成结构及工作原理
本次设计的主要硬件电路可分为以下几个模块:
键盘输入模块、点阵LCD显示模块、LED数码管显示模块,MSP430F449作为主控制器实现各个模块的连接。
系统硬件连接图及端口配置如下:
由上图可分析系统的工作过程:
通过键盘接收外部的按键信息,单片机经按键处理程序判断键值后对LCD和LED分别做出相应的处理。
LED数码管与单片机相连的P3.0~3.7端口为数据线,P4.0和P4.1是用来控制输入段码数据和位选数据,六个数码管共分两部分使用,其中四个负责显示倒计时的时间,剩下的两个显示操作者所猜的数字。
点阵LCD负责切换显示各个界面,与单片机相连的P3.0--P3.7端口为数据线,P2.0--P2.3和P2.6--P2.7为控制端口。
2.3系统核心器件选型
经以上分析可知系统对微处理器的要求如下:
●含3*4行列式键盘模块
●含LED显示模块
●含LCD显示模块
本系统对单片机的要求较为简单,因此可直接使用实验室配置的MSP430F449开发板。
开发板结构如下图所示:
3系统硬件设计
3.1键盘电路
开发板上自带的键盘接口采用复用模式,是将3*4行列式按键、独立按键以及比较器欠压检测电路集成共用一个端口,具体电路原理图如下:
由原理图可知,键盘电路功能的选通与否是通过拨动开关P_KEY开关来实现的,本次设计使用的是3*4行列式键盘,实验时需将开关打在正确的位置。
作行列式键盘使用时,P1.1--P1.3为行线、P1.4--P1.7为列线,列线分别由上拉电阻上拉到VCC,在行线与列线的每一个交界处有个按键,按键的A、B端分别接在行线和列线上,实验时通过判断是否有键按下及键值实现相应的操作。
(具体的按键处理过程将在软件设计部分给出详细介绍)
3.2LCD显示电路
点阵LCD显示器一般由控制器、驱动器和全点阵液晶显示屏组成,驱动器主要负责将显示存储器中的内容显示到液晶屏上,控制器用来控制液晶显示器工作并与开发者进行数据和命令交互。
本设计使用的点阵式LCD为64*128分辨率的液晶屏ZJM12864BSBD,驱动方式为1/64占空比,易与8位的MPU相连,多功能指令,可加电自动复位。
与单片机的连接为:
8个数据信号端口P3.0--P3.7,6个控制端口P2.0--P2.3、P2.6--P2.7。
3.3LED显示电路
LED数码管电路负责显示时间和输入的数字,共计使用了6个数码管,从左至右分别为D5--D0。
端口P3.0~P3.7既为LED的显示段码输出,又为LED的位选输出,因此电路中采用了两片三态锁存器芯片,通过这两片芯片来分别控制段码的输入以及位选信号的输入,通过F449的P4.1、P4.2口控制74HC373的LE端来选择来实现输出的有效数据,其工作方式为:
◆当P4.1为高电平时,P3.0~P3.7为LED的显示段码输出,依次对应LED的a、f、b、g、c、h、d、e。
◆当P4.0为低电平时,P3.0~P3.7为LED的位选输出,依次对应D0--D5。
显示时使用Timer_A定时器产生3ms的中断,以循环动态刷新各数码管,利用人眼的“视觉停留”效应实现动态显示。
4系统软件设计
4.1软件总体设计及总流程图
软件部分主要由各硬件模块的子程序和主程序构成。
子程序部分包括:
键盘处理子程序、LCD显示子程序、倒计时子程序、LED显示子程序,LED显示模块中还包括了Timer_A中断。
主程序主要负责对输入值的判断及转至相应的处理。
系统总流程图如下:
4.2键盘处理程序
键盘处理模块定义的子函数为:
◆voiddelay(void);
//延时,用于消颤
◆voidinit_Keyboard(void);
//键盘初始化
◆voidval_Key(void);
//判断键值
◆Voidcheck_Key(void);
//判断是否有键按下
键盘处理模块的流程图为:
在行列式键盘上实现键盘功能主要分为以下几个步骤:
◆判断有无按键被按下
本设计主要通过检测行线输出的下降沿判断是否有按键按被按下。
在按键判断程序中主要需要考虑两个问题,即去抖动和按键冲突问题。
针对机械键盘普遍存在的按键抖动问题,采用软件延时的方法予以克服,即当检测到下降沿后延时一段时间再进行后续处理;
对于多个按键冲突问题,可加入检测上升沿的操作,判断当前按键是否已被松开,从而使得当有多个键一起按下时,仅识别第一个键。
◆按键识别,得到键值
当判断有键按下后,采用行扫描法确定按键所在的行列。
具体步骤为:
依次扫描各行,即将某一行置低,其余两行置高,检测列线的输出,此时若列线P1.4--P1.7中某一位输出为低,则按下的键即处于该行该列。
确定完按键所在的行列后,通过映射数组key_Map[12]={1,2,3,10,4,5,6,0,7,8,9,11}最终得到该按键的键值。
4.3LCD显示程序
LCD显示模块定义的子函数如下:
◆voidwrite_Command(charcmd);
//用于写命令到LCD
◆voidmove_To(charx,chary);
//设置显示的位置,片选在函数外部设置
◆voidwrite_Data(charcontent);
//writedata
◆voidclear_Rect(unsignedcharx,unsignedchary,unsignedcharh,unsignedcharw);
//清除chip1或者chip2上的某一区域
◆voidinit_LCD(void);
//初始化LCD
◆voiddrawStr(unsignedcharx,unsignedchary);
//在指定的位置显示字符串
◆voidDisplay_LCD(unsignedchart);
//设置6种LCD显示界面
点阵LCD各端口所对应的控制功能为:
P2.0--RS、P2.1--R/W、P2.2--EN、P2.3--S1、P2.6--CS2、P2.7--RST,其控制和显示指令如下表:
128×
64的点阵LCD可分成两大块,每块为64×
64,
4.4LED数码管显示程序
LED模块定义的子函数如下:
◆voidled_display(unsignedchari);
//数码管显示
◆interrupt[TIMERA0_VECTOR]voidTimer_A(void)//3msTimer_A中断处理程序,实现动态刷新
LED显示模块通过两片74HC373锁存器复用P3.0--P3.7端口,分别控制LED的显示段码与位选。
控制端口为P4.0和P4.1,当P4.1为高时,P3.0~P3.7分别输出对应数码管的段码;
当P4.0为高时,P3.0~P3.7分别输出相应的位选信号。
LED的工作过程为:
1)置P4.1为高,输出要显示数字的段码,置P4.1为低,锁存段码信息;
2)置P4.0为高,输出要显示数字的位选,置P4.0为低,锁存位选信息;
即:
P3OUT=i;
//输出段码数据
P4OUT=0x02;
//置P4.1为高
P4OUT&
=~0x02;
//置P4.1为低
P3OUT=~led_disp_bit;
//输出位选信号
P4OUT=0x01;
//置P4.0为高
=~0x01;
//置P4.0为低
数码管的动显是通过Timer_A定时中断来实现的。
在Timer_A中断服务程序中实现显示功能,每处理一次中断就会显示一位信息,将中断的间隔取为3ms,即实现了3ms的动态循环刷新。
TACTL=TASSEL0+TACLR;
//Timer_a3ms中断
CCTL0=CCIE;
CCR0=90;
//90/32.768K=3ms中断
TACTL|=MC0;
4.5时钟处理程序
5系统调试与结果分析
各模块的软件都编写完成后即可下载到硬件平台进行功能的验证。
本次设计使用的是开发环境是IAR公司的EmbeddedWorkbench。
它是一个适应不同CPU的目标系统开发集成环境,提供了方便、丰富的窗口界面,使开发效率大大提高。
在计算机上编译好后就可以通过JTAG接口先下载程序到FLASH内,再在器件内通过软件控制程序运行,由JTAG接口读取片内信息观察程序运行情况,可方便调试和修改程序。
5.1系统调试步骤
◆在IAR上编写程序,直至编译通过。
◆点击Debugger将程序程序下载到开发板上。
◆下载成功后进行调试,在程序运行过程中可以设置断点、观察变量、单步运行等手段协助调试的进行。
5.2调试中的问题及解决方法
Ø
问题1:
LCD显示的字发生了左右颠倒的现象;
开始时我们怀疑是将X、Y地址弄反了,仔细检查后发现不是这个原因,而是我们在使用字符生成软件生成字模时,忘记设置取模走向和方式,最终将取模走向和方式分别设置为逆向、逐列式后即可正常显示了。
问题2:
键盘接收键值时发生错乱,按下一个键值后可以被LED显示的十位和个位同时接收。
比如想输入48时,先按下数字“4”,则LED显示输入的数为“44”,第二次按下的个位的“8”无法显示。
出现这个错误后我们首先想到的是主程序中键值接收的语句出现了问题,可是对照流程图仔细检查了主程序的每一行语句,最终还是没能找到问题。
后来老师提示我们可能是键盘的去抖处理没有做好,于是我们检查了键盘处理模块,终于发现是我们在加入防止按键冲突的上升沿检测部分后没有对其进行延时去抖处理,当在这部分加入延时后上述问题立即被解决了。
问题3:
当输入的数错误后,倒计时模块就会执行减时10s的处理,在进行减时处理后发现LED显示出现一次明显的抖动,大约过了4、5s之后又出现了一次明显的抖动。
5.3实验结果
6结论与心得体会
本次课程实验完成了一款猜数小游戏设计,键盘接收操作者输入的数字后,由单片机进行判断处理,并通过LED、LCD显示出来,此外还使用到了基本定时器和Timer_A的中断功能。
游戏虽然简单,但充分利用了开发板的各个硬件模块,能够启发我们将课程所学应用到实际的设计中,真正做到对知识的活学活用。
本次设计我们一共花费了一周的时间,刚开始时我们并没有急于编写程序,而是三个人一起讨论画出了整个设计的硬件连接和总体流程图,然后进行了分工,每人负责一个子模块的设计。
充分的前期准备工作使我们的工作事半功倍,仅用了三天就编写完成了全部的程序。
刚开始调试时,几乎是每个模块都出现了问题,于是我们各自分工检查自己所完成的模块,由于大家对自己的模块都非常熟悉,大部分问题很快被解决了,最后一个键盘接收问题困扰了我们整整两天,这期间我们三个人将整个程序从头到尾读了好几遍,考虑了许多的原因,虽然最后是在老师的提示下解决了问题,但我们从未想过放弃,一直是在有条不紊的寻找原因、解决问题。
整个设计过程让我受益匪浅,极大地锻炼了我发现问题、解决问题的能力,也让我体会了流程图的重要性,为我以后设计更大的系统打下了坚实的基础。
最后,感谢吴益飞老师在整个设计过程中的悉心指导,感谢同组的黄开珍、李福同学的积极配合。
参考文献
[1]沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机原理与应用[M].北京:
清华大学出版社,2004.11.
[2]胡大可.MSP430系列FLASH型超低功耗16位单片机[M].北京:
北京航空航天大学出版社,2001
附录:
源代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控制器 应用 系统 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)