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

📄 sfj1.c

📁 售饭机的源码程序,单片机开发使用,可以直接使用
💻 C
📖 第 1 页 / 共 3 页
字号:
	   {for(dispshift=5;dispshift<9;dispshift++) 
            receivebuf[dispshift-1]=receivebuf[dispshift];
       } 
	 }
   receivebuf[3]=0x0a;
   receivebuf[8]=numkeyvalue;
   for(i=4;i<9;i++)
	  {if((receivebuf[i]&0x80)!=0x00)   
         {write728x(0x18,pointonvalue[i-5]);
		  write728x(0x18,pointonvalue[i-1]); 
		 }
      }  
  displaybuf[2]=0x20+(receivebuf[3]&0x0f); 
  displaybuf[3]=0x30+(receivebuf[4]&0x0f); displaybuf[4]=0x40+(receivebuf[5]&0x0f); displaybuf[5]=0x50+(receivebuf[6]&0x0f);
  displaybuf[6]=0x60+(receivebuf[7]&0x0f); displaybuf[7]=0x70+numkeyvalue; 
  repeatdisplay();
  for(i=0;i<16;i++)
     write728x(0x14,displaybuf[i]);
     numkeyvalue=20;
   }
   else if((keyvalue==20)&&(flagkeyd==0))
   {inputmoney();
    firstnumflag=1;
	pointbit=1;
	inputdata[inputpoint]=setmoney;
    inputpoint=inputpoint+1;
	inputdata[inputpoint]=1;
    inputpoint=inputpoint+1;
   }
   else if((keyvalue==28)&&(flagkeyd==0))
   {inputmoney();
    firstnumflag=1;
	pointbit=1;
	inputdata[inputpoint]=setmoney;
    inputpoint=inputpoint+1;

   }
  }
  else if(machinestatus==3)
   {if(enableauto!=0) 
      {for(j=0;j<8;j++)
        {write728x(0x18,pointoffvalue[j]);
        }
	  }
	if(enableauto==1)
     {enableauto=2;
      currentkind=numkeyvalue;
      ramaddress=10+(currentkind*2);
      pointbit=1;
	  firstnumflag=1;
      IRcvStr(0xa0,ramaddress,&receivebuf,2);
      spendmoney=(uint)(receivebuf[0]*256+receivebuf[1]);
        
		 dispmoney();
      write728x(0x14,0x2f);
      write728x(0x14,0x30+numkeyvalue);
      write728x(0x14,0xaf);
      write728x(0x14,0xb0+numkeyvalue);
      firstnumflag=1;
     }
    else if(enableauto==2)
     {receivebuf[4]=0x0a;
      if(firstnumflag==1)
        {firstnumflag=0;
         for(dispshift=5;dispshift<9;dispshift++)  receivebuf[dispshift]=0x0f;
        }
   
  else
     {if(pointbit==0) pointnum3=pointnum3+1;
	  if((pointnum3<3)||(pointbit==1))
	   {for(dispshift=6;dispshift<9;dispshift++) 
            receivebuf[dispshift-1]=receivebuf[dispshift];
       } 
	 }

      receivebuf[8]=numkeyvalue;
		    for(i=5;i<9;i++)
			  {if((receivebuf[i]&0x80)!=0x00)   
		         {write728x(0x18,pointonvalue[i-5]);
				  write728x(0x18,pointonvalue[i-1]); 
 				 }
              }  
      displaybuf[2]=0x2f;
      displaybuf[3]=0x30+(receivebuf[4]&0x0f); displaybuf[4]=0x40+(receivebuf[5]&0x0f); displaybuf[5]=0x50+(receivebuf[6]&0x0f);
      displaybuf[6]=0x60+(receivebuf[7]&0x0f); displaybuf[7]=0x70+numkeyvalue; 
      repeatdisplay();
      for(i=0;i<16;i++)
         write728x(0x14,displaybuf[i]);
     }
    if(receiveflag==3)  
      {cancelstatus=1;
	   pointbit=0;
	   currentkind=numkeyvalue;
       ramaddress=10+(currentkind*2);
       IRcvStr(0xa0,ramaddress,&receivebuf,2);
       kindmoney=kindmoney+(uint)(receivebuf[0]*256+receivebuf[1]);
       receivebuf[5]=(uchar)(kindmoney/1000);
       receivebuf[6]=(uchar)((kindmoney-receivebuf[5]*1000)/100);
       receivebuf[7]=(uchar)((kindmoney-receivebuf[5]*1000-receivebuf[6]*100)/10);
       receivebuf[8]=(uchar)(kindmoney%10);
	 
	   write728x(0x18,0x2f);write728x(0x18,0x6f);
	   if (receivebuf[5]==0) 
          receivebuf[5]=0x0f;
       displaybuf[3]=0x3f; displaybuf[4]=0x40+receivebuf[5]; displaybuf[5]=0x50+receivebuf[6];
       displaybuf[6]=0x60+receivebuf[7]; displaybuf[7]=0x70+receivebuf[8]; 
       repeatdisplay();
       for(i=0;i<16;i++)
          write728x(0x14,displaybuf[i]);
	  }
   }	
}
void inputmoney(void)
{ pointwhere=8;                
  for(i=4;i<9;i++)
    {if((receivebuf[i]&0x80)!=0x00)   
       {pointwhere=i;
        receivebuf[i]=receivebuf[i]&0x7f;
       }
	 if(receivebuf[i]==0x0f)  receivebuf[i]=0;
    }  
   if((machinestatus==3)||(machinestatus==5)) receivebuf[4]=0;           
   switch (pointwhere)
      { case 8: setmoney=(uint)(receivebuf[6]*10000+receivebuf[7]*1000+receivebuf[8]*100);
           break; 
        case 7: setmoney=receivebuf[5]*10000+receivebuf[6]*1000+receivebuf[7]*100+receivebuf[8]*10;
           break; 
        case 6: setmoney=receivebuf[4]*10000+receivebuf[5]*1000+receivebuf[6]*100+receivebuf[7]*10+receivebuf[8];
	        break; 
	   }

}

uchar Rec_xorsum(uchar buf[],uchar len)
  {  uchar data i,sum;
     sum=buf[0];
     for(i=1;i<len;i++)
       sum=sum^buf[i];
     sum=sum&0x0f;
     return sum;
  }
void send(uchar buf[],uchar len)
{
  uchar  data   i ; 
  EA=0;  
  for(i=0;i<len;i++)
   { 	  TI=0;
     SBUF=buf[i];	  
	  while(!TI);
   }   
  TI=0;
  EA=1;
}
void cansend(void)
   {   EA=0;
       ACC=STUS;    
	  
       while(ACC2!=1) {

            ACC=STUS; }
      TXBID0=0x80|nodeaddress;
       TXBID1=0x08;
       TXBDATA0=nodeaddress;   
       TXBDATA1=sendorder;  
       TXBDATA2=Num_Buf[1];   
       TXBDATA3=Num_Buf[2];   
       TXBDATA4=Num_Buf[3];  
       TXBDATA5=Num_Buf[4];   
       TXBDATA6=Serial_Buf_NumSum;
       TXBDATA7=0x00;  
       COMD=0x01;    
	   EA=1;
	 
   }
void canreceive(void)
     {    receivebuf[0]=RXR0;
          receivebuf[1]=RXR1;
          receivebuf[2]=RXRDATA1;  
          receivebuf[3]=RXRDATA2; 
          receivebuf[4]=RXRDATA3;  
          receivebuf[5]=RXRDATA4;  
          receivebuf[6]=RXRDATA5;  
          receivebuf[7]=RXRDATA6;  
          receivebuf[8]=RXRDATA7;  
          receivebuf[9]=RXRDATA8; 

     }
void timer0() interrupt 1 using 0
{

  TH0=0x3c;
  TL0=0xb0;
  inttimer0 =1;
} 

void Receive_Serial() interrupt 4 using 2
{EA=0; 

 if(RI)
  {    Serial_Buf[Serial_Buf_Num]=SBUF; 
	   RI=0;
	   Serial_Buf_Num++; 
           if((!Find_Head)&&(Serial_Buf_Num==1))
	   {  if(Serial_Buf[0]==0xf0)
                        {   TR0=0;
						    EX0=0;
                           Serial_Buf_Num=0;
                           Serial_Buf_NumSum=0;
                           Find_Head=1;//TRUE;
                           ALARM=0;
                         }
          
             else  {Serial_Buf[0]=7;    Serial_Buf_Num=0;}
                
	   }
           else
           {
             if((Serial_Buf_Num>1)&&(Find_Head))
		        {
                     if(Serial_Buf[Serial_Buf_Num-1]==0xF9)
			           {
                            SYS_STATE=0x11;
                            Serial_Buf_NumSum=Serial_Buf_Num-2;
                            Serial_Buf_Num=0;
							enablesend=1; 
                            Find_Head=0;
						
						    ALARM=1;
			          }
                    
		       }
          
           }  
  }
  if(TI) TI=0;
  EA=1;
}
/*RECEIVE BC7281 A KEY DATA */
void  int0() interrupt 0 using 1
 { EA=0;
  
   TR0=0;
   ALARM=0;
   presskey=1;

   IE0=0;

 }

void pointon(void)
{for(j=0;j<8;j++)
   {write728x(0x18,pointonvalue[j]);
   }
}
void pointoff(void)
{for(j=0;j<8;j++)
   {write728x(0x18,pointoffvalue[j]);
   }
}
void repeatdisplay(void)
 {displaybuf[8]=0x80+(displaybuf[0]&0x0f);  displaybuf[9]=0x90+(displaybuf[1]&0x0f); 
  displaybuf[10]=0xa0+(displaybuf[2]&0x0f); displaybuf[11]=0xb0+(displaybuf[3]&0x0f);
  displaybuf[12]=0xc0+(displaybuf[4]&0x0f); displaybuf[13]=0xd0+(displaybuf[5]&0x0f);;
  displaybuf[14]=0xe0+(displaybuf[6]&0x0f); displaybuf[15]=0xf0+(displaybuf[7]&0x0f);
 }
void oldstatus(void)
    {searchflag=0;
     flashflag=1;
	 oldkeyflag=1;
	 switch (machinestatus)
       {case 3:  keyvalue=16;  break;
		case 4:  keyvalue=8 ;  break;
		case 5:  keyvalue=36;  break;
	   }
   
   	}  
void write728x(uchar reg_add, uchar write_data)
{send_byte(reg_add); 
 send_byte(write_data);
}
uchar read728x(uchar reg_add)
{send_byte(reg_add|0x80); 
 return(receive_byte());
}

void send_byte(uchar send_byte)
{uchar bit_counter;
 clk=0; // clk
 clk=1;
 do{
   clk=0; // clk dat
   clk=1;
   } while (dat);
 clk=0; // 15us clk
 clk=1;
 while(!dat); // BC728X
 for (bit_counter=0;bit_counter<8;bit_counter++)
   {if ((send_byte&0x80)==0)
     {dat=0;  // bit 0, dat 0
     }
    else
     {dat=1; 
     }
    send_byte=send_byte*2; // send_byte
    clk=0; // clk
    clk=1;
	
    delay(1); 
   }
 dat=1; // dat

 delay(2);
}

uchar receive_byte(void)
{uchar bit_counter, in_byte;
 clk=0; // clk
 clk=1;
 while (dat); // BC728X dat
 clk=0;  
 clk=1;
for (bit_counter=0;bit_counter<8;bit_counter++)
 {delay(1); 

  in_byte=in_byte*2; // in_byte
  if(dat) // dat '1'
   {in_byte=in_byte|0x01; // bit0=1
   }
  clk=0; // clk
  clk=1;
 }

 delay(2); 
 return(in_byte);
}

void delay(uchar time)
{while (time!=0)
  {time--;
  }
}

void Rst_Wdog(void)
 {  Rst_Buf=WDTC;
    WDTC=Rst_Buf|0x20;
 }
/* ----IIC bus program------*/
void Start()
{  EA=0;
   sda=1;      
   scl=1;
   _Nop();    
   _Nop();
   _Nop();
   _Nop();
   _Nop();
   sda=0;      
   _Nop();     
   _Nop();
   _Nop();
   _Nop();
   _Nop();
   scl=0;
 }
void Stop()
{  sda=0;      
   scl=1;      
   _Nop();
   _Nop();
   _Nop();
   _Nop();
   _Nop();
   sda=1;     
   _Nop();
   _Nop();
   _Nop();
   _Nop();
   sda=0;
   scl=0;
   EA=1;
}

void Ack_NoAck(bit askbit)
{
   if(askbit==0) sda=0;    
         else sda=1;
   _Nop();
   _Nop();
   _Nop();
   scl=1;
   _Nop();
   _Nop();
   _Nop();
   _Nop();
   _Nop();
   scl=0;              
   _Nop();
   _Nop();
}

/*--- SEND A BYTE----------*/
void SendByte(uchar c)
{
   uchar BitCnt;

   for(BitCnt=0;BitCnt<8;BitCnt++)    
     {
        if((c<<BitCnt)&0x80) sda=1;   
          else sda=0;
        _Nop();
        scl=1;                       
        _Nop();
        _Nop();
        _Nop();
        _Nop();
        _Nop();
        scl=0;
       }
        _Nop();
        _Nop();
        sda=1;                       
        _Nop();
        _Nop();
        scl=1;
        _Nop();
        _Nop();
        _Nop();
        if(sda==1) ack=0;
           else  ack=1;               
        scl=0;
        _Nop();
        _Nop();
}

bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
{
   uchar stri;
   Start();                         
   SendByte(sla);                   
     if(ack==0) return(0);
   SendByte(suba);                  
     if(ack==0) return(0);
   for(stri=0;stri<no;stri++)
    {
      SendByte(*s);                 
        if(ack==0) return(0);
      s++;
    }
   Stop();                         
   return (1);
}

uchar RcvByte()
{
   uchar retc;
   uchar BitCnt;
   retc=0;
   sda=1;                           
   for(BitCnt=0;BitCnt<8;BitCnt++)
        {
          _Nop();
          scl=0;                   
          _Nop();
          _Nop();
          _Nop();
          _Nop();
          _Nop();
          scl=1;                    
          _Nop();
          _Nop();
          retc=retc<<1;
          if(sda==1) retc=retc+1;   
          _Nop();
          _Nop();
        }
   scl=0;
   _Nop();
   _Nop();
   return(retc);
}


bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
{
   uchar stri;
   Start();                        
   SendByte(sla);                 
     if(ack==0) return(0);
   SendByte(suba);                
     if(ack==0) return(0);
   Start();
   SendByte(sla+1);
     if(ack==0) return(0);
   for(stri=0;stri<no-1;stri++)
    {
       *s=RcvByte();              
       Ack_NoAck(0);              
       s++;
    }
   *s=RcvByte();
   Ack_NoAck(1);                  
   Stop();                       
   return(1);
 }
    

   

⌨️ 快捷键说明

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