⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waterpos.c

📁 水控POS机的程序
💻 C
📖 第 1 页 / 共 4 页
字号:

/********************************************************/
/*Function:  串口1发送一字节                            */
/*Input:     uchar data1                                */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void SendByte(uchar data1)
{


     NOP5();
     SBUF1=data1;
     while(!TI_1);
     TI_1=0;

     NOP5();

     NOP5();
}

/********************************************************/
/*Function:  串口1接收1字节                             */
/*Input:     Nun.                                       */
/*Output:    uchar data1                                */
/*Description:                                          */
/********************************************************/
uchar ReceiveByte(void)
{
      uchar data data1;
      ulong data count;
      s_err=1;

      for (count=0;count<500000;count++)                /*delay 5.5ms       */
      {
          if (RI_1)
          {
             data1=SBUF1;
             s_err=0;
             RI_1=0;
          }

          if (!s_err)
          { _nop_();
             break;}
          watchdog=~watchdog;
      }


      return (data1);
}

/********************************************************/
/*Function:  串口1接收一帧数据                          */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void ReceiveData5(void)
{
     uchar data c;
     uchar data pf;
     uchar data i,j;
     uchar xdata *pnt=ASSIC5;



     c= ReceiveByte();

     if(!s_err&&(c==0x02))
       {
          for(i=0;i<32;i++)

           { c= ReceiveByte();
             if(!s_err)
             {
              *pnt++=c;
              _nop_();
              if(c==0x03)
                { c=ReceiveByte();
                  _nop_();
                  f_err=1;
                  error=ERR8;
                  //f_mifare=1;
                  break;
                }


             }
              else
                break;


           }
       }

      if((!f_err)&&(!s_err))

       {

            c= ReceiveByte();
            if(!s_err&&(c==0x03))
              {
                pf=ASSIC5[0]^ASSIC5[1];
                for(i=2;i<32;i++)

                   {
                     pf=pf^ASSIC5[i];

                   }
              }



             c=ReceiveByte();
             if((!s_err)&&(c==pf))
              {
               f_ok=1;
              }
       }
 //f_faut:    _nop_();

}



/********************************************************/
/*Function:  串口1接收一帧数据                          */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void ReceiveData6(void)
{
     uchar data c;
     uchar data pf;
     uchar data i,j;
     uchar xdata *pnt=ASSIC6;

     c=ReceiveByte();  //接收帧头


     if(!s_err&&(c==0x02))
       {

         for(i=0;i<32;i++)
           {
           c= ReceiveByte();
             if(!s_err)
             {
              *pnt++=c;
              _nop_();
              if(c==0x03)
                { c=ReceiveByte();
                  _nop_();
                  f_err=1;
                  error=ERR8;
                  //f_mifare=1;
                  break;
                }


             }

           else
               break;
          }
        }


  if((!f_err)&&(!s_err))
      {
       c= ReceiveByte();
       if(!s_err&&(c==0x03))
         {
            pf=ASSIC6[0]^ASSIC6[1];
            for(i=2;i<32;i++)

             {
              pf=pf^ASSIC6[i];

             }
         }



      c=ReceiveByte();
      if((!s_err)&&(c==pf))
       {
         f_ok=1;
       }

      }
}
/******************************************/
/*---------发送读取第四块的数据-----------*/
/******************************************/



void sendcard4(void)
  {    uchar pf;
       SendByte(0X02);
       NOP5();
       SendByte(0X34);
       NOP5();
       pf=0x34;

       SendByte(0X36);
       NOP5();
       pf=pf^0x36;

       SendByte(0X30);
       NOP5();
       pf=pf^0x30;

       SendByte(0X31);
       NOP5();
       pf=pf^0x31;

       SendByte(0X30);
       NOP5();
       pf=pf^0x30;

       SendByte(0X34);
       pf=pf^0x34;
       NOP5();
       SendByte(0X03);
       NOP5();
       SendByte(pf);

   }
/***************************************/
/*-------发送读取第五块数据-------------/
/***************************************/



void sendcard5(void)
  {    uchar pf;
       SendByte(0X02);
       SendByte(0X34);
       pf=0x34;
       SendByte(0X36);
       pf=pf^0x36;
       SendByte(0X30);
       pf=pf^0x30;
       SendByte(0X31);
       pf=pf^0x31;
       SendByte(0X30);
       pf=pf^0x30;
       SendByte(0X35);
       pf=pf^0x35;
       SendByte(0X03);
       SendByte(pf);
   }
















/*************************/
/*    主函数             */
/*************************/
void main(void)
{   re184=0;
    PMR=0x41;
    PS=1;                                   /*串口0设置成高优先级别     */

    f_card=0;                               //复位消费状态标志  f_card=0 -- 空闲中
    f_kguan0=0;                                        //                  f_card=1 -- 消费中

    clear_xram();                           /*清除片外RAM               */

    address=~P0;                            /*读取当地地址              */
    beepp();
    init_serial();                          /*初始化串口                */
    init_T0();                              /*初始化定时器0             */
    beepp();
    closevalue();                           /*关闭电磁阀                */
    addr=irdbyte(fm_addr);                  /*read local address from FM*/
    master=irdbyte(fm_master);              /*read GLJ address from FM  */

    status=irdbyte(fm_status);              /*read local addess         */
    iwrbyte(fm_status,status);

    if(irdbyte(fm_flag0)!=FM_FLAG)          /*check fm flag             */
    {iwrbyte(fm_flag0,FM_FLAG);}            /*write FM flag             */
    Read_Sys();


    disp_name();
    f_card=0;
    f_sal=0;
    f_updata=0;
    salecount=1;
    kcount=0;
    f_mifare=0;
    f_connect=0;
    wait10ms();
    wait10ms();
    wait10ms();
    wait10ms();
    while (1)
    {
          watchdog=~watchdog;


          if ((f_ri0)&&(F_M1))                      //串口1有数据标志
          {                                         //处理串口1接收到的一帧数据
                assichex();                         //assic to hex函数
                if (xorsum())
                {
                  f_mifare=1;
                  sal_time=0;
                  openvalue();
                  f_ID=1;
                }

                f_ri0=0;
          }
        /*----------------------------------------------------------------*/
        if (f_ID)
        {
           if (!f_sal)                          //若在发送消费数据,屏蔽读卡
           {
              f_ID=0;                           //读到ID卡
                                                //禁止读卡中断
              f_zh=1;f_send=1;                  //置位请求帐号标志

              if(f_com)
              {
              Request_Information_Count=50;     //启动请求帐户超时定时标志 分频60ms
              while (Request_Information_Count)
              {
                    watchdog=~watchdog;
                    if (!f_zh) break;           //请求到帐户信息后f_zh=0;
              }
              }
              if (!f_zh)                        //判断有无在3秒内请求到数据
              {
                 accounts();                    //处理请求到的帐号
                 if (!f_err)
                 {
                    sal_time=0;
                    openvalue();                //打开电磁阀

                    f_card=1;                   //置位消费状态标志
                    Card_On_Or_Off_Count=50;    //检测卡计数单元赋值
                 }
              }
              else  if(f_com)
              {
                  error=ERR13;                  //写通讯超时代码 ERR13
                  f_err=1;
                  f_mifare=1;                      //置位错误标志
                  f_card=1;
                  expence=0;
                  liuliang=3;
                  money=0;
              }
              else
              {
                  error=ERR12;
                  f_err=1;
                  rate=1;
                  money=0;
                  expence=0;
                  liuliang=0;
                  f_card=1;

                  Card_On_Or_Off_Count=50;    //检测卡计数单元赋值
                  openvalue();
              }
              f_zh=0;





           }
        }


        /*---------------------------------------------------------------*/
        if (f_status)                        /*更新POS终端功能状态       */
        {
           iwrbyte(fm_status,status);
           f_status=0;
        }

        /*---------------------------------------------------------------*/
        if (f_master)                        /*HUB地址更新               */
        {
           iwrbyte(fm_master,master);
           f_master=0;
        }

        /*---------------------------------------------------------------*/
        if((kcount%2)&&f_card)
            closevalue();

         else  if(f_card)
           {
               openvalue();

             if (f_60ms)
               {
                  read_plus();                     /*读取水表脉冲               */
                  f_60ms=0;
                  disp_money();
                 if (f_plusa&f_plusb)              /*读到脉冲?                  */
                 {
                    //beepp();
                    updata();                      /*更新卡中余额和消费流量     */
                    f_plusa=0;
                    f_plusb=0;
                 }

               }
            }
        /*---------------------------------------------------------------*/
        if (f_err)                           /*错误报警处理              */
        {
           errordeal();
           if(f_com&&(error!=13))
            {
               f_err=0;
               f_card=0;
               f_mifare=0;
               closevalue();
            }
           else if(error==12)
            {
               f_err=0;
               f_card=1;
            }
           else  if(error!=13)
            {
               f_err=0;
               f_card=0;
               f_mifare=0;
               closevalue();
            }

            else
            {  ;}




           if(error==13)
            {
               f_err=0;
               f_card=1;
               Card_On_Or_Off_Count=50;
               sal_time=0;

            }

        }

        /*---------------------------------------------------------------*/
        /* -----------------判断卡是否存在-------------------------------*/

       if(f_card)
       {
            //F_M1=1;
            if(!F_M1)
              { uchar i;
                wait10ms();
                wait10ms();
                wait10ms();
                wait10ms();
                if(!F_M1)
               {
                 f_mifare=0;
                 Card_On_Or_Off_Count=0;
               }
              }
        }



         /*--------------检测卡是否仍旧存在 ------------------------------- */
        if ((!Card_On_Or_Off_Count)&&f_card)
        {  if(f_com)
             {


               closevalue();         /*close value*/
               collect_saledata();   /*收集消费信息并保存到消费缓冲区中     */
               f_sal=1;              /*置位发送下费信息标志                 */
               kcount=0;
               f_card=0;


             }
            else
             {
               closevalue();
               SaveSaleRecord();
               kcount=0;
               f_card=0;
             }

        }

        /*---------------------------------------------------------------*/
        if (!f_card)                   //有卡?
        {

           if (f_com)
           {
             dispbuf[0]=0xa;
             dispbuf[1]=0xa;
           }

             disp_name();

        }


        if((!f_card)&&f_com&&(!f_sal))
          {
            if( irdbyte( SAL_END )<irdbyte( SAL_BEG ) )
                {
                  ReadSaleData();
                }
             else
                {
                  iwrbyte( SAL_BEG,0X0 );
                  iwrbyte( SAL_END,0X0 );
                }


          }

     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -