基于51单片机的小游戏
基于51单片机的遥控赛车设计

case(0x09):xc=0x40;;break; case(0x16):xc=0x02;break; case(0x0d):xc=0x08;;break; case(0x08):xc=0x11;break; case(0x5a):xc=0x44;break; case(0x42):xc=0x22;break; case(0x4a):xc=0x88;;break; default:break; } } delay(100); }
二、设计组成
1.硬件部分
赛车车轮及底盘、L289N 模块(两个)、51 单片机开发板、红外遥控器、导线若干、螺杆 螺母若干、南孚电池 4 节、充电宝一个。
赛车底盘
红外遥控
L289N 模块
51 单片机开发板
2、程序设计(基于 STM89C51 的程序设计)
开关:指示灯亮,小车停止运动 暂停:指示灯灭,小车停止运动 半前进: 前轮向前,后轮不动 半后退: 后轮向后,前轮不动
{
delay(1);
err--;
}
for(k=0;k<4;k++)
//共有 4 组数据
{
for(j=0;j<8;j++) //接收一组数据
{
err=60;
while((IRIN==0)&&(err>0))//等待信号前面的 560us 低电平过去
{
delay(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //计算高电平的时间长度。
按键
数据码
开关
45H
Mode
46H
创新周 小游戏打地鼠报告

摘要单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
本课设是打地鼠游戏机的设计其主要功能是以按键和LED发光二级管相互配合,当有对应的LED点亮的时候,立即按下对应的按键即可,并得到相应的分数。
可分为5个模块如下:单片机控制模块,矩阵键盘模块,发光二极管阵列模块,LED数码管以及蜂鸣器发音模块组成。
当按下电源开关可以开始游戏,在打地鼠阵列中,会有地鼠(发光二级管亮)随机出现,当按下对应的按钮时,表示击打成功,分数加一,同时蜂鸣器发音提示,游戏结束时,可以通过观察四位数码管来看此次游戏所得的分数。
关键词:单片机、键盘矩阵、打地鼠、LED四位数码管、随机显示目录1 引言 .................................................................................................... 错误!未定义书签。
2 设计总体方案 ...................................................................................... 错误!未定义书签。
2.1 设计要求 .................................................................................... 错误!未定义书签。
2.2 设计思路 .................................................................................... 错误!未定义书签。
2.3 设计方案 .................................................................................... 错误!未定义书签。
基于51单片机的四驱无线遥控小车(附电路图,源代码)

基于51单片机的四驱无线遥控小车(附电路图,源代码)遥控小车大家都玩过,网上也有各种DIY小车的制作详解,本文介绍的这个遥控小车和其他的作品大同小异,但作为单片机设计,这次设计主要强调单片机控制,就是说,这个小车是由单片机控制的,把单片机按键发送程序、无线模块使用、电机驱动是本教程的核心内容。
一硬件组装1 小车运动部分所需工件:直流电机4个,L293D电机驱动模块,蓄电池一块,车身底盘说明:车身底盘大家根据自己的购买力自行购买,蓄电池也是,至于L293D模块,淘宝上卖的比较贵,不过我用的就是成品模块,效果非常好,钱不多的同学可以自己买芯片,自制模块,原理很简单,官方资料是很详细的;或者改为继电器控制都可以,具体看自己的实际购买力。
用模块的好处是,模块可以输出5V 电源给系统供电,详细请参考淘宝网。
如果你买的是现成的底盘,那就和我的一样了,组装实在是没啥可说的,把电机固定上去就是,不行?别开玩笑了,小学生都会的!至于想自己做底盘的,我想说,要搞结实点,咱这次的小车马力是很足的,因为有电机驱动,速度比较快(不带减速齿轮的底盘一定要小心,速度非常的快),后劲也足,不小心撞墙很正常,所以不好的底盘就得小心了!组装好后,就是电机和驱动模块的接线了,下面我就详细的说一下L293D模块的使用:L293D是专门的电机驱动芯片,工作电压5V,驱动电压输入可达36V,输出电流正负600ma,4个控制端,4个输出端,原理如图:其中A为输出控制端,Y为输出控制端,1A即控制1Y,以此类推。
1,2EN 3,4EN需要短接,芯片最大工作电压不得超过7V。
封装图:Vcc1接工作电压,5V,Vcc2接电机的驱动电源,一般来说,这个电压要比5V 高,我用的是12V蓄电池,就把12v的正极接到VCC2,要记住的是,芯片、单片机、蓄电池电源是需要共地的,不要觉得你电机是12V,单片机控制部分是5V就把电源完全独立开来,正极是完全独立的没错,但是GND(负极)都必须是接在一起的。
51单片机写的项目

51单片机写的项目
7. 电子门锁:使用51单片机和密码输入模块,设计一个电子门锁系统,可以通过输入正 确的密码来开启门锁。
8. 智能灌溉系统:利用51单片机和湿度传感器,设计一个智能灌溉系统,可以根据土壤 湿度自动控制灌溉设备的开关。
51单片机写的项目
51单片机是一种经典的单片机型号,广泛应用于嵌入式系统和电子设备中。以下是一些 常见的基于51单片机的项目示例:
1. 温度监测系统:使用51单片机和温度传感器,设计一个温度监测系统,可以实时监测 环境温度,并将数据显示在液晶显示屏上。
2. 电子琴:利用51单片机的IO口和蜂鸣器,设计一个简单的电子琴,可以发出不同音调 的声音,通过按键控制。
3. 智能家居控制系统:使用51单片机和各种传感器,设计一个智能家居控制系统,可以 实现对家居设备(如灯光、窗帘、空调等)的远程控制和自动化控制。
51单片机写的项目
4. 智能车辆:利用51单片机和各种传感器(如外线传感器、超声波传感器等),设计 一个智能车辆,可以实现避障、跟随等功能。
5. 电子时钟:使用51单片机和数码管,设计一个电子时钟,可以显示当前的时间,并具 备闹钟功能。
这些项目只是一些常见的示例,基于51单片机的项目种类繁多,可以根据实际需求和兴 趣进行创新和扩展。
基于51单片机的贪食蛇游戏机开发-精品

第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';}然后,我们可以编写一个函数来更新蛇的位置。
毕业设计(论文)-基于单片机的俄罗斯方块游戏[管理资料]
![毕业设计(论文)-基于单片机的俄罗斯方块游戏[管理资料]](https://img.taocdn.com/s3/m/be6bf68931b765ce0408146f.png)
基于单片机实现的俄罗斯方块游戏MCU based Russia block game摘要本设计是通过AT89S52单片机来实现俄罗斯方块游戏的设计,使用C语言进行编程,并通过Proteus来进行仿真。
本设计要实现的基本功能是:应用按键来控制方块的变换与移动;消除一行并计分;消除多行额外奖励记分,方块堆满时结束游戏等俄罗斯方块的基本功能。
单片机在手持娱乐设备上的应用具有非常大的潜力,它能将其带入到一个新的阶段。
为了解决外部电路图,必须充分了解所用液晶的显示方法和单片机的外部接口功能,和所需要处理的逻辑关系;还要理解LCD液晶的控制原理,来通过数据端口和控制端口来实现画面在液晶上面的显示。
程序则要求对外部电路了解的情况下完成自己所需要的功能,并将所要完成的功能用编程语言的形式来实现。
然后通过Protues仿真实现通过外部按键来控制各种不同图形的方块来玩游戏,并且实现记录分数和通过过关数来改变方块下降的速度。
最后将程序下载至AT89S52单片机并进行实际运行,实际运行表明,本设计可以实现基本的游戏功能,达到预期的目的。
关键词:AT89S52;C语言;Proteus仿真;LCD液晶ABSTRACTThis design is achieved through the AT89S52 microcontroller Tetris game design, programming using C language, and carried out by proteus simulation.The design to achieve the basic functions are: application buttons to control the box, change and movement; eliminate line and scoring; eliminate multi-line incentive points, the game ends when the box filled with basic functions such as Tetris. MCU in the application of handheld entertainment devices have great potential, it can be brought to a new stage. In order to solve the external circuit, we must fully understand the liquid crystal display method and external interface MCU features, and the need to address the logical relationship; also understand that the principle of LCD liquid crystal control to a data port and control port to achieve the above the LCD screen display.Program requires knowledge of the external circuit where they need to complete the function and the function to be completed in the form of programming language used to achieve. Simulation then protues buttons to control an external box to play a variety of graphical games, and achieve record number of scores and the relationship had to change the speed of the module down. Finally, the program downloaded to AT89S52 MCU and the actual operation, the actual operation indicate that this design can achieve basic game functions, to achieve the desired purpose.Key Words:AT89S52; C language; Proteus simulation; LCD liquid cryst目录1绪论 (1)课题背景 (1)电子游戏及其分类 (1)电子游戏发展现状 (2)电子游戏国外发展现状 (2)电子游戏国内发展现状 (3)2整体设计方案 (5)系统的核心部分单片机 (5)单片机的选择 (5)AT89S52引脚功能描述 (7)晶振特性 (9)液晶显示模块 (10)液晶显示控制驱动器HD61202的特点 (10)液晶显示控制驱动器HD61202的引脚功能 (10)液晶显示控制驱动器HD61202的指令系统 (11)HD61202的软件设计 (12)JM12864J的电路结构特点 (15)JM12864J的应用 (15)键盘电路 (17)3系统程序的设计 (17)俄罗斯方块驱动流程图 (17)俄罗斯方块所有绘图工作流程图 (18)俄罗斯方块中按下键的流程图 (19)俄罗斯方块所有绘图工作流程图 (20)4系统仿真 (22)PROTUES软件介绍 (22)Keil软件介绍 (22)俄罗斯方块系统PROTUES仿真 (24)5实物的制作与调试 (26)电路的焊接 (26)系统性能测试与功能说明 (27)结论 (28)参考文献 (29)附录1:C语言程序 (29)附录2:电路原理图 (59)附录3:英文资料及中文翻译 (60)致谢 (76)1绪论计算机系统的发展已明显地朝三个方向发展;这三个方向就是:巨型化,单片化,网络化。
贪吃蛇游戏设计

第2期2019年1月No.2January,2019目前,科技的发展,尤其是微电子、计算机软件和应用技术,使人们的日常生活变得丰富多彩。
单片机(单片机)作为微电脑家庭成员,其结构独特、稳定性好、价格低廉,在嵌入式领域得到广泛应用[1-2]。
本文利用计算机上传统的蛇游戏设计,利用Proteus 仿真软件、硬件、8×8点矩阵的单片机、按键和其他硬件平台,C 语言编程,实现了便携式蛇游戏。
1 本游戏基本功能将蛇游戏的8×8点矩阵,系统与MCU C 语言软件设计,系统通过LED 点阵屏幕作为载波显示数据,有4个输入表示4个控制键(上下左右)。
部分系统硬件是AT89C52单片机,8×8点矩阵屏幕,4个键,软件部分用C 语言编写,在keil 环境中运行游戏以及隔墙,在游戏结束时自动重置。
具体要求:(1)4个按钮用来控制蛇的方向,并且设置墙壁。
(2)当蛇碰到墙壁和自己的身体时死亡。
(3)如果蛇死亡了,则表示Game Over ,系统将会自动复位[3]。
2 系统设计方案硬件运用了单片机技术和C 程序设计技术,通过点阵显示屏来显示。
软件采用C 语言编程,方便灵活。
设计蛇的理念和原则:通过点阵屏幕点亮一个点,然后照亮另一个点,形成了“蛇”,为蛇晶格屏幕上选择一个点食物,通过手动按钮蛇,并确定是否抢上。
找到食物,吞下食物,蛇会生长,直到蛇咬它的尾巴或撞到墙上,然后再开始。
系统的结构框图如图1所示,基本结构可以区分为三大部分[4-5]。
3 系统硬件电路设计3.1 单片机最小系统模块单片机的最小系统是一个可以正常工作的系统,它可以有最小的组件和一个单片机。
根据52单片机的要求,最小系统包括单片机、复位电路和晶体振动电路。
单片机接口主要用于PC 机和其他外部设备的连接[6-8]。
复位电路:单片机的复位时间直接受非极性电容C4的影响,容量大小一般为10~30 μF ,设计采用10 μF ,52单片机常见的复位模式为自动复位和按键复位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit P3_0=P3^0;sbit P3_2=P3^2;sbit P3_3=P3^3;
//蜂鸣器位外部中断0外部中断1
sbit P3_7=P3^7;sbit P3_6=P3^6;sbit P3_1=P3^1;//指示灯位
sbit P0_7=P0^7;sbit P0_6=P0^6;sbit P0_5=P0^5;sbit P0_4=P0^4;
while(1)
{wait=0;//游戏已开始,wait置0
if(knock()){pace=SPEED;break;} //判断是否碰撞
/*************显示部分************************/
if(P0_6&P0_4)display(pace); //判断是否速度运动
sbit P2_3=P2^3;sbit P2_2=P2^2;sbit P2_1=P2^1;sbit P2_0=P2^0;
uchar x[SNAKE+1];//蛇身的坐标行
uchar y[SNAKE+1]; //蛇身的坐标列
uchar n,i,pace,xz;//当前蛇长,通用变量,当前速度,选择游戏标志
判断是否碰撞,是则返回1,否则返回0
**************************************************************/
bit knock()
{bit k=0;
if(x[1]>7||y[1]>7)k=1; //撞墙
for(i=2;i<n;i++)
ห้องสมุดไป่ตู้if((x[1]==x[i])&(y[1]==y[i]))k=1; //撞自己
//暂停增关卡,加速减关卡,退出加速
//doruaimifa
sbit P0_2=P0^2;sbit P0_1=P0^1;sbit P0_3=P0^3;sbit P0_0=P0^0;
//左下右上
// saolaxi退出
sbit P2_7=P2^7;sbit P2_6=P2^6;sbit P2_5=P2^5;sbit P2_4=P2^4;
for(i=3;i<SNAKE+1;i++)y[i]=100;//初始化虚拟蛇身
}
do
{x[0]=rand()%8;y[0]=rand()%8;//产生随机果实
again=0;
for(i=1;i<n;i++)//判断是否与蛇身重叠
case 5:if(addx!=1||addy!=-1){addx=-1;addy=1;}break;//左上
case 9:if(addx!=-1||addy!=-1){addx=1;addy=1;}break;//右上
case 6:if(addx!=1||addy!=1){addx=-1;addy=-1;}break;//左下
/*************选关******************************************/
if(~P0_6)//增关卡
{delay10ms(2);//去抖动
if(~P0_6)
{if(++guanqia<=7)//最大到7关
{P3_7=~guanqia_2;P3_6=~guanqia_1;P3_1=~guanqia_0;
P2=~mux(y[i]);P1=~mux(x[i]);//按点依次显示
delay1ms(1);//显示延时1ms
}
}
}
/*****外部中断1,用于切换游戏,xz=0为贪吃蛇,xz=1为电子琴******/
void my_int1(void) interrupt 2
{delay10ms(2); //去抖动
{switch(~P0)
{case 1:addx=0;addy=addy==-1?-1:1;break;//上
case 2:addx=0;addy=addy==1?1:-1; break;//下
case 4:addy=0;addx=addx==1?1:-1; break;//左
case 8:addy=0;addx=addx==-1?-1:1;break;//右
仿真图:
PCB图:
#include <reg52.h>
#include<stdlib.h>
#include"ours.h"
#define uchar unsigned char
#define SNAKE 20 //最长蛇身
#define SPEED 50 //运动速度控制,值越大,则扫描整个蛇
//身的时间越长,即表现为移动速度慢
else display(10);//当P0^4或P0^6被按下时加速运动
if(~P0_5)break;//判断是否退出
/*************判断是否吃东西,及进入下一关**************/
if((y[0]==y[1]+addx)&&(x[0]==x[1]+addy)) //如果吃到
char bdata guanqia;//定义关卡,可谓寻址,便于控制指示灯
sbit guanqia_0=guanqia^0;sbit guanqia_1=guanqia^1;sbit guanqia_2=guanqia^2;
char addx,addy; //移动方向,同直角坐标系,addx为横向,addy为纵向
return k;
}
/**************************************************************
键位处理
**************************************************************/
void key_press()
{n++;//蛇身加1
if(n==SNAKE+1)//如果进入下一关
{n=3;//蛇身长从2开始
pace=pace-MQ; guanqia++;//运动加速,关卡加1
P3_7=~guanqia_2;P3_6=~guanqia_1;P3_1=~guanqia_0;
//将关卡的值用三个指示灯显示出来
for(i=3;i<SNAKE+1;i++)x[i]=100;//初始化虚拟蛇身
*******主程序***************************************
***************************************************************/
void main(void)
{EA=1;//开总中断
EX0=1;//开外部中断0
TCS:while(1)
{/**************初始化游戏**********************/
for(i=3;i<SNAKE+1;i++)x[i]=100;//初始化虚拟蛇身
for(i=3;i<SNAKE+1;i++)y[i]=100;//初始化虚拟蛇身
n=3; //初始蛇身长为n-1
//将其值用发光二极管以二进制的形式显示出来
pace=pace-MQ; //加速
}else --guanqia;
while(~P0_6)display_p(1);
//直到松开按键才跳出,以防连续增加关卡
}
}
if(~P0_5)//减关卡
{delay10ms(2);
if(~P0_5)
{if(--guanqia>=1)
{P3_7=~guanqia_2;P3_6=~guanqia_1;P3_1=~guanqia_0;
pace=pace+MQ;
}else ++guanqia;
while(~P0_5)display_p(1);
}
}
}
/*************贪吃蛇游戏正在运行**************************/
P3_7=~guanqia_2;P3_6=~guanqia_1;P3_1=~guanqia_0;//显示关卡
while(1)//等待选择游戏
{wait=1;//等待选择游戏
if(xz) goto DZQ;//如果xz=1,则进入电子琴
display_p(1);//显示贪吃蛇初始位置
if(~P0_3|~P0_0)break;//如果按上或右键,则开始游
EX1=1;//开外部中断1
/***********************************************************************
*****************贪吃蛇****************************************
************************************************************************/
again=0;
for(i=1;i<n;i++)//判断是否与蛇身重叠
if((x[0]==x[i])&&(y[0]==y[i]))again=1;
}while(again);//若重叠则再次产生
/************等待开始游戏,贪吃蛇开始前可选关****************/
guanqia=1;//第一关
}