?? key.lst
字號:
175 1 uchar length;
176 1 RI=0;
177 1 rs232buf[0]=SBUF; /*接收包頭:0x1b*/
178 1 rxd_by_232(); /*接收包頭:0x10*/
179 1 if(err_rxd_flag==1){goto END;}
C51 COMPILER V7.09 KEY 01/05/2006 17:21:44 PAGE 4
180 1 else{rs232buf[1]=uc0;}
181 1 rxd_by_232(); /*接收命令句柄*/
182 1 if(err_rxd_flag==1){goto END;}
183 1 else{rs232buf[2]=uc0;}
184 1 rxd_by_232(); /*接收數據包序號*/
185 1 if(err_rxd_flag==1){goto END;}
186 1 else{rs232buf[3]=uc0;}
187 1 rxd_by_232(); /*接收數據長度*/
188 1 if(err_rxd_flag==1){goto END;}
189 1 else{rs232buf[4]=uc0;}
190 1 length=uc0;
191 1 if(length<5){n=length=5;}//goto AA;
192 1 else{_nop_();}
193 1 for(k=5;k<(length+2);k++)
194 1 {
195 2 rxd_by_232(); /*接收數據*/
196 2 if(err_rxd_flag==1){goto END;}
197 2 else{rs232buf[k]=uc0; }
198 2 }
199 1 END:
200 1 TestLED=~TestLED;
201 1 }
202 //=============================================================
203 /* CRC-16的C程序. *ptr指向發送數據塊的首地址, len是數據塊以字節為單位的長度.*/
204 /* 按位計算CRC雖然代碼簡單,所占用的內存比較少,
205 但其最大的缺點就是一位一位地計算會占用很多的處理器處理時間,*/
206 uint cal_crc(uchar len,uchar *ptr) //crc16計算
207 {
208 1 uchar i;
209 1 uint crc=0;
210 1 while(len--!=0)
211 1 {
212 2 for(i=0x80; i!=0; i/=2)
213 2 {
214 3 if((crc&0x8000)!=0) {crc*=2; crc^=0x8005;} //* 余式CRC乘以2再求CRC *
215 3 else{crc*=2;}
216 3 if((*ptr&i)!=0){crc^=0x8005;} //* 再加上本位的CRC *
217 3 }
218 2 ptr++;
219 2 }
220 1 return(crc);
221 1 }
222 //===========================================
223 void return_OK(uchar d)
224 {
225 1 uchar n;
226 1 uint crc;
227 1 rs232buf[0]=0x4f;
228 1 rs232buf[1]=0x4b; //OK
229 1 rs232buf[2]=0x00; //包序號
230 1 rs232buf[3]=0x05; //命令長度
231 1 rs232buf[4]=d; //命令長度
232 1 crc=cal_crc(5,rs232buf);//crc_16校驗
233 1 rs232buf[5]=crc>>8;
234 1 rs232buf[6]=crc;
235 1 for(n=0;n<7;n++){sbuwork(rs232buf[n]);}//發送數據
236 1 }
237 //===========================================
238 void main(void)
239 {
240 1 uchar n;
241 1 uchar handle;
C51 COMPILER V7.09 KEY 01/05/2006 17:21:44 PAGE 5
242 1 uchar key_num;
243 1 uchar key_d;
244 1 uchar KeyNum[20];
245 1 ulong coun;
246 1 InitSBUF();
247 1 P0=0xff;
248 1 P2=0x00;
249 1 for(n=0;n<20;n++)
250 1 {KeyNum[n]=0xff;}
251 1 key_num=0xff;
252 1 ES=1; //開串行中斷
253 1 coun=0;
254 1 rxd_flag=0;
255 1 while(1)
256 1 {
257 2 SHIFTLED=KeyOut;
258 2 // if(coun==0x0ff){coun=0;TestLED=~TestLED;}
259 2 coun++;
260 2 key_d=key_press();
261 2 if(key_d<0xff)
262 2 {key_num=key_d;}
263 2 /*if(key_d<0xff) //有鍵值
264 2 {
265 2 for(n=0;n<16;n++)
266 2 {
267 2 if(KeyNum[n]==0xff)
268 2 {
269 2 KeyNum[n]=key_d;
270 2 }
271 2 }
272 2 }
273 2 if(KeyNum[15]<0xff){KeyNum[15]=0xff;}
274 2 if((KeyNum[0]<0xff)&&(key_num==0xff))
275 2 {
276 2 key_num=KeyNum[0];
277 2 for(n=0;n<15;n++)
278 2 {
279 2 KeyNum[n]=KeyNum[n+1];
280 2 }
281 2 }*/
282 2 if(key_num==0xff){KeyOut=1;}
283 2 else{KeyOut=0;} //消除按鍵標志
284 2 if(rxd_flag==1)
285 2 {
286 3 rxd_flag=0;
287 3 ES=0;
288 3 return_OK(key_num);
289 3
290 3 handle=rs232buf[2];//命今字
291 3 //for(n=0;n<12;n++){sbuwork(rs232buf[n]);}//發送數據
292 3 /* //return_OK(key_num);
293 3 switch(handle)
294 3 {
295 3 case GetKey: //返回鍵值
296 3 {
297 3 return_OK(key_num);
298 3 break;
299 3 }
300 3 case OpenBeep: //開蜂鳴器
301 3 {
302 3 buzzer(rs232buf[5],120,120);
303 3 return_OK(key_num);
C51 COMPILER V7.09 KEY 01/05/2006 17:21:44 PAGE 6
304 3 break;
305 3 }
306 3 case TestKey:
307 3 {
308 3 return_OK(key_num);
309 3 break;
310 3 }
311 3 case OpenMoneyBox:
312 3 {
313 3 return_OK(key_num);
314 3 break;
315 3 }
316 3 case CloseCat:
317 3 {
318 3 return_OK(key_num);
319 3 break;
320 3 }
321 3 case English:
322 3 {
323 3 return_OK(key_num);
324 3 break;
325 3 }
326 3 case Number:
327 3 {
328 3 return_OK(key_num);
329 3 break;
330 3 }
331 3 default:{break;}
332 3 }
333 3 key_num=0xff;
334 3 ES=1;
335 3 for(n=0;n<30;n++){rs232buf[n]=0;}//發送數據*/
336 3 key_num=0xff;
337 3 ES=1;
338 3 }
339 2 }
340 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 569 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 38
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -