📄 test.lst
字号:
226 3 switch(ch){
227 4 case 0x48: chTest = 'W';break;
228 4 case 0x28: chTest = '3';break;
229 4 case 0x18: chTest = '7';break;
230 4 case 0x0C: chTest = '*';break;
231 4 case 0x0A: chTest = '#';break;
232 4 default:break;
233 4 }
234 3 break; }
235 2 case 0X6E:{ P1_4=1;delay(100);ch=P1;
236 3 switch(ch){
237 4 case 0x50: chTest = 'X';break;
238 4 case 0x30: chTest = '4';break;
239 4 case 0x18: chTest = 'F';break;
240 4 case 0x14: chTest = 'M';break;
241 4 case 0x12: chTest = 'R';break;
C51 COMPILER V8.15 TEST 10/28/2008 11:00:32 PAGE 5
242 4 default:break;
243 4 }
244 3 break; }
245 2 case 0X5E: {P1_5=1;delay(100);ch=P1;
246 3 switch(ch){
247 4 case 0x60: chTest = 'F';break;
248 4 case 0x30: chTest = 'F';break;
249 4 case 0x28: chTest = 'H';break;
250 4 case 0x24: chTest = 'I';break;
251 4 case 0x22: chTest = 'F';break;
252 4 default:break;
253 4 }
254 3 break;}
255 2 case 0X3E:{ P1_6=1;delay(100);ch=P1;
256 3 switch(ch){
257 4 case 0x60: chTest = 'K';break;
258 4 case 0x50: chTest = 'L';break;
259 4 case 0x48: chTest = 'F';break;
260 4 case 0x44: chTest = 'F';break;
261 4 case 0x42: chTest = 'N';break;
262 4 default:break;
263 4 }
264 3 break; }
265 2 }
266 1 // P1M0=p1m0;
267 1 // P1M1=0X00;
268 1 // delay(1000); //must need 按键反应调试这个,delay 2ms
269 1 // ch=P1;
270 1 P1M0=0x00; //将P1口都置成双向口 这两句位置必须放这里,放scan里也会死机
271 1 P1 = 0XFF; //为下次中断作准备,放这里能确保P1 的1到6口置高
272 1 if(ch!=0x02&&ch!=0x04&&ch!=0x08&&ch!=0x10&&ch!=0x20&&ch!=0x40) //有键按下
273 1 {
274 2 key_test = chTest ;
275 2 }
276 1
277 1 }
278
279 uchar scan(void) //键盘扫描
280 {
281 1
282 1 key_test = 0;
283 1 port(0X7C);
284 1 port(0X7A);
285 1 port(0X76);
286 1 port(0X6E);
287 1 port(0X5E);
288 1 port(0X3E);
289 1 return key_test;
290 1 }
291 void clk_down(void)
292 {
293 1 P2_0=1;
294 1 P2_0=0;
295 1 }
296 void clk_up(void)
297 {
298 1 P2_0=1;
299 1 }
300
301 void dial_all_num(void)
302 {
303 1 uchar n;
C51 COMPILER V8.15 TEST 10/28/2008 11:00:32 PAGE 6
304 1
305 1 for(n=0;n<SumNum;n++)
306 1 {
307 2 dial( dialNum[n]); //产生DTMF波形,但会一直存在,不会自动中止
308 2 delay(10000); //有一定的延时,需要
309 2 dial_pause(); //dtmf波形中止
310 2
311 2 }
312 1 }
313
314 void dial(uchar dial_num){
315 1 P1_7=0; //CE
316 1 clk_up();
317 1 switch(dial_num){
318 2 case '1':temp =0X01;dial_dtmf();break;
319 2 case '2':temp =0X02;dial_dtmf();break;
320 2 case '3':temp =0X03;dial_dtmf();break;
321 2 case '4':temp =0X04;dial_dtmf();break;
322 2 case '5':temp =0X05;dial_dtmf();break;
323 2 case '6':temp =0X06;dial_dtmf();break;
324 2 case '7':temp =0X07;dial_dtmf();break;
325 2 case '8':temp =0X08;dial_dtmf();break;
326 2 case '9':temp =0X09;dial_dtmf();break;
327 2 case '0':temp =0X0A;dial_dtmf();break;
328 2 case '*':temp =0X0B;dial_dtmf();break;
329 2 case '#':temp =0X0C;dial_dtmf();break;
330 2 case 'A':temp =0X0D;dial_dtmf();break;
331 2 case 'B':temp =0X0E;dial_dtmf();break;
332 2 case 'C':temp =0X0F;dial_dtmf();break;
333 2 case 'D':temp =0X00;dial_dtmf();break;
334 2 default: temp =0XFF;dial_dtmf();break;
335 2 }
336 1 }
337
338 void dial_dtmf(void){
339 1
340 1 uchar TEMP;
341 1 for(i=0;i<5;i++){
342 2 TEMP = temp & 0X01;
343 2 if(TEMP == 0X01){
344 3 switch(i){
345 4 case 0:temp_0 =1;break;
346 4 case 1:temp_1 =1;break;
347 4 case 2:temp_2 =1;break;
348 4 case 3:temp_3 =1;break;
349 4 case 4:temp_4 =1;break;
350 4 }
351 3 } else {
352 3 switch(i){
353 4 case 0:temp_0 =0;break;
354 4 case 1:temp_1 =0;break;
355 4 case 2:temp_2 =0;break;
356 4 case 3:temp_3 =0;break;
357 4 case 4:temp_4 =0;break;
358 4 }
359 3 }
360 2 temp = temp >> 1;
361 2 }
362 1 for(i=0;i<10;i++) { // 缩短或延长所拨号码的时间间隔
363 2 P2_1=temp_0; ;
364 2 clk_down();
365 2 P2_1=temp_0;
C51 COMPILER V8.15 TEST 10/28/2008 11:00:32 PAGE 7
366 2 P2_1=temp_1;
367 2 clk_down();
368 2 P2_1=temp_1;
369 2 P2_1=temp_2;
370 2 clk_down();
371 2 P2_1=temp_2;
372 2 P2_1=temp_3;
373 2 clk_down();
374 2 P2_1=temp_3;
375 2 P2_1=temp_4;
376 2 clk_down();
377 2 P2_1=temp_4;
378 2 }
379 1 clk_up();
380 1 delay(100000);//缩短或延长拨号按键音
381 1 }
382
383 void dial_pause(void) //中止DTMF波形
384 { for(i=0;i<10;i++) {
385 2 P2_1=1; ;
386 2 clk_down();
387 2 P2_1=1;
388 2 P2_1=1;
389 2 clk_down();
390 2 P2_1=1;
391 2 P2_1=1;
392 2 clk_down();
393 2 P2_1=1;
394 2 P2_1=1;
395 2 clk_down();
396 2 P2_1=1;
397 2 P2_1=1;
398 2 clk_down();
399 2 P2_1=1;
400 2 }
401 1 clk_up();
402 1 P1_7=1; //CE
403 1 delay(100000);
404 1 }
405
406
407
408 void main(void)
409 {
410 1 init_serialcomm();
411 1 init_interruptcomm();
412 1 FREE_HAND=0; //置低,前级电路运放
413 1 PSTN_CIN=0;
414 1 MAN_CIN=0;
415 1
416 1 P3M0=0X98; //下面3句测试SM8200 P3M0=0X98;
417 1 P3M1=0X00; //P3_7,P3_4,P3_3为输入,P3_5I/O
418 1 P3_5=0;
419 1
420 1 P1 = 0XFF; //为响应中断作准备
421 1 P2M0=0X10; //P2_4及HOOK_OFF_IN为高阻输入
422 1 P2M1=0X00;
423 1
424 1 while(1)
425 1 {
426 2
427 2 if(HOOK_OFF_IN==0){ //0下1上
C51 COMPILER V8.15 TEST 10/28/2008 11:00:32 PAGE 8
428 3 delay(4000000000);
429 3 if(HOOK_OFF_IN==1){ send_char_com('I'); } //话机弹起
430 3 }
431 2 if(HOOK_OFF_IN==1){
432 3
433 3 delay(4000000000);
434 3 if(HOOK_OFF_IN==0){ send_char_com('H');}//话机按下
435 3 }
436 2
437 2 // scan();
438 2 }
439 1
440 1
441 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1247 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 28 2
IDATA SIZE = ---- ----
BIT SIZE = 5 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -