📄 sfj1.c
字号:
{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 + -