基于单片机的新贪吃蛇游戏设计与制作
- 格式:doc
- 大小:618.50 KB
- 文档页数:23
#include <reg52.h>#include <string.h>#include <intrins.h>#include <stdlib.h>sbit keystar = P3^0;sbit keyup = P3^1;sbit keylift = P3^5;sbit keydown = P3^6;sbit keyright = P3^7;int n;int dir = 1; // lift->1 up->2 right->3 down->4int timer1count = 0;int state_point = 1;int time = 50000;char green_point_row = 0x01;char green_point_list = 0xfe;char row[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};char redlist[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};char greenlist[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};int temp_point_row[8] = {1,2,4,8,16,32,64,128};int temp_point_list[8] = {254, 253, 251, 247, 239, 223, 191, 127};idata char snakerow[64] = {0x08,0x08,0x08};idata char snakelist[64] = {0xfe,0xfd,0xfb};void delay_ms (int time) // Every time 1 millisecond{int i, k;for (i = 0; i < time; i++){for (k = 0; k < 901; k++);}}void init () // Initialize timer // Every time 50 milliseconds {TMOD = 0x01; // Open the two timersEA = 1;ET0 = 1;TH0 = (65536 - time) / 256;TL0 = (65536 - time) % 256;keyup = 1;}void keyscan (void){if (0 == keylift){delay_ms(3);if (0 == keylift){dir = 1;}return;}if (0 == keyup){delay_ms(3);if (0 == keyup){dir = 2;}return;}if (0 == keydown){delay_ms(3);if (0 == keydown){dir = 4;}return;}if (0 == keyright){delay_ms(3);if (0 == keyright){dir = 3;}return;}}void arr_con (int i) // An array of conversion{int num;switch(dir){case 1: //lift{if (snakelist[strlen(snakerow) - 1] == 0x7f){while(1){P0 = 0xff;P1 = 0x00;P2 = 0xff;}}snakerow[i] = snakerow[i - 1];snakerow[i + 1] = '\0';for (num = 0; num < 8; num++){if (snakelist[i - 1] == redlist[num]){break;}}snakelist[i] = redlist[num - 1];snakelist[i + 1] = '\0';for (i = 0; i < strlen(snakerow); i++){snakerow[i] = snakerow[i + 1];snakelist[i] = snakelist[i + 1];}}; break;case 2: //up{if (snakerow[strlen(snakerow) - 1] == 0x01){while(1){P0 = 0xff;P1 = 0x00;P2 = 0xff;}}snakelist[i] = snakelist[i - 1];snakelist[i + 1] = '\0';for (num = 0; num < 8; num++){if (snakerow[i - 1] == row[num]){break;}}snakerow[i] = row[num - 1];snakerow[i + 1] = '\0';for (i = 0; i < strlen(snakerow); i++){snakerow[i] = snakerow[i + 1];snakelist[i] = snakelist[i + 1];}};break;case 3: // rignt{if (snakelist[strlen(snakelist) - 1] == 0xfe){while(1){P0 = 0xff;P1 = 0x00;P2 = 0xff;}}snakerow[i] = snakerow[i - 1];snakerow[i + 1] = '\0';for (num = 0; num < 8; num++){if (snakelist[i - 1] == redlist[num]){break;}}snakelist[i] = redlist[num + 1];snakelist[i + 1] = '\0';for (i = 0; i < strlen(snakerow); i++){snakerow[i] = snakerow[i + 1];snakelist[i] = snakelist[i + 1];}}; break;case 4: //down{if (snakerow[strlen(snakerow) - 1] == 0x80){while(1){P0 = 0xff;P1 = 0x00;P2 = 0xff;}}snakelist[i] = snakelist[i - 1];snakelist[i + 1] = '\0';for (num = 0; num < 8; num++){if (snakerow[i - 1] == row[num]){break;}}snakerow[i] = row[num + 1];snakerow[i + 1] = '\0';for (i = 0; i < strlen(snakerow); i++){snakerow[i] = snakerow[i + 1];snakelist[i] = snakelist[i + 1];}};break;}}void longer (void){int length;length = strlen(snakerow);snakerow[length] = snakerow[length - 1];snakerow[length + 1] = '\0';snakelist[length] = snakelist[length - 1];snakelist[length + 1] = '\0';}void main (void){int i;int length_point;int temp;init();while(1){if (0 == keystar) // If press keystar,go on.{delay_ms(2);if (0 == keystar) // The key to eliminate jitter{P0 = 0x01;TR0 = 1;while (1){for (i = 0; i < strlen(snakerow); i++) // The original image{P1 = 0xff;P2 = 0xff;P0 = snakerow[i];P2 = snakelist[i];_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();P2 = 0xff;P0 = green_point_row;P1 = green_point_list;}for (i = 0; i < 8; i++){if (green_point_list == greenlist[i]){break;}}length_point = strlen(snakerow);if ((snakerow[length_point - 1] == green_point_row)&&(snakelist[length_point - 1] == redlist[i])){time = time + 1000;if (state_point){do{green_point_row = temp_point_row[rand() % 8]; // 1 2 4 8 16 32 64 128green_point_list = temp_point_list[rand() % 8]; // 254 253 251 247 239 223 191 127for (temp = 0; temp < strlen(snakerow); temp++) //To test whether red dot green dot overlap{if((green_point_row == snakerow[temp])&&(green_point_list == snakelist[temp])){break;}}}while(temp < strlen(snakerow));longer();state_point = 0;}}for (temp = 0; temp < (strlen(snakerow) - 3); temp++){if ((snakerow[strlen(snakerow) - 1] == snakerow[temp])&&(snakelist[strlen(snakerow) - 1] == snakelist[temp])){while(1){P0 = 0xff;P1 = 0x00;P2 = 0xff;}}}keyscan();}}}}}void timer0 (void) interrupt 1{int i;TH0 = (65536 - time) / 256;TL0 = (65536 - time) % 256;n++;if (n >= 20){i = strlen(snakerow);arr_con(i);state_point = 1;n = 0;}}。
本科毕业论文(设计)(2015届)贪吃蛇游戏的设计院 系 电子信息工程学院专 业 电气工程及其自动化姓 名指导教师 副教授2015年4月摘要本篇论文主要是设计并且着手致力于实现一种基于51单片机的经典的贪吃蛇游戏,主要是研究该游戏的硬件电路和软件编程的设计,同时也简单介绍了应该如何使用Proteus软件进行仿真。
借助仿真软件进行实验测试,可以基本实现游戏一些简单的基本功能。
直至现在,大家都知道且明白了51系列的单片机技术相对而言比较成熟,功能也十分强大,应用较为广泛。
将单片机作为本设计的控制核心,能够使硬件电路大大地简化,用软件来编程控制单片机,来加以实现硬件电路的功能,可以降低能耗,同时也节约成本。
选用C语言编程,比较方便灵活,极大地加快了软件开发的速度,使开发周期缩短了,同时方便移植。
本篇论文比较详细的的介绍了各种硬件的基本特性,贪吃蛇游戏实现的基本功能与详细设计,软件设计的具体说明,每一个模块的细节要求,还有一些功能模块的程序流程图和关键部分代码的详细讲解等。
关键词:Proteus软件仿真;51单片机;Keil;贪吃蛇;LED点阵屏AbstractThis paper is mainly committed to the design and begin a 51 microcontroller based on the classic Snake game, is to study the hardware circuit design and software programming of the game, but also a brief introduction to how to use Proteus simulation software . With simulation software experimental tests, the basic realization of the game can be some simple basic functions. Until now, we all know and understand the 51 series of single-chip technology is relatively mature, the function is also very powerful, is widely used. The microcontroller as control core of this design, enabling greatly simplify the hardware circuit with microcontroller programming control software, hardware circuitry to be functional, you can reduce energy consumption, but also cost savings. Selection of the C programming language, more convenient and flexible, which greatly accelerated the pace of software development, shorten the development cycle, while convenient for transplant. This paper a more detailed introduction to the basic characteristics of various hardware realization of the basic functions of the Snake game with detailed design, software design, specify the details of the requirements of each module, there are some functional modules of the program flow chart and explain in detail the critical parts of the code and so on.Keywords:Proteus software simulation;51 microcontroller;Keil;Snake;LED lattice;目录摘要 (I)Abstract (II)目录 (Ⅲ)1 绪论 (1)1.1研究背景及意义 (1)1.2单片机发展状况 (1)1.3 LED发展状况 (2)1.4 设计特点 (3)2 系统总体设计 (3)2.1设计要求 (3)2.2 系统设计方案 (4)2.2.1硬件设计 (4)2.2.2软件设计 (4)3系统硬件设计 (4)3.18*8LED点阵的原理说明 (4)3.2 LED阵列驱动电路 (4)4系统软件设计 (5)4.1系统主要模块介绍 (5)4.1.1 主函数模块 (6)4.1.2 按键模块 (6)4.1.3 蛇运动控制模块 (6)4.2主程序工作流程 (6)4.3 游戏设计思想 (7)4.4 LED点阵初始化 (8)4.5 贪吃蛇的移动 (9)4.6 食物的随机出现 (9)5联调与测试 (9)5.1软件调试 (9)5.2硬件调试 (10)结论与展望 (13)致谢 (14)参考文献 (15)附录A:系统原理图 (16)附录B:系统PCB图 (17)附录C:系统仿真图 (18)附录D:系统实物图 (18)附录E:系统源程序 (20)1 绪论1.1研究背景及意义时代在不断的进步,人们的生活节奏也因此不断加快,越来越多的人加入了经济化全球化的世界。
基于单片机的微型游戏机—贪吃的蛇摘要单片微型机简称单片机,它是在一片芯片上集成了中央处理部件,存储器、定时器/计数器和各种输入输出设备等接口部件。
单片机是微机发展的一个重要的分支,自问世以来,性能不断地改善和提高,加之单片机具有集成度高、功能强、速度快、体积小、功耗小、使用方便、性能可靠、价格便宜等优点,故在工业控制、数据采集和处理、通信系统、家用电器等领域的应用日益广泛。
国内虽然起步较晚,但单片机的潜力越来越被人们所重视,尤其在工业控制、自动化仪器仪表、计算机系统接口、智能化外设等应用领域发展很快。
它的应用对于产品升级换代、机电一体化都具有重要的意义,在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数,被用于各种不同产品的生产。
在通信行业更为广泛利用,手机从只能基本通话,到现在一台手机拥有各种不同的功能,单片机得到了广泛的应用。
手机可以听音乐,听收音机,玩游戏,照相片等等,比较流行的手机游戏贪吃蛇就能用单片机实现。
关键词:51单片机贪吃蛇游戏Based on single chip micro-game - greedy snakeABSTRACTSingle-chip microprocessor referred to as microcontrollers, which is integrated on a chip, a central processing unit, memory, timer / counters and a variety of input and output devices such as Interface Unit. SCM is a microprocessor development, an important branch, since its inception, performance, continuous improvement and increase, coupled with microcontroller with an integrated high, strong function, high speed, small size, power consumption, easy to use, reliable, cheap, etc. advantages, so in the industrial control, data acquisition and processing, communication systems, home appliances and other fields increasingly wide range of applications. Although the domestic late start, but the potential of SCM has been growing attention, especially in industrial control, automation instruments and meters, computer system interface, intelligent peripherals and other applications developed rapidly. Its application for the upgrading of products, mechanical and electrical integration, have important significance in industrial production, current, voltage, temperature, pressure, flow, flow rate and switching capacity are commonly used parameters of the main accused, was used for a variety production of different products. More extensive use of the communications industry, cell phone calls from can only be basic to the present, mobile phones have a variety of functions, single-chip has been widely used. Phone can listen to music, listening to the radio, play games, according to photos, etc., the more popular cell phone game Snake will be able to use SCM.Keyword:51singlechip snake game目录1 第一章绪论 (1)1.1概述 (1)1.2选题背景 (1)1.3课题分析 (1)1.4思路设计 (1)2第二章系统的基本组成和工作原理 (2)2.1系统的基本组成 (2)2.2系统的工作原理 (2)3第三章显示电路的选取和设计 (2)3.1游戏显示的器件选择 (2)3.2显示功能的硬件电路 (3)4第四章键盘扫描的电路设计 (4)4.1键盘扫描思路设计 (4)4.2键盘硬件电路设计 (4)5第五章系统程序设计 (5)5.1编译软件 (5)5.2软件设计工具 (5)5.3C51 优化的 C 语言交叉编译器 (10)5.4系统设计流程图 (11)参考文献 (15)附录 (16)谢辞 (43)1 第一章绪论1.1概述本设计采用80C51核心的单片机最小系统,80C51是MCS—51系列单片机钟CHMOS工艺的一个典型品种。
中文摘要摘要本文设计了一款新颖的以单片机为控制核心的贪食蛇游戏系统。
所设计的贪食蛇能完成移动、吃食物和摆放游戏自动输出的食物、使之默认出现3节蛇身、吃到每个随机点数而得分等功能。
硬件设计包括LED模块、键盘模块、供电模块驱动模块和下载模块。
软件采用C语言编程,方便灵活,大大加快了软件开发速度,缩短了开发周期,并且便于移植。
为提高开发效率和硬件稳定性,采用了功能强大的硬件仿真软件Proteus,依托该软件提供的仿真环境搭配Keil作为软件开发调试环境进行仿真调试成功。
所设计的贪食蛇游戏系统轻巧便携、老少皆宜,且成本较低,具有一定的市场前景。
关键词:贪吃蛇;单片机;游戏I英文摘要AbstractThis paper designs a novel single-chip microcomputer as the snake game control system. The snake can complete mobile, food and put the game automatically output of food, which appears by default 3 snake, eat each random points and scoring functions. The hardware design includes LED module, keyboard module, power supply module and driving module and download module. The software is programmed with C language, convenient and flexible, greatly accelerate the speed of software development, shorten the development cycle, and easy to transplant. In order to improve the development efficiency and stability of the hardware, the powerful hardware simulation software Proteus, based on the simulation environment of the software provided with Keil as the software development environment for debugging simulation debugging success. Snake game system design of the light and portable, suitable for all ages, and the cost is low, has a certain market prospects.KeyWords:Greedy Snake;51MCU;GameI目录目录第一章绪论 (1)1.1课题设计的背景与意义 (1)1.2 贪食蛇游戏的发展及现状 (2)1.2.1贪食蛇游戏发展历史 (2)1.2.2我国单机游戏的现状 (3)1.3 课题设计的内容与要求 (4)1.3.1课题设计的内容 (4)1.3.2课题设计的要求 (4)1.4设计方案 (4)1.4.1硬件设计 (4)1.4.2软件设计 (5)第二章系统总体设计 (6)2.1 系统基本组成及工作原理 (6)2.2 系统的主要元器件介绍 (8)2.2.1 74HC138 (8)2.2.2 74HC154 (10)2.2.3 74HC595 (12)2.3 主控芯片单片机 (14)2.3.1单片机的介绍 (14)2.3.2单片机的应用 (15)2.4 单片机红外无线 (17)2.4.1红外遥控 (17)2.4.2红外遥控发射 (18)2.4.5红外遥控接收 (19)2.4.6红外编码标准 (19)第三章系统硬件的设计 (21)3.1单片机控制模块的设计 (21)3.1.1 单片机的选择 (21)3.1.2 时钟电路 (24)I目录3.1.3 复位电路 (26)3.1.4 最小系统 (27)3.2 供电电路设计 (27)3.3 显示模块设计 (28)3.3.1 点阵模块 (28)3.3.2 驱动电路设计 (31)3.3.3 行驱动电路 (32)3.3.4 列驱动电路 (33)3.3.5 扫描显示过程 (34)3.3.6 显示模块原理图 (35)3.4下载模块设计 (35)第四章系统软件的设计 (37)4.1软件的整体设计思想 (37)4.2 软件开发环境 (37)4.2.1 keil软件的介绍 (37)4.2.2 软件功能 (38)4.2.3 软件应用流程 (39)4.3系统主函数的设计 (40)4.3.1按键检测模块 (42)4.3.2 显示模块 (43)4.3.3分数模块 (44)第五章系统调试 (46)5.1软件调试 (46)5.2硬件调试 (46)5.3作品展示 (48)总结 (49)参考文献 (50)致谢 (51)附录一:原理图 (I)附录二:原程序 (I)II第一章绪论第一章绪论“贪食蛇”又称为“贪吃蛇”,是一种益智小游戏。
第ChpNum章基于51单片机的贪食蛇游戏机开发1 本设计的特点和目的本设计以51系列单片机STC89C52为控制核心,以点阵液晶显示模块、键盘为人机接口,实现了一个贪食蛇游戏机。
通过本设计,令读者掌握利用单片机开发简单电子产品的基本技能,熟悉原理图绘制、仿真、软件设计、优化以及系统调试的基本方法,为进一步设计开发更为复杂的嵌入式模拟/数字混合系统打下一定的基础。
2产品简介“贪食蛇”又称为“贪吃蛇”,是一种益智小游戏。
其游戏规则比较简单,就是一条小蛇,不停地在屏幕上游走去吃屏幕上出现的蛋,越吃越长,只要蛇头碰到屏幕四周或者碰到自己的身子,小蛇就立即毙命并结束游戏。
本作品有上下左右四个按键来控制蛇头的移动方向,另有一个复位按键控制程序的重启,游戏界面采用分辨率为128×64的液晶显示屏。
3 硬件设计3.1 人机接口电路本游戏机游戏界面由液晶显示模块呈现。
液晶显示模块中,最主要的就是LCD液晶屏。
根据LCD液晶屏显示内容的不同,液晶显示模块可以分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块3种。
本设计使用点阵图形液晶模块OCM12864。
OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接连接,具有8位标准数据总线、6条控制线及电源线,各引脚的信号说明参见表ChpNum-1。
表ChpNum-1 OCM12864引脚说明管脚名称方向引脚说明VSS - 逻辑电源地。
VDD - 逻辑电源+5V。
V0 I LCD调整电压,应用时接10K电位器可调端RS I 数据\指令选择:高电平:数据D0-D7将送入显示RAM;低电平:数据D0-D7将送入指令寄存器执行。
R/W I 读\写选择:高电平:读数据;低电平:写数据。
E I 读写使能,高电平有效,下降沿锁定数据。
DB0 I/O 数据输入输出引脚。
DB1 I/O 数据输入输出引脚。
DB2 I/O 数据输入输出引脚。
贪吃蛇游戏单片机程序贪吃蛇游戏是一款经典的游戏,其简洁的规则和有趣的玩法使其成为了许多人喜爱的游戏之一。
在单片机中实现贪吃蛇游戏需要利用单片机的输入输出功能以及控制算法来完成游戏的控制和显示。
下面是一个简单的贪吃蛇游戏单片机程序的实现。
首先,我们需要定义一些常量和变量来表示游戏中的一些参数和状态。
比如,我们可以定义一个常量来表示屏幕的宽度和高度,以及一个变量来表示蛇的长度和当前的移动方向。
c#define SCREEN_WIDTH 16#define SCREEN_HEIGHT 8#define SNAKE_MAX_LENGTH 64int snake_length;int snake_direction;接着,我们需要定义一个数据结构来表示蛇的身体,可以使用一个数组来表示蛇的每一节身体的位置。
同时,我们还需要定义一个数据结构来表示食物的位置。
cstruct point {int x;int y;};struct point snake[SNAKE_MAX_LENGTH];struct point food;然后,我们可以编写一个函数来初始化游戏的状态。
在这个函数中,我们需要初始化蛇的位置和长度,以及随机生成食物的位置。
void init_game{// 初始化蛇的位置和长度snake[0].x = SCREEN_WIDTH / 2;snake[0].y = SCREEN_HEIGHT / 2;snake_length = 1;// 随机生成食物的位置food.x = rand% SCREEN_WIDTH;food.y = rand% SCREEN_HEIGHT;}接下来,我们需要编写一个函数来处理用户输入,并更新蛇的移动方向。
这个函数可以通过读取按键的状态来实现,比如可以通过一个变量来记录当前的按键状态。
cvoid handle_input{// 读取按键状态int key = read_key// 根据按键状态更新蛇的移动方向if (key == 'W' && snake_direction != 'S') {snake_direction = 'W';} else if (key == 'S' && snake_direction != 'W') {snake_direction = 'S';} else if (key == 'A' && snake_direction != 'D') {snake_direction = 'A';} else if (key == 'D' && snake_direction != 'A') {snake_direction = 'D';}然后,我们可以编写一个函数来更新蛇的位置。
邯郸学院课程设计题目基于STM32--μC/OS-II贪吃蛇的设计基于STM32--μC/OS-II贪吃蛇的设计摘要进入新世纪的TFT液晶显示屏的技术和产业都取得了长足的发展,作为重要的现代信息,发布媒体之一TFT液晶显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。
伴随社会化信息的推进,TFT液晶屏技术也在不断地推陈出新,应用领域愈加广泛。
现基于STM32的TFT液晶显示可以更好的满足各种需求,也更便于操作和实现。
基于STM32在TFT液晶屏幕上可显示文本及图形,包括汉字和时钟显示。
关键词:TFT液晶显示 STM32开发板μC/OS-II 贪吃蛇目录摘要 (2)前言 (4)1背景介绍 (4)1.1选题背景 (4)1.2 MiniSTM32开发板介绍 (4)2系统硬件设计 (5)2.1开发板简介 (5)2.2 LED 灯 (7)2.3按键 (11)2.4 TFTLCD 模块 (12)3系统软件设计 (16)3.1 LED驱动 (16)3.2按键驱动 (16)3.3 TFT-LCD驱动 (18)3.4贪吃蛇实现C语言代码 (20)3.5 uC/OS-II软件设计 (26)结论 (30)参考文献 (31)前言目前已有超过85%的无线通信设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固。
ARM在此方面的应用如:手提式计算机、移动电话、PDA等。
随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。
此外,ARM在语音及视频处理上进行了优化,并获得广泛支持。
UC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)。
同时,该系统源代码开放、整洁、一致,注释详尽,适合系统开发。
UC/OS-II已经通过联邦航空局(FAA)商用航行器认证,符合航空无线电技术委员会(RTCA)DO-178B标准。
基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文基于51单片机8x8点阵贪吃蛇综合课程设计报告-图文《电子线路综合》课程设计报告设计课题:贪吃蛇掌上游戏机毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
基于51单片机贪吃蛇游戏设计贪吃蛇游戏是一种经典的游戏,也是很多人小时候玩过的游戏,其玩法简单,但却能够让人沉迷其中。
本文将介绍如何基于51单片机设计贪吃蛇游戏。
一、功能需求1. 界面设计贪吃蛇游戏的界面应简洁美观,可以利用点阵或LCD显示屏来呈现。
应包括游戏画面、分数、游戏难度等。
2. 操作方式游戏的操作主要包括上下左右移动贪吃蛇头部,进行输入、开始游戏、结束游戏等操作。
游戏可以使用按键、遥控器或者手柄等方式进行控制。
3. 游戏规则游戏正常进行时,贪吃蛇必须不断吃到食物,同时不能碰到墙壁或自己的身体。
每吃到一个食物,分数就会增加一点。
当贪吃蛇碰到墙壁或自己的身体时,游戏结束。
4. 难度等级游戏可以设置不同的难度等级,难度等级越高,贪吃蛇的速度就会越快,游戏难度也会相应提高。
二、设计思路本设计采用51单片机作为控制器,通过点阵或者LCD显示屏实现游戏界面的显示,通过按键、遥控器或手柄等方式进行游戏的操作。
具体设计思路如下:LCD显示屏:同样可以实现游戏画面的显示,但是可以显示更丰富的内容,如文字、动画等。
2. 游戏逻辑处理游戏逻辑处理主要包括游戏规则的实现和贪吃蛇的移动控制。
在实现游戏规则时,需要判断贪吃蛇是否碰到墙壁或自己的身体,同时需要计算分数;在实现贪吃蛇的移动控制时,需要通过按键、遥控器或者手柄等方式实现上下左右的移动。
可以通过按键或者遥控器等方式设置游戏难度等级,从而实现游戏难度的调整。
4. 硬件设计硬件设计包括主控芯片的选择、显示屏的选择、按键、遥控器或手柄等外设的选择。
主控芯片可以选择51单片机,同时可以选择点阵或LCD显示屏,按键、遥控器和手柄等外设可以根据需要进行选择。
三、实现步骤1. 硬件搭建搭建硬件时需要将主控芯片、显示屏、按键、遥控器或手柄等外设连接起来,并进行电路调试。
2. 程序设计程序设计包括游戏界面的设计、游戏逻辑的实现和难度等级的设置。
其中游戏界面的设计可以根据实际需要进行调整,游戏逻辑的实现需要考虑到游戏规则和贪吃蛇的移动控制,难度等级的设置可以通过按键或遥控器等方式实现。
基于单片机的贪吃蛇游戏设计学生姓名:学生学号:院(系):电气信息工程学院年级专业:指导教师:二〇一五年五月摘要摘要在21世纪的今天,人们的生活开始变得更加丰富多彩。
在繁忙的工作之余,娱乐成为人们生活不可或缺的一份子,而游戏作为近年来逐渐兴起的一种娱乐方式,已经越来越受到人们的青睐。
在工作学习之余,通过玩游戏来放松、调节紧张的学习工作压力是不错的选择;然而大型的网络游戏玩起来比较耗费时间,且不能随时随地的玩。
那么如果这时候拥有一款简单易携带,并且能够缓解压力的小游戏将是个不错的选择,所以,我就设计了这样一款简单易携带的经典小游戏——贪吃蛇。
具体实现上,硬件系统平台采用STC89C52R单片机,搭载LCD12864显示屏,构成一个轻巧简单的游戏机系统。
软件系统采用C语言编程,Protues软件设计电路并仿真,KEIL软件进行程序的调试。
最终实现贪吃蛇游戏系统。
本次设计的贪吃蛇游戏,实现了传统意义上的贪吃蛇游戏的特点:蛇吃掉豆子后,得分增加并且蛇身变长;分数到达一定数目进行升级以后,蛇运动速度加快。
而玩家只需利用方向按钮“上↑、下↓、左←、右→”来改变蛇的运行方向,就能达到娱乐的目的,操作非常简单。
关键词:贪吃蛇游戏,STC89C52R单片机,LCD12864,C语言ABSTRACTIn the 21st century today, people's life become more colorful, In the outside of busy work, entertainment become an integral part of people's life, And the game as emerging in recent years, a kind of entertainment, already more and more get the popular of people, In the outside of work and study, through the play games to relax, adjust the pressure of learning is a good choice; However large network game play more time-consuming,And can't play anywhere, anytime. So if this time has a simple is easy to carry, and can ease the pressure of small game will be a good choice. So, I would design such a simple and easy to carry small classic game –the snake game.On the concrete implementation, with STC89C52RCSingle chip microcomputer system platform, with a LCD display, constitute a lightweight simple game system. Software use C language programming, use Protues software Circuit design and simulation, KEIL Software program debugging, Finally realizes the snake game system.The design of the snake game, Achieved in the traditional sense of the snake game features: after the snake to eat beans, scores and snake-body variable length; Score to reach a certain number after the upgrade, the snake's movement speed. Players need to use the direction key "↑,up, down, left, right , to change the running direction of snake, and can achieve the purpose of entertainment ,the operation is very simple.Key words:Greedy Snake Game, STC89C52RCSingle chip microcomputer, LCD12864,C language目录摘要 (I)ABSTRACT (2)1绪论 (6)1.1本课题研究的背景及意义 (6)1.2 国内外研究现状、水平 (6)1.3 本课题的发展趋势 (1)1.4本课题的研究内容和达到的要求 (1)2 方案分析与选择 (2)2.1 系统方案设计 (2)2.2显示器模块设计方案 (2)2.3 按键输入模块设计方案 (3)2.4 本课题的技术指标 (3)2.5 本课题的创新 (3)3 系统硬件设计 (4)3.1单片机的选择与其性能分析 (4)3.1.1 单片机概述 (4)3.1.2 单片机STC89C52RC的介绍 (4)3.1.3 单片机最小系统的介绍 (5)3.2 LCD12864简介 (6)3.2.1 LCD12864概述 (6)3.2.2 LCD128*64的基本特性 (6)3.2.3 模块接口说明 (7)3.2.4 指令说明 (9)3.3 键盘电路的设计 (11)3.4 蜂鸣器电路的设计 (11)3.4.1蜂鸣器简介 (11)3.4.2 蜂鸣器的设计 (12)4 软件系统设计 (13)4.1 游戏设计思想 (13)4.2 主要模块介绍及其功能 (14)4.3 编程语言介绍 (15)4.3.1 C语言简介 (15)4.3.2 C源程序结构特点 (15)4.4 程序设计流程图 (16)5 仿真设计与结果分析 (17)5.1 仿真软件的简介 (17)5.1.1 仿真软件Proteus的简介 (17)5.1.2 keiluVision4编程开发工具的简介 (17)5.2本系统的Proteus仿真设计 (18)5.2.1仿真设计的预期目标 (18)6 PCB设计 (19)6.1 PCB设计软件 (19)6.1.1 PCB原理图设计 (19)6.1.2 PCB板制作方法 (19)6.2 PCB的EMC设计 (1)6.2.1 元器件布局的基本原则 (1)6.2.2 布线设计原则 (1)6.3 印制电路板 (1)6.3.1 印制电路板的结构 (1)6.3.2 印制电路板的种类 (1)6.3.3 印制电路板制作流程 (1)7 系统调试 (2)7.1 硬件调试 (2)7.2 软件调试 (3)7.3 硬件软件联合调试 (3)7.4 调试结果 (3)结论 (7)参考文献 (8)附录一:系统PCB原理图 (9)附录二:系统仿真图 (10)附录三:PCB图 (11)附录四:程序主函数 (1)附录五:原器件清单 (6)致谢 ............................................................................................. 错误!未定义书签。
基于单片机的贪食蛇设计一、引言贪食蛇是一款经典的电子游戏,也是很多人童年的回忆。
在这个项目中,我们将使用单片机设计并实现一个基于单片机的贪食蛇游戏。
通过这个项目,我们可以学习并理解单片机的使用、游戏的逻辑设计和开发过程。
二、设计原理1.单片机选择和引脚配置我们选择使用ATmega16单片机作为主控芯片。
ATmega16是一款8位的RISC微控制器,具有很强的处理能力和丰富的外设资源。
我们将连接LCD显示屏、按键、LED等外设,以实现游戏的显示和交互功能。
2.游戏逻辑设计贪食蛇游戏的逻辑设计包括蛇的移动、食物的生成和判断是否吃到食物等功能。
(1)蛇的移动蛇的移动是游戏的核心逻辑之一、在每一个游戏周期内,蛇的位置将根据用户的输入进行更新。
当蛇吃到食物后,蛇将会增加身体长度,移动的方式则是在蛇头的位置插入新的节点,同时删除蛇尾的节点。
(2)食物的生成食物的生成是贪食蛇游戏的另一个重要功能。
食物的生成应该遵循一定的规则,例如不能生成在蛇身上。
当蛇吃到食物后,游戏分数将增加,并且在一个合适的位置生成新的食物,继续进行游戏。
(3)判断是否吃到食物判断蛇是否吃到食物是游戏进行的关键判断。
当蛇的头部位置与食物位置重合时,就表示蛇吃到了食物,游戏的分数将增加。
3.外设的接口设计我们将使用LCD显示屏、按键和LED等外设与单片机进行交互。
(1)LCD显示屏我们将使用LCD显示屏来显示游戏的界面和分数。
单片机通过并行或者串行接口与LCD进行通讯,将游戏界面和分数进行显示。
(2)按键按键用于控制蛇的移动方向,例如上、下、左、右。
通过检测按键的状态,单片机可以识别用户的输入,并根据输入来更新蛇的位置。
(3)LEDLED用于显示游戏的状态,例如游戏是否开始、是否结束等。
通过控制LED的亮灭,我们可以通过外设来反馈游戏的状态。
三、系统实现1.硬件连接将ATmega16单片机与LCD显示屏、按键和LED进行连接。
根据单片机和外设的引脚映射关系,正确地连接到单片机的对应引脚。
中北大学硬件大型实验说明书学生姓名:学号:学院: 计算机与控制工程学院专业: 计算机科学与技术题目: “贪吃蛇”游戏设计指导教师:职称:2016 年 9 月 14 日目录一、需求分析 (1)二、工具 (1)三、概要设计 (1)四、详细设计(硬件设计和连接部分) (2)1.组件介绍 (2)1)AT89C55单片机 (2)2)Matrix-8X8点阵屏幕 (3)3)74LS154译码器 (3)4)CMOS反相器 (4)5)按键 (4)6)7-SEG BCD (5)2.硬件设计 (5)五、心得体会 (7)附录I(程序) (9)附录II(运行截图) (16)一、需求分析我们的课程设计题目是基于51单片机和一些基础组件设计出一个贪吃蛇游戏。
游戏的实现需要一个16x16的屏幕(由4个8x8的点阵屏组成)和5个按键,其中4个按键控制贪吃蛇的前进方向,另外一个按键可以使游戏重新开始。
另外还需要一个显示BCD码的数字型LED灯组用于记录得分。
贪吃蛇游戏需要实现的功能是:游戏开始时会出现一个长度为init_length的贪吃蛇,和一个随机出现的苹果(必须是贪吃蛇蛇身以外的一个点)。
玩家可以通过按键控制贪吃蛇的前进方向,但是只能转向,而不能向前或者向后,例如:当贪吃蛇向上行走时,只能通过左键和右键来让它左转或者右转,另外两个按键将失灵。
当贪吃蛇吃到苹果后,贪吃蛇尾部将会增加一个点,而屏幕上又会随机出现一个不与贪吃蛇重合的点。
此时积分器加一。
当贪吃蛇马上就要“撞向”屏幕边缘时,会从相反的一边钻出来。
所以“撞墙”并不会导致游戏结束。
而当贪吃蛇吃到自身时则会使游戏结束,并且会自动回到游戏初始化时的状态。
任何时候按下“重新开始”按键都将使游戏回到初始状态。
二、工具51单片机开发板,Keil uVision3,ISIS 7 Professional。
三、概要设计根据我们要实现的功能,我们决定把这次课程设计分成三个部分。
第一个部分为硬件设计和连接部分。
基于51单⽚机的贪吃蛇游戏设计本科时候做的⼀个课程作业,⾃⼰搭⼀个很简易的电路,⽐较有意思且易上⼿,故将之记录下来。
(全套的仿真及代码,演⽰视频,课程报告以及PPT展⽰上传在。
)⼀. 实验⽬的(1)通过对C51语⾔的理解,编写程序实现对贪吃蛇的有效控制;(2)通过对51单⽚机硬件的学习,学会运⽤⾯包板,独⽴按键、点阵屏等,完成对完整电路的搭建过程;(3)通过对Proteus仿真软件的学习,实现基于STC89C52单⽚机的8*8点阵贪吃蛇的硬件电路仿真。
⼆. 实验介绍贪吃蛇是⼀款经典⼩游戏,其游戏的规则是:玩家通过四个⽅向键来控制蛇的移动,控制其在地图上吃⾖⼦。
吃掉⾖⼦后蛇⾝相应加长,蛇⾝速度加快。
蛇运动过程中撞到墙壁或蛇⾝,则⽴即结束本轮游戏。
三. 实现功能(1)制作⼀个8*8点阵的贪吃蛇游戏;(2)通过LED点阵屏为载体显⽰数据;(3)外接4个独⽴按键作为输⼊端,分别控制蛇的移动⽅向(上、下、左、右);(4)蛇头与墙壁或蛇⾝相撞,随即结束游戏并复位。
四. ⽅案设计在该系统中,硬件部分包括STC89C52单⽚机,8*8点阵屏,4个按键;软件部分是在keil环境下⽤C51语⾔编写,设置蛇的初始段数为2点,并设置有障碍墙壁,游戏结束后⾃动复位。
(1)贪吃蛇的移动在贪吃蛇的移动过程中,每次需要将蛇头要到的下⼀个LED灯点亮,对应蛇尾的LED灯熄灭。
在程序中即是先把蛇尾位置的值传给蛇头的下⼀个位置,然后改变蛇尾的值即可。
蛇头下⼀个位置的确定由蛇头和偏移量来确定,每次通过操作四个独⽴按键来控制蛇步进的偏移量。
因⽽只要将蛇头的位置加上其偏移量的值,即可得到新的蛇头位置。
(2)⾷物的出现在市场上所流⾏的贪吃蛇游戏中,⾷物的出现是⼀种随机⾏为,这在程序中需要做⼀个随机数来⽀撑该过程。
我们组在实验过程中也尝试了该过程,最终选择让⾷物出现在蛇尾的后⼀步,来执⾏整个程序。
与此同时,⾷物出现的位置不能与蛇的位置重合,也不能超出墙外,否则需要重置⾷物。
SCM Technology •单片机技术Electronic Technology & Software Engineering 电子技术与软件工程• 245【关键词】单片机 三维建模 贪吃蛇游戏机 电路设计1 引言随着产品的微小化和智能化,单片机的发展越来越重要,它现在是智能化的技术核心;同时智能制造的综合性要求也越来越高。
基于智能制造的背景下,综合设计与制作也是必不可少的。
而贪吃蛇游戏机的研究,以往是基于8x8LED 点阵或者16x16LED 点阵的贪食蛇游基于单片机与三维建模的贪吃蛇游戏机的综合设计文/韦翠华戏设计,能实现的功能一般包括:食物的随机出现,贪吃蛇的移动。
以往的研究缺乏一个作品的系统设计完整性过程,基于这个趋势提出了基于单片机与三维建模的贪吃蛇游戏机的综合设计。
并在原来的功能上增加难度,增加功能,增加音乐,改善显示部分,设计这样一款多功能综合性的贪吃蛇游戏机。
2 硬件电路设计设计的贪吃蛇游戏机由51单片机的AT89系列的控制芯片,最小硬件系统模块,显示屏模块,键盘设计部分,声音模块组成,系统设计框图如图1所示。
2.1 最小硬件系统单片机的最小系统电路如图2所示,复位电路是由RST 引脚进入到51单片机芯片的特有触发器。
若单片机的复位引脚RST 出现2个机器周期以上的高电平时,单片机就执行复位操作。
单片机的复位电路有上电自动复位和按键手动复位两种方式,本设计选用上电自动复位方式。
上电瞬间的情况下,因电容的充电电流很大,电容相当于短路,RST 端就产生高电平, 开始自动复位;当电容的电压达到电源的额定电压值时,电容的充电电流就会变为0,电容就会接近开路,这一刻RST 端变成低电平,程序开始正常稳定运行。
2.2 显示部分通过对比分析以往的研究成果,发现在单片机显示屏的选择上分为LED 点阵屏和液晶显示屏,因为LED 显示屏元器件的显示单一和引脚繁杂导致电路图复杂,容易影响显示的效果,而液晶显示屏显示清晰,功能多样化,可以显示汉字、字符、自定义图形等,控制方便。
(完整版)基于STC89C52单片机贪吃蛇做法#ifndef _glb_h_#define _glb_h_#define uchar unsigned char#define uint unsigned int#define LOW 0#define HIGH 1//初始化指令#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H #define AC_INIT 0x02 //将AC设置为00H。
且游标移到原点位置#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)#define FUN_MODE 0x30 //工作模式:8位基本指令集#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白#define DISPLAY_OFF 0x08 //显示关#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH#define SET_DD_AC 0x80#define FUN_MODEK 0x36 //扩展指令集,8位指令#define X1address 0x80 //上半屏X轴起始地址#define X2address 0x88 //下半屏X轴起始地址#define Yaddress 0x80 //Y轴起始地址/*---------------------------------------------------------------------------------------------------液晶屏----------------------------------------------------------------------------------------------------*/#define DataPort P0sbit RS = P3^5;sbit RW = P3^6;sbit E = P3^4;sbit PSB = P3^7;sbit WELA = P2^7;sbit DULA = P2^6;sbit speed=P2^0;sbit beep=P2^3;/*#define DataPort P1sbit RS = P2^0;sbit RW = P2^1;sbit E = P2^3;sbit PSB = P2^4;//sbit WELA = P2^7;//sbit DULA = P2^6;*//*---------------------------------------------------------------------------------------------------贪吃蛇----------------------------------------------------------------------------------------------------*/ //定义复位不自动清零全局变量//#pragma DATA_SEG NOINIT_RAMsbit LEFT=P2^4;//左sbit RIGHT=P2^1;//右sbit UP=P2^5;//上sbit DOWN=P2^2;//下//sbit Led1=P1^7;//sbit Led2=P1^6;/*sbit LEFT=P0^2;//左sbit RIGHT=P0^3;//右sbit UP=P0^0;//上sbit DOWN=P0^1;//下*/sbit Led7=P1^0;sbit Led6=P1^1;sbit Led5=P1^3;sbit Led4=P1^4;//sbit Led3=P3^3;//sbit Led2=P3^2;//sbit Led1=P3^1;//sbit Led0=P3^0;#endif#ifndef _Init_h_#define _Init_h_/*------------------------------------------------------------------------------------------------------------Init_12864-------------------------------------------------------------------------------------------------------------*/void Delayus(unsigned char i);void Delayms(unsigned int i);void Check_Busy();void Write_Cmd(unsigned char Cmd);void Write_Data(unsigned char Data);//uchar Read_Status();uchar Read_Data();void Init_IO();void Init_12864();//void disp();void CGRAM();void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s);void ClrScreen();void Clr_GDRAM(void);void LCD_PutGraphic(unsigned char code *img);void SetGraphicMode();void Keyscan();void statuschange();void Draw_Point(uchar X,uchar Y,uchar clour);void Draw_zhi(uchar X1,uchar X2,uchar Y);void Draw_shu(uchar X,uchar Y1,uchar Y2);void Draw_line(uchar x0,uchar y0,uchar x1,uchar y1);void Draw_all_lines();void Stat_Point();void Last_Point();void Add_Point();void Bump_Wall();void Self_Bump();/*------------------------------------------------------------------------------------------------------------Init_Time-------------------------------------------------------------------------------------------------------------*/ //void Init_Time();//void exter0() interrupt 1#endif#include#include "glb.h"uint timestatus=0;void Init_Time(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void Timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;timestatus++;if(speed==0){if(timestatus>2)timestatus=0;}if(timestatus>10)timestatus=0;}#ifndef _Interrupt_h_ #define _Interrupt_h_void Init_Time();#endif#include#include "glb.h"/*游戏的初始化值*/uchar gamestatus=0;uchar flag=1; //折点个数标志uchar a[]={20,0,0,0,0,0,0,0}; //其中(a[0],b[0])为初始蛇头坐标,(a[1],b[1])为初始蛇尾坐标,之后蛇尾坐标为(a[flag],b[flag])。
基于51单片机8x8点阵贪吃蛇综合课程设计报告此文档为WORD版可编辑修改《电子线路综合》课程设计报告设计课题:贪吃蛇掌上游戏机专业班级:电子信息班学生姓名:指导教师:设计时间:2016 .12 .23目录一、设计任务与要求二、方案设计与论证三、原理图及元器件清单四、性能测试与分析五、性能测试与分析六、结论与心得七、参考文献八、附录贪吃蛇掌上游戏机一、设计任务与要求基本功能:制作一个8*8点阵的贪吃蛇游戏,系统以单片机的c语言的软件设计,系统通过LED点阵屏为载体显示数据,并用四个输入端表示四个控制键(上下左右)。
系统硬件部分由STC89C52RC单片机,8*8点阵屏, 4个按键,软件部分在keil环境下用c51语言编写,包括游戏初始蛇的段数,以及障碍墙壁,游戏结束时自动复位。
具体要求:1、用四个按钮控制蛇的方向,蛇的原始段数为2点,并设置墙壁。
2、蛇的移动速度随着蛇的段数增加而增加,当蛇碰到墙壁和自己的身体时死亡3、用proteus设计,仿真基于STC89C52RC单片机的8*8点阵贪吃蛇的硬件电路。
4、蛇死亡,游戏结束,系统自动复位。
二、方案设计与论证图1、系统框图1、贪吃蛇的移动当蛇没有吃到任何食物时,每次步进蛇头的将要到的下一个LED灯点亮,而蛇尾那个LED灯会灭掉,程序设计时只要将蛇尾那点位置的值传给蛇头下一个位置的值,再改变蛇尾的值即可。
而蛇头下一个位置根据蛇头和偏移量来确定,每次上下左右按键决定了蛇步进的偏移量,只要将蛇头的位置加上偏移量的值即得到新的蛇头位置。
当蛇头碰到四周的墙壁或者碰到自己的身体,小蛇就立即毙命并结束游戏。
2、食物的随机出现食物的出现是一种随机行为,所以必须做一个随机数,而且食物出现的位置不能与蛇的位置相同,也不能超出墙外,否则就要重置食物。
这里使用程序中的定时计数器的低八位 TL0的数值,由于TL0不断变化,不同的时间点数值不同,我这里使用的是C语言里的stdlib.h文件库,使用里面的随机函数srand(),先利用srand(TL0)获得TL0的数值,再利用两次rand()%8分别得到食物出现的横纵坐标的位置。
摘要本文基于单片机设计的贪吃蛇游戏,具有传统意义上的贪吃蛇游戏的特点:吃豆子蛇身增长,得分;分数达到一定等级进行升级以后,蛇运动速度加快等。
为节省存储空间,游戏算法上进行了新的设计,定义一个一维数组,利用位操作存储读取蛇头的运动状态信息。
具体实现上,硬件系统平台采用51系列单片机,搭载LCD,构成了一个轻巧便携的游戏机系统。
文中具体介绍了使用到的各种硬件的特性,游戏的各种功能与详细设计,软件的具体设计思路,各模块的详细介绍,部分模块的程序流程图,状态迁移图,关键部分代码的详细讲解等。
关键词:贪吃蛇游戏;单片机;LCD12864In this paper,the Snake game is such a game based on single chip,with the traditional Snake game features: Snake body grows and scores with eating a bean;Scores reached a certain number to upgrade the level and speed.In order to save the storage space,the algorithms of game makes anew design.By defining a one-dimensional array,snake head's motion states are stored and read in this array with bit operation.The hardware system uses single chip platform with LCD, ultimately forming a compact portable game system.The article introduces the use of a variety of hardware features,the game features and the detailed design,software design of the specific ideas,details of various modules,some modules of the program flow chart,state transition graph,a key part of the code details and so on.Keywords:Greedy Snake Game; single chip; LCD12864摘要 (I)目录 (III)第一章绪论1.1手持游戏介绍 (1)1.2研究背景与意义 (1)1.3手持游戏的发展状况 (1)第二章单片机简介 (4)2.1单片机的定义 (4)2.2单片机的基本结构 (4)2.3单片机执行指令的过程 (5)2.4单片机的特点 (6)第三章 LCD12864原理 (7)3.1 LCD12864概述 (7)3.2 LCD12864主要硬件构成说明 (8)3.3 LCD12864外部接口 (9)3.4 LCD12864指令说明 (10)3.5 LCD12864读写操作时序 (12)3.6 LCD12864的应用说明 (14)第四章系统硬件设计 (14)4.1系统结构框图 (15)4.2系统原理图 (15)4.3主要模块介绍及其功能 (16)第五章系统软件设计 (18)5.1游戏设计思想 (18)5.2系统软件设计流程图 (19)5.3贪吃蛇游戏系统实现主程序 (20)第六章系统运行结果 (26)第七章结束语..................................... ,30参考文献.. (31)致谢 (32)第一章绪论1.1手持游戏介绍手持游戏起源于1976年,由美国Mattel公司开发的Mattel Electronics Handheld Games系列。
暑期任务实验报告总结题目:红外控制贪吃蛇游戏2012年8月28日目录一 ,引言 (4)二, 课题任务及设计思路 (4)2.1主要任务 (4)2.2 设计思路42.2.1 主控制器的选择 (5)2.2.2 液晶屏的选择 (8)三 ,具体设计 (9)3.1软硬件基本分工 (9)3.2硬件设计部分 (9)3.2.1器件介绍、通信协议介绍 (9)3.2.2电路类型,类型介绍 (9)3.2.3 电路具体设计 (10)3.3软件设计部分 (11)3.3.1软件组成部分 (11)3.3.2软件组成部分````````````````````````````````````````````````````````````````````````````````````````````14 3.3.3 软件实现的结果 (27)四、整机调试和检测结果 .................................................................... 错误!未定义书签。
五、总结 (15)参考文献 (16)附录1 总电路图 (17)附录2 系统程序 (18)1 引言如今,游戏机风行的程度,是第一台电子游戏机的研制者诺兰-布什纳尔先生始料不及的。
在全世界最大的城市,直至最小的村庄,从纽约最辉煌的游乐场,到高加索最小的乡镇儿童娱乐点,在千家万户,正在进行着千千万万这样的“战斗”,伴随着无数成功与失败,兴奋与懊丧。
游戏机带来了一个全球性的疯狂症,其他任何娱乐与之相比都望尘莫及。
然而,究竟是什么原因使游戏机如此风行呢? 在回顾了游戏机发展简史之后,我们不难悟出,技术进步在游戏机发展过程中起到了极大的促进作用。
第二次世界大战以后,电子计算机技术得到了突飞猛进的发展。
先是由晶体管代替了笨重的真空管,后来出现了集成电路和大规模集成电路,使电子计算机一代一代实现更新,同时软件技术也发展迅速。
在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。
这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。
由于不断修改更新,使计算机的“智力”水平与人难分高低。
随着深蓝计算机与人的棋类对决,到现在的PSP游戏机或者是家庭用的X-BOX 游戏机,游戏机的技术是日益的发展、进步。
但是,技术进步绝不是游戏机风行的唯一因素。
随着终端设备开发能力的加强,作为娱乐终端的游戏机也得到了很大程度的发展。
只有得到了游戏终端技术的支持,才能做出更新、更高难的游戏。
这也加速了游戏机在全球风行程度,所以对于游戏机的研究和设计具有很重要的意义,这也是本课题研究的来源二.课题任务及设计思路2.1主要任务组建遥控器控制电路,要求通过遥控器的方向键控制贪吃蛇游戏。
(类似于贪吃蛇游戏)2.2 设计思路①此实验我们采用38k的红外对LCD控制,通过红外接收模块对遥控数据进行采集,MCU中心模块主要对采集数据进行判断,并相应的去控制LCD的显示模块。
②软件设计流程:2.2.1 主控制器的选择STC90C51是标准的40引脚双列直插式集成电路芯如图2-1所示,AT89C51是一种带64K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
STC90C51具有以下标准功能:64K 字节 Flash,1280 字节 RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,2个16 位定时器/计数器,一个6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。
另外,STC90C51可降至0Hz 静态逻辑操作,支持2 种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
图2-1 AT89S52的引脚图(1)管脚功能①输入/输出口P0.0~P0.7 P0口8位双向口P1.0~P1.7 P1口8位双向口P2.0~P2.7 P2口8位双向口P3.0~P3.7 P3口8位双向口②ALE地址锁存控制信号在系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。
此外由于ALE是以六分之一晶振频率的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。
③PSEN外部程序存储器读选通信号在读外部ROM时PSEN有效(低电平),以实现外部ROM单元的读操作。
④EA访问程序存储器控制信号当EA信号为低电平时,对ROM的读操作限定在外部程序存储器;而当 EA信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。
⑤RST复位信号当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。
⑥XTAL1和XTAL2 外接晶体引线端当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
⑦Vss地线Vcc +5V电源(2)常见的第二功能信号①P3口线的第二功能P3的8条口线都定义有第二功能如表2-1所示表2-1 端口第二功能(3)EPROM存储器程序固化所需要的信号有内部EPROM的单片机芯片(例如80C51),为写入程序需提供专门的编程脉冲和编程电源,它们也是由信号引脚以第二功能的形式提供的,即:编程脉冲:30脚(ALE/ PROG)编程电压(25V):31脚(EA/Vpp)2.2.2 液晶屏的选择采用320*240LCD,根据CPU的指令进行输出。
320*240的分辨率对于小游戏来讲已经是非常高的分辨率了,足以满足小游戏的显示要求,使图像清晰,色彩丰富!红外的选择采用38K的红外遥控和接收,红外遥控的特点是不影响周边环境、不干扰其它电器设备。
由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。
三具体设计3.1软硬件基本分工硬件:主要实现红外的发射与接收,单片机最小系统使红外接受管工作及实现彩屏的输出;软件:实现红外的解码,实现按键映射到游戏屏幕的动作,实现游戏规则的判定等等。
3.2硬件设计部分3.2.1电源部分电源部分由手机充电器直接提供,大概是5V/500MA,刚好是单片机需要的电源。
3.2.2 复位电路上电复位采用电平方式开关复位。
如图3-4所示。
上电复位用RC电路,电容用10uF,电阻用10K。
如图3-4 复位电路3.2.3液晶显示芯片与单片机接口电路液晶显示屏共有15个引脚,其中VDD接电源,GND接地,RS接单片机的P0.0脚,RW接单片机的P0.1脚,复位接P0.4脚,RD接P0.2脚,CS接P0.3脚,D0~D7数据段接口接P2.0~P2.7。
如图3-2.3所示图3-2.3液晶显示与单片机相连电路图3.2.4 K38与单片机接口电路图3-6 K38与单片机接口电路本游戏共有4个控键,分别是:四个方向键,用于控制小点的移动方向;分别是上下左右四个方向程序通过中断的方式检查是否有按键按下,调用移动函数。
每次有按键按下,小点会做出相应的反应。
3.3 软件部分设计3.3.1软件部分主要负责a红外解码,b将按键输入通过算法映射为小蛇在屏幕上的动作、c生成随机数(既小蛇的食物),d判定是否吃到食物/是否过关/是否结束游戏等等;1.红外编码方式本实验红外采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,(如下图所示)本红外每次发送的数据格式为引导码+8位系统码+8位系统反码+8位数据码+8位数据反码,周期约为108ms。
其中引导码由9ms低电平和4.5ms的高电平组成。
(如下图所示)如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码(2.25ms)组成。
(如下图所示)2.软件解码基于红外的编码方式我们的软件解码思路为,用红外的引导码的脉冲负边沿触发单片机的外部中断,进入中断,在中断中完成解码,并转换得到按键的具体的按键值。
具体实现步骤:a.外部触发进入中断,延时约2ms,若仍是低电平则确认为信号出现,进入下一步,否则跳出中断,等待下一次触发;b. 等待9MS的低电平后再等待经过4.5MS的高电平(此时引导码已结束);c.收集四组数据存入数组IRCOM[j]中(其中IRCOM[0]为系统码,IRCOM[1]为系统反码,IRCOM[2]数据码,IRCOM[3]为数据反码);d. 判定数据是0还是1。
我们采用的是在每位数据的高电平期间在适当的延时下让N自加(由红外编码方式知0与1的区别在于高电平的时长不一样,1的高电平比0的长),然后判定N的值可知数据为0或1,我们预设当N<8时数据为0,当8<=N<=30时数据为1,当N>30时为无效数据,跳出中断等待下一次触发;e. 小循环8次得到一组数据;f. 大循环4次得到4组数据;g. 数据码存在IRCOM[2]中,所以判定IRCOM[2]的值就知道按键按的是哪个了。
(上0X18,下0X5A,左0X08,右0X52)。
遥控器按键上下左右按键码0X18 0X5A 0X08 0X52附加具体代码:void IR_IN(void) interrupt 0 //外部中断服务程序unsigned char j,k;unsigned int N=0;EX0 = 0;delay_14(15);if (IRIN==1){EX0 =1;return;}//确认IR信号出现while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay_14(1);}for (j=0;j<4;j++) //收集四组数据{for (k=0;k<8;k++) //每组数据有8位{while (IRIN) //等IR 变为低电平,跳过4.5ms的前导高电平信号。
{delay_14(1);}while (!IRIN) //等IR 变为高电平{delay_14(1);}while (IRIN) //计算IR高电平时长,得到数据是0或1{delay_14(1);N++;if (N>=30){EX0=1;return;} //0.14ms计数过长自动离开。