#基于MSP430的多路抢答器设计.docx
- 文档编号:13368184
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:14
- 大小:466.81KB
#基于MSP430的多路抢答器设计.docx
《#基于MSP430的多路抢答器设计.docx》由会员分享,可在线阅读,更多相关《#基于MSP430的多路抢答器设计.docx(14页珍藏版)》请在冰点文库上搜索。
#基于MSP430的多路抢答器设计
课程设计报告
多路抢答器的设计
November,2011
学号:
姓名:
组员
1概述
1.1简介.....................................................................................................3
1.2硬件简介..............................................................................................3
2MSP部分模块原理图
2.1主芯片电路..........................................................................................4
2.24*4矩阵键盘.......................................................................................4
2.3复位电路.............................................................................................5
2.4数码管电路.........................................................................................5
2.5液晶显示控制电路..............................................................................6
2.6蜂鸣器................................................................................................7
3软件设计
3.1实验程序.............................................................................................7
4调试
4.1程序设计...........................................................................................13
4.2调试中出现的问题............................................................................13
5实验总结和展望.........................................................................................13
1概述
1.1简介
本作品以MSP430为主要模块、数码管和液晶作为显示模块。
本抢答器主要是通过16个按键开关来十六路选手的抢答,开始键按下,则进入到十六个按键的扫描中,同时显示倒计时时间.同时该抢答器还有时间的递减、清零、超时报警功能;通过液晶来显示抢答选手的号数。
本作品造价便宜,硬件比较简单。
关键字:
MSP430,抢答器,显示
1.2硬件简介
MSP430系列单片机是一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(MixedSignalProcessor)。
称之为混合信号处理器,是由于其针对实际使用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片”解决方案。
MSP430单片机的特点:
1、运算速度快
2、超低功耗
3、片内资源丰富
4、方便高效的开发环境
2MSP430部分模块原理图
2.1主芯片电路
2.24*4矩阵键盘
2.3复位电路
2.4数码管电路
2.5液晶显示控制电路
2.6蜂鸣器
3软件设计
//数码管7位段码:
0--f
unsignedcharscandata[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//显示缓存
unsignedcharDispbuf[2];
//引用外部变量的声明
externunsignedcharkey_Pressed;
externunsignedcharkey_val;
externunsignedcharkey_Flag;
#include
typedefunsignedcharuchar;
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.0~P1.3设置为输入状态,P1.4~P1.7设置为输出状态
P1OUT|=0xf0;//P1.4~P1.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<4;row++)//行扫描
{
P1OUT=0xf0;//P1.4~P1.7输出全1
P1OUT-=tmp1;//P1.4~p1.7输出四位中有一个为0
tmp1>>=1;
if((P1IN&0x0f)<0x0f)//是否P1IN的P1.0~P1.3中有一位为0
{
tmp2=0x01;//tmp2用于检测出那一位为0
for(col=0;col<4;col++)//列检测
{
if((P1IN&tmp2)==0x00)//是否是该列,等于0为是
{
key_val=key_Map[row*4+col];//获取键值
return;//退出循环
}
tmp2<<=1;//tmp2右移1位
}
}
}
}
/*******************************************
函数名称:
delay
功能:
延时约15ms,完成消抖功能
参数:
无
返回值:
无
********************************************/
voiddelay()
{
uinttmp;
for(tmp=12000;tmp>0;tmp--);
}
voidDELAY()
{
doubletmp;
for(tmp=2800;tmp>0;tmp--);
}
/*******************************************
函数名称:
Key_Event
功能:
检测按键,并获取键值
参数:
无
返回值:
无
********************************************/
voidKey_Event(void)
{
uchartmp;
P1OUT&=0x00;//设置P1OUT全为0,等待按键输入
tmp=P1IN;//获取p1IN
if((key_Pressed==0x00)&&((tmp&0x0f)<0x0f))//如果有键按下
{
key_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
#include"cry1602.h"
typedefunsignedcharuchar;
typedefunsignedintuint;
/**************宏定义***************/
#defineDataDirP4DIR
#defineDataPortP4OUT
#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--指向字符串存放位置的指针
返回值:
无
***********************************************/
voidDispStr(ucharx,uchary,uchar*ptr)
{
uchar*temp;
uchari,n=0;
temp=ptr;
while(*ptr++!
='\0')n++;//计算字符串有效字符的个数
for(i=0;i { Disp1Char(x++,y,temp[i]); if(x==0x0f) { x=0; y^=1; } } } /******************************************* 函数名称: DispNchar 功能: 让液晶从某个位置起连续显示N个字符 参数: x--位置的列坐标 y--位置的行坐标 n--字符个数 ptr--指向字符存放位置的指针 返回值: 无 ********************************************/ voidDispNChar(ucharx,uchary,ucharn,uchar*ptr) { uchari; 4调试 4.1程序设计 对于MSP430我们并不是很熟悉,在编程时对于MSP430的各功能模块、寄存器的使用不了解,要先查找相应资料,在编程中遇到了很多问题。 4.2调试中出现的问题 (1)数码管不能正常倒计时 在程序调试时发现,数码管倒计时不正常,数字显示的位置也经常移位,对于这个问题我们再次检查了数据线的连接,后发现是数据线的输入端、输出端的连接错误。 (2)抢答者号码显示不稳定 开始选用中断方式,当两个选手按键时间间隔很短时,不能正常显示,后选用查询方式,可避免此类问题。 5实验总结和展望 本次课程设计将理论和实践有机地结合,锻炼了我们对知识的综合运用以及创新设计思维能力。 对于课程题目《多路抢答器》,一开始还没有头绪,我们这组都没参加过电子设计大赛的培训,不会运用所学知识进行有效设计,但通过上网查阅各种类似的设计,查阅芯片的功能模块,确定基本设计方案,又通过仿真验证试验方案的可实行性。 通过这次实验让我们认识到: 1、设计思路是整个设计的灵魂 拿到每个课题能有一个非常清晰的设计思路是至关重要的。 只有对课题的充分理解,各芯片的熟练掌握,才能为后续的设计工作提供扎实的基础。 翻阅各种资料,上网查询填补知识的空缺是必要的。 2、调试 调试是个精细的工作,在调试过程中,线路连接错误、芯片本身损坏、程序的缺陷等问题的排查需要耐心。 3、不足 我们的作品只是大概的展示了一下抢答器的工作形式,对于细节方面并没有做得很完善,例如如何为主持人单独设置一个控制键,数码管上显示倒计时的位置要更精确等。 有时对于不算很复杂的程序,我们要研究很久,有时三节课下来也没有头绪,实验效率不是很高。 4、展望 这学期课程设计只是让我们对电子设计有初步的了解,并通过自身的实践,把理论知识运用到实践,培养了设计思维能力,增强了动手能力,在让我体会程序设计艰辛的同时,更让我体会到了成功的喜悦和快乐。 同时也发现自己的很多不足之处,在设计过程中我发现自己考虑问题不全面,自己的专业知识掌握得很不牢固,希望自己的这些的不足之处能在今后的工作和学习中得到改善。 而且,也懂得了学习的重要性,我将会在以后的生活和工作中继续学习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MSP430 抢答 设计