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

📄 waterpos.c

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

    return(dd);
}

//********************
//从指定地址连续读取N 个字节
//********************
uchar read_N_fm(uint address,uchar number,uchar *point)
{   uchar i;

    uchar dd;
	dd=((address&0x7ff)/256)<<1;

    iic_start();    //
    wrbyte(0xa0|dd);
    if(cack()!=1){iic_stop();return;}

    wrbyte(address);
    if(cack()!=1){iic_stop();return;}
    scl1=0;

    iic_start();    //重新启动总线

    wrbyte(0xa1|dd);
    if(cack()!=1){iic_stop();return;}

    for(i=0;i<number-1;i++)
       {*point++=rdbyte();
        mack();        //发送非应答位
       }

    *point++=rdbyte();
     mnack();

    iic_stop();

}
//***********************************************
//函数功能:向指定地址写一个数据
//入口参数:address--指定写入地址  dd--写入数据
//出口参数:无
//***********************************************
void iwrbyte(uint address,uchar dd)

{
    uchar  ddd;
    ddd=((address&0x7ff)/256)<<1;

    wp=0;                       //写允许
    iic_start();
    wrbyte(0xa0|ddd);
    if(cack()!=1){iic_stop();return;}

    wrbyte(address);
    if(cack()!=1){iic_stop();return;}

    wrbyte(dd);
    if(cack()!=1){iic_stop();return;}

    iic_stop();
    wp=1;                       //写禁止
}


//***********************************************
//函数功能:向指定地址写入N个数据
//入口参数:*point--源数据首地址 address--目的地址  count--写入数据个数
//出口参数:无
//*****************************************************
void write_N_fm(uchar xdata *point,uint address,uchar count)
{
    uchar  ddd;
    ddd=((address&0x7ff)/256)<<1;

    wp=0;               //写允许
    iic_start();
    wrbyte(0xa0|ddd);
    if(cack()!=1){iic_stop();return;}

    wrbyte(address);
    if(cack()!=1){iic_stop();return;}

    for(ddd=0;ddd<count;ddd++){
    wrbyte(*point++);
    if(cack()!=1){iic_stop();return;}
    }

    iic_stop();
    wp=1;               //写禁止

}
/////////以上FM操作函数///////////

/************************
函数功能:ms级延时子程序
************************/
void delay_ms(uint count)
{
     uchar i;
     while ((count--)!=0)
     {
	   for (i=0;i<125;i++)
	       {;}
     }
}


/************************
函数功能:10ms级延时子程序
************************/
void wait10ms()
{
     uchar i,j;
     for (j=0;j<10;j++)
     {
	 for (i=0;i<125;i++)
	 {;}
     }
}

//************************
//函数功能:蜂鸣器短叫一声
//************************
void beepp(void)
{
     beep=0;
     delay_ms(254);
     beep=1;
}

/****************************************************************************/
/*函数功能:收集消费数据                                                    */
/*          uchar xdata salebuf: flag+adress+IDnumber+time+sale totle: 17   */
/*入口参数:无                                                              */
/*输出参数:无                                                              */
/****************************************************************************/
void collect_saledata(void)
{
     uchar i,j;

     uchar xdata *pnt=salebuf;
     //uchar data *pnt1=idcode;
     //uchar xdata *pnt1=&fm_idnum;
     uchar fm_data;
     uint  fm_add;
     *pnt++=0x41;//flag;                    //标志
     *pnt++=address;                    /*pos address*/

     fm_add=fm_data*0x0+0x4;
     for (i=0;i<5;i++)
     {
         //*pnt++=*pnt1++;             /*ID Number*/
         *pnt++=irdbyte( fm_add++ );
     }


     expence=liuliang*(ulong)rate;

     if (expence==0)
     {
        *pnt++=0;
        *pnt++=0;
        *pnt++=rate;

        *pnt++=0;
        *pnt++=0;
        *pnt++=50;
        *pnt++=salecount++;
     }
     else
     {
        *pnt++=liuliang/0x10000;
        *pnt++=liuliang/0x100;
        *pnt++=liuliang%0x100;

        *pnt++=expence/0x10000;
        *pnt++=expence/0x100;
        *pnt++=expence%0x100;
        *pnt++=salecount++;
     }
}

//-----关闭电磁阀------
void closevalue(void)
{
     cm_a=0;
     cm_b=1;
}

//----打开电磁阀---------------
void openvalue(void)
{
     cm_a=1;
     cm_b=0;
}

//---------处理请求到的帐户信息--------------
void accounts(void)
{
     if (JudgeFlagId()!=1)                                              //判断卡标志和ID号码
     {
        money=receivebuf[7]*0x10000+receivebuf[8]*0x100+receivebuf[9];  //3 char to ULONG
        if(money!=0)
        {
           rate=receivebuf[10];                                         //保存费率

           iwrbyte( SAL_RATE,rate );
           expence=0;                                                   //消费额清零
           liuliang=0;
           disp_money();
           error=0;
        }
        else
        {
           f_err=1;                                                     //显示卡中余额
           error=ERR9;
        }
     }
}


//-----错误报警处理-----------------------------------------
void errordeal(void)
{
     uchar idata i;
     switch (error)
     {



       case 0:                   /*---ERR 0          */
              break;



       case 1:                   /*---ERR 1          */
              break;



       case 2:                   /*---ERR 2          */
              break;



       case 3:                   /*---ERR 3          */
              break;



       case 4:                   /*---ERR 4          */
              break;



       case 5:                   /*---ERR 5          */
              break;



       case 6:                   /*---ERR 6          */
              break;


       case 7:                   /*---ERR 7          */
              break;



       case 8:                   /*读卡错误*/
              dispbuf[0]=0xc;
              dispbuf[1]=0xd;
              dispbuf[2]=0xd;
              dispbuf[3]=0x0;
              dispbuf[4]=0x8;
              beep=0;
              disp();
              delay_ms(1500);    /*delay 1.5s        */
              beep=1;
              disp_name();

              break;                   /*---ERR 8          */





       case 9:                   /*---ERR 9  --- 卡中余额不足 ---   */
              dispbuf[0]=0xc;
              dispbuf[1]=0xd;
              dispbuf[2]=0xd;
              dispbuf[3]=0x0;
              dispbuf[4]=0x9;
              closevalue();
              beep=0;
              disp();
              delay_ms(1500);    /*delay 1.5s        */
              beep=1;
              disp_name();
              break;




       case 0xa:                 /*---ERR 10 --- 此卡未注册 ---     */
              dispbuf[0]=0xc;
              dispbuf[1]=0xd;
              dispbuf[2]=0xd;
              dispbuf[3]=0x1;
              dispbuf[4]=0x0;
              closevalue();
              beep=0;
              disp();
              delay_ms(1500);    /*delay 1.5s        */
              beep=1;
              disp_name();
              break;

       case 0xb:                 /*---ERR 11 --- 注销卡 ---         */
              dispbuf[0]=0xc;
              dispbuf[1]=0xd;
              dispbuf[2]=0xd;
              dispbuf[3]=0x1;
              dispbuf[4]=0x1;
              closevalue();
              beep=0;
              disp();
              delay_ms(1500);    /*delay 1.5s        */
              beep=1;
              disp_name();
              break;



       case 0xc:                 /*网络线出现问题----------*/
              dispbuf[0]=0xc;
              dispbuf[1]=0xd;
              dispbuf[2]=0xd;
              dispbuf[3]=0x1;
              dispbuf[4]=0x2;
              beep=0;
              disp();
              delay_ms(1500);    /*delay 1.5s        */
              beep=1;
              disp_name();
              break;




       case 0xd:                 /*---ERR 13 --- 请求卡信息超时 --- */
              dispbuf[0]=0xc;
              dispbuf[1]=0xd;
              dispbuf[2]=0xd;
              dispbuf[3]=0x1;
              dispbuf[4]=0x3;
              beep=0;
              disp();
              delay_ms(1500);    /*delay 1.5s        */
              beep=1;
              disp_name();
              break;



       case 0xe:                 /*---ERR 14 --- 卡号比较不正确 ---  */
              dispbuf[0]=0xc;
              dispbuf[1]=0xd;
              dispbuf[2]=0xd;
              dispbuf[3]=0x1;
              dispbuf[4]=0x4;
              beep=0;
              disp();
              delay_ms(1500);    /*delay 1.5s        */
              beep=1;
              disp_name();
              break;



       case 0xf:                 /*---ERR 15          */
              break;



       case 0x10:                /*---ERR 16          */
              break;



       default:
              break;
     }
}



/***************************************************/
/*-------更新帐户余额和消费流量--------------------*/
/***************************************************/
void updata(void)
{    if(f_com)
       {
         if(error==13)
         {
            liuliang++;
            money=liuliang;
            disp_money();
         }
         else
         {

            liuliang++;
            expence=liuliang*(ulong)rate;
            money=money-(ulong)rate;               /*更新消费金额    */
            if(money>=0x800000)
            {
              f_mifare=0;
              Card_On_Or_Off_Count=0;
            }
            else
            {
             disp_money();
            }


         }

      }
      else
       {

         liuliang++;
         money=liuliang;
         disp_money();

       }

}



/*-----清除片外RAM------*/
void clear_xram(void)
{
  uchar xdata *pnt;
  uint i;

  for(i=0;i<0x400;i++)
      *pnt++=0;
}




/**********************************/
/******保存消费数据和消费费率******/
void SaveSaleRecord(void)
{  uchar fm_data;
   uint  fm_add;
   uchar  *pnt=idcode;
   uchar i;

   fm_data=irdbyte(SAL_BEG);
   if(fm_data==200)
   {
      fm_data=0;
      iwrbyte( SAL_END,0X0 );
   }

   fm_add=fm_data*0x8+0x100;
   for(i=0;i<5;i++)
    {
      iwrbyte(fm_add++,*pnt++);
    }

    iwrbyte( fm_add++, liuliang/0x10000 );
    iwrbyte( fm_add++, liuliang/0x100   );
    iwrbyte( fm_add++, liuliang%0x100   );
    fm_data=irdbyte( SAL_BEG );
    fm_data+=1;
    iwrbyte ( SAL_BEG ,fm_data );

}
/********************************************************/
/********************************************************/
void ReadSaleData(void)
{
    uchar i;
    uchar fm_data;
    uint  fm_add;
    uchar xdata *pnt=salebuf;
    ulong saveexpence;
    ulong saveliuliang;

    *pnt++=0x41;
    *pnt++=address;


    fm_data=irdbyte( SAL_END );
    fm_add=fm_data*0x8+0x100;
    for(i=0;i<5;i++)
     {
       *pnt++=irdbyte( fm_add++ );

     }
     saveliuliang=irdbyte( fm_add++)*0x10000;
     saveliuliang+=irdbyte( fm_add++)*0x100;
     saveliuliang+=irdbyte( fm_add );

     rate=irdbyte( SAL_RATE );
     saveexpence=saveliuliang*(ulong)rate;




     if (saveexpence==0)
     {
        *pnt++=0;
        *pnt++=0;
        *pnt++=rate;

        *pnt++=0;
        *pnt++=0;
        *pnt++=50;
        *pnt++=salecount++;
     }
     else
     {
        *pnt++=saveliuliang/0x10000;
        *pnt++=saveliuliang/0x100;
        *pnt++=saveliuliang%0x100;

        *pnt++=saveexpence/0x10000;
        *pnt++=saveexpence/0x100;
        *pnt++=saveexpence%0x100;
        *pnt++=salecount++;
     }
     fm_data=irdbyte( SAL_END );
     fm_data++;
     iwrbyte( SAL_END, fm_data);
     f_sal=1;


}








⌨️ 快捷键说明

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