找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1862|回复: 0
打印 上一主题 下一主题
收起左侧

控制惠普公司的电容检测仪器采集抽检样品后做质量分析图表

[复制链接]
跳转到指定楼层
楼主
ID:242076 发表于 2017-10-23 14:08 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
HP美国惠普公司的HP4278电容测量仪后面有串口接口和GPIB接口等,都可以与PC机连接采集到实时测量到的电容数据,本程序自动收到数据后,进行正态分布分析,可以及时地给生产线抽检人员快速提供质检报告。

源程序如下:
  1. /* ======================================================================= */
  2. /*   SQCC.C :                                                              */
  3. /*                                                                         */
  4. /*   Copyright (c) 1994,95 Yingte Instruments. All rights reserved.        */
  5. /*                                                 10-3-1993  by BXY       */
  6. /* ======================================================================= */
  7. #include <ctype.h>
  8. #include <conio.h>
  9. #include <dos.h>
  10. #include <io.h>
  11. #include <memory.h>
  12. #include <malloc.h>
  13. #include <math.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <stdlib.h>
  17. #include <stdarg.h>
  18. #include <time.h>
  19. #include <sys/types.h>
  20. #include <sys/stat.h>
  21. #define ANSI                /* Delete for UNIX version. */

  22. #include <graph.h>
  23. #include <process.h>
  24. #include <errno.h>

  25. #include "sgwindow.h"
  26. #include <mouse.h>
  27. #include <guass.h>
  28. #include "yp.h"
  29. #include <gpibc.h>

  30. int compcode;     /*  Completion code for reporting problems. This is set */
  31.                   /*   by the routines below & tested in calling program. */

  32. #define MAXSTR 100

  33. char cnumbuf[MAXSTR] = { MAXSTR + 2, 0 };
  34. char tmpbuf[MAXSTR];

  35. #define MaxWidth 5
  36. #define MaxLength 22

  37. void    YpGl(void);
  38. void    ChpGl(void);
  39. void STATISRESULT(char *Fname);

  40. unsigned long LocateFrame(POPUPWINDOW *wnd,char *Fname);
  41. int  SelectYpFile(char *Fname);
  42. void DataYpProcess(char *Fname);
  43. long    MaxFrame=110;
  44. void DisplayTM(int x,int y);
  45. int autoaq(char *Fname);
  46. int y_n(char *Fname);

  47. main()
  48. {
  49. PRESSBUTTON PressButton[3];
  50. unsigned int    exit_code;
  51. int             i;
  52. int             CurrPressButton,OldPressButton,Pressing;
  53. static long old_color_table[] = {0x000000l,0x2a0000l,0x002a00l,0x2a2a00l,
  54.                                  0x00002al,0x2a002al,0x00152al,0x2a2a2al,
  55.                                  0x151515l,0x3f1515l,0x153f15l,0x3f3f15l,
  56.                                  0x15153fl,0x3f153fl,0x153f3fl,0x3f3f3fl};

  57.   if(!InitGwindow())
  58.   {
  59.     printf("ERROR  :  System initialize error !");
  60.     exit(1);
  61.   }

  62.   mouse_off(1);
  63.   _setcolor(VGA_BLACK);
  64.   line(0,35,639,35);
  65.   DisplayTM(10,3);
  66.   ccprintf(250,10,VGA_BLUE,"生  产  过  程  质  量  检  验");

  67.   for( i = 0;i < 3; i ++)
  68.   {
  69.     PressButton[i].left = 210;
  70.     PressButton[i].top = 120+i*80;
  71.     PressButton[i].width = 200;
  72.     PressButton[i].height = 40;
  73.   }
  74.   PressButton[0].label = "银 片 质 量 检 验";
  75.   PressButton[1].label = "成品生产过程质量检验";
  76.   PressButton[2].label = "退     出";

  77.   for( i = 0;i < 3;i ++)
  78.     DisplayPressButton(&PressButton[i],0);

  79.   mouse_on(1);

  80.   exit_code = 0;

  81.   button_press(0);
  82.   button_release(0);

  83.   do
  84.   {

  85.     OldPressButton = 3;
  86.     Pressing = 0;

  87.     while(button_state() & 0x01)   /* left button is being pressed */
  88.     {
  89.       /* Pressing pressbutton ? */
  90.       CurrPressButton = 3;
  91.       for(i = 0; i < 3; i ++)
  92.       {
  93.         if(mouse_in_box(1,PressButton[i].left,
  94.                           PressButton[i].top,
  95.                           PressButton[i].left+PressButton[i].width-1,
  96.                           PressButton[i].top+PressButton[i].height-1))
  97.          { /* Press a press button */
  98.            CurrPressButton = i;
  99.            break;
  100.          }
  101.       }

  102.       if((CurrPressButton != 3)
  103.        &&(!Pressing)
  104.        &&(OldPressButton != CurrPressButton) )
  105.       {
  106.         /* Display Pressed button */
  107.         DisplayPressButton(&PressButton[CurrPressButton],1);

  108.         OldPressButton = CurrPressButton;
  109.         Pressing = 1;
  110.         continue;
  111.       }

  112.       if( Pressing
  113.        &&(OldPressButton != CurrPressButton) )
  114.       {
  115.         /* Recover old press button */
  116.         DisplayPressButton(&PressButton[OldPressButton],0);

  117.         if(CurrPressButton != 3)
  118.         {
  119.           /* Display Pressed button ---- */
  120.           DisplayPressButton(&PressButton[CurrPressButton],1);
  121.           OldPressButton = CurrPressButton;
  122.           Pressing = 1;
  123.           continue;
  124.         }
  125.         else
  126.         {
  127.           Pressing = 0;
  128.           OldPressButton = 3;
  129.           continue;
  130.         }
  131.       } /* End  Pressing && OldPressButton != CurrPressButton */

  132.       if( Pressing && (OldPressButton == CurrPressButton))
  133.       {
  134.         continue;
  135.       }

  136.     } /* end left button is being pressed */

  137.     /* Recover old press button */
  138.     if(Pressing)
  139.     {
  140.       DisplayPressButton(&PressButton[OldPressButton],0);
  141.       Pressing = 0;

  142.       /* Press Pressbutton */
  143.       if(CurrPressButton < 3)
  144.       {
  145.         switch(CurrPressButton)
  146.         {
  147.         case 0:
  148.                   YpGl();
  149.                   break;
  150.         case 1:
  151.                   ChpGl();
  152.                   mouse_off(1);
  153.                   _setcolor(VGA_LIGHTGRAY);
  154.                   _rectangle(_GFILLINTERIOR,0,0,639,479);
  155.                   _setcolor(VGA_BLACK);
  156.                   line(0,35,639,35);
  157.                   DisplayTM(10,3);
  158.                   ccprintf(250,10,VGA_BLUE,"生  产  过  程  质  量  检  验");
  159.                   for( i = 0;i < 3;i ++)
  160.                    DisplayPressButton(&PressButton[i],0);
  161.                   mouse_on(1);
  162.                   break;
  163.         case 2:
  164.                   exit_code = 1;
  165.                   break;
  166.         default:
  167.                   break;
  168.         }
  169. /*      move_mouse(320,240);  */
  170.       } /* End of Press Pressbutton  */
  171.       continue;
  172.     } /* End of Pressing */
  173.   }while(exit_code == 0);

  174.   _remapallpalette(old_color_table);
  175.   _setvideomode(_TEXTC80);                /* Return the system to text mode       */
  176.   _unregisterfonts();

  177. }

  178. void YpGl(void)
  179. {
  180. char            buffer[_MAX_PATH];
  181. char            drive[_MAX_DRIVE],dir[_MAX_DIR],file[_MAX_FNAME],ext[_MAX_EXT];
  182. struct find_t   fileinfo;
  183. YpHead          Yhead;
  184. FILE            *data_pointer,*data1_pointer;
  185. long            SampleNumb;


  186.   _fstrcpy(buffer,"*.YP");

  187.   if(!OpenFile(buffer,"选 择 银 片 抽 检 数 据 文 件","选 定(O)"))
  188.     return;

  189.   _splitpath(buffer,drive,dir,file,ext);

  190.   ext[0] = '.';
  191.   ext[1] = 'Y';
  192.   ext[2] = 'P';
  193.   ext[3] = 0;
  194.   _makepath(buffer,drive,dir,file,ext);

  195. /*if(_dos_findfirst(buffer,_A_VOLID,&fileinfo) != 0)  */
  196.   if((data_pointer = fopen(buffer,"rb")) == NULL)
  197.   {
  198.   if((data1_pointer=fopen(buffer,"wb"))==NULL)
  199.   {
  200.   ErrorMessage(" 打不开数据文件 ");
  201.   return;
  202.   }
  203.   Yhead.password = 0x4347;
  204.   Yhead.label[0] = 0;
  205.   strcpy(Yhead.time,"950619/8:30");
  206.   Yhead.NNumb = 100000;
  207.   Yhead.material[0] = 0;
  208.   Yhead.standard = 1;
  209.   Yhead.delta = 3;
  210.   strcpy(Yhead.Unit,"pF");
  211.   strcpy(Yhead.sob,"电容");
  212.   Yhead.Temp = 0.0;
  213.   Yhead.Requ = 0.0;
  214.   SampleNumb = 0;
  215.   fseek(data1_pointer,0l,SEEK_SET);
  216.   fwrite(&Yhead,sizeof(YpHead),1,data1_pointer);
  217.   fwrite(&SampleNumb,4,1,data1_pointer);
  218.   fclose(data1_pointer);

  219.   if(SelectYpFile(buffer)!=0)
  220.   return;
  221.   }
  222.   else
  223.        fclose(data_pointer);

  224.   data_pointer = fopen(buffer,"rb");
  225.   fseek(data_pointer,0l,SEEK_SET);
  226.   fread(&Yhead,sizeof(YpHead),1,data_pointer);
  227.   fclose(data_pointer);
  228.   if(Yhead.password!=0x4347)
  229.   {
  230.     ErrorMessage(" 不是银片数据文件 ");
  231.     return;
  232.   }

  233.   DataYpProcess(buffer);

  234.   return;

  235. }

  236. int SelectYpFile(char *Fname)
  237. {
  238. char            buffer[_MAX_PATH];
  239. char            drive[_MAX_DRIVE],dir[_MAX_DIR],file[_MAX_FNAME],ext[_MAX_EXT];
  240. FILE            *data_pointer,*data1_pointer;
  241. POPUPWINDOW     *wnd;
  242. int             Classid,id,Selected,CursorX,CursorY;
  243. long            return_lpara;
  244. int             i;
  245. long            SampleNumb;
  246. char            ch10[20],ch11[20],ch12[20];
  247. YpHead          Yhead;
  248. unsigned long   FrameX,FrameY;
  249. int             reasonnumber,refusenumber;

  250.   if( (data_pointer = fopen(Fname,"rb")) == NULL)
  251.   {
  252.     ErrorMessage(" 打不开银片数据文件 ");
  253.     return(1);
  254.   }

  255.   /* Read default data file name */
  256.   fseek(data_pointer,0l,SEEK_SET);
  257.   fread(&Yhead,sizeof(YpHead),1,data_pointer);
  258.   fread(&SampleNumb,4,1,data_pointer);
  259.   fclose(data_pointer);
  260. if(SplitNumber(Yhead,&reasonnumber,&refusenumber)==0)
  261. {
  262. ErrorMessage("标准错误!");
  263. return(1);
  264. }

  265.   sprintf(ch10,"%ld",Yhead.NNumb);
  266.   sprintf(ch11,"%.3f",Yhead.Requ);
  267.   sprintf(ch12,"%.2f",Yhead.Temp);
  268.   mouse_off(1);
  269.   _setviewport(0,0,639,479);
  270.   /*
  271.   wnd = EstablishPopupWindow(120,110,400,360,VGA_WHITE,1);
  272.    */
  273.   wnd = EstablishPopupWindow(120,60,400,360,VGA_WHITE,1);
  274.   SetTitle(wnd,"银 片 抽 检 数 据 文 件");
  275.   ccwprintf(wnd,16,6,VGA_BLACK,"应输入样品个数 : %d",reasonnumber);
  276.   ccwprintf(wnd,16,24,VGA_BLACK,"已输入样品个数 : %d",SampleNumb);
  277.   EstablishPressButton(wnd,250,16,120,38,"设置正确(O)",ID_OK,0xff18);
  278.   EstablishPressButton(wnd,250,160,120,30,"取 消(C)",ID_CANCEL,0xff2e);
  279.   EstablishPressButton(wnd,250,92,120,30,"选择文件(T)",2,0xff14);

  280. /*EstablishEntryField(wnd,16,41,116,22,"批      号(L):",STRING,Yhead.label,NULL,NULL,10,0xff26);*/
  281.   EstablishEntryField(wnd,16,41,116,22,"首检日期  (L):",STRING,Yhead.time,NULL,NULL,10,0xff26);
  282.   EstablishEntryField(wnd,16,66,116,22,"总  数  量(N):",LONG,ch10,NULL,NULL,11,0xff31);
  283.   EstablishEntryField(wnd,16,91,116,22,"规      格(M):",STRING,Yhead.material,NULL,NULL,12,0xff32);
  284.   EstablishEntryField(wnd,16,116,116,22,"单      位(U):",STRING,Yhead.Unit,NULL,NULL,13,0xff16);
  285.   EstablishEntryField(wnd,16,141,116,22,"质量特性名(B):",STRING,Yhead.sob,NULL,NULL,14,NONEKEY);
  286.   EstablishEntryField(wnd,16,166,116,22,"等效电阻值(R):",FLOAT,ch11,NULL,NULL,15,0xff13);
  287.   EstablishEntryField(wnd,16,300,116,22,"温度 ℃ =:",FLOAT,ch12,NULL,NULL,16,0xff13);

  288.   ccwprintf(wnd,16,186,VGA_BLACK,"检验标准AQL:");
  289.   EstablishFrame(wnd,16,204,350,25,21,NONEKEY);
  290.   for(i = 0;i < 4; i++)
  291.   {
  292.     DisplaySwitch(wnd->left+22+80*i,wnd->top+226,0);
  293.   }
  294.   DisplaySwitch(wnd->left+22+(Yhead.standard-1)*80,wnd->top+226,1);
  295.   ccwprintf(wnd,40,206,VGA_BLACK,"0.65");
  296.   ccwprintf(wnd,40+80,206,VGA_BLACK,"1.0");
  297.   ccwprintf(wnd,40+160,206,VGA_BLACK,"1.5");
  298.   ccwprintf(wnd,40+240,206,VGA_BLACK,"其它");

  299.   ccwprintf(wnd,16,250,VGA_BLACK,"偏差调节系数:");
  300.   EstablishFrame(wnd,16,268,350,25,22,NONEKEY);
  301.   for(i = 0;i < 4; i++)
  302.   {
  303.     DisplaySwitch(wnd->left+22+80*i,wnd->top+290,0);
  304.   }
  305.   switch(Yhead.delta)
  306.   {
  307.     case 3:
  308.     case 4:
  309.         DisplaySwitch(wnd->left+22+(Yhead.delta-3)*80,wnd->top+290,1);
  310.         break;
  311.     case 6:
  312.     case 8:
  313.         DisplaySwitch(wnd->left+22+(Yhead.delta/2-3)*80,wnd->top+290,1);
  314.         break;
  315.     default:
  316.         break;
  317.   }
  318.   ccwprintf(wnd,40,270,VGA_BLACK,"3");
  319.   ccwprintf(wnd,40+80,270,VGA_BLACK,"4");
  320.   ccwprintf(wnd,40+160,270,VGA_BLACK,"6");
  321.   ccwprintf(wnd,40+240,270,VGA_BLACK,"8");

  322.   mouse_on(1);
  323.   move_mouse(320,240);
  324.   Selected = 0; /* Not Selected */
  325.   do
  326.   {
  327.     Dialog(wnd,
  328.           &Selected,
  329.           &CursorX,
  330.           &CursorY,
  331.           &Classid,
  332.           &id,
  333.           &return_lpara);



  334.     /* Process dialoge message */
  335.     switch(Classid)
  336.     {
  337.       case 1:
  338.         switch(id)
  339.         {
  340.         case ID_CANCEL:
  341.               DeletePopupWindow(wnd);
  342.               return(1);
  343.         case ID_OK:

  344.               sscanf(ch10,"%ld",&Yhead.NNumb);
  345.               sscanf(ch11,"%f",&Yhead.Requ);
  346.               sscanf(ch12,"%f",&Yhead.Temp);
  347.               if( (data_pointer = fopen(Fname,"r+b")) == NULL)
  348.               {
  349.                 ErrorMessage(" 没打开银片数据文件 ");
  350.                 DeletePopupWindow(wnd);
  351.                 return(1);
  352.               }

  353.               /* Read default data file name */
  354.               fseek(data_pointer,0l,SEEK_SET);
  355.               fwrite(&Yhead,sizeof(YpHead),1,data_pointer);
  356.               fclose(data_pointer);
  357.               DeletePopupWindow(wnd);
  358.               return(0);

  359.         case 2:
  360.               _fstrcpy(buffer,"*.YP");

  361.               if(!OpenFile(buffer,"选 择 银 片 抽 检 数 据 文 件","选 定(O)"))
  362.                 break;

  363.               if((data_pointer=fopen(buffer,"rb"))!=NULL)
  364.               {
  365.               fseek(data_pointer,0l,SEEK_SET);
  366.               fread(&Yhead,2,1,data_pointer);
  367.               fclose(data_pointer);
  368.               if(Yhead.password!=0x4347)
  369.               {
  370.                 ErrorMessage(" 不是银片数据文件 ");
  371.                 break;
  372.               }
  373.               }

  374.               _splitpath(buffer,drive,dir,file,ext);

  375.                 ext[0] = '.';
  376.                 ext[1] = 'Y';
  377.                 ext[2] = 'P';
  378.                 ext[3] = 0;
  379.                 _makepath(buffer,drive,dir,file,ext);

  380.               if((data_pointer=fopen(buffer,"rb"))==NULL)
  381.               {
  382.               if((data1_pointer=fopen(buffer,"wb"))==NULL)
  383.               {
  384.               ErrorMessage(" 未打开银片数据文件 ");
  385.               return(1);
  386.               }
  387.               Yhead.password = 0x4347;
  388.               Yhead.label[0] = 0;
  389.               Yhead.NNumb = 10000;
  390.               Yhead.material[0] = 0;
  391.               Yhead.standard = 1;
  392.               Yhead.delta = 3;
  393.               strcpy(Yhead.Unit,"pF");
  394.               strcpy(Yhead.sob,"电容");
  395.               Yhead.Temp = 0.0;
  396.               Yhead.Requ = 0.0;
  397.               SampleNumb = 0;
  398.               fseek(data1_pointer,0l,SEEK_SET);
  399.               fwrite(&Yhead,sizeof(YpHead),1,data1_pointer);
  400.               fwrite(&SampleNumb,4,1,data1_pointer);
  401.               fclose(data1_pointer);
  402.               }
  403.               else
  404.               {
  405.               fseek(data_pointer,0l,SEEK_SET);
  406.               fread(&Yhead,sizeof(YpHead),1,data_pointer);
  407.               fread(&SampleNumb,4,1,data_pointer);
  408.               fclose(data_pointer);
  409.               }

  410.        if(SplitNumber(Yhead,&reasonnumber,&refusenumber)==0)
  411.        {
  412.        ErrorMessage("标准错误!");
  413.        return(1);
  414.        }
  415.                         strcpy(Fname,buffer);
  416.                         ClearWindowRect(wnd,16,8,234,32);
  417.         ccwprintf(wnd,16,6,VGA_BLACK,"应输入样品个数 : %d",reasonnumber);
  418.         ccwprintf(wnd,16,24,VGA_BLACK,"已输入样品个数 : %d",SampleNumb);
  419.                         sprintf(ch10,"%ld",Yhead.NNumb);
  420.                         sprintf(ch11,"%.3f",Yhead.Requ);
  421.                         sprintf(ch12,"%.2f",Yhead.Temp);
  422. /*                      ModifyDataEntry(wnd,10,Yhead.label);   */
  423.                         ModifyDataEntry(wnd,11,ch10);
  424.                         ModifyDataEntry(wnd,12,Yhead.material);
  425.                         ModifyDataEntry(wnd,13,Yhead.Unit);
  426.                         ModifyDataEntry(wnd,14,Yhead.sob);
  427.                         ModifyDataEntry(wnd,15,ch11);
  428.                         ModifyDataEntry(wnd,16,ch12);
  429.                         ModifyFrameSwitch(wnd,21,Yhead.standard);
  430.                         switch(Yhead.delta)
  431.                         {
  432.                           case 3:
  433.                              ModifyFrameSwitch(wnd,22,1);
  434.                              break;
  435.                           case 4:
  436.                              ModifyFrameSwitch(wnd,22,2);
  437.                              break;
  438.                           case 6:
  439.                              ModifyFrameSwitch(wnd,22,3);
  440.                              break;
  441.                           case 8:
  442.                              ModifyFrameSwitch(wnd,22,4);
  443.                              break;
  444.                           default:
  445.                              break;
  446.                         }
  447.                         break;
  448.                       default:
  449.                         break;
  450.                   }
  451.                 break;
  452.          case 6:
  453.                wait_button_release();
  454.                FrameX = return_lpara&0x0000ffff;
  455.                FrameY = (return_lpara&0xffff0000)>>16;
  456.                switch(id)
  457.                  {
  458.                    case 21:
  459.                        if((FrameX>=6)&&(FrameX<=22)&&(FrameY>=5)&&(FrameY<=21))
  460.                         {
  461.                           Yhead.standard = 1;
  462.                           DisplaySwitch(wnd->left+22,wnd->top+226,1);
  463.                           for(i = 1;i < 4; i++)
  464.                           {
  465.                            DisplaySwitch(wnd->left+22+80*i,wnd->top+226,0);
  466.                           }
  467.                         }
  468.                        if((FrameX>=86)&&(FrameX<=102)&&(FrameY>=5)&&(FrameY<=21))
  469.                         {
  470.                           Yhead.standard = 2;
  471.                           DisplaySwitch(wnd->left+22,wnd->top+226,0);
  472.                           DisplaySwitch(wnd->left+22+80,wnd->top+226,1);
  473.                           DisplaySwitch(wnd->left+22+160,wnd->top+226,0);
  474.                           DisplaySwitch(wnd->left+22+240,wnd->top+226,0);
  475.                         }
  476.                        if((FrameX>=166)&&(FrameX<=182)&&(FrameY>=5)&&(FrameY<=21))
  477.                         {
  478.                           Yhead.standard = 3;
  479.                           DisplaySwitch(wnd->left+22,wnd->top+226,0);
  480.                           DisplaySwitch(wnd->left+22+80,wnd->top+226,0);
  481.                           DisplaySwitch(wnd->left+22+160,wnd->top+226,1);
  482.                           DisplaySwitch(wnd->left+22+240,wnd->top+226,0);
  483.                         }
  484.                        if((FrameX>=246)&&(FrameX<=262)&&(FrameY>=5)&&(FrameY<=21))
  485.                         {
  486.                           Yhead.standard = 4;
  487.                           DisplaySwitch(wnd->left+22,wnd->top+226,0);
  488.                           DisplaySwitch(wnd->left+22+80,wnd->top+226,0);
  489.                           DisplaySwitch(wnd->left+22+160,wnd->top+226,0);
  490.                           DisplaySwitch(wnd->left+22+240,wnd->top+226,1);
  491.                         }
  492.                        break;
  493.                    case 22:
  494.                        if((FrameX>=6)&&(FrameX<=22)&&(FrameY>=5)&&(FrameY<=21))
  495.                         {
  496.                           Yhead.delta = 3;
  497.                           DisplaySwitch(wnd->left+22,wnd->top+290,1);
  498.                           for(i = 1;i < 4; i++)
  499.                           {
  500.                            DisplaySwitch(wnd->left+22+80*i,wnd->top+290,0);
  501.                           }
  502.                         }
  503.                        if((FrameX>=86)&&(FrameX<=102)&&(FrameY>=5)&&(FrameY<=21))
  504.                         {
  505.                           Yhead.delta = 4;
  506.                           DisplaySwitch(wnd->left+22,wnd->top+290,0);
  507.                           DisplaySwitch(wnd->left+22+80,wnd->top+290,1);
  508.                           DisplaySwitch(wnd->left+22+160,wnd->top+290,0);
  509.                           DisplaySwitch(wnd->left+22+240,wnd->top+290,0);
  510.                         }
  511.                        if((FrameX>=166)&&(FrameX<=182)&&(FrameY>=5)&&(FrameY<=21))
  512.                         {
  513.                           Yhead.delta = 6;
  514.                           DisplaySwitch(wnd->left+22,wnd->top+290,0);
  515.                           DisplaySwitch(wnd->left+22+80,wnd->top+290,0);
  516.                           DisplaySwitch(wnd->left+22+160,wnd->top+290,1);
  517.                           DisplaySwitch(wnd->left+22+240,wnd->top+290,0);
  518.                         }
  519.                        if((FrameX>=246)&&(FrameX<=262)&&(FrameY>=5)&&(FrameY<=21))
  520.                         {
  521.                           Yhead.delta = 8;
  522.                           DisplaySwitch(wnd->left+22,wnd->top+290,0);
  523.                           DisplaySwitch(wnd->left+22+80,wnd->top+290,0);
  524.                           DisplaySwitch(wnd->left+22+160,wnd->top+290,0);
  525.                           DisplaySwitch(wnd->left+22+240,wnd->top+290,1);
  526.                         }
  527.                    break;
  528.                  default:
  529.                    break;
  530.                  }
  531.            break;
  532.          case 2:
  533.             switch(id)
  534.                 {
  535.                 case 11:
  536.                         sscanf(ch10,"%ld",&Yhead.NNumb);
  537.        if(SplitNumber(Yhead,&reasonnumber,&refusenumber)==0)
  538.        {
  539.        ErrorMessage("标准错误!");
  540.        return(1);
  541.        }
  542.         ClearWindowRect(wnd,16,8,234,16);
  543.         ccwprintf(wnd,16,6,VGA_BLACK,"应输入样品个数 : %d",reasonnumber);
  544.                     break;
  545.                 default:
  546.                     break;
  547.                 }
  548.             break;
  549.          default:
  550.            break;
  551.          }
  552.     }while(1);
  553. }



  554. void DataYpProcess(char *Fname)
  555. {
  556. POPUPWINDOW *wnd;
  557. int Selected,CursorX,CursorY,Classid,id;
  558. FILE    *fp;
  559. long    SampleNumb;
  560. float   value[110];
  561. char    ch[110][15];
  562. long    startnumb,i,lbuf,lpara;
  563. YpHead  Yhead;
  564. int     return_value;
  565. int     row,col;
  566. int     reasonnumber,refusenumber;

  567.   mouse_off(1);
  568.   wnd=EstablishPopupWindow(0,0,640,480,VGA_WHITE,1);
  569.   _setviewport(0,0,639,479);
  570.   _setcolor(VGA_LIGHTGRAY);
  571.   _rectangle(_GFILLINTERIOR,1,20,149,473);
  572.   _setcolor(VGA_BLACK);
  573.   _rectangle(_GFILLINTERIOR,633,0,639,6);
  574.   _rectangle(_GFILLINTERIOR,0,460,639,479);
  575.   _moveto(150,20);
  576.   _lineto(150,479);

  577.   SetTitle(wnd,"半 成 品 、成 品 质 量 管 理");
  578.   EstablishPressButton(wnd,20,50,80,32,"文 件(F)",1,0xff21);
  579.   EstablishPressButton(wnd,20,120,80,32,"编 辑(E)",2,0xff12);
  580.   EstablishPressButton(wnd,20,190,80,32,"采 集(A)",3,0xff1e);
  581.   EstablishPressButton(wnd,20,260,80,32,"统 计(S)",4,0xff1f);
  582.   EstablishPressButton(wnd,20,330,80,80,"退 出(X)",ID_CANCEL,0xff2d);

  583.   if((fp = fopen(Fname,"rb"))==NULL)
  584.   {
  585.     ErrorMessage("没有数据文件!");
  586.     return;
  587.   }
  588.   fseek(fp,0l,SEEK_SET);
  589.   fread(&Yhead,sizeof(YpHead),1,fp);
  590.   if(Yhead.password != 0x4347)
  591.    {
  592.   ErrorMessage("数据文件格式错误!");
  593.   fclose(fp);
  594.   return;
  595.   }

  596.   for(i = 0;i < MaxFrame;i++) /* clear ch[] */
  597.   ch[i][0] = 0;

  598.   fread(&SampleNumb,4,1,fp);
  599.   if(SampleNumb != 0)
  600.   fread(value,4,min(SampleNumb*2,MaxFrame),fp);
  601.   fclose(fp);

  602.   if(SplitNumber(Yhead,&reasonnumber,&refusenumber)==0)
  603.   {
  604.   ErrorMessage("AQL规格错误!");
  605.   return;
  606.   }
  607.   for(i = 0;i < min(SampleNumb*2,MaxFrame);i+=2)
  608.   sprintf(ch[i],"%.3f",value[i]);

  609.   for(i = 1;i < min(SampleNumb*2,MaxFrame);i+=2)
  610.   sprintf(ch[i],"%.5f",value[i]);

  611.   startnumb = 0;
  612.   for(row = 0;row < MaxFrame/10;row ++)
  613.   {
  614.     ccwprintf(wnd,152,row*20*2,VGA_RED,"%6d",row*5+1);
  615.     ccwprintf(wnd,176,(row*2+1)*20,VGA_RED,"1/Q");
  616.     for(col = 0;col < 5;col++)
  617.     {
  618.     EstablishEntryField(wnd,202+col*83,row*20*2,84,21,"",FLOAT,ch[row*10+col*2],NULL,NULL,100+row*10+col*2,NONEKEY);
  619.     EstablishEntryField(wnd,202+col*83,row*20*2+20,84,21,"",FLOAT,ch[row*10+col*2+1],NULL,NULL,100+row*10+col*2+1,NONEKEY);
  620.     }
  621.   }
  622.   EstablishVScrollBar(wnd,618,0,MaxLength*20,0,max(10,(long)(SampleNumb*2)),0,1,110,10,NONEKEY,NONEKEY,0xff49,0xff51);

  623.   mouse_on(1);
  624.   move_mouse(320,240);
  625.   Selected = 0;
  626.   do
  627.   {
  628.     Dialog(wnd,
  629.           &Selected,
  630.           &CursorX,
  631.           &CursorY,
  632.           &Classid,
  633.           &id,
  634.           &lpara);

  635.           switch(Classid)
  636.           {
  637.             case 1:
  638.               switch(id)
  639.               {
  640.                   case ID_CANCEL:
  641.                         break;
  642.                   case 1:
  643.                         return_value = SelectYpFile(Fname);
  644.   if((fp = fopen(Fname,"rb"))==NULL)
  645.   {
  646.     ErrorMessage("没有数据文件!");
  647.     DeletePopupWindow(wnd);
  648.     return;
  649.   }
  650.   fseek(fp,0l,SEEK_SET);
  651.   fread(&Yhead,sizeof(YpHead),1,fp);
  652.   if(Yhead.password != 0x4347)
  653.    {
  654.   ErrorMessage("数据文件格式错误!");
  655.   fclose(fp);
  656.     DeletePopupWindow(wnd);
  657.     return;
  658.   }

  659.   for(i = 0;i < MaxFrame;i++)
  660.   ch[i][0] = 0;
  661.   fread(&SampleNumb,4,1,fp);
  662.   if(SampleNumb != 0)
  663.   fread(value,4,min(SampleNumb*2,MaxFrame),fp);
  664.   fclose(fp);

  665. if(SplitNumber(Yhead,&reasonnumber,&refusenumber)==0)
  666. {
  667. ErrorMessage("规格错误!");
  668. return;
  669. }
  670. for(i = 0;i < min(SampleNumb*2,MaxFrame);i+=2)
  671. sprintf(ch[i],"%.3f",value[i]);

  672. for(i = 1;i < min(SampleNumb*2,MaxFrame);i+=2)
  673. sprintf(ch[i],"%.5f",value[i]);

  674. startnumb = 0;
  675. ClearWindowRect(wnd,152,0,50,439);
  676. for(row = 0;row < MaxFrame/10;row ++)
  677. {
  678.    ccwprintf(wnd,152,row*40,VGA_RED,"%6d",row*5+1);
  679.    ccwprintf(wnd,176,row*40+20,VGA_RED,"1/Q");
  680.    for(col = 0;col < 10;col++)
  681.    ModifyDataEntry(wnd,100+row*10+col,ch[(row*10+col)]);
  682. }
  683. ModifyVScrollBar(wnd,618,0,MaxLength*20,0,max(10,(long)(SampleNumb*2)),startnumb,1,110,10,NONEKEY,NONEKEY,0xff49,0xff51);
  684.          break;
  685.    case 2:
  686.          Selected = 2;
  687.          CursorX = 100;
  688.          break;
  689.    case 3:
  690.          if (y_n(Fname) == 0)
  691.             {
  692.          autoaq(Fname);
  693.            fp = fopen(Fname,"rb");
  694.            fseek(fp,sizeof(YpHead),SEEK_SET);

  695.            for(i = 0;i < MaxFrame;i++)
  696.               ch[i][0] = 0;

  697.            fread(&SampleNumb,4,1,fp);
  698.            if(SampleNumb != 0)
  699.              fread(value,4,min(SampleNumb*2,MaxFrame),fp);
  700.            fclose(fp);

  701.            for(i = 0;i < min(SampleNumb*2,MaxFrame);i+=2)
  702.            sprintf(ch[i],"%.3f",value[i]);

  703.            for(i = 1;i < min(SampleNumb*2,MaxFrame);i+=2)
  704.            sprintf(ch[i],"%.5f",value[i]);

  705.            startnumb = 0;
  706.            ClearWindowRect(wnd,152,0,50,439);
  707.            for(row = 0;row < MaxFrame/10;row ++)
  708.             {
  709.              ccwprintf(wnd,152,row*40,VGA_RED,"%6d",row*5+1);
  710.              ccwprintf(wnd,176,row*40+20,VGA_RED,"1/Q");
  711.              for(col = 0;col < 10;col++)
  712.              ModifyDataEntry(wnd,100+row*10+col,ch[(row*10+col)]);
  713.             }
  714.          ModifyVScrollBar(wnd,618,0,MaxLength*20,0,max(10,(long)(SampleNumb*2)),startnumb,1,110,10,NONEKEY,NONEKEY,0xff49,0xff51);
  715.             break;
  716.             }
  717.           else
  718.             break;

  719.    case 4:
  720.          STATISRESULT(Fname);
  721.          break;
  722.              }
  723.              break;
  724.            case 2:
  725.              if(ch[(id-100)][0]!=0)
  726.              {
  727.              if((startnumb+id-100)/2 >= reasonnumber)
  728.              {
  729.                ErrorMessage(" Data too many ");
  730.                break;
  731.              }
  732.              if(startnumb+id-100 > SampleNumb*2)
  733.              {
  734.                ErrorMessage("前面数据还未输入!");
  735.                break;
  736.              }
  737.              sscanf(ch[(id-100)],"%f",&value[id-100]);
  738.              fp = fopen(Fname,"r+b");
  739.              if(startnumb+id-100 == SampleNumb*2)
  740.              {
  741.               SampleNumb++;
  742.               sscanf(ch[id-100+1],"%f",&value[id-99]);
  743.              fseek(fp,sizeof(YpHead),SEEK_SET);
  744.              fwrite(&SampleNumb,4,1,fp);
  745.              fseek(fp,(startnumb+id-100)*4,SEEK_CUR);
  746.              fwrite(&value[id-100],4,1,fp);
  747.              fwrite(&value[id-99],4,1,fp);
  748.              }
  749.              else
  750.              {
  751.              fseek(fp,sizeof(YpHead),SEEK_SET);
  752.              fwrite(&SampleNumb,4,1,fp);
  753.              fseek(fp,(startnumb+id-100)*4,SEEK_CUR);
  754.              fwrite(&value[id-100],4,1,fp);
  755.              }
  756.              fclose(fp);
  757.              if(id==109)
  758.                       ModifyVScrollBar(wnd,618,0,MaxLength*20,0,max(10,(long)(SampleNumb*2)),startnumb,1,110,10,NONEKEY,NONEKEY,0xff49,0xff51);
  759.              }
  760.              if((Selected != 1)||(CursorX < 640))  break;
  761.              switch(CursorX)
  762.              {
  763.                case 0x0f48:
  764.                   if(id > 100)
  765.                    {
  766.                     CursorX = id-1;
  767.                     Selected = 2;
  768.                    }
  769.                   else
  770.                    {
  771.                     if(startnumb > 0)
  772.                      {
  773.                       startnumb -=2;
  774.                       fp = fopen(Fname,"rb");
  775.                       fseek(fp,sizeof(YpHead)+4+startnumb*4,SEEK_SET);
  776.                       fread(value,4,min(SampleNumb*2-startnumb,MaxFrame),fp);
  777.                       fclose(fp);

  778.                       for(i = 0;i < MaxFrame;i++)
  779.                       ch[i][0] = 0;
  780. for(i = 0;i < min(SampleNumb*2,MaxFrame);i+=2)
  781. sprintf(ch[i],"%.3f",value[i]);

  782. for(i = 1;i < min(SampleNumb*2,MaxFrame);i+=2)
  783. sprintf(ch[i],"%.5f",value[i]);

  784.                       ClearWindowRect(wnd,152,0,50,439);
  785.                       for(row = 0;row < MaxFrame/10;row ++)
  786.                        {
  787.    ccwprintf(wnd,152,row*40,VGA_RED,"%6d",startnumb/2+row*5+1);
  788.    ccwprintf(wnd,176,row*40+20,VGA_RED,"1/Q");
  789.    for(col = 0;col < 10;col++)
  790.    ModifyDataEntry(wnd,100+row*10+col,ch[(row*10+col)]);
  791.                        }
  792.                       CursorX = id;
  793.                       Selected = 2;
  794.                       ModifyVScrollBar(wnd,618,0,MaxLength*20,0,max(10,(long)(SampleNumb*2)),startnumb,1,110,10,NONEKEY,NONEKEY,0xff49,0xff51);
  795.                      }
  796.                     else
  797.                      {
  798.                      Selected = 2;
  799.                      CursorX = id;
  800.                      }
  801.                    }
  802.                   break;
  803.                case 0x0f50:
  804.                   if(startnumb+id-100<SampleNumb*2)
  805.                    {
  806.                      if(id < 209)
  807.                       {
  808.                        CursorX = id+1;
  809.                        Selected = 2;
  810.                       }
  811.                       else
  812.                       {
  813.                          startnumb += 2;
  814.                          startnumb = startnumb/2*2;
  815.                          fp = fopen(Fname,"rb");
  816.                       fseek(fp,sizeof(YpHead)+4+startnumb*4,SEEK_SET);
  817.                          fread(value,4,min(SampleNumb*2-startnumb,MaxFrame),fp);
  818.                          fclose(fp);

  819.                          for(i = 0;i < MaxFrame;i++)
  820.                            ch[i][0] = 0;
  821.                          for(i = 0;i < min(SampleNumb*2,MaxFrame);i+=2)
  822.                            sprintf(ch[i],"%.3f",value[i]);

  823.                          for(i = 1;i < min(SampleNumb*2,MaxFrame);i+=2)
  824.                          sprintf(ch[i],"%.5f",value[i]);

  825.                          ClearWindowRect(wnd,152,0,50,439);
  826.                           for(row = 0;row < MaxFrame/10;row ++)
  827.                         {
  828.                     ccwprintf(wnd,152,row*40,VGA_RED,"%6d",startnumb/2+row*5+1);
  829.                     ccwprintf(wnd,176,row*40+20,VGA_RED,"1/Q");
  830.                     for(col = 0;col < 10;col++)
  831.                     ModifyDataEntry(wnd,100+row*10+col,ch[(row*10+col)]);
  832.                        }
  833.                          CursorX = id;
  834.                          Selected = 2;
  835.                          ModifyVScrollBar(wnd,618,0,MaxLength*20,0,max(10,(long)(SampleNumb*2)),startnumb,1,110,10,NONEKEY,NONEKEY,0xff49,0xff51);
  836.                       }
  837.                      }
  838.                      else
  839.                      {Selected = 2;
  840.                       CursorX = id;
  841.                      }
  842.                      break;
  843.                case 0x0f1e:
  844.                      Selected = 2;
  845.                      CursorX = 3;
  846.                      break;
  847.                case 0x0f1f:
  848.                      Selected = 2;
  849.                      CursorX = 4;
  850.                      break;
  851.                case 0x0f21:
  852.                      Selected = 2;
  853.                      CursorX = 1;
  854.                      break;
  855.                case 0x0f2d:
  856.                      id = ID_CANCEL;
  857.                      break;
  858.                default:
  859.                      break;
  860.              }
  861.              break;
  862.            case 4:
  863.              startnumb = lpara;
  864.              startnumb = startnumb/2*2;
  865.              for(i = 0;i < MaxFrame;i++)
  866.              {
  867.                ch[i][0] = 0;
  868.                value[i] = 0.0;
  869.              }
  870.              fp = fopen(Fname,"rb");
  871.               fseek(fp,sizeof(YpHead)+4+startnumb*4,SEEK_SET);
  872.              lbuf = SampleNumb*2-startnumb;
  873.              if(SampleNumb*2 > startnumb)
  874.              fread(value,4,min(lbuf,MaxFrame),fp);
  875.              fclose(fp);

  876. for(i = 0;i < min(lbuf,MaxFrame);i+=2)
  877. sprintf(ch[i],"%.3f",value[i]);

  878. for(i = 1;i < min(lbuf,MaxFrame);i+=2)
  879. sprintf(ch[i],"%.5f",value[i]);

  880.                       ClearWindowRect(wnd,152,0,50,439);
  881.                       for(row = 0;row < MaxFrame/10;row ++)
  882.                        {
  883.    ccwprintf(wnd,152,row*40,VGA_RED,"%6d",startnumb/2+row*5+1);
  884.    ccwprintf(wnd,176,row*40+20,VGA_RED,"1/Q");
  885.    for(col = 0;col < 10;col++)
  886.    ModifyDataEntry(wnd,100+row*10+col,ch[(row*10+col)]);
  887.                        }
  888.              break;
  889.            default:
  890.              break;
  891.          }

  892. }while(id!=ID_CANCEL);

  893. DeletePopupWindow(wnd);
  894. return;
  895. }


  896. /*----------------------------------------------------------------------*/
  897. /*      histo: Draw a 2-D bar chart using Bar and Rectangle.            */
  898. /*----------------------------------------------------------------------*/
  899. unsigned char new_fillmask[] =
  900.                         {
  901.                         0xaa,
  902.                         0x55,
  903.                         0xaa,
  904.                         0x55,
  905.                         0xaa,
  906.                         0x55,
  907.                         0xaa,
  908.                         0x55
  909.                         };


  910. void STATISRESULT(char *Fname)
  911. {
  912. struct stat filestat;
  913. FILE *          printer_pointer;
  914. int             xstep, ystep,x_axis,y_axis,x,y;
  915. int             swidth,tall;
  916. int             i;
  917. int             j, h,w,x0,y0;
  918. float           y_step0,y_value,min_y,max_y,max_y0;
  919. int             ul_x,ul_y,dr_x,dr_y;
  920. unsigned int    bin_number = 21;
  921. float           lower_bound;
  922. float           upper_bound;
  923. float           x_step0;
  924. char            x_name[]="容 量";
  925. POPUPWINDOW     * wnd;
  926. int             id,Classid;
  927. int             Selected,CursorX,CursorY;
  928. long            lpara;
  929. FILE            *Data;
  930. float           min_value,max_value,CP=0;
  931. long            SampleNumb;
  932. float           SampleValue,DFValue;
  933. int             x_number;
  934. float           value[21];
  935. float           bad_rate,bad_rate_n,supervalue;
  936. float           total_mean,total_ss,tp,cp,K,Z1,Z2,bad_rate1,bad_rate2;
  937. int             below,abovenum;
  938. float           foxX,oxfX2;
  939. struct dosdate_t dos_date;
  940. YpHead          Yhead;
  941. char            *AQL[]={ "   ",
  942.                          "0.65",
  943.                          "1.0",
  944.                          "1.5"
  945.                        };
  946. float           DF,max_DF;
  947. long            upDF;
  948. int             reasonnumber,refusenumber;
  949. char            drive[_MAX_DRIVE],dir[_MAX_DIR],file[_MAX_FNAME],ext[_MAX_EXT];
  950. time_t ltime;


  951.         _splitpath(Fname,drive,dir,file,ext);
  952.         for(i = 0;i < 21;i++)
  953.         value[i] = 0.0;
  954.         if((Data = fopen(Fname,"rb")) == NULL)
  955.         {
  956.           ErrorMessage("打不开数据文件!");
  957.           return;
  958.         }
  959.         fseek(Data,0l,SEEK_SET);
  960.         fread(&Yhead,sizeof(YpHead),1,Data);

  961.        if(SplitMaterial(Yhead,&lower_bound,&upper_bound,&DF)==0)
  962.        {
  963.        fclose(Data);
  964.        ErrorMessage("规格错误!");
  965.        return;
  966.        }
  967.        if(SplitNumber(Yhead,&reasonnumber,&refusenumber)==0)
  968.        {
  969.        fclose(Data);
  970.        ErrorMessage("标准错误!");
  971.        return;
  972.        }

  973.         total_mean = 0;
  974.         total_ss = 0;
  975.         below = abovenum = 0;
  976.         upDF = 0;
  977.         max_DF = 0;
  978.         y_step0 = (upper_bound-lower_bound+0.001)/11;

  979.         fread(&SampleNumb,4,1,Data);
  980.         if(SampleNumb == 0)
  981.         {
  982.          fclose(Data);
  983.          ErrorMessage("无数据存在");
  984.          return;
  985.         }
  986.         for(i = 0;i < SampleNumb;i++)
  987.         {
  988.         fread(&SampleValue,4,1,Data);
  989.         total_mean += SampleValue;
  990.         total_ss += SampleValue*SampleValue;
  991.         x_number = (int)((SampleValue-lower_bound)/y_step0);
  992.         if(x_number < 0)  below ++;
  993.         if(x_number > 10) abovenum ++;
  994.         x_number += 5;
  995.         if(x_number <0) x_number = 0;
  996.         if(x_number > 20) x_number = 20;
  997.         value[x_number]++;
  998.         fread(&DFValue,4,1,Data);
  999.         if(DFValue > DF)
  1000.          {
  1001.          if(max_DF < DFValue-DF)  max_DF = DFValue-DF;
  1002.          upDF ++;
  1003.          }
  1004.         }
  1005.         fclose(Data);

  1006.         supervalue = (float)(abovenum+below);
  1007.         bad_rate_n = (float)(supervalue/SampleNumb);
  1008.         /*
  1009.         bad_rate_n = (float)(supervalue/reasonnumber);
  1010.          */

  1011.         total_mean /= SampleNumb;
  1012.         if(total_ss == total_mean*total_mean*SampleNumb)  total_ss = 0;
  1013.         else
  1014.         total_ss = sqrt(total_ss/SampleNumb-total_mean*total_mean);
  1015.         if(total_ss)
  1016.         cp = (upper_bound-lower_bound)/(Yhead.delta*total_ss*2);
  1017.         else cp = 1;
  1018.         K = fabs((lower_bound+upper_bound)/2-total_mean)/((upper_bound-lower_bound)/2);
  1019.         Z1 = Yhead.delta*cp*(1+K);
  1020.         Z2 = Yhead.delta*cp*(1-K);
  1021.         if(Z1 <= 3.0)  bad_rate1 = 1-AccGS[(int)((Z1+0.025)*20)];
  1022.           else  if(Z1 <= 4.9)   bad_rate1 = AuxGS[(int)((Z1+0.05)*10-30)];
  1023.                  else bad_rate1 = AuxGS[19];
  1024.         if(Z2 <= 3.0)   bad_rate2 = 1-AccGS[(int)((Z2+0.025)*20)];
  1025.           else  if(Z2 <= 4.9)  bad_rate2 = AuxGS[(int)((Z2+0.05)*10-30)];
  1026.                   else bad_rate2 = AuxGS[19];
  1027.         max_y0 = 0;
  1028.         bad_rate = bad_rate1+bad_rate2;
  1029.         for(i = 0; i < 21; i++)
  1030.         {
  1031.         value[i] = value[i]*100/SampleNumb;
  1032.         if(value[i] > max_y0)  max_y0 = value[i];
  1033.         }
  1034.         max_y0 = max_y0/10*10 + 10;


  1035.         mouse_off(1);

  1036.         h = 16; /* Character height */
  1037.         w = 8;  /* character width  */

  1038.         ul_x = 0;
  1039.         ul_y = 0;
  1040.         dr_x = 639;
  1041.         dr_y = 479;

  1042.         _setfillmask(NULL);

  1043.         /* -------- Establist histo window -------- */
  1044.         wnd = EstablishPopupWindow(ul_x,ul_y,dr_x-ul_x+1,dr_y-ul_y+1,
  1045.                                    VGA_DARKWHITE,1);
  1046.         SetTitle(wnd,"CWT成品质检抽样频数分布图                         ");
  1047.         DisplayTM(10,425);
  1048.         /* Return button */
  1049.         EstablishPressButton(wnd,460,400,74,40,"返 回(R)",ID_OK,0xff13);
  1050.         /* Print histogram button */
  1051.         EstablishPressButton(wnd,320,404,74,32,"打 印(P)",5,0xff19);

  1052.         ccprintf(ul_x+16*27,ul_y+2,VGA_BLACK,"应抽样数:%d",reasonnumber);
  1053.         ccwprintf(wnd,10,5,VGA_BLACK,"批号:%-s",file);
  1054.     /* Get UNIX-style time and display as number and string. */
  1055.         time( <ime );
  1056.         ccwprintf(wnd,160+16*9,8,VGA_BLACK,"%s", ctime( <ime ) );
  1057.     /*
  1058.     printf( "Time in seconds since GMT 1/1/70:\t%ld\n", ltime );
  1059.     printf( "UNIX time and date:\t\t\t%s", ctime( <ime ) );
  1060.      */
  1061.         switch(ext[1])
  1062.         {
  1063.         case 'y':
  1064.         case 'Y':
  1065.             if( !stat( Fname, &filestat ) )
  1066.             {
  1067.             ccwprintf(wnd,160,5,VGA_BLACK,"银片来料抽检时间:");
  1068.             ccwprintf(wnd,160+16*9,0,VGA_BLACK,"%s", Yhead.time );
  1069.             }
  1070.             break;
  1071.         case '2':
  1072.             if( !stat( Fname, &filestat ) )
  1073.             {
  1074.             ccwprintf(wnd,160,5,VGA_BLACK,"焊锡后抽检时间:");
  1075.             ccwprintf(wnd,160+16*9,0,VGA_BLACK,"%s", ctime( &filestat.st_atime ) );
  1076.             }
  1077.             break;
  1078.         case '3':
  1079.              if( !stat( Fname, &filestat ) )
  1080.              {
  1081.              ccwprintf(wnd,160,5,VGA_BLACK,"固化后抽检时间");
  1082.              ccwprintf(wnd,160+16*9,0,VGA_BLACK,"%s", ctime( &filestat.st_atime ) );
  1083.              }
  1084.             break;
  1085.         case '4':
  1086.             if( !stat( Fname, &filestat ) )
  1087.             {
  1088.             ccwprintf(wnd,160,5,VGA_BLACK,"测试工序抽检时间:");
  1089.             ccwprintf(wnd,160+16*9,0,VGA_BLACK,"%s", ctime( &filestat.st_atime ) );
  1090.             }
  1091.             break;
  1092.         case '5':
  1093.             if( !stat( Fname, &filestat ) )
  1094.             {
  1095.             ccwprintf(wnd,160,5,VGA_BLACK,"包装入库抽检时间:");
  1096.             ccwprintf(wnd,160+16*9,0,VGA_BLACK,"%s", ctime( &filestat.st_atime ) );
  1097.             }
  1098.             break;
  1099.         default:
  1100.             break;
  1101.         }
  1102.         /*
  1103.         ccwprintf(wnd,350,5,VGA_BLACK,"公差幅度:%f,%-f",lower_bound,upper_bound);
  1104.          */

  1105.         ccwprintf(wnd,10,35,VGA_BLACK,"     组  界        组中值    已抽样数:%-ld",SampleNumb);
  1106.         ccwprintf(wnd,10+26*w+8+21*11,35,VGA_BLACK,"频数");

  1107.         tall = 21*11 ;

  1108.         /* original pointer */
  1109.         x0 = 10+26*w + ul_x;
  1110.         y0 = ul_y +55 + 20;

  1111.         /* swidth : histogram width */
  1112.         /* ---- X step & swidth ---- */
  1113.         swidth  = 21*11;
  1114.         ystep = 11;

  1115.         /* ---- histo area ---- */
  1116.         _setcolor(VGA_WHITE);
  1117.         _rectangle(_GFILLINTERIOR,x0,y0 ,swidth+x0,y0+tall);
  1118.         _setcolor(VGA_BLACK);
  1119.         _rectangle(_GBORDER,x0,y0 ,swidth+x0,y0+tall);
  1120.         line(ul_x,dr_y-66,dr_x,dr_y-66);

  1121.         /* ---- unit ---- */
  1122. /*      if( *Unit)
  1123.         {
  1124.           x =  x0+bin_number*xstep/2,
  1125.           y =  y0+h+h/2;
  1126.           ccprintf(x+8,y,VGA_BLACK,"单位:(%s)",Unit);
  1127.         }
  1128. */
  1129.         /* ---- Ver dot line ---- */
  1130.         _setcolor(VGA_DARKGRAY);
  1131.         y_axis = ystep*5+y0;
  1132.           _setlinestyle(0xaaaa);
  1133.           line(x0,y_axis,x0+tall-1,y_axis);
  1134.           line(x0,y_axis+ystep*11,x0+tall-1,y_axis+ystep*11);
  1135.           _setlinestyle(0xffff);

  1136.         j = x0;

  1137.         /* ---- Her dot line ---- */
  1138.         x_step0 = 10;
  1139.         xstep = (int)(tall*x_step0/ max_y0) ;
  1140.         while( xstep > 100)
  1141.         {
  1142.           x_step0 /= 5.0;
  1143.           xstep = (int)(tall*x_step0/ max_y0);
  1144.         }

  1145.         /* ---- Y - axis ----- */
  1146.         x_axis = x0;
  1147.         i = 0 ;
  1148.         while( x_axis <= (x0+tall) )
  1149.         {
  1150.           line( x_axis,y0+tall, x_axis, y0+tall+4 );
  1151.           x = x_axis-8;
  1152.           y = y0+tall;
  1153.           ccprintf(x,y,VGA_BLACK,"%-3d",(int)(x_step0 *((float) i)));

  1154.           _setlinestyle(0xaaaa);
  1155.           line(x_axis,y0,x_axis,ystep*bin_number + y0);
  1156.           _setlinestyle(0xffff);

  1157.           i ++;
  1158.           x_axis = (int) (x0 +((int) i*x_step0/ max_y0)*tall + 0.5  );
  1159.         }
  1160.         x_axis = x0;
  1161.         i = 0;
  1162.         while( x_axis <= (x0+tall))
  1163.         {
  1164.           line(x_axis,y0+tall, x_axis, y0+tall+2 );
  1165.           i ++;
  1166.           x_axis = (int)(x0 + i*tall*x_step0/ max_y0/2 + 0.5);
  1167.         }
  1168.         x = x0 +tall+4+10;
  1169.         y = y0 +tall;
  1170.         ccprintf(x,y,VGA_BLACK,"%%");

  1171.         /* ---- histo bins ---- */
  1172.         j = y0;
  1173.         for( i=0 ; i < bin_number ; ++i )
  1174.         {
  1175.           y_value =  value[i];

  1176.           x_axis = (int)(x0 + y_value/max_y0 * tall + 0.5);

  1177.           _setcolor(VGA_WHITE);
  1178.           _setfillmask(NULL);
  1179.           _rectangle(_GFILLINTERIOR,  x0, j, x_axis, j+ystep);

  1180.           _setcolor(VGA_DARKGRAY);
  1181.           _setfillmask(new_fillmask);
  1182.           _rectangle(_GBORDER, x0,j,x_axis, j+ystep);
  1183.           if(x_axis > x0 + 1)
  1184.           {
  1185.             _floodfill(x0+1,j+1,VGA_DARKGRAY);
  1186.           }
  1187.           ccprintf(0,y0+11*i-6,VGA_BLACK,"%9.2f-%-9.2f",lower_bound+(i-5)*y_step0,lower_bound+(i-4)*y_step0);
  1188.           ccprintf(90+48,y0+11*i-6,VGA_BLACK,"%9.2f",lower_bound+(i-4.5)*y_step0);
  1189.           ccprintf(x0+tall+2,y0+11*i-6,VGA_BLACK,"%-d",(int)(value[i]*SampleNumb/100+0.1));

  1190.           line( x0-2,j, x0, j );
  1191.           j += ystep;

  1192.         } /* all bins */

  1193.         _setfillmask(NULL);

  1194.         line( x0-4, y0, x0, y0 );
  1195.         line( x0-4,j, x0, j );

  1196.         ccwprintf(wnd,x0+tall+w*7,35,VGA_BLUE,"公差幅度:");
  1197.         ccprintf(x0+tall+w*7,y0+ystep*5+8,VGA_BLUE,"下限:%-.2f",lower_bound);
  1198.         ccprintf(x0+tall+w*7,y0+ystep*5-8,VGA_BLUE,"超下数:%-d",below);
  1199.         ccprintf(x0+tall+w*7,y0+ystep*16+8,VGA_BLUE,"超上数:%-d",abovenum);
  1200.         ccprintf(x0+tall+w*7,y0+ystep*16-8,VGA_BLUE,"上限:%-.2f",upper_bound);

  1201.         ccprintf(10,y0+tall+h,VGA_BLACK,"规格: %s",Yhead.material);
  1202.         ccprintf(160,y0+tall+h,VGA_BLACK,"质量特性名:%s  单位:%s",Yhead.sob,Yhead.Unit);
  1203.         ccprintf(365,y0+tall+h,VGA_BLACK,"AQL = %s",AQL[Yhead.standard]);
  1204.         ccprintf(460,y0+tall+h,VGA_RED,"总超限数应小于 %d",refusenumber);
  1205.         /*
  1206.         ccprintf(350,y0+tall+h,VGA_BLACK,"应抽样数:%d",reasonnumber);
  1207.          */
  1208.         ccprintf(10,y0+tall+h*2+2,VGA_BLACK,"合格品率:%-.2f%%",100-bad_rate_n*100);
  1209.         ccprintf(10+142,y0+tall+h*2+2,VGA_BLACK,"不合格品率:%-.2f%%",bad_rate_n*100);
  1210.         ccprintf(10+290,y0+tall+h*2+2,VGA_BLACK,"方差:%-f",total_ss);
  1211.         ccprintf(10+450,y0+tall+h*2+2,VGA_BLACK,"偏差调节系数: %d",Yhead.delta);
  1212.         ccprintf(10,y0+tall+h*3+4,VGA_BLACK,"最大容量:%-.4f",CP);
  1213.         ccprintf(10+142,y0+tall+h*3+4,VGA_BLACK,"均值:%-.4f",total_mean);
  1214.         ccprintf(10+290,y0+tall+h*3+4,VGA_BLACK,"最小容量:%-.4f",CP);
  1215.         ccprintf(10+435,y0+tall+h*3+4,VGA_BLACK,"总数量: %ld",Yhead.NNumb);


  1216.         ccprintf(10,y0+tall+h*4+6,VGA_BLACK,"标准损耗:%-.5f",DF);
  1217.         ccprintf(10+142,y0+tall+h*4+6,VGA_BLACK,"超标数:%-ld",upDF);
  1218.         ccprintf(10+290,y0+tall+h*4+6,VGA_BLACK,"最大差值:%-.5f",max_DF);
  1219.         ccprintf(10+435,y0+tall+h*4+6,VGA_BLACK,"温度: %-.2f",Yhead.Temp);

  1220.         ccprintf(10,y0+tall+h*5+8,VGA_BLACK,"最大损耗:%-.5f",DF);
  1221.         ccprintf(10+142,y0+tall+h*5+8,VGA_BLACK,"平均值:%-.5f",total_mean);
  1222.         ccprintf(10+290,y0+tall+h*5+8,VGA_BLACK,"最小损耗:%-.5f",DF);
  1223. /*        ccprintf(10+435,y0+tall+h*5+8,VGA_BLACK,"工程能力指数:%-.4f",cp);*/
  1224.         ccprintf(10+435,y0+tall+h*5+8,VGA_BLACK,"等效电阻:%-.2f",Yhead.Requ);


  1225.         mouse_on(1);

  1226.         Selected = 0;
  1227.         do
  1228.         {
  1229.           Dialog(wnd,
  1230.                 &Selected,
  1231.                 &CursorX,
  1232.                 &CursorY,
  1233.                 &Classid,
  1234.                 &id,
  1235.                 &lpara);
  1236.         switch(id)
  1237.         {
  1238.           case 5:
  1239.                     print_screen(1,1,dr_y-68,dr_x-7);
  1240.                     break;
  1241.           default:
  1242.                     break;
  1243.         }

  1244.         }while(id != ID_OK);

  1245.         DeletePopupWindow(wnd);



  1246. }

  1247. /* -----------------------------------------------------------------------
  1248.   DisplayTM : Display "CWT Co." Trade Mark

  1249. -------------------------------------------------------------------------- */
  1250. void DisplayTM(int x,int y)
  1251. {
  1252. int     old_color;


  1253.         old_color = _getcolor();

  1254.         _setviewport(x,y,x+285,y+31);
  1255.         _clearscreen(_GVIEWPORT);

  1256.         _setcolor(VGA_LIGHTGRAY);
  1257.         _rectangle(_GFILLINTERIOR,0,0,322,32);

  1258.         _setcolor(VGA_BLUE);
  1259.         _ellipse(_GFILLINTERIOR,0,0,28,28);

  1260.         _setcolor(VGA_WHITE);
  1261.         line(0,10,28,10);
  1262.         line(0,11,28,11);

  1263.         line(0,12,28,12);
  1264.         line(0,13,28,13);
  1265.         line(0,14,28,14);
  1266.         line(0,15,28,15);
  1267.         line(0,16,28,16);
  1268.         line(0,17,28,17);
  1269.         line(0,18,28,18);

  1270.         line(0,19,28,19);
  1271.         line(0,20,28,20);
  1272.         ccprintf(0,4,VGA_BLUE,"C");
  1273.         ccprintf(10,4,VGA_BLUE,"W");
  1274.         ccprintf(20,4,VGA_BLUE,"T");

  1275.         ccprintf(34,6,VGA_BLACK,"中伟达电子实业公司");
  1276.         /*
  1277.         ccprintf(34,0,VGA_BLACK,"C W T Electronic");
  1278.         ccprintf(34,10,VGA_BLACK,"Industry & Commerce Co.");
  1279.          */
  1280.         /* recover old viewport */
  1281.         _setviewport(0,0,639,479);
  1282.         /* recover old color */
  1283.         _setcolor(old_color);
  1284.         return;
  1285. }

  1286. int autoaq(char *Fname)
  1287. {
  1288. char            buffer[_MAX_PATH];
  1289. char            drive[_MAX_DRIVE],dir[_MAX_DIR],file[_MAX_FNAME],ext[_MAX_EXT];
  1290. struct find_t   fileinfo;
  1291. YpHead          Yhead;
  1292. FILE            *data_pointer,*data1_pointer;
  1293. long            SampleNumb;
  1294. int             i;
  1295. int             num, len,len3, ttt, dly;
  1296. char            buf[230];
  1297. char            *strng1,c;          /* pointer to the character string */
  1298. int             key;
  1299. unsigned char   juk;
  1300. float   cp,cpt;
  1301. float   d;
  1302. float   value[110];
  1303. char CP[61];
  1304. char DF[61];
  1305. char *pdest, *newstring;
  1306. int  pos;
  1307. POPUPWINDOW     *wnd;
  1308. int             Classid,id,Selected,CursorX,CursorY;
  1309. long            return_lpara;
  1310. char            ch10[20],ch11[20],ch12[20];
  1311. unsigned long   FrameX,FrameY;
  1312. int             reasonnumber,refusenumber;
  1313. int             primadd, KeyPlay;

  1314.   if( (data_pointer = fopen(Fname,"rb")) == NULL)
  1315.   {
  1316.     ErrorMessage(" 打不开银片数据文件 ");
  1317.     return(1);
  1318.   }




  1319.   /* Read default data file name */
  1320.   fseek(data_pointer,0l,SEEK_SET);
  1321.   fread(&Yhead,sizeof(YpHead),1,data_pointer);
  1322.   fread(&SampleNumb,4,1,data_pointer);
  1323.   fclose(data_pointer);

  1324. if(SplitNumber(Yhead,&reasonnumber,&refusenumber)==0)
  1325. {
  1326. ErrorMessage("标准错误!");
  1327. return(1);
  1328. }

  1329.   primadd = 17;
  1330.   if (!opengpib()) {
  1331.           printf ("\n\n Drivers not present.\n");
  1332.           exit ( 10 );
  1333.   }

  1334.   buf[0] = RENT;
  1335.   buf[1] = TOSET;
  1336.   buf[2] = 100;
  1337.   buf[3] = TOEN;
  1338.   num = writecom (buf, 4);
  1339.   if (num != 4) {
  1340.           printf ("\n IEEE command error \n");
  1341.   }

  1342.   sendcom ( LAD + primadd );

  1343.   sendcom ( EOIEN );

  1344.   strng1 = "TRIG2";
  1345.   len = strlen (strng1);
  1346.   num = writedat (strng1, len);    /* send data bytes */
  1347.   sendcom ( EOIEN );   /* send Primary Talk Addrs */

  1348.   if((data1_pointer=fopen(Fname,"wb"))==NULL)
  1349.   {
  1350.   ErrorMessage(" 打不开数据文件 ");
  1351.   return;
  1352.   }
  1353.   SampleNumb = 0;
  1354.   fseek(data1_pointer,94l,SEEK_SET);
  1355.   fwrite(&SampleNumb,4,1,data1_pointer);

  1356.   mouse_off(1);
  1357.   _setviewport(0,0,639,479);


  1358.   wnd = EstablishPopupWindow(120,60,400,360,VGA_WHITE,1);
  1359.   SetTitle(wnd,"银 片 抽 检 数 据 文 件");

  1360.   ccwprintf(wnd,30,10,VGA_BLACK,"应输入样品个数 : %d",reasonnumber);
  1361.   ccwprintf(wnd,30,30,VGA_BLACK,"已经输入      个样品");
  1362.   ccwprintf(wnd,30,130,VGA_BLACK,"插上电容时按[更正]键,当4278A显示值正确后,");
  1363.   ccwprintf(wnd,30,148,VGA_BLACK,"再按左边的[Ese]键,测量值则存于您在计算机中");
  1364.   ccwprintf(wnd,30,166,VGA_BLACK,"指定的文件内.按大键盘左上角的[Esc]键,即退出");
  1365.   ccwprintf(wnd,30,184,VGA_BLACK,"联机测量状态.这时4278A可照常使用.");

  1366.   ccwprintf(wnd,30,250,VGA_RED,"退出 -- 按 Esc 键");

  1367.   mouse_on(1);
  1368.   move_mouse(630,470);
  1369.   do
  1370.     {
  1371.      _asm
  1372.         {
  1373.          mov  ax,0
  1374.          mov  dx,201h
  1375.          in   al,dx
  1376.          mov  juk,al
  1377.          }

  1378.     if(juk == 0xe0)
  1379.       {
  1380.        sendcom ( LAD + primadd );   /* send Primary Talk Addrs */

  1381.        strng1 = "DATA?";
  1382.        len = strlen (strng1);
  1383.        num = writedat (strng1, len);    /* send data bytes */
  1384.        sendcom ( EOIEN );   /* send Primary Talk Addrs */

  1385.        while( 1 )
  1386.          {
  1387.            _asm
  1388.               {
  1389.                mov  ax,0
  1390.                mov  dx,201h
  1391.                in   al,dx
  1392.                mov  juk,al
  1393.                }

  1394.                if(juk == 0xf0)
  1395.                  break;
  1396.          }

  1397.        for( i=0 ; i < 10000; ++i );

  1398.        SampleNumb = SampleNumb + 1;
  1399.        sendcom ( TAD + primadd );   /* send Primary Talk Addrs */
  1400.        num = readdat ( buf, 25 );   /*   READ DATA           */
  1401.        buffer[26] = '\0';

  1402.        pdest = memccpy( CP, buf, ',', 60 );
  1403.        pdest = pdest - 1;
  1404.        *pdest = '\0';
  1405.        pdest = pdest + 1;
  1406.        cp = (float)atof( CP );
  1407.        cpt = cp * 1E+12;

  1408.        if(cpt >= 1000)
  1409.        {
  1410.          cp = cp * 1E+9;
  1411.          ClearWindowRect(wnd,30,70,260,25);
  1412.          ccwprintf(wnd,30,70,VGA_BLUE,"电容值Cp = %.4f nF",cp);
  1413.        }
  1414.        else
  1415.        {
  1416.          cp = cp * 1E+12;
  1417.          ClearWindowRect(wnd,30,70,260,25);
  1418.          ccwprintf(wnd,30,70,VGA_BLUE,"电容值Cp = %.4f pF",cp);
  1419.         }
  1420.        pos = pdest - CP;
  1421.        pdest = memccpy( DF, buf + pos, '+', 60 );
  1422.        pdest = pdest - 1;
  1423.        *pdest = '\0';
  1424.        d = (float)atof( DF );

  1425.        ClearWindowRect(wnd,30,30,150,25);
  1426.        ccwprintf(wnd,30,30,VGA_BLACK,"已经输入%-4d  个样品",SampleNumb);
  1427.        ClearWindowRect(wnd,30,100,260,25);
  1428.        ccwprintf(wnd,30,100,VGA_BLUE,"损耗值 D = %.5f ",d);

  1429.        fwrite(&cp,4,1,data1_pointer);
  1430.        fwrite(&d,4,1,data1_pointer);
  1431.        _setcolor(VGA_WHITE);

  1432.       }

  1433.       if(kbhit())
  1434.         {
  1435.          KeyPlay = get_char();
  1436.            if(KeyPlay != 27)  KeyPlay = 0;
  1437.         }
  1438.     } while(KeyPlay != 27);

  1439.     KeyPlay = 0; /* must change the "KeyPlay",so that KeyPlay != 27 */

  1440.     sendcom ( LAD + primadd );
  1441.     strng1 = "*RST";
  1442.     len = strlen (strng1);
  1443.     num = writedat (strng1, len);    /* send data bytes */
  1444.     sendcom ( EOIEN );   /* send Primary Talk Addrs */


  1445.   fseek(data1_pointer,94l,SEEK_SET);
  1446.   fwrite(&SampleNumb,4,1,data1_pointer);

  1447.   Yhead.password = 0x4347;
  1448.   Yhead.label[0] = 0;
  1449.   strcpy(Yhead.time,"950619/8:30");
  1450.   Yhead.NNumb = 100000;
  1451.   /*
  1452.   Yhead.material[0] = 0;
  1453.    */
  1454.   strcpy(Yhead.material,"4Z/Z5V");
  1455.   Yhead.standard = 1;
  1456.   Yhead.delta = 3;
  1457.   if(cpt >= 1000)
  1458.   {
  1459.     strcpy(Yhead.Unit,"nF");
  1460.   }
  1461.   else
  1462.   {
  1463.     strcpy(Yhead.Unit,"pF");
  1464.    }
  1465.   strcpy(Yhead.sob,"电容");
  1466.   Yhead.Temp = 0.0;
  1467.   Yhead.Requ = 0.0;
  1468.   fseek(data1_pointer,0l,SEEK_SET);
  1469.   fwrite(&Yhead,sizeof(YpHead),1,data1_pointer);

  1470.   fclose(data1_pointer);

  1471.   buf[0] = RENF;                  /* Send  */
  1472.   buf[1] = 17 + LAD;          /* make primary listen addrs */
  1473.   num = writecom (buf, 2);        /* send command bytes */
  1474.   if(num != 2)
  1475.     {
  1476.      ErrorMessage("IEEE 命令错误!");
  1477.     }

  1478.   sendcom (UNL);                  /* send untalk command */
  1479.   closegpib ();                   /* close drivers at end  */

  1480.   DeletePopupWindow(wnd);
  1481.   return;
  1482. }

  1483. int y_n(char *Fname)
  1484. {
  1485. int             curr_da_image_bank;
  1486. POPUPWINDOW     *wnd;
  1487. int             id,Selected,CursorX,CursorY;

  1488.         /* Establish verify window */
  1489.         wnd = EstablishPopupWindow(180,150,280,180,VGA_NEWWHITE,1);
  1490.         SetTitle(wnd,"选 中 文 件 确 认 窗");

  1491.         /* OK & Cancel pressbutton */
  1492.   EstablishPressButton(wnd,40,100,74,40,"确 认(O)",ID_OK,0xff18);
  1493.   EstablishPressButton(wnd,166,104,74,32,"取 消(C)",ID_CANCEL,0xff2e);

  1494.         ccwprintf(wnd,10,12,VGA_BLACK,"现将使用文件 %s ",Fname);
  1495.         ccwprintf(wnd,10,30,VGA_BLACK,"存贮新数据.如果确认,");
  1496.         ccwprintf(wnd,10,48,VGA_BLACK,"文件内容将被清除并更新.");
  1497.         ccwprintf(wnd,10,66,VGA_BLACK,"若不愿更新,则按取消键.");

  1498.         Selected = 0;
  1499.         Dialog(wnd,
  1500.                 &Selected,
  1501.                 &CursorX,
  1502.                 &CursorY,
  1503.                 NULL,
  1504.                 &id,
  1505.                 NULL);

  1506.         DeletePopupWindow(wnd);

  1507.         if(id == ID_CANCEL)
  1508.         {
  1509.           return (1);
  1510.         }

  1511.           return (0);

  1512. }

  1513. \032
复制代码



所有资料51hei提供下载:
CWTSQ1.zip (11.39 KB, 下载次数: 5)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表