1、课程设计报告 多 路 抢 答 器 的 设 计 NOVEMBER, 2011 学号: 姓名: 组员 2 目录 1 概述 1.1 简介 .3 1.2 硬件简介 3 2 MSP 部分模块原理图 2.1 主芯片电路4 2.2 4*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 3 1 概述 1.1 简介 本作品以 MSP430 为主要模块、数码管和液晶作为显示模块。本抢答器主 要是通过 16 个按键开关来十六路选手
2、的抢答,开始键按下,则进入到十六个按 键的扫描中,同时显示倒计时时间.同时该抢答器还有时间的递减、清零、超时 报警功能;通过液晶来显示抢答选手的号数。本作品造价便宜,硬件比较简单。 关键字:MSP430,抢答器,显示 1.2 硬件简介 MSP430 系列单片机是一种 16 位超低 功耗、具有精 简 指 令 集 (R ISC)的混 合信号处理器(Mixed Signal Processor)。称之为混合信号处理器,是由于其 针对实际应用需求,将多个不同功能的模 拟 电 路 、数 字 电 路 模块和微 处 理 器 集 成在一个芯片上,以提供“单片”解决方案。 MSP430 单片机的特点: 1、运算
3、速度快 2、超低功耗 3、片内资源丰富 4、方便高效的开发环境 2 MSP430 部分模块原理图 2.1 主芯片电路 4 2.2 4*4 矩阵键盘 5 2.3 复位电路 2.4 数码管电路 6 2.5 液晶显示控制电路 7 2.6 蜂鸣器 3 软件设计 /数码管 7 位段码: 0-f unsigned char scandata16 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /显示缓存 8 unsigned char Dispbuf2; /引用外部变量的声明 exter
4、n unsigned char key_Pressed; extern unsigned char key_val; extern unsigned char key_Flag; #include typedef unsigned char uchar; typedef unsigned int uint; /*全局变量*/ uchar key_Pressed; /按键是否被按下:1-是,0-否 uchar key_val; /存放键值 uchar key_Flag; /按键是否已放开:1-是, 0-否 /设置键盘逻辑键值与程序计算键值的映射 uchar key_Map = 1,2,3,4,5
5、,6,7,8,9,10,11,12,13,14,15,16; /* 函数名称:Init_Keypad 功 能:初始化扫描键盘的 IO 端口 参 数:无 返回值 :无 */ void Init_Keypad(void) P1DIR = 0xf0; /P1.0P1.3 设置为输入状态 , P1.4P1.7 设置为输出状态 P1OUT |= 0xf0; / P1.4P1.7 输出高电平 key_Flag = 0; key_Pressed = 0; key_val = 0; 9 /* * Check_Key(),检查按键,确认键值 */ /* 函数名称:Check_Key 功 能:扫描键盘的 IO 端
6、口,获得键值 参 数:无 返回值 :无 */ void Check_Key(void) uchar row ,col,tmp1,tmp2; tmp1 = 0x80; for(row = 0;row =1; if (P1IN / tmp2 用于检测出那一位为 0 for(col = 0;col 0;tmp-); /* 函数名称:Key_Event 功 能:检测按键,并获取键值 参 数:无 返回值 :无 */ void Key_Event(void) uchar tmp; P1OUT / 设置 P1OUT 全为 0,等待按键输入 tmp = P1IN; / 获取 p1IN 11 if (key_P
7、ressed = 0x00) / 如果有按键按下,设置 key_Pressed 标识 delay(); /消除抖动 Check_Key(); / 调用 check_Key(),获取键值 else if (key_Pressed = 1) / 清除 key_Pressed 标识 key_Flag = 1; / 设置 key_Flag 标识 else _NOP(); #include #include “cry1602.h“ typedef unsigned char uchar; typedef unsigned int uint; /*宏定义*/ #define DataDir P4DIR #
8、define DataPort P4OUT #define Busy 0x80 #define CtrlDir P3DIR #define CLR_RS P3OUT /RS = P3.0 #define SET_RS P3OUT|=BIT0; #define CLR_RW P3OUT /RW = P3.1 #define SET_RW P3OUT|=BIT1; #define CLR_EN P3OUT /EN = P3.2 #define SET_EN P3OUT|=BIT2; 12 /* 函数名称:DispStr 功 能:让液晶从某个位置起连续显示一个字符串 参 数:x-位置的列坐标 y-位
9、置的行坐标 ptr-指向字符串存放位置的指针 返回值 :无 */ void DispStr(uchar x,uchar y,uchar *ptr) uchar *temp; uchar i,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-字符个数 13 ptr-指向字符存
10、放位置的指针 返回值 :无 */ void DispNChar(uchar x,uchar y, uchar n,uchar *ptr) uchar i; 4 调试 4.1 程序设计 对于 MSP430 我们并不是很熟悉,在编程时对于 MSP430 的各功能模块、 寄存器的使用不了解,要先查找相应资料,在编程中遇到了很多问题。 4.2 调试中出现的问题 (1)数码管不能正常倒计时 在程序调试时发现,数码管倒计时不正常,数字显示的位置也经常移位, 对于这个问题我们再次检查了数据线的连接,后发现是数据线的输入端、输出 端的连接错误。 (2)抢答者号码显示不稳定 开始选用中断方式,当两个选手按键时间
11、间隔很短时,不能正常显示,后 选用查询方式,可避免此类问题。 5 实验总结与展望 本次课程设计将理论与实践有机地结合,锻炼了我们对知识的综合运用以 及创新设计思维能力。对于课程题目多路抢答器,一开始还没有头绪,我 们这组都没参加过电子设计大赛的培训,不会运用所学知识进行有效设计,但 通过上网查阅各种类似的设计,查阅芯片的功能模块,确定基本设计方案,又 通过仿真验证试验方案的可实行性。通过这次实验让我们认识到: 1、设计思路是整个设计的灵魂 14 拿到每个课题能有一个非常清晰的设计思路是至关重要的。只有对课题的 充分理解,各芯片的熟练掌握,才能为后续的设计工作提供扎实的基础。翻阅 各种资料,上网
12、查询填补知识的空缺是必要的。 2、调试 调试是个精细的工作,在调试过程中,线路连接错误、芯片本身损坏、程 序的缺陷等问题的排查需要耐心。 3、不足 我们的作品只是大概的展示了一下抢答器的工作形式,对于细节方面并没 有做得很完善,例如如何为主持人单独设置一个控制键,数码管上显示倒计时 的位置要更精确等。有时对于不算很复杂的程序,我们要研究很久,有时三节 课下来也没有头绪,实验效率不是很高。 4、展望 这学期课程设计只是让我们对电子设计有初步的了解,并通过自身的实践 ,把理论知识运用到实践,培养了设计思维能力,增强了动手能力,在让我体 会程序设计艰辛的同时,更让我体会到了成功的喜悦和快乐。同时也发现自己 的很多不足之处,在设计过程中我发现自己考虑问题不全面,自己的专业知识 掌握得很不牢固,希望自己的这些的不足之处能在今后的工作和学习中得到改 善。而且,也懂得了学习的重要性,我将会在以后的生活和工作中继续学习。 15 16