📄 main.lst
字号:
C51 COMPILER V8.01 MAIN 05/31/2008 16:27:49 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: F:\Keil_v801\新建文件夹\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //南阳理工学院
2 //作者QQ:497259320
3 //临近考试,写的很急,有一些BUG,希望大家指出改正并告诉我!谢!
4 //此程序为了减小处理器的负担而使用占用大量数据存储器的方法。比如数组length[80]
5 //绝对可以缩减为length[40],但在算法和存储上更复杂!
6 //在硬件上实现功能得改一些地方!
7 #include "12864.h"
8 #include "zifu.h"
9 uchar length[80]={0,8,1,8};
10 bit flag2,flag=0; //0表示行,1表示列 flag1是步进标志 flag2表示是否蛇头遇到蛇身 1表示没有
11 uchar direction=1;
12 bit flag3,flag1=0;
13 uchar k,dengji=2; //flag3是食物是否重选的标志。k是按键号
14 uchar p=20; //定时次数
15 void zhongduan() interrupt 0 using 0
16 {
17 1 k=(P2>>6);
18 1 k=k&0x03;
19 1 if(flag)
20 1 {
21 2 if(k==1) direction=3;//左
22 2 if(k==2) direction=1;//右
23 2 }
24 1 else
25 1 {
26 2 if(k==0) direction=4;//上
27 2 if(k==3) direction=2;//下
28 2 }
29 1 }
30 void dingshi() interrupt 1 using 1 //定时程序.产生步进时间
31 {
32 1 if(p--)
33 1 {
34 2 TL0=0;
35 2 TH0=0xa0;
36 2 flag1=0;
37 2 }
38 1 else
39 1 {
40 2 flag1=1;
41 2 TL0=0;
42 2 TH0=0x00;
43 2 p=20-(dengji>>1);
44 2 }
45 1 }
46 main()
47 {
48 1 uchar food[2]={12,8};
49 1 uchar i,x,y;
50 1 choose12864(2);
51 1 init12864();
52 1 clear12864();
53 1 for(i=0;i<3;i++)
54 1 {
55 2 play16(0,(2+(i<<1)),0,(xuexiao+(i<<5))); //屏 列 页 地址
C51 COMPILER V8.01 MAIN 05/31/2008 16:27:49 PAGE 2
56 2 delay1ms(300);
57 2 } //显示“南阳理"
58 1 for(i=0;i<3;i++)
59 1 {
60 2 play16(1,((i<<1)),0,xuexiao+((i+3)<<5));
61 2 delay1ms(300);
62 2 } //显示“工学院"
63 1 for(i=0;i<96;i++)
64 1 {
65 2 dot(16+i,15);
66 2 delay1ms(2);
67 2 } //显示直线
68 1 play16(0,4,1,sjz);
69 1 play16(0,6,1,sjz+32);
70 1 play16(1,0,1,sjz+64); //显示设计者
71 1 delay1ms(450);
72 1 delay1ms(450);
73 1 play16(0,4,2,ming);
74 1 delay1ms(350);
75 1 play16(0,6,2,ming+32);
76 1 delay1ms(350);
77 1 play16(1,0,2,ming+64);
78 1 delay1ms(350);
79 1 play16(1,2,2,ming+96);
80 1 delay1ms(350);
81 1 delay1ms(350);
82 1 choose12864(2);
83 1 clear12864();
84 1 //页面二
85 1 vertical(1,61,30);
86 1 vertical(1,61,127);
87 1 for(i=0;i<98;i++)
88 1 {
89 2 dot(30+i,1);
90 2 dot(30+i,62);
91 2 }
92 1 play16(0,0,0,tan);
93 1 play16(0,0,1,chi);
94 1 play16(0,0,2,she);
95 1 change(length,(length+1));
96 1 change((length+2),(length+3));
97 1 change(food,food+1);
98 1 TMOD=1; //定时器工作方式
99 1 IT0=1; //边延有效
100 1 EA=1; //开CPU中断
101 1 ET0=1; //开定时器中断
102 1 EX0=1; //开外部中断
103 1 TL0=0x00;
104 1 TH0=0x00; //定时器初值
105 1 TR0=1; //启动定时器
106 1 do
107 1 {
108 2 while(!flag1);
109 2 x=*(length);
110 2 y=*(length+1);
111 2 switch(direction) //东
112 2 {
113 3 case 1:
114 3 {
115 4 for(i=0;i<dengji-1;i++)
116 4 {
117 5 *(length+(i<<1))=*(length+(i<<1)+2);
C51 COMPILER V8.01 MAIN 05/31/2008 16:27:49 PAGE 3
118 5 *(length+(i<<1)+1)=*(length+(i<<1)+3);
119 5 }
120 4 (*(length+(dengji<<1)-2))++;
121 4 flag=0;
122 4 break;
123 4 }
124 3 case 2: //南
125 3 {
126 4 for(i=0;i<dengji-1;i++)
127 4 {
128 5 *(length+(i<<1))=*(length+(i<<1)+2);
129 5 *(length+(i<<1)+1)=*(length+(i<<1)+3);
130 5 }
131 4 (*(length+(dengji<<1)-1))++;
132 4 flag=1;
133 4 break;
134 4 }
135 3 case 3: //西
136 3 {
137 4 for(i=0;i<dengji-1;i++)
138 4 {
139 5 *(length+(i<<1))=*(length+(i<<1)+2);
140 5 *(length+(i<<1)+1)=*(length+(i<<1)+3);
141 5 }
142 4 (*(length+(dengji<<1)-2))--;
143 4 flag=0;
144 4 break;
145 4 }
146 3 case 4:
147 3 { //北
148 4 for(i=0;i<dengji-1;i++)
149 4 {
150 5 *(length+(i<<1))=*(length+(i<<1)+2);
151 5 *(length+(i<<1)+1)=*(length+(i<<1)+3);
152 5 }
153 4 (*(length+(dengji<<1)-1))--;
154 4 flag=1;
155 4 break;
156 4 }
157 3 }
158 2 if(((*(length+(dengji<<1)-2))==food[0])&&((*(length+(dengji<<1)-1))==food[1]))
159 2 {
160 3 for(i=dengji;i>0;i--)
161 3 {
162 4 *(length+(i<<1))=*(length+(i<<1)-2);
163 4 *(length+(i<<1)+1)=*(length+(i<<1)-1);
164 4 }
165 3 *length=x;
166 3 *(length+1)=y;
167 3 dengji++;
168 3 do
169 3 {
170 4 flag3=0;
171 4 food[0]=TL0%24;
172 4 food[1]=TL0%15;
173 4 for(i=0;i<dengji-1;i++)
174 4 {
175 5 if((*(length+(i<<1)))==food[0]&&((*(length+(i<<1)+1))==food[1]))
176 5 {
177 6 flag3=1;
178 6 break;
179 6 }
C51 COMPILER V8.01 MAIN 05/31/2008 16:27:49 PAGE 4
180 5 }
181 4 }while(flag3);
182 3 change(food,food+1);
183 3 }
184 2 flag2=1;
185 2 for(i=0;i<dengji-1;i++)
186 2 {
187 3 if(*(length+(i<<1))==*(length+(dengji<<1)-2)&&(*(length+(i<<1)+1)==*(length+(dengji<<1)-1)))
188 3 {
189 4 flag2=0;
190 4 break;
191 4 }
192 3 }
193 2 flag2=flag2&&*(length+(dengji<<1)-2)>=0&&*(length+(dengji<<1)-2)<24;
194 2 flag2=flag2&&*(length+(dengji<<1)-1)>=0&&*(length+(dengji<<1)-1)<15;
195 2 if(flag2)
196 2 {
197 3 clear(&x,&y);
198 3 for(i=0;i<dengji;i++)
199 3 {
200 4 change(length+(i<<1),length+(i<<1)+1);
201 4 }
202 3 flag1=0;
203 3 play8(0,0,3,shu0+((dengji/10)<<4));
204 3 play8(0,1,3,shu0+(((dengji)%10)<<4));
205 3 }
206 2 }
207 1 while(flag2);
208 1 delay1ms(450);
209 1 delay1ms(450);
210 1 choose12864(2);
211 1 clear12864();
212 1 play16(0,4,1,over);
213 1 play16(0,6,1,over+32);
214 1 play16(1,0,1,over+64);
215 1 play16(1,2,1,over+96);
216 1 while(1);
217 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2333 ----
CONSTANT SIZE = 802 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 84 31
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -