📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************
2 *名称:推箱子游戏测试版V0.1
3 *编程:飞扬
4 *说明:采用YM12864R-3的液晶(ST7920)+62256的RAM+PT6122的遥控
5 *下一个版本增加音效,地图编辑功能,界面显示美化等等暂时没想到!
6 *主要是学习外扩展RAM才搞这个东东!
7 **********************************************************/
8 #include <at89x52.h>
9 #include "MAIN.H"
10 /****** 引脚定义 ******/
11 sbit Beep = P3^3; //音频输出脚
12
13 /****** 变量/数组定义 ******/
14 //定义数组,存放接收到的数据
15 uchar KeyCoding[4]={0,0,0,0};
16
17 //关卡设置
18 uchar guanka = 0;
19
20 //用1024个字节存放动态绘图数据,我叫它显存数据
21 uchar xdata GamePic[1024]; //使用绝对地址以保护数据不被破坏
22
23 //十字形(箱子推到圆形位置后变为十字形)
24 uchar code shizi[8]={0x3c,0x3c,0xff,0xff,0xff,0xff,0x3c,0x3c};
25
26 //圆形(箱子要推到的地方)
27 uchar code yuan[8]={0x3c,0x66,0xc3,0x81,0x81,0xc3,0x66,0x3c};
28
29 //箱子(推动的就是他)
30 uchar code xiangzi[8]={0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff};
31
32 //娃娃脸(用于推动箱子)
33 uchar code lian[8]={0x7e,0xff,0xdb,0xff,0xff,0xc3,0xe7,0x7e};
34
35 //墙壁
36 uchar code qiang[8]={0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00};
37
38 //空(用于清空图形移动后的痕迹)
39 uchar code kong[8]={0,0,0,0,0,0,0,0};
40
41 //用于计算图形移动和放置的坐标
42 //实际存放的是GamePic数组的相应下标
43 uint code MoveData[64]={
44 0,1,2,3,4,5,6,7,
45 128,129,130,131,132,133,134,135,
46 256,257,258,259,260,261,262,263,
47 384,385,386,387,388,389,390,391,
48 512,513,514,515,516,517,518,519,
49 640,641,642,643,644,645,646,647,
50 768,769,770,771,772,773,774,775,
51 896,897,898,899,900,901,902,903
52 };
53 /*8X8的游戏地图数据,同时根据图形数据判断娃娃脸是否可以移动,
54 *箱子是否可以推动,箱子推动的方向是否是墙和箱子,是则不
55 *能推动!箱子推到的地方是圆形则用十字形替换(将该位置数据换成5),
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 2
56 *推动十字形,则再恢复到箱子的形状(在换成3).
57 *空(什么都不显示)=0,墙=1,圆=2,箱子=3,脸=4,十字=5 */
58 uchar code GameMap[10][64]={
59 //第一关
60 {1,1,1,1,1,1,1,1,
61 1,0,0,0,1,2,0,1,
62 1,2,0,0,3,0,0,1,
63 1,1,3,1,1,0,0,1,
64 1,0,0,1,1,3,1,1,
65 1,0,0,4,0,0,0,1,
66 1,0,2,1,0,0,0,1,
67 1,1,1,1,1,1,1,1},
68 //第二关
69 {1,1,1,1,1,1,1,1,
70 1,0,0,0,1,0,0,1,
71 1,0,2,0,3,2,0,1,
72 1,1,3,1,1,0,0,1,
73 1,0,0,1,1,3,1,1,
74 1,0,0,4,0,2,0,1,
75 1,0,0,1,0,0,0,1,
76 1,1,1,1,1,1,1,1},
77 //第三关
78 {1,1,1,1,1,1,1,1,
79 1,0,0,0,1,0,0,1,
80 1,0,0,0,3,0,0,1,
81 1,0,3,1,1,0,0,1,
82 1,0,2,1,1,3,1,1,
83 1,0,2,4,0,0,0,1,
84 1,0,2,1,0,0,0,1,
85 1,1,1,1,1,1,1,1},
86 //第四关
87 {1,1,1,1,1,1,1,1,
88 1,0,0,0,1,0,0,1,
89 1,0,2,0,3,2,0,1,
90 1,1,3,1,1,0,0,1,
91 1,0,0,1,1,3,1,1,
92 1,0,2,4,0,0,0,1,
93 1,0,0,1,0,0,0,1,
94 1,1,1,1,1,1,1,1},
95 //第五关
96 {1,1,1,1,1,1,1,1,
97 1,0,0,0,1,0,0,1,
98 1,0,0,2,3,0,0,1,
99 1,1,3,1,1,0,0,1,
100 1,0,2,1,1,3,1,1,
101 1,0,0,4,2,0,0,1,
102 1,0,0,1,0,0,0,1,
103 1,1,1,1,1,1,1,1},
104 //6
105 {1,1,1,1,1,1,1,1,
106 1,1,0,1,1,0,2,1,
107 1,0,0,3,0,0,0,1,
108 1,4,3,3,0,0,0,1,
109 1,0,1,0,0,1,0,1,
110 1,0,1,1,1,1,0,1,
111 1,2,0,0,0,0,2,1,
112 1,1,1,1,1,1,1,1},
113 //7
114 {1,1,1,1,1,1,1,1,
115 1,0,0,1,0,0,0,1,
116 1,0,0,1,0,5,0,1,
117 1,0,0,1,0,2,1,1,
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 3
118 1,1,0,3,0,0,0,1,
119 1,0,3,0,0,2,0,1,
120 1,4,0,1,1,0,0,1,
121 1,1,1,1,1,1,1,1},
122 //8
123 {1,1,1,1,1,1,1,1,
124 1,1,4,0,1,1,1,1,
125 1,0,0,0,3,2,0,1,
126 1,0,0,1,0,0,0,1,
127 1,0,0,0,1,5,0,1,
128 1,1,0,3,0,0,0,1,
129 1,1,1,1,0,2,0,1,
130 1,1,1,1,1,1,1,1},
131 //9
132 {1,1,1,1,1,1,1,1,
133 1,2,0,1,1,1,1,1,
134 1,2,0,0,0,1,1,1,
135 1,0,1,3,0,0,0,1,
136 1,2,0,3,3,1,0,1,
137 1,1,0,0,0,0,0,1,
138 1,1,1,1,1,0,4,1,
139 1,1,1,1,1,1,1,1},
140 //10
141 {1,1,1,1,1,1,1,1,
142 1,1,0,1,1,0,2,1,
143 1,0,3,0,3,3,0,1,
144 1,4,0,0,0,0,0,1,
145 1,0,1,0,0,1,0,1,
146 1,0,1,1,1,1,0,1,
147 1,2,0,0,0,0,2,1,
148 1,1,1,1,1,1,1,1}
149 };
150 //因为程序存储器中的的是只读的!
151 //用于复制程序存储器中的当前地图数据
152 uchar idata Map[64];
153
154 //用于存放圆形的坐标,最多5个圆
155 //yuanPos[6]存放本关有几个圆
156 uchar xdata yuanPos[6]=0;
157
158 /**********************************************************
159 *函数名:CopyMap()
160 *功 能:用于复制程序存储器中的当前地图数据
161 *输 入:入口参数为当前地图编号
162 **********************************************************/
163 void CopyMap(uchar num)
164 {
165 1 uchar i;
166 1 for (i=0;i<64;i++)
167 1 {
168 2 Map[i] = GameMap[num][i];
169 2 }
170 1 }
171 /**********************************************************
172 *函数名:WriteMemorizer()
173 *功 能:将图形数据写入显存
174 *pos:要显示图形的位置,*p:指针指向要显示的图形
175 **********************************************************/
176 void WriteMemorizer(uchar pos,uchar *p)
177 {
178 1 uchar i;
179 1 uint j;
C51 COMPILER V8.08 MAIN 06/14/2007 15:33:59 PAGE 4
180 1 j = MoveData[pos]; //取显存地址(显示坐标)
181 1 for (i=0;i<8;i++)
182 1 {
183 2 GamePic[j] = *p; //要显示的图形写入显存
184 2 p++; //下一个数据
185 2 j+=16;//显存的下一个地址(每个地址之间的差是16)
186 2 } //或者说是间隔是16.
187 1 }
188 /**********************************************************
189 *函数名:MapCreate()
190 *功 能:地图生成程序
191 **********************************************************/
192 void MapCreate()
193 {
194 1 uchar i;
195 1 for (i=0;i<64;i++) //生成8X8的地图
196 1 {
197 2 switch (Map[i])//获得地图上的图形数据
198 2 {
199 3 case 0:
200 3 WriteMemorizer(i,kong);//空
201 3 break;
202 3 case 1:
203 3 WriteMemorizer(i,qiang);//墙
204 3 break;
205 3 case 2:
206 3 WriteMemorizer(i,yuan);//圆
207 3 break;
208 3 case 3:
209 3 WriteMemorizer(i,xiangzi);//箱子
210 3 break;
211 3 case 4:
212 3 WriteMemorizer(i,lian);//脸
213 3 break;
214 3 case 5:
215 3 WriteMemorizer(i,shizi);//十字
216 3 break;
217 3 }
218 2 }
219 1 }
220 /**********************************************************
221 *函数名:GameDisplay()
222 *功 能:游戏图形显示程序(从左到右,从上到下)
223 **********************************************************/
224 void GameDisplay()
225 {
226 1 uchar i,j;
227 1 uint k=0; //对显存清计数器清0
228 1 LCDWriteCommand(0x34);//扩充指令集
229 1 LCDWriteCommand(0x36);//绘图显示开
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -