📄 testboard1.lst
字号:
469: {writ_com(0xc0);}
470: for(;cnt>0;cnt--)
471: {writ_data(*pt);pt++;}
472: writ_com(0x0c);
473: }
474: /******************************************
475: 向指定位置写数据
476: 作用:想指定位置写数
477: 入口:写入数据data,写入位置addr(0~39)
478: 出口:无
479: ******************************************
480: void disp_onedata(unsigned char data,unsigned char addr)
481: {
482: if(addr>19)
483: {addr-=20;addr+=0xc0;}
484: else
485: {;addr+=0x80;}
486: writ_com(addr);
487: writ_data(data);
488: }
489: /************************************************************
490: 总线空闲等待函数waitfree()
491: 作用:等待总线空闲
492: 入口:无
493: 出口:无
494: ************************************************************/
495: void waitfree(void)
496: {
497: TMR1ON=0;
498: TMR1IF=0;
499: TMR1L=0x65;
500: TMR1H=0xf0;
501: TMR1ON=1; //运行T1
502: while(!TMR1IF)
503: {
504: if(RA2)
505: {
506: TMR1L=0x65;
507: TMR1H=0xf0;
508: TMR1ON=1; //运行T1
509: }
510: }
511: }
512: /************************************************************
513: 延时函数d1mS()
514: 作用:延时1mS
515: ************************************************************/
516: void d1mS(void)
517: {
518: unsigned char cnt;
519: for(cnt=123;cnt>0;cnt--);
520: asm("nop");asm("nop");
521: }
522: /******************************************
523: 主循环程序main()
524: 入口:无
525: 出口:无
526: *******************************************/
527: main()
528: {
529: unsigned char count;
530: sfr_setup();
531: // buzz=1;
532: // lcd_init();
533: // disp_loge(welcome_words,20,0);
534: // disp_loge(type_words,20,1);
535: // d10mS();
536: // buzz=0;
537: // for(count=255;count>0;count--)
538: // {d10mS();}
539: // writ_com(0x01);
540: // d4mS();
541: // disp_loge(playpar,12,0);
542: // disp_loge(playstate,13,1);
543: waitfree();
544: asm("movf _PORTA,w");RAIF=0;RAIE=0;IOCA1=1;
545: GIE=1;INTE=1;
546: while(1)
547: {
548: ;
549: /*
550: if(softpsw&0x02)
551: {
552: disp_onedata(data_tab(nowdisc),3);
553: disp_onedata(data_tab(nowminH),9);
554: writ_data(data_tab(nowminL));
555: disp_onedata(data_tab(nowsecH),12);
556: writ_data(data_tab(nowsecL));
557: disp_onedata(data_tab(nowtrackH),17);
558: writ_data(data_tab(nowtrackL));
559: if(playpsw&0x01)
560: {disp_onedata('S',36);writ_data('c');writ_data('a');writ_data('n');}
561: else
562: {disp_onedata(' ',36);writ_data(' ');writ_data(' ');writ_data(' ');}
563: if(playpsw&0x08)
564: {disp_onedata('R',36);writ_data('e');writ_data('p');
565: writ_data('A');}
566: else if(playpsw&0x04)
567: {disp_onedata('R',36);writ_data('e');writ_data('p');
568: writ_data('1');}
569: softpsw&=0xfd;
570: }
571: */
572: }
573: }
574:
575: //CDC状态数据移位
576: void shiftdata(void)
577: {
578: unsigned char temp;
579: temp=STATUS;
580: #asm
581: bcf _STATUS,6
582: bsf _STATUS,5
583: rlf _discpsw0,f
584: rlf _discpsw1,f
585: rlf _discpsw2,f
586: rlf _discpsw3,f
587: rlf _discpsw4,f
588: rlf _discpsw5,f
589: rlf _discpsw6,f
590: rlf _discpsw7,f
591: #endasm
592: STATUS=temp;
593: }
594: //数据清除
595: void dataclear(void)
596: {
597: discpsw0=0;discpsw1=0;discpsw2=0;
598: discpsw3=0;discpsw4=0;discpsw5=0;
599: discpsw6=0;discpsw7=0;
600: }
601: /******************************************
602: 中断处理函数inthandle()
603: 作用:
604: 入口:无;
605: 出口:无;
606: *******************************************/
607: void interrupt inthandle(void)
608: {
609: if(INTE&&INTF)
610: {
611: RA0=0;
612: //************t1控制
613: TMR1IE=0;TMR1ON=0;TMR1IF=0; //停止1
614: TMR1L=0x65;TMR1H=0xf0; //T1初值
615: softpsw|=0x01; //树数据读取标志
616: //************读取数据
617: d1mS(); //延时准备读数
618: shiftdata(); //调整数据队列
619: if(RA2)
620: {discpsw0|=0x01;}
621: else
622: {discpsw0&=0xfe;}
623: //************准备下一位
624: while(RA2);
625: TMR1ON=1; //运行T1
626: TMR1IE=1;
627: //************复位INT中断
628: INTF=0;
629: }
630:
631: if(RAIE&&RAIF)
632: {
633: unsigned char temp;
634: if(softpsw&0x02)
635: {
636: temp=data_rec();
637: switch(temp)
638: {
639: case 0xf0: //数位1
640: data_send(nowdisc);break;
641: case 0xf1: //数位2
642: data_send(nowtrackH);break;
643: case 0xf2: //数位3
644: data_send(nowtrackL);break;
645: case 0xf3: //数位4
646: data_send(nowminH);break;
647: case 0xf4: //数位5
648: data_send(nowminL);break;
649: case 0xf5: //数位6
650: data_send(nowsecH);break;
651: case 0xf6: //数位7
652: data_send(nowsecL);softpsw&=0xfd;RA0=0;break;
653: default: ;
654: }
655: }
656: /* if(RA2)
657: {
658: TMR1IE=0;TMR1ON=0;TMR1IF=0; //停止1
659: TMR1L=0;TMR1H=0; //T1初值
660: TMR1ON=1; //运行T1
661: }
662: else
663: {
664: TMR1ON=0;
665: shiftdata(); //调整数据队列
666: if(TMR1H<0x04)
667: {discpsw0&=0xfe;}
668: else
669: {discpsw0|=0x01;}
670: TMR1IF=0;TMR1L=0x65;TMR1H=0xf0; //T1初值
671: TMR1ON=1;TMR1IE=1; //运行T1
672: }*/
673: asm("movf _PORTA,w");RAIF=0;RAIE=0;
674: }
675: if(TMR1IE&&TMR1IF)
676: {
677: TMR1IE=0;TMR1ON=0;TMR1IF=0; //停止1
678: softpsw&=0xFE; //关数据读取标志
679: if(discpsw7==0x99)
680: {
681: nowtrackH=discpsw6&0x0f;
682: nowtrackL=discpsw5>>4; //Track
683: nowminH=discpsw4&0x0f;
684: nowminL=discpsw3>>4; //Min
685: nowsecH=discpsw3&0x0f;
686: nowsecL=discpsw2>>4; //sec
687: playpsw&=0xf3;
688: playpsw|=discpsw2&0x0c; //REP状态
689: if(discpsw1&0x80) //SCAN状态
690: {playpsw|=0x01;}
691: else
692: {playpsw&=0xfe;}
693: }
694: else if(discpsw5==0x9b)
695: {nowdisc=discpsw4&0x0f;}
696: dataclear();waitfree();softpsw|=0x02;
697: asm("movf _PORTA,w");RAIF=0;RAIE=1;RA0=1;
698: }
699: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -