📄 spy_lcd.lst
字号:
706 2 disp_one_hz(5,5,numeric,1);
707 2 disp_one_hz(3,5,numeric,1);
708 2 disp_one_hz(5,5,numeric,1);
709 2 }
710 1 else if(a>=10000&&a<65535)//判断a是否为万位数
711 1 { disp_one_hz(a/10000,5,numeric,1);//显示万位数
712 2 a=a%10000;
713 2 disp_one_hz(a/1000,5,numeric,1);//显示千位数
714 2 a=a%1000;
715 2 disp_one_hz(a/100,5,numeric,1);//显示百位数
716 2 a=a%100;
717 2 disp_one_hz(a/10,5,numeric,1);//显示十位数
718 2 disp_one_hz(a%10,5,numeric,1);//显示个位数
719 2 }
720 1 }
721
722
723 void freq_value(uint PL) //显示扫频时频率变化值,
724 {
725 1 p1.x=100;
726 1 p1.y=0;
727 1 p2.x=127;
728 1 p2.y=15;
729 1 draw_srec(p1,p2,0);//先清这一行数字区域
730 1 cursor.x=100;
731 1 cursor.y=0;
732 1 transfer(PL);
733 1 }
734
735 void PLUS_value(uint ZY) //显示扫频时幅值变化值
736 { p1.x=100;
737 1 p1.y=16;
738 1 p2.x=127;
739 1 p2.y=31;
740 1 draw_srec(p1,p2,0);//先清这一行数字区域
741 1 cursor.x=100;
742 1 cursor.y=16;
743 1 transfer((ZY/10)); //显示整数部分
744 1 disp_one_hz(10,5,numeric,1); //显示小数点
745 1 transfer((ZY%10)); //显示小数点后面的数字(一位)
746 1
747 1 }
748
749 void voltage_value(uint DY) //显示扫频议输出的幅值
C51 COMPILER V7.06 SPY_LCD 04/22/2007 11:06:48 PAGE 17
750 { p1.x=100;
751 1 p1.y=47;
752 1 p2.x=127;
753 1 p2.y=63;
754 1 draw_srec(p1,p2,0);//先清这一行数字区域
755 1 cursor.x=100;
756 1 cursor.y=47;
757 1 transfer(DY);
758 1 }
759
760
761 void pinduanhao(uchar PDH) //显示频段号 PDH =1为A频段,=2为B频段,=3为C频段
762 { cursor.x=114;
763 1 cursor.y=32;
764 1 transfer(PDH);
765 1 }
766
767
768 void saopingeshi(uchar SPGS) //显示为扫频格式 SPGS=1为单次,=2为循环扫频
769 { cursor.x=121;
770 1 cursor.y=32;
771 1 transfer(SPGS);
772 1 }
773
774
775 void zuobiaozhu() //显示界面初始化
776 { point PP1,PP2;
777 1 offlcd(); /*关闭LCD*/
778 1 onlcd(); /*打开LCD*/
779 1 clr_lcd(); /*清屏*/
780 1
781 1 PP1.x=0;
782 1 PP1.y=0;
783 1 PP2.x=0;
784 1 PP2.y=63;
785 1 draw_line(PP1,PP2,1); //画纵轴
786 1 PP1.x=0;
787 1 PP1.y=63;
788 1 PP2.x=99;
789 1 PP2.y=63;
790 1 draw_line(PP1,PP2,1); //画横轴
791 1 //显示字母f
792 1 cursor.x=107;
793 1 cursor.y=32;
794 1 disp_one_hz(5,6,letter,1); //显示f
795 1
796 1
797 1 }
798
799
800
801 void main()
802 {
803 1 point fre_bre;
804 1 point zbdwstar_cx;
805 1 point zbdwend_cx;
806 1
807 1 zuobiaozhu(); //显示界面初始化
808 1 init(); /*初始化串口*/
809 1 EA=1; /*总中断允许*/
810 1 DENG=0;
811 1
C51 COMPILER V7.06 SPY_LCD 04/22/2007 11:06:48 PAGE 18
812 1 /*主程序循环*/
813 1 for(;;)
814 1 { // sp_fre=1;sp_bre=1; st_st=1;bre_sp=32; //调试程序时用
815 2
816 2
817 2 if(iend==1&&istart==0) //串口接受完一组数据了么?
818 2 {
819 3 if(shuju[0]==0x1b) //是正常数据么?
820 3 {
821 4 switch(shuju[1]) //数据命令类型判断
822 4 {
823 5 case 0x92: //为扫频时发出的频率值
824 5 {
825 6
826 6 sp_fre=1; //置扫频时频率值处理标志
827 6 shuju[3]=shuju[3]<<8; //变成高2位
828 6 fre_sp=shuju[3]|shuju[2];
829 6 if(fre_sp==50) //接受到的频率等50HZ么?
830 6 {st_st=1; }//以此来刷新显示幅频特性区
831 6 freq_value(fre_sp); //显示扫频时频率变化值,
832 6 tally=fre_sp;
833 6 }break;
834 5 case 0x94: //为扫频时发出的幅度比值
835 5 {sp_bre=1; //置扫频时幅值处理标志
836 6 shuju[3]=shuju[3]<<8; //变成高2位
837 6 bre_sp=shuju[3]|shuju[2];
838 6
839 6 PLUS_value(bre_sp);//显示扫频时幅值变化值
840 6
841 6 }break;
842 5 case 0x11: //为扫频议发出的固定幅值
843 5 {
844 6 shuju[3]=shuju[3]<<8; //变成高2位
845 6 voltaga_sp=shuju[3]|shuju[2];
846 6 voltage_value(voltaga_sp); //显示扫频议输出的幅值
847 6
848 6 }break;
849 5 case 0xa0: //为查询时发出的频率值
850 5 {
851 6 cx_fre=1; //置查询时频率值处理标志
852 6 shuju[3]=shuju[3]<<8;//变成高2位
853 6 fre_cx=shuju[3]|shuju[2];
854 6 freq_value(fre_cx); //显示查询时频率变化值,
855 6 // if((counter_cx>=0)&&(counter_cx<=99))
856 6 {
857 7 if((fre_cx)<(tally)) //确定查询竖线是向左移么?
858 7 {
859 8 // if(counter_cx>0)
860 8 {counter_cx--;
861 9 direction=0; //置查询光标线向左移标志
862 9 } // 如果fre_cx0==fre_cx说明查询键到了频段的两端还在按下。这时cuuter_cx不计数
863 8 }
864 7 if(fre_cx>tally) //确定查询竖线是向右移么?
865 7 {
866 8 //if(counter_cx<99)
867 8 {counter_cx++;
868 9 direction=1; ///置查询光标线向右移标志
869 9 }
870 8 }
871 7
872 7 }
873 6 if(fre_cx==50) { counter_cx=0; }
C51 COMPILER V7.06 SPY_LCD 04/22/2007 11:06:48 PAGE 19
874 6 if((fre_cx==3018&&pdlx==1)||(fre_cx==2003&&pdlx==2)||(fre_cx==1001&&pdlx==3))
875 6 {counter_cx=99;tally=fre_cx; }
876 6
877 6 tally=fre_cx; //把新查询到的频率值赋给老频率值
878 6 }break;
879 5 case 0x80: //为查询时发出的幅度值
880 5 {
881 6 cx_bre=1; //置查询时幅值处理标志
882 6 shuju[3]=shuju[3]<<8; //变成高2位
883 6 bre_cx=shuju[3]|shuju[2];
884 6 PLUS_value(bre_cx); //显示查询时幅值变化值
885 6 }break;
886 5 case 0xc0: //为扫频频段号命令
887 5 {
888 6 pdlx=shuju[2];
889 6 pinduanhao(pdlx); //显示频段号 PDH =1为A频段,=2为B频段,=3为C频段
890 6
891 6 }break;
892 5 case 0xc1: //为扫频格式:单次/循环命令
893 5 {
894 6 spgs=shuju[2];
895 6 saopingeshi(spgs); //显示为扫频格式 SPGS=1为单次,=2为循环扫频
896 6
897 6 }break;
898 5
899 5 }
900 4 } iend=0;//在此置0是:让数据命令类型判断只能执行一次,或着说只有此串口再接受到新数据才能再判断
901 3 }
902 2
903 2
904 2 if(sp_fre==1&&sp_bre==1) //绘幅频曲线图
905 2 { sp_fre=0;
906 3 sp_bre=0;
907 3
908 3 if(st_st==1) //开始键按下了么?
909 3 {p1.x=1;
910 4 p1.y=0;
911 4 p2.x=99;
912 4 p2.y=62;
913 4 draw_srec(p1,p2,0);//清曲线显示区域图形
914 4 // DENG=!DENG;
915 4 zbdwstar_cx.x=0;
916 4 zbdwstar_cx.y=0;
917 4 zbdwend_cx.x=0;
918 4 zbdwend_cx.y=63;
919 4 draw_line(zbdwstar_cx,zbdwend_cx,1); //画纵轴线
920 4 zbdwstar_cx.x=0;
921 4 zbdwstar_cx.y=63;
922 4 zbdwend_cx.x=99;
923 4 zbdwend_cx.y=63;
924 4 draw_line(zbdwstar_cx,zbdwend_cx,1); //画横轴线
925 4
926 4 st_st=0; //开始键按下标志复位
927 4 counter=0; //频率计数器标志复位
928 4 counter_cx=0;// 查询计数器标志复位
929 4 // shuju_y[]=0; //清曲线Y轴坐标数据
930 4 }
931 3 fre_bre.x=counter; //根据频率计数值定位X轴光标
932 3 fre_bre.y=33-(bre_sp/10); //根据幅值比值定位Y轴光标, 63-30=33处开始显示曲线,另外除十是将主机发过来
-的数据小数点舍去,此处没进行四舍五入算法因为曲线只是显示大概位置,具体参数要看幅值处显示的参数
933 3 shuju_y[counter]=fre_bre.y; //记录扫过曲线点Y轴的坐标
934 3 disp_one_dot(fre_bre,1); //绘制幅频特性曲线
C51 COMPILER V7.06 SPY_LCD 04/22/2007 11:06:48 PAGE 20
935 3
936 3 counter++; //频率计数器标志+1
937 3 counter_cx++;// 查询计数器标志+1
938 3 if(spgs==1&&counter_cx>99) {counter_cx=99;} //只需判断是否在单次扫频格式下,在循环格式下遇到开始键按下
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -