#include <reg52.h>//   点阵寄存器定义
sbit LOAD = P1 ^ 0;
sbit CLK = P1 ^ 1;
sbit DATA = P1 ^ 2;sbit mKey4 = P3 ^ 4;
sbit mKey5 = P3 ^ 5;
sbit mKey6 = P3 ^ 6;
sbit mKey7 = P3 ^ 7;
//  数码管寄存器定义
sbit DLE = P2 ^ 6;
sbit WLE = P2 ^ 7;unsigned long timeNumber = 0;unsigned char digits[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f };void digitInit() {P0 = 0x00;DLE = 1;DLE = 0;P0 = 0xff;WLE = 1;WLE = 0;
}void showNumber(unsigned long number) {unsigned char dTem;if(number == 0) {P0 = digits[0];DLE = 1;DLE = 0;P0 = ~0x20;WLE = 1;WLE = 0;}else {for (dTem = 0x20; (dTem != 0) && (number != 0); dTem >>= 1) {P0 = digits[number % 10];DLE = 1;DLE = 0;P0 = ~dTem;WLE = 1;WLE = 0;number /= 10;}}
}void showDigit(unsigned char digit, unsigned char position) {P0 = digits[digit];DLE = 1;DLE = 0;P0 = ~(0x01 << position);WLE = 1;WLE = 0;
}// 将数据写入点阵中一行
#define LATTICE_LINE_WRITE(DATA, LINE)  latticeWriteData(~(DATA), 0x0001 << (LINE))
//  将数据写入点阵中一列
#define LATTICE_LIST_WRITE(DATA, LIST)  latticeWriteData(~(0x0001 << (LIST)), DATA)/*
功能  :将数据写入点阵寄存器
参数  :<unsigned int>列寄存器<unsigned int>行寄存器
返回值 :<void>
详细信息:列寄存器将被先写入,行寄存器随后
*/
void latticeWriteData(unsigned int lineData, unsigned int listData) {unsigned char i;for (i = 0; i < 16; i++) {DATA = lineData & 0x8000;lineData <<= 1;CLK = 1;CLK = 0;}for (i = 0; i < 16; i++) {DATA = listData & 0x8000;listData <<= 1;CLK = 1;CLK = 0;}LOAD = 1;LOAD = 0;
}unsigned int temFunction(char tData[16]) {unsigned int result = 0;char i;for(i = 15; i >= 0; i--) {result <<= 1;result |= (tData[i] > 0) | (tData[i] == -1);}return result;
}/*
功能  :主函数
参数  :<void>
返回值 :<void>
*/
void main() {xdata char map[16][16] = { 0 };unsigned char direction = 1, x = 0, y = 0, length = 3, i, j;unsigned long systemCD = 0, keyCD = 0, foolCD = 0;TMOD = 0x01;TH0 = (65535 - 10000) / 256;TL0 = (65535 - 10000) % 256;EA = 1;ET0 = 1;TR0 = 1;P0 = P1 = P2 = 0;P3 = 0xff;map[x][y] = length;while (1) {if(timeNumber - systemCD >= 40 - length) {switch(direction) {case 0:if(x == 0)x = 15;else x--;break;case 1:if(x == 15)x = 0;else x++;break;case 2:if(y == 0)y = 15;else y--;break;case 3:if(y == 15)y = 0;else y++;break;}if(map[x][y] > 0) break;else if(map[x][y] == -1) {length++;}else {for(i = 0; i < 16; i++) {for(j = 0; j < 16; j++) {if(map[i][j] > 0)map[i][j]--;}}}map[x][y] = length;systemCD = timeNumber;}if(timeNumber - foolCD >= 1000) {map[(timeNumber - systemCD) % 16][(timeNumber - keyCD) % 16] = -1;foolCD = timeNumber;}if(timeNumber - keyCD >= 25) {if((P3 & 0xf0) != 0xf0) {if(mKey4 == 0)direction = 0;else if(mKey5 == 0)direction = 1;else if(mKey6 == 0)direction = 2;else if(mKey7 == 0)direction = 3;keyCD = timeNumber;}}for(i = 0; i < 16; i++) {LATTICE_LINE_WRITE(temFunction(map[i]), i);}showNumber((1000 - timeNumber % 1000)/100);}
}void allInit() {digitInit();latticeInit();
}void T0_Time() interrupt 1 {TH0 = (65535 - 10000) / 256;TL0 = (65535 - 10000) % 256;timeNumber++;
}

基于51单片机的贪吃蛇小游戏相关推荐

  1. 基于51单片机的贪吃蛇小游戏8X8点阵 proteus仿真原理图程序

    硬件设计 基于C51作为MCU 一块8X8点阵作为游戏的显示器 四个按键作为操控按键 仿真图: 程序设计 #include <at89x51.h> #include "18b20 ...

  2. 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy

    ** 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy ** 一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考! 代码如下: 先放段主函数压压惊 v ...

  3. 基于51单片机的贪吃蛇游戏设计

    1绪 论 1.1本课题研究的背景及意义 随着当今社会的发展,人们的生活节奏变得越来越快,人们开始逐渐的融入全球化的世界.人们已经不再局限于一小块天地,加班,出差已经占据了现代人生活的绝大部分.这个时候 ...

  4. html5小游戏源码_[源码和报告分享]基于HTML5实现的贪吃蛇小游戏

    1 游戏介绍 贪吃蛇的经典玩法有两种: 积分闯关 一吃到底 第一种是笔者小时候在掌上游戏机最先体验到的(不小心暴露了年龄),具体玩法是蛇吃完一定数量的食物后就通关,通关后速度会加快:第二种是诺基亚在1 ...

  5. 基于STM32的贪吃蛇小游戏

    基于STM32的贪吃蛇小游戏 初学32一个月,学的并不多,便想着做一个贪吃蛇小游戏,因为有51单片机做贪吃蛇的经验,所以实现出来并不困难. 作品简介 游戏面版将在4.3寸480*800)液晶上显示,初 ...

  6. 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)

    简介:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏.项目源码地址:点击下载. 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯), ...

  7. 基于C语言Ncurse库和链表的简单贪吃蛇小游戏

    参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...

  8. 基于Stm32f407 的贪吃蛇小游戏【正点原子-探索者开发板】

    基于单片机stm32f407的单机小游戏----贪吃蛇小游戏 1.介绍 这是我花一个星期完成的一个简单地单机贪吃蛇小游戏项目,芯片是stm32f407,项目是基于正点原子-探索者开发板完成的,有需要的 ...

  9. STM32F407基于陀螺仪的贪吃蛇小游戏(全网最详细)

    一.前言 本次设计我用MPU6050在KEIL 5的环境下改进了贪吃蛇小游戏,用的开发板是STM32F407,本次设计综合利用多种ARM外设接口实现对外部设备信息的采集.处理及显示,实现了贪吃蛇游戏实 ...

最新文章

  1. ScrollView分栏视图分析
  2. 创建SM30表维护时权限组NC是什么用途?
  3. escape mysql_MySQL中ESCAPE关键字的用法详解
  4. iphone7配置_西安苹果售后维修教您iphone7发热严重、耗电快怎么解决?
  5. python求偏度系数_用 Python 讲解偏度和峰度
  6. 前端学习(574):margin无效情形之绝对定位下的非定义的方向“无效”
  7. mybatis学习(42):mybatis的一级缓存
  8. Dreamweaver中如何格式化代码
  9. ajax优缺点及原理,Ajax实例解析,异步机制以及优缺点
  10. Yearn核心开发者:YFI铸币提案几乎准备就绪
  11. 阿里的Json解析包FastJson使用
  12. [ecshop调试]ecshop 数据库查询缓存详解 有三种缓存,query_cache(数据库查询缓存)、static_cache(静态缓存)和cache(普通的缓存)
  13. ASO新手快速入门教程
  14. STL初步——集合Set
  15. 解决问题就是有成就感
  16. 锻炼编程能力的10个游戏:通关既巅峰
  17. js操作数组前面插入,后面插入
  18. 怎么汇总多张表格数据
  19. MyEclipse下的Project有红色感叹号
  20. oa系统服务器ip地址,oa服务器的ip地址

热门文章

  1. 学习日志-勉励自己-自律
  2. hp1020打印机驱动下载地址
  3. Qt编写地图综合应用55-海量点位标注
  4. uni-app学习笔记(1):模板语法
  5. Ubuntu搭建FTP服务器后用filezella连接报错
  6. 刘彬20000词汇05
  7. 辐射避难所ol服务器维护,辐射避难所Online8月3日更新内容 育普雷斯顿up卡池
  8. xm-select的简单使用
  9. 扬帆际海:shopee店铺关键词广告怎么获得流量?
  10. java系统爬塔游戏,如何玩爬塔游戏?一目了然,每天只需2分钟