C51 COMPILER V9.57.0.0 MAIN 06/14/2022 09:51:18 PAGE 1 C51 COMPILER V9.57.0.0, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\Objects\main.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE Main\main.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(.\Includes) DEBUG OBJE -CTEXTEND PRINT(.\Listings\main.lst) TABS(2) OBJECT(.\Objects\main.obj) line level source 1 #include "public.h" 2 #include "key.h" 3 #include "stdio.h" 4 #include "timer.h" 5 6 //定义74HC595控制管脚 7 sbit SRCLK=P3^6; //移位寄存器时钟输入 8 sbit RCLK=P3^5; //存储寄存器时钟输入 9 sbit SER=P3^4; //串行数据输入 10 11 #define LEDDZ_COL_PORT P0 //点阵列控制端口 12 13 u8 death[8]={0x00,0x38,0x6e,0x7c,0x7c,0x6e,0x38,0x00}; 14 15 u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED点阵显示图像的列数据 16 u8 map[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; 17 u8 step[4][2] = {{1,0},{0,1},{-1,0},{0,-1}}; 18 19 20 u8 queue_x[65]; 21 u8 queue_y[65]; 22 u8 leader=0; 23 u8 tail=0; 24 u8 length=0; 25 26 u8 act=0; 27 u8 game_over=0; 28 u8 turn=0; 29 30 u8 direction=0; 31 u8 head_x = 3; 32 u8 head_y = 3; 33 34 u8 apple_x=4; 35 u8 apple_y=4; 36 37 u8 timer = 0; 38 39 u8 i; 40 u8 j; 41 /******************************************************************************* 42 * 函 数 名 : hc595_write_data(u8 dat) 43 * 函数功能 : 向74HC595写入一个字节的数据 44 * 输 入 : dat:数据 45 * 输 出 : 无 46 *******************************************************************************/ 47 48 void display(u8 x, u8 y) 49 { 50 1 u8 one = 0x01; 51 1 map[x] = map[x] + (one<>7;//优先传输一个字节中的高位 87 2 dat<<=1;//将低位移动到高位 88 2 SRCLK=0; 89 2 delay_10us(1); 90 2 SRCLK=1; 91 2 delay_10us(1);//移位寄存器时钟上升沿将端口数据送入寄存器中 92 2 } 93 1 RCLK=0; 94 1 delay_10us(1); 95 1 RCLK=1;//存储寄存器时钟上升沿将前面写入到寄存器的数据输出 96 1 } 97 98 void show(u8 gled_row[8]) 99 { 100 1 u8 i=0; 101 1 for(i=0;i<8;i++)//循环8次扫描8行、列 102 1 { 103 2 LEDDZ_COL_PORT=gled_col[i];//传送列选数据 104 2 hc595_write_data(gled_row[i]);//传送行选数据 105 2 delay_10us(100);//延时一段时间,等待显示稳定 106 2 hc595_write_data(0x00);//消影 107 2 } 108 1 } 109 110 void monitor_key() 111 { 112 1 u8 key=key_scan(0); 113 1 if(key==KEY1_PRESS) 114 1 { 115 2 turn = 1; 116 2 } C51 COMPILER V9.57.0.0 MAIN 06/14/2022 09:51:18 PAGE 3 117 1 else if(key==KEY2_PRESS) 118 1 { 119 2 turn = 3; 120 2 } 121 1 else if(key==KEY3_PRESS) 122 1 { 123 2 124 2 } 125 1 else if(key==KEY4_PRESS) 126 1 { 127 2 128 2 } 129 1 } 130 131 void timer0() interrupt 1 132 { 133 1 timer0_reset(0x4c,0x00); 134 1 timer++; 135 1 if(timer==15) 136 1 { 137 2 timer = 0; 138 2 act=1; 139 2 } 140 1 } 141 142 void rand_apple() 143 { 144 1 u8 k; 145 1 u8 rand=TL0%(64-length); 146 1 u8 count = 0; 147 1 u8 over = 0; 148 1 for(i=0;i<8;i++) 149 1 { 150 2 for(j=0;j<8;j++) 151 2 { 152 3 k = tail; 153 3 over = 0; 154 3 while(k != leader){ 155 4 k = (k+1)%65; 156 4 if(i == queue_x[k] && j == queue_y[k]) 157 4 { 158 5 over = 1; 159 5 } 160 4 } 161 3 if(over == 0)// over == 0 but not run rightly 162 3 { 163 4 if(count == rand) 164 4 { 165 5 apple_x = i; 166 5 apple_y = j; 167 5 return; 168 5 } 169 4 count++; 170 4 } 171 3 } 172 2 } 173 1 } 174 175 void main() 176 { 177 1 u8 i=0; 178 1 timer0_init(0x01,0x4c,0x00); C51 COMPILER V9.57.0.0 MAIN 06/14/2022 09:51:18 PAGE 4 179 1 push(head_x,head_y); 180 1 rand_apple(); 181 1 display(apple_x, apple_y); 182 1 while(1) 183 1 { 184 2 monitor_key(); 185 2 if(act && game_over == 0){ 186 3 direction += turn; 187 3 direction %= 4; 188 3 head_x += step[direction][0]; 189 3 head_y += step[direction][1]; 190 3 if(head_x >=8 || head_x < 0 || head_y >= 8 || head_y < 0) 191 3 { 192 4 game_over = 1; 193 4 } 194 3 195 3 i = tail; 196 3 while(i != leader){ 197 4 i = (i+1)%65; 198 4 if(head_x == queue_x[i] && head_y == queue_y[i]) 199 4 { 200 5 game_over = 1; 201 5 } 202 4 } 203 3 204 3 if(game_over == 0) 205 3 { 206 4 if(head_x == apple_x && head_y == apple_y) 207 4 { 208 5 del(apple_x,apple_y); 209 5 push(head_x,head_y); 210 5 rand_apple(); 211 5 display(apple_x,apple_y); 212 5 } 213 4 else 214 4 { 215 5 push(head_x,head_y); 216 5 pop(); 217 5 } 218 4 } 219 3 turn = 0; 220 3 act = 0; 221 3 } 222 2 if(game_over) 223 2 { 224 3 show(death); 225 3 } 226 2 else 227 2 { 228 3 show(map); 229 3 } 230 2 } 231 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 1063 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = 177 7 PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- C51 COMPILER V9.57.0.0 MAIN 06/14/2022 09:51:18 PAGE 5 BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)