本帖最后由 吴鉴鹰. 于 2015-3-9 14:15 编辑
40、吴鉴鹰12864系列(连载)之基于12864的俄罗斯方块游戏的设计详精讲(六)——完整序讲解
当年吴鉴鹰还是很小的时候,有一种掌上游戏机,里面有一款游戏叫做俄罗斯方块,那时的我们只是简单的按照游戏规则进行“堆积木”,而其中的原理却很少有人去思考,毕竟当时的我们都还很年幼。我相信大家一定见识过不同种类的俄罗斯方块吧!
基于单片机课程设计的机会,我们这个小组将使用51单片机和12864的组合,来实现比较简单的俄罗斯方块设计。 此次设计初期是在keil和proteus联合仿真中进行,用C51编程!
游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的游戏都失去兴趣,恐怕世界的末日就要到了。电脑对游戏的贡献有目共睹,现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。
对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在"联众俄罗斯方块"中,更有一些联众网络游戏所独有的魅力――有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。
俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。本文利用单片机进行俄罗斯方块设计,采用C51语言进行编程。
现今国内外的俄罗斯方块游戏设计主要有基于PC机上Windows平台的俄罗斯方块游戏、基于手机平台的智能俄罗斯方块游戏以及基于单片机平台的俄罗斯方块游戏等。
前两种属于高端游机,性能优越,但成本高,而且计算机编程已不是新命题,VB、VC、Delphi版本的俄罗斯方块游戏都有发布[9]。
从学术角度来看,针对俄罗斯方块游戏的开发,国内外也有不少学者展开过研究,比如Niko将进化算法引入到俄罗斯方块中并验证了其有效性,Hoogeboom探讨了俄罗斯方块游戏的构造问题,王宇等针对存在于俄罗斯方块中的两个数学问题提出解决方案,高凌琴探讨游戏功能要求、数据结构、图形旋转、坐标变换等关键技术,胡代弟在SPCE061A单片机实现了俄罗斯方块游戏[10]。
综上,国内外的研究多着重于游戏数学原理的讨论,也有部分文献涉及游戏的具体实现,但多是在Windows操作系统下实现的,在单片机平台下的开发俄罗斯方块游戏鲜少有文献刊载。而单片机由于具有体积小、性能突出、价格低廉等特点,应用领域不断扩大,除了工业控制、智能化仪表、家用电器外,在智能化高档电子玩具产品也大量采用单片机芯片作为核心控制部件。曾经80年代非常流行的掌上游戏机便是单片机在电子玩具中的应用之一,其中的俄罗斯方块游戏现已被我们所熟知。
本文探讨基于8051单片机硬件平台和RTX51 Tiny多任务实时操作系统的俄罗斯方块游戏的设计与实现,将理论与实践相结合。其主要目标是再现经典的俄罗斯方块游戏,并在此基础上实现双人单机对战游戏模式,以丰富产品功能,增强游戏的趣味性。
1 引言
大家都知道!俄罗斯方块游戏是一个古老而著名的益智游戏。它的知名度迎来了无数程序员青睐。旋转算法是该游戏实现的一个关键技术,现有的大多数算法都是以数组为基本数据结构来实现方块的旋转。吴鉴鹰本文探讨了俄罗斯方块的另一种实现方式,即尽量不用或着是少用数组的概念,而是用坐标来取代。并且重点探讨一种算法叫做旋转算法。
2 程序基础
基块是本程序的最基本单位。程序的实现都是通过对基块的操作实现的。基块为一个小正方形,其边长可设为bs(basesize)。而bs 就是本程序的粒度大小。设正方形的中心代表整个方块。设游戏区为一个坐标区,则可通过一个坐标(X,Y)就可以来定位基块,这里的坐标就是基块的中心坐标。由于基块是正方形的,又一般画图函数都是以左上和右下定位图形,所以换算出左上角坐标(X-1/2*bs,Y+1/2*bs)和右下角坐标(X+1/2*bs,Y-1/2*bs)就可以画出基块。因而定义一个接受X,Y 值的函数就可实现基块的定位及绘图。俄罗斯方块的7 类方块都可以由基块组合而成,当然开发更多更具创意的方块也就比较容易了。
下面讨论程序的两个重要概念。定义2.1 绝对坐标系为上文提到的游戏区,坐标原点和XY 轴方向都是固定的。它在整个游戏过程中为基块提供确切的坐标。
定义2.2 相对坐标系。它的引入是为了简化旋转算法的实现。从下文旋转算法可知,只要将该坐标系的原点和XY 轴方向改变,就可实现方块的旋转。故相对坐
标系的坐标原点,XY 轴方向都是可以改变的。该类坐标系原点逻辑原点坐标为O(其在程序中透明),故实现时主要使用它的实际原点坐标(该原点在绝对坐标系中的坐标)。现假设其实际原点坐标为(X,Y),设在该相对坐标系内的一点坐标为(x,y),则该点的绝对坐标为(X+x,Y+y)。
图1 俄罗斯游戏中的7 类方块
首先为了说明的方便将7 类方块编号如图1 所示。
图1
由于5 号方块的旋转只有一种状态,为了提高程序效率,
将其单独分为一类。其余方块另为一类。
现在通过实现俄罗斯方块的移动来看看上述设置
是如何运作的。现假设要移动的方块为田字类型。为其建立一个相对坐标系,设其原点实际坐标为 ,将 , 值及方块的类型传递到一个处理函数。该函数根据坐标原点,方块类型,计算出组成该方块的四个基块的中心坐标,再将该四个坐标分别传递给四个基块处理函数,这样便可画出该类型的方块。现将方块向右移动。就是整个相对坐标系向右移动一个bs 的距离,即原点实际坐标变为(X+1,Y),再按刚才的方法处理就可画出移动后的方块。至于前一个方块,可以通过设置的
NOTXOR 绘图模式,再重绘前一个方块来实现。这样
7 类方块的左移,右移,下移便可简单的实现了。下面
讨论7 类方块的旋转算法。
3 旋转算法的实现
旋转算法是游戏实现的一个关键技术,下面就讨论
俄罗斯方块旋转算法的实现。
五号方块只有一种状态,所以,旋转函数收到5 号
方块时,不需做任何处理就可退出函数。是这7 类中最简单的一种类型。
其他方块的旋转要分三步,第一步,将它们所在的
坐标系逆时针旋转90°,第二步,将坐标原点向右偏移
一定的距离,使整个方块在绝对坐标系里的位置保持不
变。第三步,将旋转后的方块画出后,再将相对坐标原
点移回到原来的位置。
第一步的实现,主要使用坐标旋转公式
xl=cos(angle)*x-sin(angle)*y;yl=cos(angle)*y+sin(angle)
*x;
由于angle=90°,故xl=-y,yl=x。则处理函数将原
坐标的x 轴作为旋转后的y 轴,原坐标的-y 做为旋转后
x 轴坐标。
第二步的实现,先计算出旋转后该方块4 个坐标 分
量的绝对值的最大值减1 作为原坐标向右的偏移量(减
1 是因为坐标原点没有旋转)。这样处理函数通过坐标原点的值和转变后的坐标就可以画出旋转后方块的形状。
第三步,只需将坐标原点向左偏移刚才向右的偏移量即可。
每次旋转都按相同的操作执行,其中第三步的是为了下次旋转作准备。
下面通过旋转1 号方块来验证该算法。
初始状态第一步:坐标系逆时针旋转90°第二步:
将坐标原点向右偏移
第三步,将旋转后的方块画出后,再将相对坐标
原点再移回原来的位置
图2 旋转算法的实现步骤图
当方块处于初始状态时,其相对坐标为(0,0)(, 1,0),
(2,0)(, 0,1),设其原点坐标为(1,1),则绝对坐标为(1,1),
(2,1),(3,1),(1,2)。第一步后,坐标变为(0,0),(0,1),
(0,2)(, -1,0),向右偏移量为2-1=1,原点坐标变为(2,1),
(2,2),(2,3),(1,1),它就是旋转后方块的绝对坐标。
再把这四个坐标分别传递到基块处理函数中,旋转后的
方块就可以画出。最后,将坐标原点变为原来的(1,1),
准备下次的旋转。
以上就是方块的旋转算法。
4 小结
本文讨论了使用坐标的转换来实现俄罗斯方块游戏的重要算法——旋转算法。将俄罗斯方块分解成四个的独立基块,由于基块可用坐标简单的定位,从而可实现
方块的定位。故方块就可用四个坐标来简化。从而方块的旋转就可以通过坐标轴的旋转来实现。
5 完整程序 - /******************************************************
- **作品:LCD12864俄罗斯方块设计
- **申明:转载请标明作品来源 知识产权归作者本人所有!
- ** 这一讲的主要内容: LCD12664液晶显示原理
- ** 功能描述: 对吴鉴鹰俄罗斯方块设计的显示
- ** 输 入:
- ** 液晶:Proteus元件库—AMPIRE128X64(无字库)
- ** 内容:LCD12864俄罗斯方块设计
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- **作者所属单位:鉴鹰电子工作室
- **交流QQ群: 第一群: 332164870 第二群:194314772 联系QQ:1123942529
- **申明:转载请标明作品来源 知识产权归作者吴鉴鹰所有!
- 备注:有什么错误的地方,欢迎各大读者指正
- O(∩_∩)O~
- *******************************************************/
- #include <at89x51.h>
- #include <intrins.h>
- #include<stdlib.h>
- #include<math.h>
- //#include "12864.h"
- //#include "zifu.h"
- #define uchar unsigned char
- #define uint unsigned int //宏义
- #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
- uchar k,direction;
- bit flag;
- bit flag5=0; //flag5是外部中断1的标志位 flag1是步进标志
- uchar p,dengji; //定时次数
- bit flag1=0;
- //systemtime realtime;
- bit first=1;
- sbit LCD_E_OUT=P2^0;
- sbit LCD_RW_OUT=P2^1;
- sbit LCD_RS_OUT=P2^2;
- sbit LCD_CS2_OUT=P2^3;
- sbit LCD_CS1_OUT=P2^4;
- #define LCD_12864_DATA P0
- uchar code Num0[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};/*"0",0*/
- uchar code Num1[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};/*"1",0*/
- uchar code Num2[]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};/*"2",0*/
- uchar code Num3[]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};/*"3",0*/
- uchar code Num4[]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};/*"4",0*/
- uchar code Num5[]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};/*"5",0*/
- uchar code Num6[]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};/*"6",0*/
- uchar code Num7[]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};/*"7",0*/
- uchar code Num8[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};/*"8",0*/
- uchar code Num9[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};/*"9",0*/
- uchar code Game_Over[]=
- {
- 0x00,0x20,0x44,0x08,0x20,0xE0,0x92,0x94,0x10,0x28,0xAE,0x68,0x24,0x04,0x00,0x00,
- 0x00,0x0C,0x03,0x04,0x02,0x19,0x0C,0x03,0x02,0x12,0x22,0x1F,0x01,0x01,0x01,0x00,/*"游",0*/
- 0x00,0x20,0xA0,0x90,0x10,0xF0,0x00,0x40,0x7F,0xC0,0x20,0x24,0x88,0x00,0x00,0x00,
- 0x10,0x08,0x04,0x02,0x01,0x02,0x14,0x10,0x08,0x05,0x06,0x09,0x10,0x20,0x38,0x00,/*"戏",1*/
- 0x00,0x60,0x50,0xCC,0x40,0x30,0x40,0x40,0x40,0xFE,0x20,0x20,0x20,0x20,0x00,0x00,
- 0x00,0x12,0x13,0x0A,0x09,0x05,0x00,0x3A,0x2A,0x25,0x25,0x15,0x1D,0x00,0x00,0x00,/*"结",2*/
- 0x00,0x00,0x00,0x60,0xA8,0xA8,0xA8,0xFF,0x94,0x54,0x70,0x00,0x00,0x00,0x00,0x00,
- 0x10,0x10,0x08,0x08,0x04,0x02,0x01,0x7F,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x00 /*"束",3*/
- };
- uchar code Per_Cal_Li[]=
- {0x00,0x02,0x02,0x02,0x02,0x82,0x7E,0x22,0x22,0x22,0x22,0xF2,0x22,0x02,0x02,0x00,
- 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x60,0x20,0x1F,0x00,0x00,0x00,0x00,/*"万",0*/
- 0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
- 0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,/*"年",1*/
- 0x00,0x00,0xFE,0x02,0x22,0x22,0x22,0x22,0xFA,0x22,0x22,0x22,0xE2,0x02,0x02,0x00,
- 0x40,0x30,0x0F,0x00,0x40,0x20,0x18,0x06,0x01,0x00,0x20,0x60,0x3F,0x00,0x00,0x00};/*"历",2*/
- uchar code Tan[]=
- {
- 0x20,0x20,0x10,0x90,0xA8,0xA4,0xAA,0xB1,0xA2,0xE4,0xA8,0x88,0x10,0x30,0x10,0x00,
- 0x00,0x00,0x80,0x9F,0x40,0x20,0x10,0x0E,0x10,0x20,0x60,0xDF,0x00,0x00,0x00,0x00,/*"贪",0*/
- };
- uchar code Chi[]=
- {
- 0x00,0xFC,0x04,0x04,0xFC,0x20,0x58,0x4F,0x4A,0x48,0x48,0xC8,0x08,0x08,0x08,0x00,
- 0x00,0x0F,0x02,0x02,0x07,0x00,0x30,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x70,0x00/*"吃",1*/
- };
- uchar code Snake[]=
- {
- 0x00,0xF0,0x10,0xFF,0x10,0xF0,0x20,0x18,0xE8,0x09,0x0E,0x0A,0xA8,0x18,0x08,0x00,
- 0x20,0x23,0x21,0x1F,0x11,0x3B,0x10,0x00,0x3F,0x42,0x41,0x41,0x40,0x38,0x00,0x00/*"蛇",2*/
- };
- uchar code RussiaBOX[]=
- {
- 0x40,0x20,0xF8,0x17,0x12,0x14,0xFC,0x12,0x92,0x10,0xFF,0x10,0x12,0xDC,0x90,0x00,
- 0x00,0x00,0x7F,0x00,0x24,0x62,0x3F,0x01,0x20,0x10,0x0B,0x0C,0x33,0x41,0x30,0x00,/*"俄",0*/
- 0x00,0x00,0x7E,0x22,0x22,0x22,0xFE,0xA2,0xA2,0xBE,0xA2,0xA2,0xA2,0xBE,0x00,0x00,
- 0x80,0x88,0x88,0x84,0x42,0x43,0x25,0x28,0x10,0x10,0x08,0x04,0x03,0x00,0x00,0x00,/*"罗",1*/
- 0x04,0x04,0xFF,0x94,0x94,0x94,0xFF,0x04,0x00,0xFE,0x22,0x22,0xE1,0x21,0x20,0x00,
- 0x44,0x24,0x37,0x04,0x04,0x14,0x67,0x44,0x30,0x0F,0x00,0x00,0xFF,0x00,0x00,0x00,/*"斯",2*/
- /*-- 文字: 方 --*/
- /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x08,0x08,0x08,0xF8,0x89,0x8E,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x80,0x40,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x10,0x10,0xFF,0x10,0x10,0x00,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
- 0x08,0x18,0x0F,0x04,0x85,0x41,0x31,0x0D,0x03,0x05,0x09,0x11,0x31,0x61,0x21,0x00
- };
- uchar code Model[]=
- {
- 0x10,0x21,0x20,0x11,0x10,0x21,0x20,0x11,0x10,0x21,0x20,0x11,0x10,0x21,0x20,0x11,
- 0x11,0x12,0x10,0x13,0x01,0x31,0x11,0x21,0x11,0x12,0x10,0x13,0x01,0x31,0x11,0x21,
- 0x01,0x21,0x10,0x11,0x11,0x21,0x10,0x12,0x00,0x20,0x10,0x11,0x01,0x11,0x10,0x12,
- 0x10,0x21,0x20,0x22,0x01,0x21,0x20,0x11,0x11,0x22,0x10,0x12,0x10,0x30,0x20,0x11,
- 0x11,0x20,0x10,0x12,0x00,0x20,0x10,0x21,0x12,0x21,0x20,0x22,0x11,0x31,0x10,0x21,
- 0x11,0x21,0x10,0x22,0x01,0x20,0x10,0x11,0x11,0x21,0x10,0x22,0x01,0x20,0x10,0x11,
- 0x11,0x21,0x20,0x12,0x10,0x31,0x20,0x21,0x11,0x21,0x20,0x12,0x10,0x31,0x20,0x21
- };
- uchar code WJYZZ[]=
- {
- /*-- 文字: 吴 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x80,0x9E,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x9E,0x80,0x00,0x00,0x00,
- 0x84,0x84,0x44,0x44,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x44,0x44,0x84,0x84,0x00,
- /*-- 文字: 鉴 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x3E,0x00,0x80,0xBF,0x40,0x20,0x58,0x87,0x84,0x0C,0x34,0x04,0x00,0x00,
- 0x02,0x42,0x49,0x49,0x5A,0x6A,0x4A,0x7E,0x4A,0x6A,0x5A,0x49,0x49,0x42,0x02,0x00,
- /*-- 文字: 鹰 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0xFE,0x22,0x12,0xFA,0x26,0x12,0xFB,0xAE,0xAA,0xFE,0xAA,0xAA,0x02,0x00,
- 0x40,0x30,0x0F,0x40,0x40,0x5E,0x52,0x53,0x56,0x52,0x1A,0x56,0x90,0x70,0x00,0x00,
- /*-- 文字: 制 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x40,0x50,0x4E,0x48,0x48,0xFF,0x48,0x48,0x48,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00,
- 0x00,0x00,0x3E,0x02,0x02,0xFF,0x12,0x22,0x1E,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,
- /*-- 文字: 作 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x80,0x60,0xF8,0x07,0x40,0x30,0x0F,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0x00,
- 0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
- };
- uchar code WJYJ[]=
- {
- /*-- 文字: 鉴 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x3E,0x00,0x80,0xBF,0x40,0x20,0x58,0x87,0x84,0x0C,0x34,0x04,0x00,0x00,
- 0x02,0x42,0x49,0x49,0x5A,0x6A,0x4A,0x7E,0x4A,0x6A,0x5A,0x49,0x49,0x42,0x02,0x00,
- };
- uchar code WJYY[]=
- {
- /*-- 文字: 鹰 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0xFE,0x22,0x12,0xFA,0x26,0x12,0xFB,0xAE,0xAA,0xFE,0xAA,0xAA,0x02,0x00,
- 0x40,0x30,0x0F,0x40,0x40,0x5E,0x52,0x53,0x56,0x52,0x1A,0x56,0x90,0x70,0x00,0x00,
- };
- uchar code WJYZH[]=
- {
- /*-- 文字: 制 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x40,0x50,0x4E,0x48,0x48,0xFF,0x48,0x48,0x48,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00,
- 0x00,0x00,0x3E,0x02,0x02,0xFF,0x12,0x22,0x1E,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,
- };
- /*uchar code WJYZZ[]=
- {
- /*-- 文字: 作 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- /*0x00,0x80,0x60,0xF8,0x07,0x40,0x30,0x0F,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0x00,
- 0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
- };
- */
- uchar code WWJJYYJ[]=
- {
- /*-- 文字: 鉴 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x3E,0x00,0x80,0xBF,0x40,0x20,0x58,0x87,0x84,0x0C,0x34,0x04,0x00,0x00,
- 0x02,0x42,0x49,0x49,0x5A,0x6A,0x4A,0x7E,0x4A,0x6A,0x5A,0x49,0x49,0x42,0x02,0x00,
- };
- uchar code WWJJYYY[]=
- {
- /*-- 文字: 鹰 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0xFE,0x22,0x12,0xFA,0x26,0x12,0xFB,0xAE,0xAA,0xFE,0xAA,0xAA,0x02,0x00,
- 0x40,0x30,0x0F,0x40,0x40,0x5E,0x52,0x53,0x56,0x52,0x1A,0x56,0x90,0x70,0x00,0x00,
- };
- uchar code WWJJYYD[]=
- {
- /*-- 文字: 电 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
- 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,
- };
- uchar code WWJJYYZ[]=
- {
- /*-- 文字: 子 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- uchar code WWJJYYG[]=
- {
- /*-- 文字: 工 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- };
- uchar code WWJJYYZ1[]=
- {
- /*-- 文字: 作 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x80,0x60,0xF8,0x07,0x40,0x30,0x0F,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0x00,
- 0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
- };
- uchar code WWJJYYS[]=
- {
- /*-- 文字: 室 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x10,0x0C,0x24,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x24,0x14,0x0C,0x00,
- 0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00,
- };
- uchar code WWJJYYW[]=
- {
- /*-- 调入了一幅图像:C:\Users\Administrator\Desktop\624814_225502035_2.bmp --*/
- /*-- 宽度x高度=16x16 --*/
- 0xE0,0x18,0x0C,0x06,0x53,0xE9,0x49,0x01,0x01,0x49,0xE9,0x53,0x06,0x0C,0x38,0xF0,
- 0x0F,0x18,0x30,0x60,0x46,0xCC,0x98,0x98,0x98,0x98,0xCC,0xC6,0x60,0x30,0x18,0x0F,
- };
- uchar code WWJJYYWXTP[]=
- {
- /*-- 调入了一幅图像:C:\Users\Administrator\Desktop\624814_225502035_2.bmp --*/
- /*-- 宽度x高度=16x16 --*/
- 0xF0,0x18,0x0E,0x06,0x43,0xE9,0x49,0x01,0x01,0x49,0xE9,0x43,0x06,0x0C,0x38,0xF0,
- 0x0F,0x18,0x37,0x6F,0x5E,0xDC,0xB8,0xB8,0xB8,0xB8,0xDC,0xDE,0x6F,0x37,0x18,0x0F,
- };
- /******************************************************************
- ** 标题:鉴鹰电子欢乐多啊
- ** 功能:数组
- *****************************************************************/
- uchar code WWJJYYHH[] =
- {
- /*-- 文字: 欢 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x04,0x24,0x44,0x84,0x64,0x9C,0x40,0x30,0x0F,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
- 0x10,0x08,0x06,0x01,0x82,0x4C,0x20,0x18,0x06,0x01,0x06,0x18,0x20,0x40,0x80,0x00,
- };
- uchar code WWJJYYLE[]=
- {
- /*-- 文字: 乐 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0x80,0x00,0x00,
- 0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00,
- };
- uchar code WWJJYYDUO[]=
- {
- /*-- 文字: 多 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0x00,0x00,0x10,0x10,0x98,0xA4,0x47,0x44,0xA4,0x54,0x0C,0x04,0x00,0x00,0x00,0x00,
- 0x00,0x81,0x89,0x89,0x44,0x44,0x4A,0x31,0x21,0x11,0x09,0x05,0x03,0x00,0x00,0x00,
- };
- uchar code WWJJYYAA[]=
- {
- /*-- 文字: 啊 --*/
- /*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
- 0xFC,0x04,0xFC,0x00,0xFE,0x42,0xBE,0x00,0xF2,0x12,0xF2,0x02,0xFE,0x02,0x00,0x00,
- 0x0F,0x04,0x0F,0x00,0xFF,0x10,0x0F,0x00,0x0F,0x04,0x4F,0x80,0x7F,0x00,0x00,0x00,
- };
- uchar code Start_picture[]={/*-- 调入了一幅图像:C:\Users\Administrator\Desktop\7308055_142022128173_2.bmp --*/
- /*-- 宽度x高度=128x64 --*/
- 0xFF,0x7F,0x7F,0xFF,0xF7,0xC3,0x87,0x07,0x0F,0x1F,0x1F,0x3F,0x7F,0x7F,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0x7F,0x7F,0x3F,0x1F,0x1F,0x0F,0x87,0x87,0xC3,0xE1,0x7F,0x7F,0x7F,0xBF,0xFF,
- 0xFF,0xFF,0xF6,0xF6,0xA4,0xA4,0xA5,0xA1,0x81,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x01,0x03,0x03,0x00,0x03,0x07,0x07,0x0F,0x1F,0x0F,0x0F,0x1F,0x1F,0x3F,0x3F,
- 0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,
- 0x3F,0x1F,0x1F,0x0F,0x0F,0x07,0x0F,0x0F,0x07,0x03,0x01,0x00,0x02,0x01,0x01,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x81,0x81,0xC0,0xD0,0xD4,0xD2,0xD2,0xFB,0xFB,0xFB,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xF0,
- 0xF0,0xE0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0F,0x1F,0x1F,0x3F,
- 0x7F,0x7F,0xFF,0xFF,0xFF,0xCF,0xEF,0xEF,0xC7,0x47,0x07,0x07,0x17,0x07,0x07,0x07,
- 0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x3F,0x1F,0x0F,
- 0x07,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF0,
- 0xF0,0xF8,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFC,0xFC,0xF8,0xF0,0xF0,
- 0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0x80,0xA0,0xE0,0xE0,0xE0,0xE0,0xF0,
- 0xF0,0xF8,0xF8,0xFC,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
- 0xFE,0xFE,0xFE,0xDC,0xDE,0xEC,0x8C,0xEC,0xE6,0x80,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,
- 0xE0,0xE0,0xE0,0xB0,0xD8,0xE0,0x80,0x8E,0xEC,0xDC,0xFE,0xFC,0xFE,0xFE,0xFE,0xFE,
- 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0xFF,0x3F,0x3F,0xFF,0x3F,
- 0x3F,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
- 0xBF,0x3F,0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,
- 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,
- 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x3F,0xBF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0x7F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x98,0xD8,0x9F,0x88,0xA0,0x31,0x24,
- 0xAE,0x88,0xD2,0x96,0x9E,0xBE,0xFF,0xFF,0xFF,0xFF,0x00,0xFB,0xE1,0x20,0x39,0x20,
- 0x40,0x02,0xA0,0x20,0x22,0xA2,0xEE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x76,0x76,0x00,
- 0x00,0x76,0x76,0x76,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xEF,0xEF,0xEF,0xEF,
- 0xEF,0x03,0x01,0xEC,0xEE,0xEE,0xEF,0xEF,0xEF,0xFF,0xFF,0xFF,0xFE,0xF2,0x26,0x06,
- 0x00,0x76,0xF1,0x70,0x06,0x06,0x36,0xF0,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xE3,0x60,
- 0x28,0x2F,0xAF,0x00,0x00,0xEF,0xAF,0x2F,0x6F,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF,0xCD,
- 0x4C,0x6E,0x2C,0x81,0x53,0x03,0x41,0xCC,0x5E,0x1F,0x9F,0xDF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFB,0xFA,0xF8,0xF8,0xFA,0xF8,0xF8,
- 0xFA,0xF8,0xF8,0xFA,0xFB,0xFB,0xFF,0xFF,0xFF,0xF8,0xF8,0xFB,0xFB,0xFA,0xFA,0xFA,
- 0xFA,0xFA,0xFA,0xFA,0xF6,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xF8,
- 0xF8,0xFB,0xFB,0xFB,0xFB,0xFB,0xF9,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,
- 0xFB,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFC,0xFE,0xFF,
- 0xFB,0xFA,0xF9,0xFC,0xFE,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFD,0xFC,0xFC,
- 0xFE,0xFB,0xF3,0xF8,0xF8,0xFF,0xFF,0xFF,0xFE,0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xF3,
- 0xF3,0xFB,0xFB,0xFB,0xF9,0xF8,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- };
- /*******************************************************************************************
- ** 函数名称: void Delay_1ms(uint k)
- ** 功能描述: 精确延时函数,延时kms
- ** 输 入: uint k需要延时的ms数
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void Delay_1ms(uint k)
- {
- k=k*125;
- while(k--);
- }
- /*******************************************************************************************
- ** 函数名称: void Chek_busy_12864(void)
- ** 功能描述: 12864判忙
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void Chek_busy_12864(void)
- {
- uchar dat;
- EX0=0;
- LCD_RS_OUT=0; //指令模式
- LCD_RW_OUT=1; //读数据
- do{
- LCD_12864_DATA =0x00; //
- LCD_E_OUT=1;
- dat=LCD_12864_DATA &0x80;
- LCD_E_OUT=0;
- }while(dat!=0x00);
- EX0=1;
- }
-
- /*******************************************************************************************
- ** 函数名称: void Choice_12864_Screen(uchar i);
- ** 功能描述: 选屏函数
- ** 输 入: uchar i //i是要写的屏.0是左屏,1是右屏,2是双屏;
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void Choice_12864_Screen(uchar i)//i是要写的屏.0是左屏,1是右屏,2是双屏;
- { //此处在硬件上运行时i的电平全部与程序相反;
- switch (i) //此版本为仿真版;
- {
- case 0: LCD_CS1_OUT=0;LCD_CS2_OUT=1;break; //比如此处如果要在电路上运行则应该改为CS=1;LCD_CS2_OUT=0;
- case 1: LCD_CS1_OUT=1;LCD_CS2_OUT=0;break;
- case 2: LCD_CS1_OUT=0;LCD_CS2_OUT=0;break;
- default: break;
- }
- }
- /*******************************************************************************************
- ** 函数名称: void Cmd_Write_12864(uchar cmd) //写命令
- ** 功能描述: //写命令函数
- ** 输 入: uchar cmd 要向液晶屏送入的命令
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.12
- ********************************************************************************************/
- void Cmd_Write_12864(uchar cmd) //写命令
- {
- Chek_busy_12864();
- EX0=0;
- LCD_RS_OUT=0; //指令模式
- LCD_RW_OUT=0; //写模式
- LCD_E_OUT=1;
- LCD_12864_DATA =cmd;
- LCD_E_OUT=0;
- EX0=1;
- }
- /*******************************************************************************************
- ** 函数名称: void Dat_Write_12864(uchar dat)
- ** 功能描述: //写数据函数
- ** 输 入: uchar cmd 要向液晶屏送入的命令
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.12
- ********************************************************************************************/
- void Dat_Write_12864(uchar dat)
- {
- Chek_busy_12864();
- EX0=0;
- LCD_RS_OUT=1;
- LCD_RW_OUT=0;
- LCD_E_OUT=1;
- LCD_12864_DATA =dat;
- LCD_E_OUT=0;
- EX0=1;
- }
- /*******************************************************************************************
- ** 函数名称: void Clear_12864_Screen(void)
- ** 功能描述: 清屏函数
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.12
- ********************************************************************************************/
- void Clear_12864_Screen(void)
- {
- uchar page,row;
- for(page=0xb8;page<0xc0;page++)
- {
- Cmd_Write_12864(page);
- Cmd_Write_12864(0x40);
- for(row=0;row<64;row++)
- {
- Dat_Write_12864(0x00); //对12864所有地址全部写零
- }
- }
- }
- /*******************************************************************************************
- ** 函数名称: void Init_12864_Screen(void)
- ** 功能描述: 12864初始化函数
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.12
- ********************************************************************************************/
- void Init_12864_Screen(void)
- {
- Chek_busy_12864();
- Cmd_Write_12864(0xc0); //从第零行开始显示
- Cmd_Write_12864(0x3f); //LCD显示RAM中的内容
- }
- /****************************************************************************
- ** 函数名称: void Display_8_point(uchar ch,uchar row,uchar page,uchar *adr)
- ** 功能描述: lcd12864的8X16字符的显示
- ** 输 入: uchar ch,uchar row,uchar page,uchar *p(屏数,列数,页数,还有显示的数组首地址)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.11
- ****************************************************************************/
- void Display_8_point(uchar ch,uchar row,uchar page,uchar *adr)
- {
- uchar i;
- Choice_12864_Screen(ch);
- page=page<<1; //程序中采用的位移运算代替乘法运算,这样可以大大降低处理器的负担
- row=row<<3;
- Cmd_Write_12864(row+0x40);
- Cmd_Write_12864(page+0xb8);
- for(i=0;i<8;i++)
- {
- Dat_Write_12864(*(adr+i));
- }
- Cmd_Write_12864(row+0x40);
- Cmd_Write_12864(page+0xb9);
- for(i=8;i<16;i++)
- {
- Dat_Write_12864(*(adr+i));
- }
- }
- /****************************************************************************
- ** 函数名称: void Display_8_point(uchar ch,uchar row,uchar page,uchar *adr)
- ** 功能描述: lcd12864的16X16显示字符的显示
- ** 输 入: uchar ch,uchar row,uchar page,uchar *p(屏数,列数,页数,还有显示的数组首地址)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Display_16_point(uchar ch,uchar row,uchar page,uchar *adr)
- {
- uchar i;
- Choice_12864_Screen(ch);
- page=page<<1;
- row=row<<3;
- Cmd_Write_12864(row+0x40);
- Cmd_Write_12864(page+0xb8);
- for(i=0;i<16;i++)
- {
- Dat_Write_12864(*(adr+i));
- }
- Cmd_Write_12864(row+0x40);
- Cmd_Write_12864(page+0xb9);
- for(i=16;i<32;i++)
- {
- Dat_Write_12864(*(adr+i));
- }
- }
- /****************************************************************************
- ** 函数名称: uchar Lcd_Data_Write(uchar page,uchar arrange) //page页地址.arrange列地址)
- ** 功能描述: lcd12864的数据发送函数
- ** 输 入: //page页地址.arrange列地址)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- uchar Lcd_Data_Write(uchar page,uchar arrange) //page页地址.arrange列地址)
- {
- uchar dat;
- Chek_busy_12864();
- EA=0;
- Cmd_Write_12864(page+0xb8);
- Cmd_Write_12864(arrange+0x40);
- EX0=0;
- LCD_12864_DATA =0xff;
- LCD_RW_OUT=1;
- LCD_RS_OUT=1;
- LCD_E_OUT=1;
- LCD_E_OUT=0; //12864读数据时第二次读才有效,第一次读取的值不采集
- LCD_E_OUT=1;
- dat=LCD_12864_DATA ;
- LCD_E_OUT=0;
- EA=1;
- return(dat);
- //EX0=1;
-
- }
- /****************************************************************************
- ** 函数名称: uchar Lcd_Data_Write(uchar page,uchar arrange) //page页地址.arrange列地址)
- ** 功能描述: 反白显示函数
- ** 输 入: uchar ch屏数,uchar arrange列地址,uchar page页地址
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void play16_fb(uchar ch,uchar arrange,uchar page)
- {
- uchar i;
- uchar xdata dat_fb[32];
- Choice_12864_Screen(ch);
- for(i=0;i<16;i++)
- {
- dat_fb[i]=~(Lcd_Data_Write((page<<1),((arrange<<3)+i)));
- dat_fb[i+16]=~(Lcd_Data_Write((page<<1)+1,((arrange<<3)+i)));
- }
- Display_16_point(ch,arrange,page,dat_fb);
- }
- /****************************************************************************
- ** 函数名称: void vertical(uchar y1,uchar y2,uchar x)//y1表示起点,y2表示终点
- ** 功能描述: 画竖线的函数
- ** 输 入: y1表示起点,y2表示终点
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Draw_Vertical_line(uchar y1,uchar y2,uchar x)//y1表示起点,y2表示终点
- {
- uchar i,sum=0;
- if(x>63)
- {
- Choice_12864_Screen(1); //y1比y2小,这里给出画竖线的函数而不用画点的方法
- x=x-64; //是为了减少单片机的处理负担。
- }
- else
- {
- Choice_12864_Screen(0);
- }
- if((y1/8)!=(y2/8))
- {
- for(i=0;i<(8-y1%8);i++)
- {
- sum=sum|((2<<((y1%8)+i)));
- }
- Cmd_Write_12864(x+0x40);
- Cmd_Write_12864(y1/8+0xb8);
- Dat_Write_12864(sum);
- sum=0;
- for(i=0;i<(y2/8-y1/8-1);i++)
- {
- Cmd_Write_12864(x+0x40);
- Cmd_Write_12864((y1/8)+0xb9+i);
- Dat_Write_12864(0xff);
- }
- for(i=0;i<=(y2%8);i++)
- {
- sum=sum|(2<<i);
- }
- Cmd_Write_12864(x+0x40);
- Cmd_Write_12864(y2/8+0xb8);
- Dat_Write_12864(sum|1);
- sum=0;
- }
- else
- {
- for(i=0;i<=y2-y1;i++)
- {
- sum=sum|(2<<(i+(y1%8)));
- }
- Cmd_Write_12864(0x40|x);
- Cmd_Write_12864(0xb8|(y1/8));
- Dat_Write_12864(sum);
- }
- }
- /****************************************************************************
- ** 函数名称: void Draw_dot_Hs(uchar x,uchar y)
- ** 功能描述: 画点函数
- ** 输 入: uchar x,uchar y 画点的x和y坐标
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- /**点的显示**/
- void Draw_dot_Hs(uchar x,uchar y)
- {
- uchar dat;
- if(x>63)
- {
- Choice_12864_Screen(1);
- x=x-64;
- }
- else
- {
- Choice_12864_Screen(0);
- }
- dat=Lcd_Data_Write(y/8,x);
- Cmd_Write_12864(0x40|x);
- Cmd_Write_12864(0xb8|y/8);
- Dat_Write_12864((1<<(y%8))|dat);
- }
- /****************************************************************************
- ** 函数名称: Clear_8_Dot(uchar x,uchar y,uchar ch)
- ** 功能描述: 清点函数
- ** 输 入: uchar x,uchar y 清点的x和y坐标
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- Clear_8_Dot(uchar x,uchar y,uchar ch)
- {
- uchar i;
- Choice_12864_Screen(ch);
- Cmd_Write_12864(x*8+0x40);
- Cmd_Write_12864(y+0xb8);
- for(i=0;i<8;i++)
- {
- Dat_Write_12864(0x00);
- }
- Cmd_Write_12864(x*8+0x40);
- Cmd_Write_12864(y+0xb9);
- for(i=0;i<16;i++)
- {
- Dat_Write_12864(0x00);
- }
- }
- /****************************************************************************
- ** 函数名称: void Change_4_Dot(uchar *x,uchar *y) //x<24 y<15
- ** 功能描述: 4X4个点合为一个
- ** 输 入: uchar *x,uchar *y 合点的首地址
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Change_4_Dot(uchar *x,uchar *y) //x<24 y<15
- {
- uchar i,m,n; //24和15分别表示游戏的范围
- if(*x<24&&*y<15) //这里的点是个有花色的点而不是一个实心的点
- {
- m=(*x)<<2;
- n=((*y)<<2)+2;
- for(i=0;i<4;i++)
- {
- Draw_dot_Hs(31+m,n+i);
- Draw_dot_Hs(34+m,n+i);
- }
- Draw_dot_Hs(32+m,n);
- Draw_dot_Hs(32+m,n+1);
- Draw_dot_Hs(32+m,n+3);
- Draw_dot_Hs(33+m,n);
- Draw_dot_Hs(33+m,n+2);
- Draw_dot_Hs(33+m,n+3);
- }
- }
- /****************************************************************************
- ** 函数名称: void Change_4_Dot(uchar *x,uchar *y) //x<24 y<15
- ** 功能描述: 4X4个点合为一个
- ** 输 入: uchar *x,uchar *y 合点的首地址
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Change_4_Dot1(uchar x,uchar y) //x<24 y<15
- {
-
- uchar i,m,n;
- EA=0; //24和15分别表示游戏的范围
- if(x<24&&y<15) //这里的点是个有花色的点而不是一个实心的点
- {
- m=(x)<<2;
- n=(y<<2)+2;
- for(i=0;i<4;i++)
- {
- Draw_dot_Hs(31+m,n+i);
- Draw_dot_Hs(34+m,n+i);
- }
- Draw_dot_Hs(32+m,n);
- Draw_dot_Hs(32+m,n+1);
- Draw_dot_Hs(32+m,n+3);
- Draw_dot_Hs(33+m,n);
- Draw_dot_Hs(33+m,n+2);
- Draw_dot_Hs(33+m,n+3);
- }
- EA=1;
- }
- /****************************************************************************
- ** 函数名称: void cleardot(uchar x,uchar y)
- ** 功能描述: 清点函数
- ** 输 入: uchar x,uchar y 需要清点的地址
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Clear_Dot_Hs(uchar x,uchar y)
- {
- uchar dat,j;
- if(x>63)
- {
- Choice_12864_Screen(1);
- x=x-64;
- }
- else
- {
- Choice_12864_Screen(0);
- }
- dat=Lcd_Data_Write(y/8,x);
- Cmd_Write_12864(0x40|x);
- Cmd_Write_12864(0xb8|(y/8));
- j=~(1<<(y%8));
- Dat_Write_12864(dat&j);
- }
- /****************************************************************************
- ** 函数名称: void Clear_Dot_four(uchar *x,uchar *y)
- ** 功能描述: 清除一个4X4的点
- ** 输 入: uchar *x,uchar *y 需要清点的地址指针
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Clear_Dot_four(uchar *x,uchar *y)
- {
- uchar i,m,n;
- m=((*x)<<2)+31;
- n=((*y)<<2)+2;
- for(i=0;i<4;i++)
- {
- Clear_Dot_Hs(m,n+i);
- Clear_Dot_Hs(m+1,n+i);
- Clear_Dot_Hs(m+2,n+i);
- Clear_Dot_Hs(m+3,n+i);
- }
- }
- /****************************************************************************
- ** 函数名称: void Clear_Dot_four(uchar *x,uchar *y)
- ** 功能描述: 清除一个4X4的点
- ** 输 入: uchar x,uchar y 需要清点的地址
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Clear_Four_DoT(uchar x,uchar y)
- {
- uchar i,m,n;
- if(x>=0&&x<24&&y>=0&&y<15)
- {
- m=((x)<<2)+31;
- n=((y)<<2)+2;
- for(i=0;i<4;i++)
- {
- Clear_Dot_Hs(m,n+i);
- Clear_Dot_Hs(m+1,n+i);
- Clear_Dot_Hs(m+2,n+i);
- Clear_Dot_Hs(m+3,n+i);
- }
- }
- }
- /****************************************************************************
- ** 函数名称: bit Read_Fk_Dot(char x,char y)
- ** 功能描述: 清除一个点
- ** 输 入: uchar x,uchar y 需要清点的地址
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- bit Read_Fk_Dot(char x,char y)
- {
- bit flagfk=0;
- uchar m,n;
- if(y>=0)
- {
- m=(x<<2)+31;
- n=(y<<2)+2;
- Choice_12864_Screen(0);
- if(m>63)
- {
- m=m-64;
- Choice_12864_Screen(1);
- }
- m=Lcd_Data_Write(n>>3,m);
- if((n%8)==2)
- {
- if((m&0x3c)==0x3c)
- {
- flagfk=1;
- }
- else
- {
- flagfk=0;
- }
- }
- if((n%8)==6)
- {
- if((m&0xc0)==0xc0)
- {flagfk=1;
- }
- else
- {flagfk=0;}
- }
- }
- return(flagfk);
- }
- /****************************************************************************
- ** 函数名称: void Timer_Machine_Fu() interrupt 1 using 1 //定时程序.产生步进时间
- ** 功能描述: //定时程序,产生步进时间,中断次数控制
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Timer_Machine_Fu() interrupt 1 using 1 //定时程序.产生步进时间
- {
- if(p--)
- {
- TL0=0;
- TH0=0xa0;
- flag1=0;
- }
- else
- {
- flag1=1;
- TL0=0;
- TH0=0x00;
- p=20-(dengji>>1);
- }
- }
- /****************************************************************************
- ** 函数名称: void Start_Key_Judge() interrupt 2 using 2
- ** 功能描述: 开始确认暂停键的判断
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Start_Key_Judge() interrupt 2 using 2
- {
- if(!flag5)
- {
- flag5=1;
- }
- else
- {
- flag5=0;
- }
- }
- /****************************************************************************
- ** 函数名称: void Dire_Inte_Fu() interrupt 0 using 0
- ** 功能描述: 开始确认暂停键的判断
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Dire_Inte_Fu() interrupt 0 using 0
- {
- uchar i=0;
- if(first) //FIRST=1;打开方向按键判断标志
- {
- first=0;
- k=(P2>>6);
- k=k&0x03;
- if(flag)
- {
- if(k==1) direction=3;//左
- if(k==2) direction=1;//右
- }
- else
- {
- if(k==0) direction=4;//上
- if(k==3) direction=2;//下
- }
- }
- }
- /****************************************************************************
- ** 函数名称: void Play_Buf_Model(uchar buff,char offsetx,char offsety)
- ** 功能描述: 显示四个小格的方块
- ** 输 入: uchar buff:数组的首地址,char offsetx:位置的x坐标,char offsety:位置y坐标
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Play_Buf_Model(uchar buff,char offsetx,char offsety)
- {
- //i=(Model+((dat&0xf0)|((dat&0x0f)<<2)));
- Change_4_Dot1((((*(Model+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx,((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))))&0x0f)+offsety);
- Change_4_Dot1((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx,((*(((Model+((buff&0xf0)|((buff&0x0f)<<2))))+1))&0x0f)+offsety);
- Change_4_Dot1((((*(((Model+((buff&0xf0)|((buff&0x0f)<<2))))+2))&0xf0)>>4)+offsetx,((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety);
- Change_4_Dot1((((*(((Model+((buff&0xf0)|((buff&0x0f)<<2))))+3))&0xf0)>>4)+offsetx,((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety);
- }
- /****************************************************************************
- ** 函数名称: bit Stop_Dir_Down(uchar buff,char offsetx,char offsety)
- ** 功能描述: 判断方块停止向下运动
- ** 输 入: uchar buff:数组的首地址,char offsetx:位置的x坐标,char offsety:位置y坐标
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- bit Stop_Dir_Down(uchar buff,char offsetx,char offsety)
- {
- char x0,y0,x1,y1,x2,y2,x3,y3;
- bit tz=0;
- x0=(((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
- x1=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
- x2=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
- x3=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
- y2=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
- y3=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
- y0=((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
- y1=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
-
- if(Read_Fk_Dot(x0+1,y0))
- {
- if(!((((x0+1)==x1)&&(y0==y1))|(((x0+1)==x2)&&(y0==y2))|(((x0+1)==x3)&&(y0==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x1+1,y1))
- {
- if(!((((x1+1)==x0)&&(y1==y0))|(((x1+1)==x2)&&(y1==y2))|(((x1+1)==x3)&&(y1==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x2+1,y2))
- {
- if(!((((x2+1)==x0)&&(y2==y0))|(((x2+1)==x1)&&(y2==y1))|(((x2+1)==x3)&&(y2==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x3+1,y3))
- {
- if(!((((x3+1)==x0)&&(y3==y0))|(((x3+1)==x1)&&(y3==y1))|(((x3+1)==x2)&&(y3==y2))))
- {
- tz=1;
- }
- }
- return(tz);
- }
- /****************************************************************************
- ** 函数名称: bit Line_Disapp_Fu(uchar x)
- ** 功能描述: 判断一行是否可以消除
- ** 输 入: uchar x行数
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- bit Line_Disapp_Fu(uchar x)
- {
- uchar i;
- bit man=1;
- for(i=0;i<15;i++)
- {
- man=man&(Read_Fk_Dot(x,i));
- if(!man)
- break;
- }
- return(man);
- }
- /****************************************************************************
- ** 函数名称: void Elim_Line_Fu(uchar x)
- ** 功能描述: 消除一行
- ** 输 入: uchar x行数
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Elim_Line_Fu(uchar x)
- {
- uchar i,j;
- for(i=0;i<15;i++)
- {
- Clear_Four_DoT(x,i);
- }
- for(i=1;i<=x;i++)
- {
- for(j=0;j<15;j++)
- {
- if(Read_Fk_Dot(x-i,j))
- {
- Change_4_Dot1(x-i+1,j);
- Clear_Four_DoT(x-i,j);
- }
- }
- }
- }
- /****************************************************************************
- ** 函数名称: bit Stop_Dir_Right(uchar buff,char offsetx,char offsety)
- ** 功能描述: 判断是否停止向右
- ** 输 入: uchar buff:数组的首地址,char offsetx:位置的x坐标,char offsety:位置y坐标
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- bit Stop_Dir_Right(uchar buff,char offsetx,char offsety)
- {
- char x0,y0,x1,y1,x2,y2,x3,y3;
- bit tz=0;
- x0=(((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
- x1=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
- x2=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
- x3=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
- y2=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
- y3=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
- y0=((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
- y1=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
- if(Read_Fk_Dot(x0,y0-1))
- {
- if(!(((x0==x1)&&((y0-1)==y1))|((x0==x2)&&((y0-1)==y2))|((x0==x3)&&((y0-1)==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x1,y1-1))
- {
- if(!(((x1==x0)&&((y1-1)==y0))|((x1==x2)&&((y1-1)==y2))|((x1==x3)&&((y1-1)==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x2,y2-1))
- {
- if(!(((x2==x0)&&((y2-1)==y0))|((x2==x1)&&((y2-1)==y1))|((x2==x3)&&((y2-1)==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x3,y3-1))
- {
- if(!(((x3==x0)&&((y3-1)==y0))|((x3==x1)&&((y3-1)==y1))|((x3==x2)&&((y3-1)==y2))))
- {
- tz=1;
- }
- }
- return(tz);
- }
- /****************************************************************************
- ** 函数名称: bit Stop_Dir_Left(uchar buff,char offsetx,char offsety)
- ** 功能描述: 判断是否停止向左
- ** 输 入: uchar buff:数组的首地址,char offsetx:位置的x坐标,char offsety:位置y坐标
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- bit Stop_Dir_Left(uchar buff,char offsetx,char offsety)
- {
- char x0,y0,x1,y1,x2,y2,x3,y3;
- bit tz=0;
- x0=(((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
- x1=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
- x2=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
- x3=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
- y2=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
- y3=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
- y0=((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
- y1=((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
- if(Read_Fk_Dot(x0,y0+1))
- {
- if(!(((x0==x1)&&((y0+1)==y1))|((x0==x2)&&((y0+1)==y2))|((x0==x3)&&((y0+1)==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x1,y1+1))
- {
- if(!(((x1==x0)&&((y1+1)==y0))|((x1==x2)&&((y1+1)==y2))|((x1==x3)&&((y1+1)==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x2,y2+1))
- {
- if(!(((x2==x0)&&((y2+1)==y0))|((x2==x1)&&((y2+1)==y1))|((x2==x3)&&((y2+1)==y3))))
- {
- tz=1;
- }
- }
- if(Read_Fk_Dot(x3,y3+1))
- {
- if(!(((x3==x0)&&((y3+1)==y0))|((x3==x1)&&((y3+1)==y1))|((x3==x2)&&((y3+1)==y2))))
- {
- tz=1;
- }
- }
- return(tz);
- }
- /****************************************************************************
- ** 函数名称: void Clear_bufF_Fuc(uchar dat,char setx,char sety)
- ** 功能描述: 清除一个方块
- ** 输 入: uchar dat:緩存的首地址,char setx:方块的x坐标,char sety:方块的y坐标
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Clear_bufF_Fuc(uchar dat,char setx,char sety)
- {
- uchar *i;
- i=(Model+((dat&0xf0)|((dat&0x0f)<<2)));
- Clear_Four_DoT(((((*i)&0xf0)>>4)+setx),(((*i)&0x0f)+sety));
- Clear_Four_DoT(((((*(i+1))&0xf0)>>4)+setx),(((*(i+1))&0x0f)+sety));
- Clear_Four_DoT(((((*(i+2))&0xf0)>>4)+setx),(((*(i+2))&0x0f)+sety));
- Clear_Four_DoT(((((*(i+3))&0xf0)>>4)+setx),(((*(i+3))&0x0f)+sety));
- }
- /****************************************************************************
- ** 函数名称: void Russia_Box_Fuction(void)
- ** 功能描述: 俄罗斯方块子程序
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 作者所在单位:鉴鹰电子工作室
- ** 日 期: 14.05.10
- ****************************************************************************/
- void Russia_Box_Fuction(void)
- {
- uchar fenshu=0;
- char offsety,offsetx;
- char offsety_buff,offsetx_buff;
- uchar buff=0x10;
- bit ting=0;
- uchar i;
- //flag5=1;
- TMOD=1; //定时器工作方式
- IT0=1; //边延有效
- IT1=1;
- EA=1; //开CPU中断
- ET0=1; //开定时器中断
- EX0=1; //开外部中断
- EX1=1;
- TL0=0x00;
- TH0=0x00; //定时器初值
- TR0=1; //启动定时器
- k=5;
- Choice_12864_Screen(2);
- Clear_12864_Screen();
- Display_16_point(0,0,0,WJYJ);
- Display_16_point(0,0,1,WJYJ+32);
- Display_16_point(0,0,2,RussiaBOX);
- Display_16_point(0,2,0,RussiaBOX+32);
- Display_16_point(0,2,1,RussiaBOX+64);
- Display_16_point(0,2,2,RussiaBOX+96);
- Display_16_point(0,2,3,RussiaBOX+128);
- Display_8_point(0,0,3,Num0);
- Display_8_point(0,1,3,Num0);
- Draw_Vertical_line(1,60,30);
- Draw_Vertical_line(1,60,127);
- for(i=0;i<98;i++)
- {
- Draw_dot_Hs(30+i,1);
- Draw_dot_Hs(30+i,62);
- }
- offsety=7;
- offsetx=-3;
- for(;;)
- {
- if(P3&0x04)
- first=1;
- if((k==0x02)&&((P3&0x04)==0x04))
- {
- offsety_buff=offsety;
- ting=Stop_Dir_Right(buff,offsetx,offsety);
- if(!ting)
- {
- if(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety)
- offsety--;
- Clear_bufF_Fuc(buff,offsetx_buff,offsety_buff);
- Play_Buf_Model(buff,offsetx,offsety);
- offsety_buff=offsety;
-
- }
- k=5;
- }
- if((k==0x01)&&((P3&0x04)==0x04))
- {
- offsety_buff=offsety;
- ting=Stop_Dir_Left(buff,offsetx,offsety);
- if(!ting)
- {
- if(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety<=13)
- offsety++;
- k=5;
- Clear_bufF_Fuc(buff,offsetx_buff,offsety_buff);
- Play_Buf_Model(buff,offsetx,offsety);
- offsety_buff=offsety;
- }
- }
- if((k==0x03)&&((P3&0x04)==0x04))
- {
- dengji=36;/////////////
- k=5;
- }
- if((k==0x00)&&((P3&0x04)==0x04))
- {
- uchar i;
- k=5;
- i=buff;
- buff++;
- if((buff&0x0f)>=4)
- buff=buff&0xf0;
-
- //Change_4_Dot1(0,14);
- if(((*(((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety)>14)
- {
- do
- {
- offsety--;
- }while((((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety)>14);
-
- }
- if(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety<0)
- {
- do
- {
- offsety++;
- }while(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety);
- }
- Clear_bufF_Fuc(i,offsetx_buff,offsety_buff);
- Play_Buf_Model(buff,offsetx,offsety);
- }
- ting=Stop_Dir_Down(buff,offsetx,offsety);
- while(flag5);
- if(flag1)
- {
- offsetx_buff=offsetx;
- offsety_buff=offsety;
- offsetx++;
- Clear_bufF_Fuc(buff,offsetx_buff,offsety_buff);
- Play_Buf_Model(buff,offsetx,offsety);
- offsetx_buff=offsetx;
- flag1=0;
- }
- if((((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)>22)|ting)
- {
- uchar i=0;
- if(Line_Disapp_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx))
- {Elim_Line_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx);fenshu++;i++;}
-
- if((((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx>=(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx) //x2>=x3
- {
- if((((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx<(((*((Model+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx) //x2<x1
- {
- if(Line_Disapp_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i))
- {Elim_Line_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
- }
- if((((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx<(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx) //x3<x2
- {
- if(Line_Disapp_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i))
- {Elim_Line_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
- }
- if((((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx<(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx) //x0<x3
- {
- if(Line_Disapp_Fu((((*(Model+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i))
- {Elim_Line_Fu((((*(Model+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i);fenshu++;i++;}
- }
- }
- if((((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx<(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx) //x2<x3
- {
- if((((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx<(((*((Model+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx)
- {
- if(Line_Disapp_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i))
- {
- Elim_Line_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+3)))&0xf0)>>4)+offsetx+i);fenshu++;i++;
- }
- }
- if(Line_Disapp_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i))
- {
- Elim_Line_Fu((((*((Model+((buff&0xf0)+((buff&0x0f)<<2))+2)))&0xf0)>>4)+offsetx+i);fenshu++;i++;
- }
- if((((*(Model+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx<(((*((Model+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx)
- {
- if(Line_Disapp_Fu((((*(Model+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i))
- {
- Elim_Line_Fu((((*(Model+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx+i);fenshu++;i++;
- }
- }
- }
-
- Display_8_point(0,0,3,Num0+((fenshu/10)<<4));
- Display_8_point(0,1,3,Num0+((fenshu%10)<<4));
- dengji=fenshu/5;
- if(((((*(Model+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx)<1)
- {
- Delay_1ms(450);
- Delay_1ms(450);
- Choice_12864_Screen(2);
- Clear_12864_Screen();
- Display_16_point(0,4,1,Game_Over);
- Display_16_point(0,6,1,Game_Over+32);
- Display_16_point(1,0,1,Game_Over+64);
- Display_16_point(1,2,1,Game_Over+96);
- Delay_1ms(450);
- Delay_1ms(450);
- break;
- }
- buff=(((TL0%7)<<4)|(TH0%4));
- //buff=0x11;
- offsety=7;
- offsetx=-3;
- offsetx_buff=-9;
- offsety_buff=-9;
- }
- }
-
- }
- /*******************************************************************************************
- ** 函数名称: void Delay_S(void) //延时1s误差 0us
- ** 功能描述: 精确延时函数,延时1秒,软件算得
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void Delay_S(void) //延时1s误差 0us
- {
- unsigned char a,b,c;
- for(c=167;c>0;c--)
- for(b=171;b>0;b--)
- for(a=16;a>0;a--);
- _nop_(); //if Keil,require use intrins.h
- }
- /*******************************************************************************************
- ** 函数名称: void CHECK_busy()
- ** 功能描述: 读“忙”函数,判断液晶当前是否忙碌
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void CHECK_busy()//读“忙”函数-----数据线的最高位DB71则busy
- {
- P0=0x00;
- LCD_RS_OUT=0;
- LCD_RW_OUT=1;
- LCD_E_OUT=1;
- while(P0 & 0x80);
- LCD_E_OUT=0;
- }
-
- /*******************************************************************************************
- ** 函数名称: void LCD_COM_WRI(uchar value)
- ** 功能描述: LCD液晶写命令函数
- ** 输 入: uchar value(向LCD写入的命令)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void LCD_COM_WRI(uchar value) //写命令函数
- {
- CHECK_busy(); //对LCD的每次读写都要读忙
- LCD_RS_OUT=0; //选择命令
- LCD_RW_OUT=0; //读操作
- LCD_12864_DATA = value;
- LCD_E_OUT=1; //LCD_EN_OUT由1----0锁存有效数据
- _nop_();
- _nop_();
- LCD_E_OUT=0;
- }
- /*******************************************************************************************
- ** 函数名称: void LCD_DATA_WRI(uchar value)
- ** 功能描述: LCD液晶写数据的函数
- ** 输 入: uchar value(向LCD写入的数据)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void LCD_DATA_WRI(uchar value)//写数据函数
- {
- CHECK_busy();
- LCD_RS_OUT=1; //选择数据
- LCD_RW_OUT=0;
- LCD_12864_DATA = value;
- LCD_E_OUT=1; //LCD_EN_OUT由1----0锁存有效数据
- _nop_();
- _nop_();
- LCD_E_OUT=0;
- }
- /*******************************************************************************************
- ** 函数名称: void CHOOSE_COLUMN(uchar column)
- ** 功能描述: 设置显示的列
- ** 输 入: uchar column(设置显示的列)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void CHOOSE_COLUMN(uchar column) //设置显示的列
- {
- column=column &0x3f; //列的最大值为64
- column= 0x40|column; //列的首地址为0x40
- LCD_COM_WRI(column); //规定显示的列的位置
- }
- /*******************************************************************************************
- ** 函数名称: void CHOOSE_PG(uchar page)
- ** 功能描述: 设置“页”LCD12864共8页,一页是8行点阵点
- ** 输 入: uchar page(送入设置的页数)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void CHOOSE_PG(uchar page) //设置“页”LCD12864共8页,一页是8行点阵点
- {
- page=0xb8|page; //页的首地址为0xB8
- LCD_COM_WRI(page);
- }
- /*******************************************************************************************
- ** 函数名称: void SEL_SCREN(uchar screen)
- ** 功能描述: LCD选择屏幕
- ** 输 入: uchar screen(选择屏幕0:全屏 1:左半屏 2:右半屏)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void SEL_SCREN(uchar screen) //选择屏幕
- {
- switch(screen)
- {
- case 0: LCD_CS1_OUT=0;LCD_CS2_OUT=0;break; //全屏
- case 1: LCD_CS1_OUT=0;LCD_CS2_OUT=1;break;//左半屏
- case 2: LCD_CS1_OUT=1;LCD_CS2_OUT=0;break;//右半屏
- default:break;
- }
- }
- /*******************************************************************************************
- ** 函数名称: void Display_picture(uchar a[][64])
- ** 功能描述: 显示图片的函数
- ** 输 入: uchar a[][64](存放图片的数组)
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- void GUI_CLEAR(uchar a[][64])//显示图形—128*64大小
- {
- uchar i,j;
-
- for(j=0;j<8;j++)
- {
- SEL_SCREN(1);
- CHOOSE_PG(j);
- CHOOSE_COLUMN(0);
- for(i=0;i<64;i++)
- {
- LCD_DATA_WRI(a[2*j][i]);//每隔一行取一次数组中的数据
- }
- SEL_SCREN(2);
- CHOOSE_PG(j);
- CHOOSE_COLUMN(0);
- for(i=0;i<64;i++)
- {
- LCD_DATA_WRI(a[2*j+1][i]);//每隔一行取一次数组中的数据
- }
- }
- }
- /*******************************************************************************************
- ** 函数名称: main(void)
- ** 功能描述: 整个程序的框架
- ** 输 入:
- **
- **
- ** 输 出:
- **
- ** 全局变量:
- ** 调用模块:
- **
- ** 作 者: 吴鉴鹰
- ** 日 期: 14.05.16
- ********************************************************************************************/
- //////////////////////////////
- void main(void)
- {
- uchar i;
- uchar count=0;
- P2=0xff;
- EA=1; //开CPU中断
- //ET0=1; //开定时器中断
- EX0=1; //开外部中断
- EX1=1;
- Choice_12864_Screen(2);
- Init_12864_Screen();
- Clear_12864_Screen();
- ////////////////////
- // play16(0,4,0,Tan);
- //play16(0,6,0,Chi);
- //play16(1,0,0,Snake);
- ///////////////////
- Display_16_point(0,2,0,RussiaBOX);
- Display_16_point(0,4,0,RussiaBOX+32);
- Display_16_point(0,6,0,RussiaBOX+64);
- for(i=0;i<2;i++)
- {
- Display_16_point(1,i<<1,0,(RussiaBOX+96+(i<<5)));
- }
- Display_16_point(0,2,1,WJYZZ);
- Display_16_point(0,4,1,WJYZZ+32);
- Display_16_point(0,6,1,WJYZZ+64);
- for(i=0;i<2;i++)
- {
- Display_16_point(1,i<<1,1,(WJYZZ+96+(i<<5)));
- }
- Display_16_point(0,0,0,WWJJYYWXTP);
- //Display_16_point(0,2,0,WWJJYYWXTP);
- //Display_16_point(1,2,0,WWJJYYWXTP);
- Display_16_point(1,4,0,WWJJYYWXTP);
- Display_16_point(1,6,0,WWJJYYWXTP);
-
- Display_16_point(0,0,1,WWJJYYWXTP);
- Display_16_point(1,4,1,WWJJYYWXTP);
- Display_16_point(1,6,1,WWJJYYWXTP);
-
- //////////////////
- for(i=0;i<4;i++)
- {
- Display_16_point(0,i<<1,2,(WWJJYYJ+(i<<5))) ;
- }
- for(i=0;i<4;i++)
- {
- Display_16_point(1,i<<1,2,(WWJJYYG+(i<<5))) ;
- }
- for(i=0;i<4;i++)
- {
- Display_16_point(0,i<<1,3,(WWJJYYJ+(i<<5))) ;
- }
- for(i=0;i<4;i++)
- {
- Display_16_point(1,i<<1,3,(WWJJYYHH+(i<<5))) ;
- }
- //while(1);
- Delay_S(); Delay_S();Delay_S();
- GUI_CLEAR(Start_picture);
- // while(1);
- Delay_S(); Delay_S();Delay_S();
- Delay_S(); Delay_S();Delay_S();
-
- //////////////////
- //play16(0,4,2,Per_Cal_Li);
- //play16(0,6,2,Per_Cal_Li+32);
- //play16(1,0,2,Per_Cal_Li+64);
-
- //////////////////
- for(;;)
- {
- if((k==0x03)&&((P3&0x04)==0x04))
- {
- count++;
- k=0;
- if(count==4)
- count=1;
- switch(count)
- {
- case 1:
- {
- Display_16_point(0,4,2,Per_Cal_Li);
- Display_16_point(0,6,2,Per_Cal_Li+32);
- Display_16_point(1,0,2,Per_Cal_Li+64);
- play16_fb(0,4,0);
- play16_fb(0,6,0);
- play16_fb(1,0,0);
- };break;
- case 2: {
- Display_16_point(0,4,0,Tan);
- Display_16_point(0,6,0,Chi);
- Display_16_point(1,0,0,Snake);
- play16_fb(0,4,1);
- play16_fb(0,6,1);
- for(i=0;i<3;i++)
- {
- play16_fb(1,i<<1,1);
- }
- };break;
- case 3:
- {
-
- Display_16_point(0,4,1,RussiaBOX);
- Display_16_point(0,6,1,RussiaBOX+32);
- for(i=0;i<3;i++)
- {
- Display_16_point(1,i<<1,1,(RussiaBOX+64+(i<<5)));
- }
- play16_fb(0,4,2);
- play16_fb(0,6,2);
- play16_fb(1,0,2);
- };break;
- default:break;
- }
- }
- if(P3&0x04)
- first=1;
- if(flag5)
- {
- /*switch(count)
- {
- // case 1:flag5=0;/*TanChiSnake();count=0;flag5=0;k=0;break;
- // case 2:flag5=0;Russia_Box_Fuction();count=0;flag5=0; k=0;break;
- // case 3:flag5=0;/*wannianli();count=0;flag5=0;k=0;break;
- // default:count=0;k=3;flag5=0;break;
- // } */
- flag5=0;
- k=0;
- Russia_Box_Fuction();
- Choice_12864_Screen(2);
- Init_12864_Screen();
- Clear_12864_Screen();
- Display_16_point(0,2,0,RussiaBOX);
- Display_16_point(0,4,0,RussiaBOX+32);
- Display_16_point(0,6,0,RussiaBOX+64);
- for(i=0;i<2;i++)
- {
- Display_16_point(1,i<<1,0,(RussiaBOX+96+(i<<5)));
- }
- Display_16_point(0,2,1,WJYZZ);
- Display_16_point(0,4,1,WJYZZ+32);
- Display_16_point(0,6,1,WJYZZ+64);
- for(i=0;i<2;i++)
- {
- Display_16_point(1,i<<1,1,(WJYZZ+96+(i<<5)));
- }
- Display_16_point(0,0,0,WWJJYYWXTP);
- //Display_16_point(0,2,0,WWJJYYWXTP);
- //Display_16_point(1,2,0,WWJJYYWXTP);
- Display_16_point(1,4,0,WWJJYYWXTP);
- Display_16_point(1,6,0,WWJJYYWXTP);
-
- Display_16_point(0,0,1,WWJJYYWXTP);
- Display_16_point(1,4,1,WWJJYYWXTP);
- Display_16_point(1,6,1,WWJJYYWXTP);
-
- //////////////////
- for(i=0;i<4;i++)
- {
- Display_16_point(0,i<<1,2,(WWJJYYJ+(i<<5))) ;
- }
- for(i=0;i<4;i++)
- {
- Display_16_point(1,i<<1,2,(WWJJYYG+(i<<5))) ;
- }
- for(i=0;i<4;i++)
- {
- Display_16_point(0,i<<1,3,(WWJJYYJ+(i<<5))) ;
- }
- for(i=0;i<4;i++)
- {
- Display_16_point(1,i<<1,3,(WWJJYYHH+(i<<5))) ;
- }
- //////////////////
- }
- }
- }
复制代码
|