📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 05/24/2012 19:52:39 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: F:\新建文件夹\新建文件夹 (2)\C51\BIN\C51.EXE main.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 //版本:V1.0
2 //作品:贪吃蛇+万年历+俄罗斯方块
3 //作者所属院校:南阳理工学院
4 //作者QQ: 497259320
5 //申明:转载请标明作品来源 知识产权归作者本人所有!
6 //工作之余,写下此程序,程序、设计中有很多不足之处,风格、命名也很乱,这是下一个版本要改进的
7 //在V1.1版本中还会增加矩阵键盘和科学计算器等功能,此程序已成功移植于AVR单片机。硬件上实现要修改底层驱动!
8 #include <at89x51.h>
9 #include "18b20.h"
10 #include "1302.h"
11 #include "12864.h"
12 #include "zifu.h"
13 uchar k,direction;
14 bit flag;
15 bit flag5=0; //flag5是外部中断1的标志位 flag1是步进标志
16 uchar p,dengji; //定时次数
17 bit flag1=0;
18 systemtime realtime;
19 bit first=1; //中断次数控制
20 void dingshi() interrupt 1 using 1 //定时程序.产生步进时间
21 {
22 1 if(p--)
23 1 {
24 2 TL0=0;
25 2 TH0=0xa0;
26 2 flag1=0;
27 2 }
28 1 else
29 1 {
30 2 flag1=1;
31 2 TL0=0;
32 2 TH0=0x00;
33 2 p=20-(dengji>>1);
34 2 }
35 1 }
36 /*开始确认暂停键的判断*/
37 void zhongduan1() interrupt 2 using 2
38 {
39 1 if(!flag5)
40 1 {
41 2 flag5=1;
42 2 }
43 1 else
44 1 {
45 2 flag5=0;
46 2 }
47 1 }
48 void zhongduan() interrupt 0 using 0
49 {
50 1 uchar i=0;
51 1 if(first) //FIRST=1;打开方向按键判断标志
52 1 {
53 2 first=0;
54 2 k=(P2>>6);
55 2 k=k&0x03;
C51 COMPILER V8.02 MAIN 05/24/2012 19:52:39 PAGE 2
56 2 if(flag)
57 2 {
58 3 if(k==1) direction=3;//左
59 3 if(k==2) direction=1;//右
60 3 }
61 2 else
62 2 {
63 3 if(k==0) direction=4;//上
64 3 if(k==3) direction=2;//下
65 3 }
66 2 }
67 1 }
68 /*显示四个小格的方块*/
69 void playbuf(uchar buff,char offsetx,char offsety)
70 {
71 1 //i=(moxing+((dat&0xf0)|((dat&0x0f)<<2)));
72 1 change1((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((buff&0
-x0f)<<2)))))&0x0f)+offsety);
73 1 change1((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx,((*(((moxing+((buff&0xf0)|((b
-uff&0x0f)<<2))))+1))&0x0f)+offsety);
74 1 change1((((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2))))+2))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((
-buff&0x0f)<<2)))+2))&0x0f)+offsety);
75 1 change1((((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2))))+3))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((
-buff&0x0f)<<2)))+3))&0x0f)+offsety);
76 1
77 1 }
78 /*判断方块停止向下运动*/
79 bit tingzhixia(uchar buff,char offsetx,char offsety)
80 {
81 1 char x0,y0,x1,y1,x2,y2,x3,y3;
82 1 bit tz=0;
83 1 x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
84 1 x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
85 1 x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
86 1 x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
87 1 y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
88 1 y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
89 1 y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
90 1 y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
91 1
92 1 if(readfk(x0+1,y0))
93 1 {
94 2 if(!((((x0+1)==x1)&&(y0==y1))|(((x0+1)==x2)&&(y0==y2))|(((x0+1)==x3)&&(y0==y3))))
95 2 {
96 3 tz=1;
97 3 }
98 2 }
99 1 if(readfk(x1+1,y1))
100 1 {
101 2 if(!((((x1+1)==x0)&&(y1==y0))|(((x1+1)==x2)&&(y1==y2))|(((x1+1)==x3)&&(y1==y3))))
102 2 {
103 3 tz=1;
104 3 }
105 2 }
106 1 if(readfk(x2+1,y2))
107 1 {
108 2 if(!((((x2+1)==x0)&&(y2==y0))|(((x2+1)==x1)&&(y2==y1))|(((x2+1)==x3)&&(y2==y3))))
109 2 {
110 3 tz=1;
111 3 }
112 2 }
113 1 if(readfk(x3+1,y3))
C51 COMPILER V8.02 MAIN 05/24/2012 19:52:39 PAGE 3
114 1 {
115 2 if(!((((x3+1)==x0)&&(y3==y0))|(((x3+1)==x1)&&(y3==y1))|(((x3+1)==x2)&&(y3==y2))))
116 2 {
117 3 tz=1;
118 3 }
119 2 }
120 1 return(tz);
121 1 }
122 /*判断一行是否可以消除*/
123 bit hangman(uchar x)
124 {
125 1 uchar i;
126 1 bit man=1;
127 1 for(i=0;i<15;i++)
128 1 {
129 2 man=man&(readfk(x,i));
130 2 if(!man)
131 2 break;
132 2 }
133 1 return(man);
134 1 }
135 /*消除一行*/
136 void xiaohang(uchar x)
137 {
138 1 uchar i,j;
139 1 for(i=0;i<15;i++)
140 1 {
141 2 clear1(x,i);
142 2 }
143 1 for(i=1;i<=x;i++)
144 1 {
145 2 for(j=0;j<15;j++)
146 2 {
147 3 if(readfk(x-i,j))
148 3 {
149 4 change1(x-i+1,j);
150 4 clear1(x-i,j);
151 4 }
152 3 }
153 2 }
154 1 }
155 /*判断是否停止向右*/
156 bit tingzhiyou(uchar buff,char offsetx,char offsety)
157 {
158 1 char x0,y0,x1,y1,x2,y2,x3,y3;
159 1 bit tz=0;
160 1 x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
161 1 x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
162 1 x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
163 1 x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
164 1 y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
165 1 y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
166 1 y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
167 1 y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
168 1 if(readfk(x0,y0-1))
169 1 {
170 2 if(!(((x0==x1)&&((y0-1)==y1))|((x0==x2)&&((y0-1)==y2))|((x0==x3)&&((y0-1)==y3))))
171 2 {
172 3 tz=1;
173 3 }
174 2 }
175 1 if(readfk(x1,y1-1))
C51 COMPILER V8.02 MAIN 05/24/2012 19:52:39 PAGE 4
176 1 {
177 2 if(!(((x1==x0)&&((y1-1)==y0))|((x1==x2)&&((y1-1)==y2))|((x1==x3)&&((y1-1)==y3))))
178 2 {
179 3 tz=1;
180 3 }
181 2 }
182 1 if(readfk(x2,y2-1))
183 1 {
184 2 if(!(((x2==x0)&&((y2-1)==y0))|((x2==x1)&&((y2-1)==y1))|((x2==x3)&&((y2-1)==y3))))
185 2 {
186 3 tz=1;
187 3 }
188 2 }
189 1 if(readfk(x3,y3-1))
190 1 {
191 2 if(!(((x3==x0)&&((y3-1)==y0))|((x3==x1)&&((y3-1)==y1))|((x3==x2)&&((y3-1)==y2))))
192 2 {
193 3 tz=1;
194 3 }
195 2 }
196 1 return(tz);
197 1 }
198 /*判断是否停止向左*/
199 bit tingzhizuo(uchar buff,char offsetx,char offsety)
200 {
201 1 char x0,y0,x1,y1,x2,y2,x3,y3;
202 1 bit tz=0;
203 1 x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
204 1 x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
205 1 x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
206 1 x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
207 1 y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
208 1 y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
209 1 y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
210 1 y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
211 1 if(readfk(x0,y0+1))
212 1 {
213 2 if(!(((x0==x1)&&((y0+1)==y1))|((x0==x2)&&((y0+1)==y2))|((x0==x3)&&((y0+1)==y3))))
214 2 {
215 3 tz=1;
216 3 }
217 2 }
218 1 if(readfk(x1,y1+1))
219 1 {
220 2 if(!(((x1==x0)&&((y1+1)==y0))|((x1==x2)&&((y1+1)==y2))|((x1==x3)&&((y1+1)==y3))))
221 2 {
222 3 tz=1;
223 3 }
224 2 }
225 1 if(readfk(x2,y2+1))
226 1 {
227 2 if(!(((x2==x0)&&((y2+1)==y0))|((x2==x1)&&((y2+1)==y1))|((x2==x3)&&((y2+1)==y3))))
228 2 {
229 3 tz=1;
230 3 }
231 2 }
232 1 if(readfk(x3,y3+1))
233 1 {
234 2 if(!(((x3==x0)&&((y3+1)==y0))|((x3==x1)&&((y3+1)==y1))|((x3==x2)&&((y3+1)==y2))))
235 2 {
236 3 tz=1;
237 3 }
C51 COMPILER V8.02 MAIN 05/24/2012 19:52:39 PAGE 5
238 2 }
239 1 return(tz);
240 1 }
241 /*清除一个方块*/
242 void clearbuf(uchar dat,char setx,char sety)
243 {
244 1 uchar *i;
245 1 i=(moxing+((dat&0xf0)|((dat&0x0f)<<2)));
246 1 clear1(((((*i)&0xf0)>>4)+setx),(((*i)&0x0f)+sety));
247 1 clear1(((((*(i+1))&0xf0)>>4)+setx),(((*(i+1))&0x0f)+sety));
248 1 clear1(((((*(i+2))&0xf0)>>4)+setx),(((*(i+2))&0x0f)+sety));
249 1 clear1(((((*(i+3))&0xf0)>>4)+setx),(((*(i+3))&0x0f)+sety));
250 1 }
251 /*俄罗斯方块子程序*/
252 void fangkuai(void)
253 {
254 1 uchar fenshu=0;
255 1 char offsety,offsetx;
256 1 char offsety_buff,offsetx_buff;
257 1 uchar buff=0x10;
258 1 bit ting=0;
259 1 uchar i;
260 1 //flag5=1;
261 1 TMOD=1; //定时器工作方式
262 1 IT0=1; //边延有效
263 1 IT1=1;
264 1 EA=1; //开CPU中断
265 1 ET0=1; //开定时器中断
266 1 EX0=1; //开外部中断
267 1 EX1=1;
268 1 TL0=0x00;
269 1 TH0=0x00; //定时器初值
270 1 TR0=1; //启动定时器
271 1 k=5;
272 1 choose12864(2);
273 1 clear12864();
274 1 play16(0,0,0,els);
275 1 play16(0,0,1,els+32);
276 1 play16(0,0,2,els+64);
277 1 play16(0,2,0,els+96);
278 1 play16(0,2,1,els+128);
279 1 play8(0,0,3,shu0);
280 1 play8(0,1,3,shu0);
281 1 vertical(1,60,30);
282 1 vertical(1,60,127);
283 1 for(i=0;i<98;i++)
284 1 {
285 2 dot(30+i,1);
286 2 dot(30+i,62);
287 2 }
288 1 offsety=7;
289 1 offsetx=-3;
290 1 for(;;)
291 1 {
292 2 if(P3&0x04)
293 2 first=1;
294 2 if((k==0x02)&&((P3&0x04)==0x04))
295 2 {
296 3 offsety_buff=offsety;
297 3 ting=tingzhiyou(buff,offsetx,offsety);
298 3 if(!ting)
299 3 {
C51 COMPILER V8.02 MAIN 05/24/2012 19:52:39 PAGE 6
300 4 if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety)
301 4 offsety--;
302 4 clearbuf(buff,offsetx_buff,offsety_buff);
303 4 playbuf(buff,offsetx,offsety);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -