找回密码
 立即注册

QQ登录

只需一步,快速开始

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

CIS扫描仪控制源码

[复制链接]
跳转到指定楼层
楼主
ID:382223 发表于 2018-8-2 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /**
  2.   ******************************************************************************
  3.   * @file    motor control.c
  4.   * @author  MCD Application Team
  5.   * @version
  6.   * @date    12-May-2013
  7.   * @brief   This file provides all the Application firmware functions.
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  14.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17.   *
  18.   ******************************************************************************
  19.   */

  20. /* Includes ------------------------------------------------------------------*/


  21. #include "scan200dpi.h"
  22. #include "gpio.h"
  23. #include "globalVar.h"
  24. #include "commun.h"
  25. #include "usbd_hid_core.h"
  26. #include "readticket.h"
  27. #include "motor.h"
  28. #include "readticket.h"
  29. #include "adc.h"
  30. #include "timer.h"
  31. #include "usbd_hid_api.h"

  32. //#define nop5()  {__nop() __nop() __nop() __nop() __nop() __nop()}



  33.         
  34. volatile uint8_t cnt24 =1;
  35. volatile uint32_t Index23=0;

  36. void nop3(void)
  37. {
  38.         __nop();
  39. //        __nop();
  40. //        __nop();
  41.         
  42. }

  43. void nop5(void)
  44. {
  45.         __nop();
  46.         __nop();
  47.         __nop();
  48. //        __nop();
  49. //        __nop();        
  50. }

  51. void nop7(void)
  52. {
  53.         __nop();
  54.         __nop();
  55.         __nop();
  56.         __nop();
  57.         __nop();
  58. //        __nop();
  59. //        __nop();        
  60. }

  61. void nop9(void)
  62. {
  63.         __nop();
  64.         __nop();
  65.         __nop();
  66.         __nop();
  67.         __nop();
  68.         __nop();
  69.         __nop();
  70. //        __nop();
  71. //        __nop();        
  72. }

  73. void nop10(void)
  74. {
  75.         __nop();
  76.         __nop();
  77.         __nop();
  78.         __nop();
  79.         __nop();
  80.         __nop();
  81.         __nop();
  82. //        __nop();
  83. //        __nop();
  84. //        __nop();        
  85. }

  86. /******************************/

  87. #if 0
  88. void ScanOneLine200(void)
  89. {
  90.         __IO uint32_t i;
  91.         __IO uint8_t        OneByteData=0;
  92.         __IO uint32_t        temp=0;        


  93.         uint32_t        scanbufIndexStart;
  94.         uint32_t        scanbufIndexEnd;
  95.         checkpaperIndex=scan_buffer_Windex;
  96.         scanbufIndexStart=scan_buffer_Windex;
  97.         scanbufIndexEnd=scan_buffer_Windex+84;
  98.         scan_buffer_Windex+=256;
  99.         
  100.         
  101.         GPIOC813=ApiSetReaderParameter.ScanRefVoltageValue;

  102.         CISCNTLOW;
  103.         CISCLKLOW;        
  104.         CISSILOW;

  105.         scanEnter();
  106.         TIM2->SR = (uint16_t)~TIM_IT_Update;
  107.         TIM2->CNT=0;
  108.         TIM2->ARR = 330;//300;//TIM_SetAutoreload;
  109.         TIM2->CR1 |=0x0001;

  110.         /**************************************/
  111.         CISSIHIGH;//si  high
  112.         CISLEDON;
  113.         nnop8;
  114.         nnop8;
  115.         nnop8;
  116.         nnop8;
  117.         nnop8;
  118.         
  119.         CISCLKHIGH;        //clk high
  120.         nnop8;
  121.         nnop3;
  122.         
  123.         CISCLKLOW;        //clk low
  124.         nnop10;
  125.         CISSILOW;        //si low
  126.         nnop8;
  127. //        nnop8;
  128.         
  129.         
  130.         for(i=0;i<60;i++)
  131.         {
  132.                 CISCLKHIGH;        //clk high
  133.                 nnop4;
  134.                 CISCLKLOW;        //clk low
  135.                 nnop5;
  136.         }

  137.         for(i=0;i<8;i++)
  138.         {        
  139.                 CISCLKHIGH;        //clk high
  140.                 nnop6;
  141.                 //nnop1;
  142.                 CISCLKLOW;        //clk low
  143. //                nnop4;
  144.                 nnop10;
  145.                 //nnop6;
  146.         }
  147.         
  148.                 CISCLKHIGH;        //clk high
  149.                 nnop6;
  150.                 CISCLKLOW;        //clk low
  151.                 nnop2;        
  152.         
  153.         for(i=scanbufIndexStart;i<scanbufIndexEnd;i++) //  85
  154.         {
  155.                
  156.                          CISCLKHIGH;          //1
  157.                         OneByteData <<=1;        
  158.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  159.                                 OneByteData |=1;               
  160.                         CISCLKLOW;        
  161.                         nnop10;
  162. //                        nnop5;
  163.                         
  164.                         CISCLKHIGH;          //2
  165.                         OneByteData <<=1;        
  166.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  167.                                 OneByteData |=1;               
  168.                         CISCLKLOW;        
  169.                         nnop10;
  170. //                        nnop5;
  171.                         
  172.                         
  173.                         CISCLKHIGH;          //3
  174.                         OneByteData <<=1;        
  175.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  176.                                 OneByteData |=1;               
  177.                         CISCLKLOW;        
  178.                         nnop10;
  179. //                        nnop5;        

  180.                         CISCLKHIGH;          //4
  181.                         OneByteData <<=1;        
  182.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  183.                                 OneByteData |=1;               
  184.                         CISCLKLOW;        
  185.                         nnop10;
  186. //                        nnop5;                        
  187.         

  188.                         CISCLKHIGH;          //5
  189.                         OneByteData <<=1;        
  190.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  191.                                 OneByteData |=1;               
  192.                         CISCLKLOW;        
  193.                         nnop10;
  194. //                        nnop5;                        
  195.                         
  196.                         
  197.                         CISCLKHIGH;          //6
  198.                         OneByteData <<=1;        
  199.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  200.                                 OneByteData |=1;               
  201.                         CISCLKLOW;        
  202.                         nnop10;
  203. //                        nnop5;                        
  204.                         
  205.                         
  206.                         CISCLKHIGH;          //7
  207.                         OneByteData <<=1;        
  208.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  209.                                 OneByteData |=1;               
  210.                         CISCLKLOW;        
  211.                         nnop10;
  212. //                        nnop5;                        
  213.                         
  214.                         
  215.                         CISCLKHIGH;          //8
  216.                         OneByteData <<=1;        
  217.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  218.                                 OneByteData |=1;               
  219.                         CISCLKLOW;               
  220.                         ScanBuffer[i]=OneByteData;
  221.                         OneByteData=0;

  222.                         
  223.         }
  224.         
  225.         for(i=0;i<16;i++)
  226.         {        
  227.                 CISCLKHIGH;        //clk high
  228.                 nnop4;
  229.                 CISCLKLOW;        //clk low
  230.                 nnop8;
  231.         }

  232.         scanExit();
  233.         
  234. }

  235. #endif

  236. #if 1
  237. void ScanOneLine200(void)        //old protocol old scaner //470uS
  238. {
  239.         
  240.         uint32_t i;
  241.         uint8_t        OneByteData=0;
  242.         uint32_t        scanbufIndexStart;
  243.         uint32_t        scanbufIndexEnd;
  244.         checkpaperIndex=scan_buffer_Windex;
  245.         scanbufIndexStart=scan_buffer_Windex;
  246.         scanbufIndexEnd=scan_buffer_Windex+84;
  247.         //scan_buffer_Windex+=256;
  248.         scan_buffer_Windex+=128;

  249.         GPIOC813=ApiSetReaderParameter.ScanRefVoltageValue;

  250.         CISCNTLOW;

  251.         scanEnter();
  252.         TIM2->SR = (uint16_t)~TIM_IT_Update;
  253.         TIM2->CNT=0;
  254.         TIM2->ARR = 350;//330;//TIM_SetAutoreload;
  255.         TIM2->CR1 |=0x0001;
  256.         CISLEDON;

  257.         ADC_CLK_High();//GPIOB->BSRRL = GPIO_Pin_8; //C H
  258.         Delay(1);
  259.         ADC_CLK_Low();//GPIOB->BSRRH = GPIO_Pin_8; //C L
  260.         __nop();
  261.         ADC_SPO_High();//GPIOB->BSRRL = GPIO_Pin_9; //O H
  262.         __nop();
  263.         ADC_CLK_High();//GPIOB->BSRRL = GPIO_Pin_8;
  264.         Delay(1);
  265.         ADC_CLK_Low();//GPIOB->BSRRH = GPIO_Pin_8;
  266.         Delay(1);
  267.         ADC_CLK_High();//GPIOB->BSRRL = GPIO_Pin_8;
  268.         Delay(1);
  269.         ADC_CLK_Low();//GPIOB->BSRRH = GPIO_Pin_8;
  270.         __nop();
  271.         ADC_SPO_Low();//GPIOB->BSRRH = GPIO_Pin_9;
  272.         __nop();

  273.         for(i=0;i<56;i++)                //56 clocks before scan:0-55
  274.         {
  275.                 ADC_CLK_High();
  276.                         __nop();
  277.                         __nop();
  278.                         __nop();
  279.         

  280.                 ADC_CLK_Low();
  281.                         __nop();
  282.                         __nop();


  283.         }

  284.         for(i=0;i<8;i++)                //56 clocks before scan:0-55
  285.         {
  286.                 ADC_CLK_High();
  287.                         __nop();
  288.                         __nop();
  289.                         __nop();
  290.                         __nop();

  291.                 ADC_CLK_Low();
  292.                         __nop();
  293.                         __nop();
  294.                         __nop();
  295.                         __nop();
  296.                         __nop();

  297.         }

  298.         
  299.         for(i=scanbufIndexStart;i<scanbufIndexEnd;i++) //  216
  300.         {
  301.                
  302.                                 


  303.                         
  304.                          ADC_CLK_High();          //1
  305.                         OneByteData <<=1;        
  306.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  307.                                 OneByteData |=1;        
  308.                         else                           
  309.                                 __nop();
  310.                         ADC_CLK_Low();
  311.                         __nop();
  312.                         __nop();
  313.                         __nop();
  314.                         __nop();
  315.                         __nop();
  316.                         __nop();
  317.                         __nop();
  318.                         


  319.                         ADC_CLK_High();                //2
  320.                         OneByteData <<=1;        
  321.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)        //one bit data
  322.                                 OneByteData |=1;
  323.                         else                           
  324.                                 __nop();                        
  325.                         ADC_CLK_Low();
  326.                         __nop();
  327.                         __nop();
  328.                         __nop();
  329.                         __nop();
  330.                         __nop();
  331.                         __nop();
  332. //                        __nop();
  333.                         


  334.                         ADC_CLK_High();          //3
  335.                         OneByteData <<=1;        
  336.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)        //one bit data
  337.                                 OneByteData |=1;        
  338.                         else                           
  339.                                 __nop();                        
  340.                         ADC_CLK_Low();
  341.                         __nop();
  342.                         __nop();
  343.                         __nop();
  344.                         __nop();
  345.                         __nop();
  346.                         __nop();
  347. //                        __nop();

  348.                         
  349.                         ADC_CLK_High();          //4
  350.                         OneByteData <<=1;        
  351.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)  //one bit data
  352.                                 OneByteData |=1;
  353.                         else                           
  354.                                 __nop();                        
  355.                         ADC_CLK_Low();
  356.                         __nop();
  357.                         __nop();
  358.                         __nop();
  359.                         __nop();
  360.                         __nop();
  361.                         __nop();
  362. //                        __nop();

  363.                         
  364.                         ADC_CLK_High();           //5
  365.                         OneByteData <<=1;        
  366.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET) //one bit data
  367.                                 OneByteData |=1;
  368.                         else                           
  369.                                 __nop();                        
  370.                         ADC_CLK_Low();
  371.                         __nop();
  372.                         __nop();
  373.                         __nop();
  374.                         __nop();
  375.                         __nop();
  376.                         __nop();
  377. //                        __nop();

  378.                         
  379.                         ADC_CLK_High();           //6
  380.                         OneByteData <<=1;        
  381.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)        //one bit data
  382.                                 OneByteData |=1;
  383.                         else                           
  384.                                 __nop();                        
  385.                         ADC_CLK_Low();
  386.                         __nop();
  387.                         __nop();
  388.                         __nop();
  389.                         __nop();
  390.                         __nop();
  391.                         __nop();
  392. //                        __nop();

  393.                         
  394.                         ADC_CLK_High();                 //7
  395.                         OneByteData <<=1;        
  396.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)         //one bit data
  397.                                 OneByteData |=1;
  398.                         else                           
  399.                                 __nop();                        
  400.                         ADC_CLK_Low();
  401.                         __nop();
  402.                         __nop();
  403.                         __nop();
  404.                         __nop();
  405.                         __nop();
  406.                         __nop();
  407. //                        __nop();

  408.                                                                                                                                        
  409.                          ADC_CLK_High();                  //8
  410.                         OneByteData <<=1;        
  411.                         if ((GPIOE->IDR & GPIO_Pin_11) == (uint32_t)Bit_RESET)          //one bit data
  412.                                 OneByteData |=1;
  413.                         else                           
  414.                                 __nop();                        
  415.                         ADC_CLK_Low();

  416.                 ScanBuffer[i]=OneByteData;          //j256
  417.                 OneByteData=0;

  418.         }
  419.         __nop();
  420. //        CISLEDOFF;
  421.         for(i=0;i<32;i++)                //add 32 clocks after scan
  422.         {
  423.                 ADC_CLK_High();
  424.                         __nop();
  425.                         __nop();
  426.                         __nop();
  427. //                        __nop();
  428. //                        __nop();
  429. //                        __nop();
  430. //                        __nop();
  431.                 ADC_CLK_Low();
  432.                         __nop();
  433.                         __nop();
  434.                         __nop();
  435.                         __nop();//

  436.         }
  437.         scanExit();
  438.         
  439.         //ScanBuffer[scanbufIndexStart+8]=0x0f;
  440.                 //ScanBuffer[scanbufIndexStart+41]=0xff;

  441. }
  442. #endif

  443. uint8_t rollFrontProcess(void);
  444. volatile uint32_t ValueLine=0;
  445. volatile uint32_t ValueCNT=0;
  446. extern volatile uint8_t SLEDF;

  447. volatile uint32_t ScanBufSendIndex=0;

  448. volatile uint8_t dotcnt=0;
  449. volatile uint8_t dotcnt2=0;

  450. /*************************************************/
  451. uint8_t ScanBy200dpiProcess(void)
  452. {
  453. //        uint32_t i;
  454. //        uint32_t startp=0;        
  455. //        uint32_t *p1;
  456. //        uint32_t *p2;
  457.         uint8_t (*CheckData)(uint16_t sdpi);        
  458. //        SendScanDataType *p=(SendScanDataType *)struCommuCon.byTxcBuf;
  459.         CheckData=CheckOneLineData;
  460.         
  461.         if(Light_Status!=0)                         //?????                                       
  462.         {
  463.                 if(rollFront.sRunFlag!=RESET)
  464.                 {
  465.                                 while(RunOneStepFlag!=SET);//wait         
  466.                                 RunOneStepFlag=RESET;        

  467. //                        while(MotRunStepEnable!=SET);
  468. //                        MotRunStepEnable=RESET;
  469. //                        StepMotorDrive8841();
  470. //                        TIM3->ARR = (uint32_t) AddSpeedTable[MotStepCount];//TIM_SetAutoreload(TIM3, AddSpeedTable[MotStepCount]);
  471. //                  TIM3->CR1 |= TIM_CR1_CEN;//TIM_Cmd(TIM3, ENABLE);
  472.                         
  473.                         ScanOneLine200();        
  474.                         scan_buffer_Windex=0;//roll                                
  475.                         rollFront.mCnt++;         //
  476. //                        rollFront.sCnt++;          //
  477.                         rollFront.sReplyDataFlag=SET;
  478.                         if ((*CheckData)(200)==1)
  479.                                 rollFront.CheckDataCnt++;           //
  480.                         else
  481.                                 rollFront.CheckDataCnt=0;           //


  482.                         if (MotStepCount < MotStepCountEnd)
  483.                                 MotStepCount+=2;


  484.         //
  485.                         if (rollFront.CheckDataCnt>=2)                                //2         find ticket
  486.                         {        
  487.                                 ReaderStatus=sNormal;
  488.                                 rollFront.sRunFlag=RESET;//
  489.                                 Read_Ticket_Front=RESET;
  490.                                 ReadTicketFlag=SET;         //enable read ticket
  491.                                 scan_line_count=0;          //clear scan line
  492.                                 scan_buffer_Windex=2560;
  493.                                 CIT_BUFFER_DATA_LINE=10;
  494.                                 //MotStepCountEnd=110;//MotStepCountEnd=ApiSetReaderParameter.ScanMaxSpeedStep;//MotStepCountEnd=120;//30-10m;//108;//25;
  495.                                 TIM7_Disable();
  496.                                 Tim7RunStatus=0;
  497.                                 
  498.                                 usbsenddataCount=0;
  499.                                 ScanBufSendIndex=0;

  500.                                 TIM6->ARR =3000;  //??????
  501.                                 TIM6->CNT=0;
  502.                                    TIM6_Enable();         
  503.                                 Tim6RunStatus=0;
  504.         
  505.                         }
  506.                         else        //rollFront.CheckDataCnt<2
  507.                         {
  508. //                                if(sReplyDataFlag!=RESET)
  509. //                                        rollFront.sCnt=0;
  510. //                                if(rollFront.sCnt>10)
  511. //                                {
  512. //                                        rollFront.sCnt=0;
  513. //                                        rollFront.sReplyDataFlag=SET;
  514. //                                }                        
  515.                                 
  516.                                 if(rollFront.mCnt>2000)//
  517.                                 {
  518.                                          #ifdef OldProtocol
  519.                                                  A4_Cmd_2(ReadFail);
  520.                                         #endif
  521.         
  522.                                         rollFront.mReplyDataFlag=SET;

  523. //                                        TIM7_Disable();
  524. //                                        Tim7RunStatus=0;
  525.                         
  526.                                 }                                       
  527.                                                 
  528.                         }

  529.                 }
  530.                 else
  531.                 {
  532.         
  533.                         if(Read_Ticket_Front!=RESET)//if(rollFront.sInitEnableFlag!=RESET)//has front flag
  534.                         {
  535.                                 rollFront.CheckDataCnt=0;
  536.                                 rollFront.mCnt=0;
  537.                                 rollFront.sCnt=0;
  538.                                 rollFront.mReplyDataFlag=RESET;
  539.                                 rollFront.sReplyDataFlag=RESET;
  540.                                 rollFront.sRunFlag=SET;
  541.                                 
  542.                                 ReaderStatus=sRollFront;//????????????0        
  543.                                 MotStepCount=0;//5;
  544.                                 MotStepCountEnd=84;//94;//50;//94;//80;//25;        
  545.                                 ScanOneLine200();
  546.                                 scan_buffer_Windex=0;//roll                        
  547.                                 MotorRunDirection=FORWARD;//forward
  548.                                 TIM3->CR1 |= TIM_CR1_CEN; //enable tim3        //1        
  549.                                 

  550. //                                TIM3->ARR = (uint32_t) AddSpeedTable[MotStepCount];//TIM_SetAutoreload(TIM3, AddSpeedTable[MotStepCount]);
  551. //                                TIM3->CR1 |= TIM_CR1_CEN;//TIM_Cmd(TIM3, ENABLE);
  552.                                 
  553.                                 TIM7->ARR =800;         //reinit tim7
  554.                                 TIM7->CNT=0;
  555.                                    TIM7_Enable();
  556.                                 Tim7RunStatus=2;
  557.                                 BUZZ_Off();
  558.                                                         
  559.                                 
  560.                
  561.                         }
  562.                 }

  563.                 if(ReadTicketFlag!=RESET)                                //?????ticket ????        
  564.                 {        
  565.                         while(RunOneStepFlag==RESET);               
  566.                         RunOneStepFlag=RESET; //one step
  567.                         
  568. //                        while(MotRunStepEnable!=SET);
  569. //                        MotRunStepEnable=RESET;
  570. //                        StepMotorDrive8841();
  571. //                        TIM3->ARR = (uint32_t) AddSpeedTable[MotStepCount];//TIM_SetAutoreload(TIM3, AddSpeedTable[MotStepCount]);
  572. //                  TIM3->CR1 |= TIM_CR1_CEN;//TIM_Cmd(TIM3, ENABLE);

  573.                         ScanOneLine200();
  574.                         
  575.                         //ScanBuffer[checkpaperIndex+112]=(1<<dotcnt2);
  576. //                        ScanBuffer[checkpaperIndex+110]=(1<<(dotcnt++));
  577. //                        if(dotcnt>7)
  578. //                        {        
  579. //                                dotcnt=0;
  580. ////                                dotcnt2++;
  581. ////                                if(dotcnt2>7)
  582. ////                                        dotcnt2=0;
  583. //                        }
  584. //                        if((scan_buffer_Windex-checkpaperIndex)==128)
  585. //                                ScanBuffer[checkpaperIndex+112]=0x05;
  586.                         
  587.                         checkpaperby200();
  588.                         if(scan_buffer_Windex>=SCAN_BUFFER_SIZE)//if(scan_buffer_Hindex>=240)          //80*256 buffer
  589.                                 scan_buffer_Windex=0;               
  590.                         //startp=(uint32_t)(CIT_BUFFER_DATA_LINE*128);
  591.                         CIT_BUFFER_DATA_LINE++;
  592.                         scan_line_count++;
  593.         
  594.                         if(CIT_BUFFER_DATA_LINE>=24)
  595.                         {               
  596.                                 CIT_BUFFER_DATA_LINE=0;
  597.                                 usbsenddataCount++;                                
  598.                                 //__nop();

  599.                         }
  600. //                                p2=(uint32_t *)&ScanBuffer[checkpaperIndex];
  601. //                                p1=(uint32_t *)&(p->TxDataBuf[startp]);//struCommuCon.byTxcBuf[startp];//
  602. //                                for(i=0;i<21;i++)//endp
  603. //                                {
  604. //                                        *p1=*p2;//0x0f0f0f0f;//*p2;//ScanBuffer[checkpaperIndex+i];//*p2;
  605. //                                        //*p2=0;
  606. //                                        p1++;
  607. //                                        p2++;
  608. //                                }


  609.                                 if(usbsenddataCount>12)
  610.                                 {
  611.                                         if(MotStepCountEnd>59)//300mm/s
  612.                                                 MotStepCountEnd--;        
  613.                                 }
  614.                                 else if(usbsenddataCount<5)
  615.                                 {
  616.                                         if(MotStepCountEnd<86)//108)//430mm/s
  617.                                                 MotStepCountEnd++;
  618.                                 }



  619.                         if(scan_line_count>4900)//rollcount)
  620.                         {
  621.                                 MotStop();
  622.                                 TIM3->CR1 &= (uint16_t)~TIM_CR1_CEN;//disable tim3        
  623.                                 //TICKET_READ_START=RESET;
  624.                                 PrintImageFlag=RESET;
  625.         /***/                   check_ticket_finish=RESET;
  626.                                 check_ticket_end_line=0;
  627.                                 scan_line_count=0;
  628.                                 check_ticket_end=SET;
  629.                         //        read_ticket_exit=SET;
  630.                                 Light_Status=0;
  631.                                 SLEDF=0;
  632.                                 Read_Ticket_Front=SET;
  633.                                 ReadTicketFlag=RESET;
  634.                                 SCANNER_ENABLE=SET;                                
  635.                                 TICKET_READ_PAUSE=SET;
  636.                                 TIM5_Enable();
  637.                                 nopapercount=0;
  638.                                 TicketReadPauseCount=0;
  639.                                 scan_buffer_Rindex=0;
  640.                                 scan_buffer_Windex=0;
  641.                                 CIT_BUFFER_DATA_LINE=0;
  642.                                 ReaderStatus=1;//??

  643.                                 ValueCNT=TIM6->CNT;
  644.                                    TIM6_Disable();
  645.                                 ValueLine=scan_line_count;
  646.         
  647.                                 
  648.                         }

  649.                 }
  650.         }

  651.         

  652.         if(ReplyScanDataFlag==RESET)
  653.                 return 0;
  654.         if(bySendFlag!=0)
  655.                 return 0;
  656.         switch(ReaderStatus)
  657.         {

  658.                 case sNormal:
  659.                         
  660.                         if(usbsenddataCount>0)
  661.                         {
  662.                                 usbsenddataCount--;
  663.                                 ReplyScanDataFlag=RESET;
  664.                                 bySendFlag =1;
  665. //                                ReplyScanDataProcess
  666. //                                   (ReaderStatus,
  667. //                                        (uint8_t *)(ScanBuffer+256*scan_buffer_Rindex),
  668. //                                        3072);
  669.                                 /*****************************/               
  670.                                 //ReplyScanDataHeadProcess();
  671.                                 ReplyScanDataProcess();        
  672.                                 
  673.                                 ScanBufSendIndex+=3072;
  674.                                 if(ScanBufSendIndex>=SCAN_BUFFER_SIZE)
  675.                                         ScanBufSendIndex=0;
  676.                                 /*****************************/
  677. //                                scan_buffer_Rindex+=12;
  678. //                                if(scan_buffer_Rindex>=240)
  679. //                                        scan_buffer_Rindex=0;
  680.                         }
  681.                         else if(read_ticket_exit!=RESET)
  682.                         {
  683.                                 ReplyScanDataFlag=RESET;
  684.                                 ReplyDataProcess
  685.                                    (CMDsStartReadticket,
  686.                                         ReaderStatus,
  687.                                         CommuPID,
  688.                                         ExecuteSuccess,
  689.                                         0,
  690.                                     0);
  691.                                                         
  692.                                 read_ticket_exit=RESET;
  693.                                 scan_buffer_Rindex=0;
  694.                                 scan_buffer_Windex=0;
  695.                                 CIT_BUFFER_DATA_LINE=0;        
  696.                         
  697.                         }

  698.                         
  699.                         break;
  700.                         
  701.                 case sInputBlock:
  702.                         
  703.                         ReplyScanDataFlag=RESET;
  704.                         usbsenddataCount=0;
  705.                         ReplyDataProcess
  706.                            (CMDsStartReadticket,
  707.                                 ReaderStatus,//??
  708.                                 CommuPID,
  709.                                 ExecuteSuccess,
  710.                                 0,
  711.                                 0);

  712.                         Beep(3);
  713.                         
  714.                         break;
  715.                         
  716.                 case sOutputBlock:
  717.                 case sSelfcheck:                        
  718.                 case sCoverOpen:
  719.                         
  720.                         break;
  721.                         
  722.                 case sRollFront:

  723.                 if(rollFront.mReplyDataFlag!=RESET)
  724.                 {
  725.                         rollFront.mReplyDataFlag=RESET;
  726.                         
  727.                         ReaderStatus=0;
  728.                         TICKET_READ_START=RESET;
  729.                         Light_Status=0;
  730.                         MotStop();
  731.                         TIM3->CR1 &= (uint16_t)~TIM_CR1_CEN;//disable tim3        
  732.                         MotSteps=1;
  733.                         TIM7_Disable();

  734. //                        DelayNms(10);                  //old qctest
  735.                         
  736.                         ReplyScanDataFlag=RESET;
  737.                         ReplyDataProcess
  738.                            (CMDsStartReadticket,
  739.                                 ReaderStatus,//
  740.                                 CommuPID,
  741.                                 Executefail,
  742.                                 0,
  743.                                 0);
  744.                         //Beep(3);
  745.                         rollFront.sRunFlag=RESET;
  746.                         TIM7_Disable();
  747.                         Tim7RunStatus=0;
  748.                         
  749.                         
  750.                 }
  751.                 else
  752.                 {
  753.                
  754.                         rollFront.sReplyDataFlag=RESET;
  755.                         ReplyScanDataFlag=RESET;
  756.                         ReplyDataProcess
  757.                            (CMDsStartReadticket,
  758.                                 ReaderStatus,//
  759.                                 CommuPID,
  760.                                 ExecuteSuccess,
  761.                                 0,
  762.                                 0);
  763.                
  764.                 }                        
  765.                         
  766.                         break;

  767.                 default:
  768.                         break;

  769.         }                        
  770.                         
  771.                 return 0;
  772. }


  773. uint8_t checkpaperby200(void)
  774. {

  775.         if(check_ticket_finish==RESET)//&&(BetTicketFlag==RESET))        //???
  776.         {
  777.                 if(scan_line_count<320)
  778.                         return 0;
  779.                 else
  780.                         check_ticket_finish=SET;
  781.                
  782.         }
  783.         else
  784.         {        

  785.                 if(CheckTicketComplete(2,6,(uint8_t *)&ScanBuffer[checkpaperIndex])==1)
  786. //                if(CheckTicketComplete(2,(uint8_t *)&ScanBuffer[checkpaperIndex],
  787. //                        (uint8_t *)&ScanBuffer[checkpaperIndex+42])==1)
  788.                         check_ticket_end_line++;
  789.                 else
  790.                         check_ticket_end_line=0;

  791.                 if(check_ticket_end_line>24)//(check_ticket_end_line>20)  //ticket end
  792.                 {
  793.                                 TIM3->CR1 &= (uint16_t)~TIM_CR1_CEN;//disable tim3                                
  794.                                 MotStop();

  795.                                 check_ticket_end_line=0;
  796.                                 //scan_line_count=0;  
  797.                                 check_ticket_end=SET;
  798.                                 read_ticket_exit=SET;
  799.                                 Light_Status=0;
  800.                                 SLEDF=0;
  801.                                 Read_Ticket_Front=SET;
  802.                                 ReadTicketFlag=RESET;
  803.                                 SCANNER_ENABLE=SET;                                
  804. //                                A4_Cmd_2();
  805.                                 TICKET_READ_PAUSE=SET;
  806.                                 TIM5_Enable();
  807.                                 nopapercount=0;
  808.                                 TicketReadPauseCount=0;
  809.                                 scan_buffer_Rindex=0;
  810.                                 scan_buffer_Windex=0;
  811.                                 CIT_BUFFER_DATA_LINE=0;
  812.                                 check_ticket_finish=RESET;
  813.                         //        printf(" exit ticket ");

  814.                                 ValueCNT=TIM6->CNT;
  815. //                                ValueARR=TIM6->ARR;
  816.                                    TIM6_Disable();
  817.                                 ValueLine=scan_line_count;
  818. //                                __nop();

  819.                         sendPrizeInformation(0,0);
  820.                 }        
  821.         }
  822.         return 1;
  823. }

  824. /*******************************************/

  825. uint8_t rollFrontProcess(void)//(uint16_t cdpi)
  826. {

  827.         uint8_t (*CheckData)(uint16_t sdpi);        
  828.         CheckData=CheckOneLineData;

  829.         if(rollFront.sRunFlag!=RESET)
  830.         {
  831.                 while(RunOneStepFlag!=SET);//wait         
  832.                 RunOneStepFlag=RESET;                                
  833.                 ScanOneLine200();        
  834.                 scan_buffer_Windex=0;//roll                                
  835.                 rollFront.mCnt++;         //
  836.                 rollFront.sCnt++;          //
  837.                 if ((*CheckData)(200)==1)
  838.                         rollFront.CheckDataCnt++;           //
  839.                 else
  840.                         rollFront.CheckDataCnt=0;           //
  841. //
  842.                 if (rollFront.CheckDataCnt>=2)                                //2         find ticket
  843.                 {        
  844.                         ReaderStatus=sNormal;
  845.                         rollFront.sRunFlag=RESET;//
  846.                         Read_Ticket_Front=RESET;
  847.                         ReadTicketFlag=SET;         //enable read ticket
  848.                         scan_line_count=0;          //clear scan line
  849.                         scan_buffer_Windex=2560;
  850.                         CIT_BUFFER_DATA_LINE=10;
  851.                         MotStepCountEnd=ApiSetReaderParameter.ScanMaxSpeedStep;//MotStepCountEnd=120;//30-10m;//108;//25;

  852.                 }
  853.                 else        //rollFront.CheckDataCnt<2
  854.                 {
  855.                         if(rollFront.sCnt>10)
  856.                         {
  857.                                 rollFront.sCnt=0;
  858.                                 rollFront.sReplyDataFlag=SET;
  859.                         }                        
  860.                         
  861.                         if(rollFront.mCnt>2000)//
  862.                         {
  863.                                  #ifdef OldProtocol
  864.                                          A4_Cmd_2(ReadFail);
  865.                                 #endif

  866.                                 rollFront.mReplyDataFlag=SET;
  867.                
  868.                         }
  869.                         

  870.                                        
  871.                 }
  872. //               
  873.         
  874.         }
  875.         else
  876.         {

  877.                 if(Read_Ticket_Front!=RESET)//if(rollFront.sInitEnableFlag!=RESET)//has front flag
  878.                 {
  879.                         rollFront.CheckDataCnt=0;
  880.                         rollFront.mCnt=0;
  881.                         rollFront.sCnt=0;
  882.                         rollFront.mReplyDataFlag=RESET;
  883.                         rollFront.sReplyDataFlag=RESET;
  884.                         rollFront.sRunFlag=SET;
  885.                         
  886.                         ReaderStatus=sRollFront;//????????????0        
  887.                         MotStepCount=0;//5;
  888.                         MotStepCountEnd=94;//80;//25;        
  889.                         ScanOneLine200();
  890.                         scan_buffer_Windex=0;//roll                        
  891.                         MotorRunDirection=FORWARD;//forward
  892.                         TIM3->CR1 |= TIM_CR1_CEN; //enable tim3        //1                                
  893.                         
  894.         
  895.                 }
  896.         }


  897.         return 0;
  898. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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