找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8263|回复: 3
收起左侧

MSP430单片机TFT_LCD显示太空大战小游戏设计论文

[复制链接]
ID:161768 发表于 2017-7-30 03:36 | 显示全部楼层 |阅读模式
太空大战小游戏
—— 基于TFT_LCD显示屏的MSP430单片机实验


目录

一、实验硬件
1、概述
2、 应用模块
A.  LCD模块
B.  TM1638
二、 实验程序
1、 程序实现效果
2、 程序封装模块
1、图形产生与移动
2、我方战机的控制
3、敌机与奖励的产生及移动
4、击落敌机与获得奖励
5、关卡升级
6、施放大招:
三、 感想与思考
附页(实验程序代码)

一、实验硬件1、概述
    本次课程设计是在MSP430单片机液晶屏字符显示功能的基础上,编程设计游戏。程序的设计基于《F6638实验指导手册》中,“TFT-LCD 实验--字符显示”的程序点亮TFT-LCD屏幕,编写游戏程序,与IO控制结合,实现游戏的可视化和游戏操作。由于Code Composer Studio v5.5.0难以对该程序样例实现编译,采用的开发工具为Code Composer Studio v6.0。
MSP430系列单片机是由美国TI公司生产的新一代16位单片机,因以其集成密度高、运算速度快、外设接口丰富等优势受到越来越多的产品开发人员的青睐,是当前使用最多的单片机之一。在很多具体应用中,甚至只利用一片MSP430单片机,就可以完成一个系统的全部功能。下面给出实验中使用的MSP430F66单片机的封装图和功能框图。


1.001.jpg

图1-MSP430F6638封装图
1.002.jpg
图2-MSP430F6638功能框图
2、应用模块A.  LCD模块
本次编写的程序所用的主要模块为LCD模块,在功能框图中显示为 LCD_B。硬件电路设计如下所示。其中 U21 (TPS75105DSKR)是 LCD 屏背光控制芯片,由 LCD_BL_EN 引脚控制使能端。

1.003.jpg
图3-MSP430F6638LCD硬件设计电路




PIN NO.
FUNCTION DESCRIPTIONS SYMBOL(模块引脚定义以及各个引脚的功能)
NO.
Symbol
Description
1, 2
GND
3, 4
VCC
电源(2.8-3.4V)
5
NC1
空脚
6
NC2
空脚
7
NC3
空脚
8
RESET
复位
9
A0
LCD寄存器选择段
10
SDA
LCD数据传输线
11
SCK1
LCD CLK 时钟线
12
LCD_CS
LCD片选
13
SCK
SD卡CLK时钟线
14
MISO
SD卡主输入,从输出
15
MOSI
SD卡从输入,主输出
16
CS_SD
SD卡片选
17, 18
LED+
背光正极
19, 20
LED-
背光负极


    LCD的全称是Liquid Crystal Display,即液晶显示器,因功耗低而备受工程师青睐,大规模应用于电子设备中。而MSP430单片机中的TFT-LCD则是指薄膜晶体管,Thin-Film Transistor。薄膜晶体管液晶显示器(TFT-LCD)具有重量轻、平板化、低功耗、无辐射、显示品质优良等特点,其应用领域正在逐步扩大,已经从音像制品、笔记本电脑等显示器发展到台式计算机、工程工作站(EWS)用监视器。对液晶显示器的要求也正在向高分辨率、高彩色化发展。

MSP430F6638所采用的TFT-LCD 液晶屏的工作参数如下:

X320 点 TFT 透射式点阵液晶显示模块
驱动duty:1/240 Duty
2.4“ (COG 式)
可视角度:12 时
ILI9328 LCD 驱动程序或同等能力
逻辑电压:2.8V
数据接口:80的系统 8/9/16/18bit 总线接口
触摸面板
白色背光

B.  TM1638
在我们所制作的游戏中有一部分用到了矩阵键盘的一个按键,矩阵键盘隶属于TM1638电路,TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。其对于矩阵键盘的读取如下图所示:

1.004.jpg
图4-TM1638键盘读取电路

其中A-F分别对应KS1-KS6。一旦有按键按下,TM1638中相关的寄存器的值就会改变(按键按下时相应字节由0变1)。

2、实验程序1、程序实现效果
在TFT-LCD屏上进行飞机大战小游戏。规则如下:
  • 击中敌机得一分,敌机触及底线扣除一点生命值,生命值为零时游戏结束。
  • 随机出现红黄蓝三种奖励,红色奖励增加攻击范围,蓝色奖励增加移动速度,黄色奖励增加一点生命值。
  • 随得分增长游戏难度提升,逐步增加敌机出现频率及移动速度,共15关。
  • 按“1”键可施放大招,消灭屏幕上所有敌机,冷却30秒后可再次施放。

2、程序封装模块1、图形产生与移动
    基于示例程序“SPI_LCD_TFT”中所含头文件,利用其中各函数进行绘图。在绘制各图形时选取其上一点为相对参考点,然后用相对于它的坐标画出整个图形。需要移动图形时通过参量“sp”控制其移动距离,移动参考点,并在新的位置画出图形,同时将原来位置图形用背景色描一遍以擦除。在移动我方战机时,程序为先擦除左右两边原来图形,再显示即时位置图形,这样可以防止擦除行为影响到新图形。
    如绘制敌机的函数为:
void Drawenemy(x,y,c)
{
              LCD_TFT_FillRectangle(x,y-4,x+2,y-1,c);
              LCD_TFT_FillRectangle(x,y+1,x+2,y+4,c);
              LCD_TFT_FillRectangle(x+2,y-5,x+6,y+5,c);
              LCD_TFT_DrawLine(x+2,y-9,x+2,y+9,c);
              LCD_TFT_DrawLine(x+2,y-9,x+6,y-5,c);
              LCD_TFT_DrawLine(x+2,y+9,x+6,y+5,c);
              LCD_TFT_DrawLine(x+6,y-3,x+9,y,c);
              LCD_TFT_DrawLine(x+6,y+3,x+9,y,c);
}

2、我方战机的控制
    参考按键消抖示例程序“msp430f6638_Key_debounce”,在按键时将战机参考点分别向左或向右移动sp个单元。
    如向左移动主要语句为:
    if(Is_sw1_pressed()==1)                  // is key 1 pressed
        {                                                    // yes
                      s=s-sp;
        }
void movebird()
{
              Drawbird(s-sp,BLACK);
              LCD_TFT_DrawLine(205,s-sp,1,s-sp,BLACK);
              Drawbird(s+sp,BLACK);
              LCD_TFT_DrawLine(205,s+sp,1,s+sp,BLACK);
              Drawbird(s,YELLOW);
}

3、敌机与奖励的产生及移动
    两次利用随机数函数rand()。对于某种颜色的敌机,第一次产生一个0到1000随机数,将其与某数(sp0)比较以决定是否产生该颜色敌机,改变sp0值即可改变敌机出现频率;第二次产生一个14到305的随机数以决定敌机出现的位置参考点y坐标。奖励的产生同样如此。
    敌机和奖励的移动速度可由两个参量改变,即时间间隔sp1及移动距离sp2。
    如敌机向下移动的函数为:
  1. void moveenemy(i)
  2. {
  3.               if(enemy[i]==1)
  4.               {
  5.                             if(ttt[i] < sp1)
  6.                             {
  7.                                           ttt[i]++;
  8.                             }
  9.                             else
  10.                             {
  11.                                           t[i]=t[i]+sp2;
  12.                                           Drawenemy(t[i]-sp2,r[i],BLACK);
  13.                                           if(r[i]<500)
  14.                                           {
  15.                                                         Drawenemy(t[i],r[i],enemycolor[i]);
  16.                                           }
  17.                                           ttt[i]=1;
  18.                             }
  19.               }
  20. }
复制代码

4、击落敌机与获得奖励
    通过比较敌机与我方战机的相对位置来判断是否击落,击落后将及时位置图形描为背景色,并将各参数重置,由数组enemy[7]来标志某颜色敌机是否存在于画面,若不存在则允许产生。奖励的获得同上,其中加速效果通过改变sp达到,增加攻击范围效果通过addweapon()函数在画面上呈现,同时通过改变在判断击落时所用的参量range来达到改变攻击范围的效果。详见程序附页。

5、关卡升级
    通过一系列参量数组以及判断是否升级,然后通过增加sp0与sp2的值分别增加敌机出现频率及敌机移动速度完成关卡升级。以下为关卡升级内容的主要函数,其中各个细节因关系到游戏难度,所以都是由我们多次测试所得到的。
  1. void levelup(i)
  2. {
  3.               if(level[i]==0)
  4.               {
  5.                             sp0=sp0+30;
  6.                             if(i==1||i==3||i==5||i==7||i==9||i==10||i==11||i==12||i==13||i==14)
  7.                             {
  8.                                           sp2=sp2+3;
  9.                                           buffspeed++;
  10.                             }
  11.                             if(i==12||i==13||i==14)
  12.                             {
  13.                                           sp2=sp2+2;
  14.                             }
  15.                             if(i==3||i==7||i==9||i==12||i==13||i==14)
  16.                             {
  17.                                           possibuff[2]=possibuff[2]+70;
  18.                             }
  19.                             level[i]=1;
  20.               }
  21. }
复制代码


6、施放大招
    参考关于矩阵键盘的样例程序“MatrixKeyboard_DigitalTube”,利用内置函数判断“1”键是否按下,尔后通过循环语句执行函数kill(i)中部分指令来消灭所有敌机,同时通过drawdazhao()函数在画面上呈现。尔后借用简单的循环语句完成大招冷却时间倒计时。
    详见程序中dazhao()函数。

附页(实验程序代码)

请下载附件

完整论文下载(word格式 可编辑):
http://www.51hei.com/bbs/dpj-90602-1.html



回复

使用道具 举报

ID:312905 发表于 2019-7-15 15:42 | 显示全部楼层
大佬流弊

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表