《基于MSP430的多路抢答器设计说课材料.doc》由会员分享,可在线阅读,更多相关《基于MSP430的多路抢答器设计说课材料.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Good is good, but better carries it.精益求精,善益求善。基于MSP430的多路抢答器设计-课程设计报告多路抢答器的设计November,2011学号:姓名:组员-目录1概述1.1简介.31.2硬件简介.32MSP部分模块原理图2.1主芯片电路.42.24*4矩阵键盘.42.3复位电路.52.4数码管电路.52.5液晶显示控制电路.62.6蜂鸣器.73软件设计3.1实验程序.74调试4.1程序设计.134.2调试中出现的问题.135实验总结与展望.131 概述1.1 简介本作品以MSP430为主要模块、数码管和液晶作为显示模块。本抢答器主要是通过16个按键开关
2、来十六路选手的抢答,开始键按下,则进入到十六个按键的扫描中,同时显示倒计时时间.同时该抢答器还有时间的递减、清零、超时报警功能;通过液晶来显示抢答选手的号数。本作品造价便宜,硬件比较简单。关键字:MSP430,抢答器,显示1.2硬件简介MSP430系列单片机是一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(MixedSignalProcessor)。称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片”解决方案。MSP430单片机的特点:1、 运算速度快2、 超低功耗3、 片内资源丰富方便高效的开发环境2
3、MSP430部分模块原理图2.1主芯片电路2.24*4矩阵键盘2.3复位电路2.4数码管电路2.5液晶显示控制电路2.6蜂鸣器3软件设计/数码管7位段码:0-funsignedcharscandata16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/显示缓存unsignedcharDispbuf2;/引用外部变量的声明externunsignedcharkey_Pressed;externunsignedcharkey_val;externunsignedcharkey_Fla
4、g;#includetypedefunsignedcharuchar;typedefunsignedintuint;/*全局变量*/ucharkey_Pressed;/按键是否被按下:1-是,0-否ucharkey_val;/存放键值ucharkey_Flag;/按键是否已放开:1-是,0-否/设置键盘逻辑键值与程序计算键值的映射ucharkey_Map=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;/*函数名称:Init_Keypad功能:初始化扫描键盘的IO端口参数:无返回值:无*/voidInit_Keypad(void)P1DIR=0xf0;/P1.0P
5、1.3设置为输入状态,P1.4P1.7设置为输出状态P1OUT|=0xf0;/P1.4P1.7输出高电平key_Flag=0;key_Pressed=0;key_val=0;/*Check_Key(),检查按键,确认键值*/*函数名称:Check_Key功能:扫描键盘的IO端口,获得键值参数:无返回值:无*/voidCheck_Key(void)ucharrow,col,tmp1,tmp2;tmp1=0x80;for(row=0;row=1;if(P1IN&0x0f)0x0f)/是否P1IN的P1.0P1.3中有一位为0tmp2=0x01;/tmp2用于检测出那一位为0for(col=0;co
6、l4;col+)/列检测if(P1IN&tmp2)=0x00)/是否是该列,等于0为是key_val=key_Maprow*4+col;/获取键值return;/退出循环tmp20;tmp-);voidDELAY()doubletmp;for(tmp=2800;tmp0;tmp-);/*函数名称:Key_Event功能:检测按键,并获取键值参数:无返回值:无*/voidKey_Event(void)uchartmp;P1OUT&=0x00;/设置P1OUT全为0,等待按键输入tmp=P1IN;/获取p1INif(key_Pressed=0x00)&(tmp&0x0f)0x0f)/如果有键按下k
7、ey_Pressed=1;/如果有按键按下,设置key_Pressed标识delay();/消除抖动Check_Key();/调用check_Key(),获取键值elseif(key_Pressed=1)&(tmp&0x0f)=0x0f)/如果按键已经释放key_Pressed=0;/清除key_Pressed标识key_Flag=1;/设置key_Flag标识else_NOP();#include#includecry1602.htypedefunsignedcharuchar;typedefunsignedintuint;/*宏定义*/#defineDataDirP4DIR#defineD
8、ataPortP4OUT#defineBusy0x80#defineCtrlDirP3DIR#defineCLR_RSP3OUT&=BIT0;/RS=P3.0#defineSET_RSP3OUT|=BIT0;#defineCLR_RWP3OUT&=BIT1;/RW=P3.1#defineSET_RWP3OUT|=BIT1;#defineCLR_ENP3OUT&=BIT2;/EN=P3.2#defineSET_ENP3OUT|=BIT2;/*函数名称:DispStr功能:让液晶从某个位置起连续显示一个字符串参数:x-位置的列坐标y-位置的行坐标ptr-指向字符串存放位置的指针返回值:无*/voi
9、dDispStr(ucharx,uchary,uchar*ptr)uchar*temp;uchari,n=0;temp=ptr;while(*ptr+!=0)n+;/计算字符串有效字符的个数for(i=0;in;i+)Disp1Char(x+,y,tempi);if(x=0x0f)x=0;y=1;/*函数名称:DispNchar功能:让液晶从某个位置起连续显示N个字符参数:x-位置的列坐标y-位置的行坐标n-字符个数ptr-指向字符存放位置的指针返回值:无*/voidDispNChar(ucharx,uchary,ucharn,uchar*ptr)uchari;4调试4.1程序设计对于MSP4
10、30我们并不是很熟悉,在编程时对于MSP430的各功能模块、寄存器的使用不了解,要先查找相应资料,在编程中遇到了很多问题。4.2调试中出现的问题(1) 数码管不能正常倒计时在程序调试时发现,数码管倒计时不正常,数字显示的位置也经常移位,对于这个问题我们再次检查了数据线的连接,后发现是数据线的输入端、输出端的连接错误。(2) 抢答者号码显示不稳定开始选用中断方式,当两个选手按键时间间隔很短时,不能正常显示,后选用查询方式,可避免此类问题。5实验总结与展望本次课程设计将理论与实践有机地结合,锻炼了我们对知识的综合运用以及创新设计思维能力。对于课程题目多路抢答器,一开始还没有头绪,我们这组都没参加过
11、电子设计大赛的培训,不会运用所学知识进行有效设计,但通过上网查阅各种类似的设计,查阅芯片的功能模块,确定基本设计方案,又通过仿真验证试验方案的可实行性。通过这次实验让我们认识到:1、 设计思路是整个设计的灵魂拿到每个课题能有一个非常清晰的设计思路是至关重要的。只有对课题的充分理解,各芯片的熟练掌握,才能为后续的设计工作提供扎实的基础。翻阅各种资料,上网查询填补知识的空缺是必要的。2、 调试调试是个精细的工作,在调试过程中,线路连接错误、芯片本身损坏、程序的缺陷等问题的排查需要耐心。3、 不足我们的作品只是大概的展示了一下抢答器的工作形式,对于细节方面并没有做得很完善,例如如何为主持人单独设置一个控制键,数码管上显示倒计时的位置要更精确等。有时对于不算很复杂的程序,我们要研究很久,有时三节课下来也没有头绪,实验效率不是很高。4、 展望这学期课程设计只是让我们对电子设计有初步的了解,并通过自身的实践,把理论知识运用到实践,培养了设计思维能力,增强了动手能力,在让我体会程序设计艰辛的同时,更让我体会到了成功的喜悦和快乐。同时也发现自己的很多不足之处,在设计过程中我发现自己考虑问题不全面,自己的专业知识掌握得很不牢固,希望自己的这些的不足之处能在今后的工作和学习中得到改善。而且,也懂得了学习的重要性,我将会在以后的生活和工作中继续学习。
限制150内