先说下我这个东西最主要的几块。
1.单片机用的是stc的,51内核,你首先要会这个···
2.用状态机实现按键。这个里面有别人写的技术帖子··
3.液晶是12864,2种控制器都做过,一个控制器是ST7920带字库的,一个控制器是KS0108不带字库的。2个的英文资料我都放在里面了。首先得弄懂液晶要怎么样和单片机连接。
要在液晶上面做游戏,推荐先看英文资料,一定要看英文,研究液晶读写时序和初始化方法,然后找别人的程序,实现液晶的基本操作,画点,写汉字什么的,读液晶···然后自己写程序实现液晶的所有基本操作。这样才能对液晶有充分的认识,才能开始在上面做游戏。有了这个基础,以后学别的液晶也会快的多。
4.菜单,游戏少不了要用到菜单,比如选择难度,选择地图什么的。我里面放了一个别人的论文,看了之后应该就会自己写了。(注意论文里面讲的是用函数指针实现菜单,但是KEIL这个环境下用51函数指针会很困难,推荐像我那样直接传菜单号)
5.贪吃蛇游戏,推荐先不要看别人的程序,自己在电脑上面下个贪吃蛇游戏,玩的时候就观察贪吃蛇游戏的特征···比如蛇在怎么动,蛇要怎么描述,是每个点都描述还是只要蛇头蛇尾···蛇转弯的时候怎么写? 对于上面的问题,可以参考别人的程序,然后就开始动手画图什么的表示出来这些过程,一个功能一个功能逐一实现。(推荐看带字库的那个程序,那个程序代码是最终优化版本。思路很清晰···)
6.液晶的动画,动画实际上就是图片一张一张的显示,我在里面放了一个把彩色照片黑白二值化的工具,可以找到自己喜欢的GIF动画,用提取工具把照片一张一张提取出来,然后黑白二值化,然后取模工具取模,然后实现···虽然过程蛮枯燥,但是效果还不过,也可以学到不少东西。
单片机源程序如下:
#include <12864.h>
#include #define num 15 //用来描述蛇在液晶上面一个点的结构体 struct she { unsigned char x,y,value; unsigned char direction; }; struct loop_queue //利用循环数组实现循环队列,拐点不会超过15个。所以大小选15足以。 { unsigned int front; unsigned int rear; unsigned int count; struct she dat[num]; }; //不熟悉数组实现循环队列的可以在纸上画一下操作过程 struct she tou,wei,food; //蛇的头尾节点 和食物点 struct loop_queue queue;//循环队列 蛇转弯则形成拐点 将拐点入队列 尾巴到达拐点则拐点出队列 unsigned char flag_exit_game; //返回标志 为1时 从贪吃蛇游戏返回菜单 unsigned char flag_game_over; //结束标志 为1时 显示游戏结束画面 同时使返回标志为1 unsigned char tcs_stop;//暂停标志 unsigned char tcs_nd; //难度标志 unsigned char tcs_dt; //地图标志 unsigned char tcs_key_flag; //贪吃蛇在一次移动中 只允许捕获一次按键 也就是只能产生一个拐点 unsigned char tcs_key_state; //用于按键状态机的实现 unsigned int tcs_df;//得分 unsigned int tcs_highest_df;//最高得分···没有使用这个 因为不知道要怎么在运行时写单片机的ROM void tcs_game(); void tcs_bianjie(unsigned int ); //贪吃蛇边界 void tcs_game_initial(); //游戏初始化 void timer0_initial(); //定时器0初始化 void timer1_initial(); void food_produce(); //产生食物 unsigned char test_point_exist(unsigned char x, unsigned char y, unsigned char value); void queue_initial(struct loop_queue *q); void queue_in(struct loop_queue *q,struct she h) ; struct she queue_out(struct loop_queue *q) ; void wei_you(); void wei_xia(); void wei_zuo(); void wei_shang(); void tcs_game() { struct she check; //用与暂存蛇即将移动的点 从而进行判断 unsigned char he; unsigned char hui,i; flag_exit_game=0; flag_game_over=0; tcs_key_state=0; tcs_df=0; tcs_stop=1; draw_lcd_picture(&tcs_picture[0]); //贪吃蛇游戏画面 delay_ms(2000); clear_lcd();//清屏12864 tcs_bianjie(tcs_dt); //贪吃蛇游戏边界 tcs_game_initial();//贪吃蛇初始化 主要是设定蛇头蛇尾 并显示蛇 timer0_initial(); //定时器0工作在方式2 8位自动装初值 只计数不中断 用来产生随机数 timer1_initial(); //定时器1工作在方式1 16位 10ms中断一次扫描键盘 do { food_produce();//产生一个随机数 即随即产生x y value3个值确定一个点为食物 he=test_point_exist(food.x,food.y,food.value);//检测产生的点的地方是否已经有点存在 } while(he==food.value);//如果随机数产生在蛇的身体以及边界上 则重新再产生一个 draw_lcd_point(food.x,food.y,food.value);//显示食物 先读取这个点所在8位的情况 以免破坏现场 queue_initial(&queue);//初始化循环队列 使队列空 front rear 即头尾指针为0 check.x=0; check.y=0; check.value=0; check.direction=0; for(i=0;i while(1) { if(flag_exit_game==1)//如果游戏过程中按下返回键 则立即结束游戏 返回菜单 break; if(flag_game_over==1) break; ET1=1; //允许扫描按键 贪吃蛇游戏难度决定蛇2次移动之间的间隔时间 也就是检测按键的时间 tcs_key_flag=0; //允许捕获按键 在检测按键时间内 只允许生产一个拐点 即捕获到一个有效的 //按键以后 就置一这个变量 不允许再增加拐点 while(tcs_stop==0); switch(tcs_nd) { case 0: {delay_ms(10); break;} case 1: {delay_ms(50); break;} case 2: {delay_ms(100); break;} } ET1=0; switch(tou.direction)//这个switch用来根据蛇头的x y value值以及当前蛇头移动的方向 //取出蛇头要到达的下一个点 存入check中 来判断是否撞墙 吃到食物 什么的··· { case 0: { check.x=tou.x; if(tou.y==63) check.y=0; else check.y=tou.y+1; check.value=tou.value; break ; }//->向右y+1 其他不变 case 1: { //↓ 向下y不变 check.y=tou.y; if(tou.value==0x80)// value==0x80 则 x+1 value=0x01 { if(tou.x==7) check.x=0; else check.x=tou.x+1; check.value=0x01; }
上一篇:两路电机驱动 H桥L9110
下一篇:单片机非接触式智能测温系统程序
推荐阅读
史海拾趣
随着市场需求的不断增长和公司业务的不断拓展,智烽维在2021年进行了工厂的扩建。扩建后的工厂不仅提升了产能和效率,也进一步提高了产品的质量和可靠性。此外,公司还加强了与上下游企业的合作和资源整合,形成了更加完善的产业链和供应链体系。这一举措不仅为公司的未来发展提供了强有力的支撑,也为公司在电子行业中的竞争地位奠定了坚实的基础。
背景:在光伏胶膜领域取得成功后,福斯特开始寻求多元化发展。
发展:公司依托在光伏材料领域的技术积累和市场优势,逐步向电子电路、锂电等新材料领域拓展。同时,公司还成立了新材料研究院,专注于新材料的研发和创新。
成果:目前,福斯特在电子电路、锂电等领域也取得了显著成绩,为公司带来了新的增长点。
随着全球电子制造产业的不断发展,Euroquartz也积极拓展国际市场。公司凭借其高品质的产品和专业的技术服务,赢得了全球客户的信赖和支持。如今,Euroquartz的产品已经覆盖全球90多个国家和地区,为全球电子制造产业提供了重要的石英晶振、振荡器、滤波器以及其它频率相关产品。
面对不断变化的市场环境和客户需求,Euroquartz始终保持敏锐的洞察力和快速的反应能力。公司不断投入研发力量,推动产品创新和技术升级。同时,Euroquartz也注重与客户的沟通和合作,深入了解市场需求,为客户提供更加专业和贴心的服务。这种持续发展的动力,使Euroquartz在电子行业始终保持领先地位,并为公司的未来发展奠定了坚实的基础。
请注意,由于篇幅限制,以上每个故事都是基于Euroquartz公司的重要事件和事实进行概括和简化的。如果需要更详细的信息或更深入的分析,建议查阅相关报道或公司官方资料。
Euroquartz在技术创新方面始终保持领先地位。公司推出的新款超薄MEMS滤波器系列产品,就是其技术实力的最好体现。这些滤波器在制造过程中,对互调失真及相位和振幅匹配等特性进行了优化,提供了从音频到3GHz的宽泛可选频率范围,最大功率可达200W。这些创新产品不仅满足了市场的需求,也进一步巩固了Euroquartz在电子元器件行业的领先地位。
Euroquartz Limited成立于1982年,其发展历程中,1987年的一次收购具有重要意义。这一年,Euroquartz收购了Brookes Crystals,这是一家在第二次世界大战期间形成的英国石英晶体制造商。这一收购使Euroquartz在石英晶体领域获得了重要的技术积累和市场地位,成为了英国重要的变频控制产品制造商。
一般地,单片机开发采用“宿主机/目标机”方式(如图1所示)。首先,利用宿主机上丰富的资源及良好的开发环境开发和仿真调试目标机上的软件。然后,通过串行口将编译生成的目标代码传输下载到目标板上,并用交叉调试器在调试软件支持下进行实时分析 ...… 查看全部问答∨ |
|
hf44b0板子的ADC测试代码部分以及LCD的理解,望高手指点迷津,小生不胜感激! 一、硬件简介 板子:恒丰s3c44b0x;lcd:HF160160-34D57(非触摸屏);ADC:8通道10位,芯片s3c44b0x内置 二、问题1 LCD手册中出现了4个我认为很奇怪的引脚,如下: 引脚13 :TP-L 触摸屏左端子 ;引脚14: TP-U 触摸屏上端子 ;引脚15: TP-R ...… 查看全部问答∨ |
|
软件开发与软件工程联盟群成员列表 本帖被 supersoft 从 软件开发与软件工程社区管理版块 移动到本区(2007-03-08) 联盟群宗旨:建设合谐型软件开发与工程的社区-程序员的社区 社区主页:http://supersoft.ttsite.com 计算机专业书讯交流(计算机 ...… 查看全部问答∨ |
|
小弟经常用笔记本连接台式机,现在想用远程桌面连接台式机上的quartusII 72sp3软件,发现license不允许,上网搜索后,发现有人说可以通过修改license,添加TS_OK一项,可没有给出具体参数,求教各位大侠解决方法。ps:网上说8.1版本有那种允许远程 ...… 查看全部问答∨ |
本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 我们的数字电话线需要转模拟信号接到模拟电话机上 ,请问大家:有没有这样的转换器? … 查看全部问答∨ |
本帖最后由 ddllxxrr 于 2016-1-7 17:10 编辑 出FPGA 核心板1 块 主芯片:EP2C8Q208C8N,64MBit FLSAH ,64Mbit SDRAM ,EPCS4 配置芯片, 150元 USB Blasterr 一个 50元, 扩展板一块 50元, 5V/2A电源适配器一个 10元, 《 ...… 查看全部问答∨ |
Flash程序段少数字节被随机篡改? 使用的是2232,程序烧写后开始可以正常运行,一段时间后发现程序已不能正常运行,读取Flash才发现程序段某几个字节被随机篡改了,好几片2232如此,由于电源段不稳,可能存在反复上电的情况,程序刚开始的时候也会 ...… 查看全部问答∨ |