📄 0203.c
字号:
InI2C_ReadACK();
B=mLocation;
InI2C_Write(); /*写地址*/
InI2C_ReadACK();
InI2C_Start();
B=0xa3;
InI2C_Write(); /*读命令*/
_nop_();
_nop_();
InI2C_ReadACK();
_nop_();
_nop_();
InI2C_Read();
InI2C_WriteACK();
InI2C_Stop();
return(B);
}
/********************************************
天以后是取8563天以后的数据
********************************************/
void P8563_ReadDay()
{
g8563_Store[DAY]=I2C_ReadData(5)&0x3f;
g8563_Store[MONTH]=I2C_ReadData(7)&0x1f;
g8563_Store[YEAR]=I2C_ReadData(8);
}
/********************************************
内部函数,读入时间到内部缓冲区
********************************************/
void InP8563_Read()
{
g8563_Store[SECOND]=I2C_ReadData(2)&0x7f;
g8563_Store[MINUTE]=I2C_ReadData(3)&0x7f;
g8563_Store[HOUR]=I2C_ReadData(4)&0x3f;
P8563_ReadDay();
}
/********************************************
读入时间到内部缓冲区
********************************************/
void P8563_ReadTime()
{
InP8563_Read();
if(g8563_Store[0]==0){
InP8563_Read(); /*如果为秒=0,为防止时间变化,再读一次*/
}
}
/********************************************
写时间修改值
********************************************/
void P8563_WriteTime()
{
unsigned char i;
for(i=0;i<4;i++){
I2C_WriteData(i+2,g8563_Store[i]/*g8563_Store[i]*/);
}
for(i=4;i<6;i++){
I2C_WriteData(i+3,g8563_Store[i]/*g8563_Store[i]*/);
}
}
/********************************************
P8563的初始化,将CLOOUT设置为1HZ,检查是否第一次启动,是则初始化时间
********************************************/
void P8563_Init()
{
//unsigned char i;
I2C_WriteData(0xd,0x83);
// if((I2C_ReadData(0xc)&g8563_Store[3])!=0x5)
{
// for(i=0;i<6;i++)g8563_Store[i]=g8563_Store[i]; /*初始化*/
P8563_WriteTime();
I2C_WriteData(0xc,0x5);
}
}
void dispclk(void)
{//unsigned char i;
P8563_ReadTime();
lcddisp(22,14,0Xff,(g8563_Store[5]>>4)+0X10); /*年*/
lcddisp(23,14,0Xff,(g8563_Store[5]&0XF)+0X10); /*年*/
lcddisp(24,14,0Xff,0X0d); /*-*/
lcddisp(25,14,0XFF,(g8563_Store[4]>>4)+0X10); /*月*/
lcddisp(26,14,0XFF,(g8563_Store[4]&0XF)+0X10); /*月*/
lcddisp(27,14,0XFF,0X0D); /*-*/
lcddisp(28,14,0XFF,(g8563_Store[3]>>4)+0X10); /*日*/
lcddisp(29,14,0XFF,(g8563_Store[3]&0XF)+0X10); /*日*/
lcddisp(22,15,0XFF,(g8563_Store[2]>>4)+0X10); /*时*/
lcddisp(23,15,0XFF,(g8563_Store[2]&0XF)+0X10); /*时*/
lcddisp(24,15,0XFF,0X1A); /*-*/
lcddisp(25,15,0XFF,(g8563_Store[1]>>4)+0X10); /*分*/
lcddisp(26,15,0XFF,(g8563_Store[1]&0XF)+0X10); /*分*/
lcddisp(27,15,0XFF,0X1A); /*-*/
lcddisp(28,15,0XFF,(g8563_Store[0]>>4)+0X10); /*秒*/
lcddisp(29,15,0XFF,(g8563_Store[0]&0XF)+0X10); /*秒*/
}//end if(shizhong==0)
void lcddisp(unsigned char i,unsigned char j,unsigned char m,unsigned char n)
{
while(!lcdok); lcdok=0;
while(txtolcd);
tolcd[0]=0xFF;
tolcd[1]=i;
tolcd[2]=j;
tolcd[3]=m;
tolcd[4]=n;
txtolcd=1;
TI=1;
}
void sendidel(void)
{ k_x_jishi=5;
ST554A;;;;/*发送到上位机得空闲码*/
ACC=ST05;
while(!ACC5){ST554A;ACC=ST05;}
RBR=0xAA;
CS256;
}
void tobuff(void)
{unsigned long xdata zongzhong,zhouzhong[8];
unsigned char i,j,zhouzushu;
unsigned char xdata zhouxing[8];
unsigned int xdata maintemp;
unsigned int xdata /* chaoxianlv,*/ ch_x_l_m;
zongzhong=0;
zhouzushu=subcom[16];
for(j=0;j<zhouzushu;j++) zongzhong+=subcom[17+2*j]*256+subcom[17+2*j+1];
for(i=0;i<8;i++) zhouzhong[i]=0;
for(j=0;j<zhouzushu;j++) zhouzhong[j]=subcom[17+2*j]*256+subcom[17+2*j+1];
for(j=0;j<zhouzushu;j++) zhouxing[j]=subcom[17+2*zhouzushu+j];
ch_x_l_m=0;
for(i=0;i<zhouzushu;i++){
switch(zhouxing[i])
{ case 0: maintemp=0;break;
case 1: maintemp=(zhouzhong[i]/ezai1); break;
case 2: maintemp=(zhouzhong[i]/ezai2);break;
case 3: maintemp=(zhouzhong[i]/ezai3);break;
case 4: maintemp=(zhouzhong[i]/ezai4);break;
case 5: maintemp=(zhouzhong[i]/ezai5);break;
case 6: maintemp=(zhouzhong[i]/ezai6);break;
case 7: maintemp=(zhouzhong[i]/ezai7);break;
case 8: maintemp=(zhouzhong[i]/ezai8);break;
}
if(zhouxing[i]>8)maintemp=0;
if(maintemp>ch_x_l_m)ch_x_l_m=maintemp;
}
if(ch_x_l_m>100)ch_x_l_m=ch_x_l_m-100;
else ch_x_l_m=0;
toupcom[cheshu][0]=0xF0;/*起始标志*/
i=xuhao/10;
j=xuhao%10;
toupcom[cheshu][1]=(i<<4)+j;/*车辆通过的序号*/
toupcom[cheshu][2]=chedaoh;/*车道号*/
toupcom[cheshu][3]=0;/*超载标志*/
if(ch_x_l_m>50) toupcom[cheshu][3]=1;
toupcom[cheshu][4]=(zhouzushu<<4)+1;/*车型*/
toupcom[cheshu][7]=0;
toupcom[cheshu][6]=0;
toupcom[cheshu][5]=0;
while(zongzhong>=100000){zongzhong-=100000;toupcom[cheshu][7]++;}
toupcom[cheshu][7]=toupcom[cheshu][7]*16;
while(zongzhong>=10000){zongzhong-=10000;toupcom[cheshu][7]++;}
while(zongzhong>=1000){zongzhong-=1000;toupcom[cheshu][6]++;}
toupcom[cheshu][6]=toupcom[cheshu][6]*16;
while(zongzhong>=100){zongzhong-=100;toupcom[cheshu][6]++;}
while(zongzhong>=10){zongzhong-=10;toupcom[cheshu][5]++;}
toupcom[cheshu][5]=toupcom[cheshu][5]*16;
toupcom[cheshu][5]+=zongzhong;
toupcom[cheshu][8]=(((ch_x_l_m%100)/10)*16)+(ch_x_l_m%10);/*超载率*/
toupcom[cheshu][9]=(((ch_x_l_m%10000)/1000)*16)+(ch_x_l_m%1000)/100;/*超载率*/
maintemp=subcom[12]*256+subcom[13];
toupcom[cheshu][10]=(((maintemp%1000)/100)<<4)+(maintemp%100)/10;/*车速*/
toupcom[cheshu][11]=((maintemp/10000)<<4)+((maintemp%10000)/1000);/*车速*/
j=subcom[16];
for(i=0;i<j-1;i++)maintemp=subcom[17+j*3+i]*256+subcom[17+j*3+i+1];
toupcom[cheshu][12]=((maintemp%100)/10<<4)+(maintemp%10);/*总轴距*/;
toupcom[cheshu][13]=(((maintemp%10000)/1000)<<4)+(maintemp%1000)/100;/*总轴距*/;
toupcom[cheshu][14]=((maintemp/100000)<<4)+(maintemp%100000)/10000;/*总轴距*/;
toupcom[cheshu][15]=zhouzushu;/*轴数*/
j=2*zhouzushu;
for(i=0;i<zhouzushu;i++)toupcom[cheshu][16+i*4]=subcom[17+(2*zhouzushu)+i];/*轴型1*/
for(i=0;i<zhouzushu;i++){toupcom[cheshu][17+i*4]=0;
toupcom[cheshu][17+i*4+1]=0;
toupcom[cheshu][17+i*4+2]=0;
}
for(i=0;i<zhouzushu;i++){/*轴重1*/
while(zhouzhong[i]>=100000){zhouzhong[i]-=100000;toupcom[cheshu][17+i*4]++;}
toupcom[cheshu][17+i*4]=toupcom[cheshu][17+i*4]*16;
while(zhouzhong[i]>=10000){zhouzhong[i]-=10000;toupcom[cheshu][17+i*4]++;}
while(zhouzhong[i]>=1000){zhouzhong[i]-=1000;toupcom[cheshu][17+i*4+1]++;}
toupcom[cheshu][17+i*4+1]=toupcom[cheshu][17+i*4+1]*16;
while(zhouzhong[i]>=100){zhouzhong[i]-=100;toupcom[cheshu][17+i*4+1]++;}
while(zhouzhong[i]>=10){zhouzhong[i]-=10;toupcom[cheshu][17+i*4+2]++;}
toupcom[cheshu][17+i*4+2]=toupcom[cheshu][17+i*4+2]*16;
toupcom[cheshu][17+i*4+2]+=zhouzhong[i];
}/*end of 计算轴重*/
for(i=0;i<(16+subcom[16]*4);i++) toupcom[cheshu][16+subcom[16]*4]+=subcom[i];/*校验和*/
toupcom[cheshu][17+subcom[16]*4]=0xE0;/*结束标志*/
CS256;
}
void gunping(void)
{ unsigned char m,gp,cheinggp,fuzhu=1;
CS256;;
m=0;
for(gp=0;gp<3;gp++){
fuzhu=1;
cheinggp=(cheing+gp)%10;
if(cheinggp==cheshu)m=1;//消除显示
if(m){lcddisp( 0,24+gp*24,0xA2,0XA2);
lcddisp( 2,24+gp*24,0xA2,0XA2);
lcddisp( 4,24+gp*24,0xA2,0XA2);
lcddisp( 6,24+gp*24,0xA2,0XA2);
lcddisp( 8,24+gp*24,0xA2,0XA2);
lcddisp(10,24+gp*24,0xA2,0XA2);
lcddisp(12,24+gp*24,0xA2,0xA2);
lcddisp(14,24+gp*24,0xA2,0XA2);
lcddisp(16,24+gp*24,0xA2,0XA2);
lcddisp(20,24+gp*24,0xA2,0XA2);
lcddisp(22,24+gp*24,0xA2,0XA2);
lcddisp(24,24+gp*24,0xA2,0XA2);
lcddisp(26,24+gp*24,0xA2,0xA2);
lcddisp(28,24+gp*24,0xA2,0XA2);
}
else{
if((toupcom[cheinggp][7]>>4)==0){lcddisp( 0,24+gp*24,0xA2,0XA2);fuzhu=0;}
else lcddisp(0,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][7]>>4));
if(((toupcom[cheinggp][7]&0x0f)==0)&(fuzhu==0))lcddisp( 2,24+gp*24,0xA2,0XA2);
else {lcddisp(2,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][7]&0xf));fuzhu=1;}
if(((toupcom[cheinggp][6]>>4)==0)&(fuzhu==0))lcddisp( 4,24+gp*24,0xA2,0XA2);
else {lcddisp(4,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][6]>>4));fuzhu=1;}
if(((toupcom[cheinggp][6]&0x0f)==0)&(fuzhu==0))lcddisp(6,24+gp*24,0xA2,0XA2);
else {lcddisp(6,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][6]&0xf));fuzhu=1;}
lcddisp(8,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][5]>>4));
lcddisp(10,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][5]&0xf));
lcddisp(12,24+gp*24,0xA3,0xB0);
lcddisp(14,24+gp*24,0xA3,0xEB);
lcddisp(16,24+gp*24,0xA3,0XE7);
if((toupcom[cheinggp][9]>>4)==0){lcddisp( 20,24+gp*24,0xA2,0XA2);fuzhu=0;}
else lcddisp(20,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][9]>>4));
if(((toupcom[cheinggp][9]&0x0f)==0)&(fuzhu==0))lcddisp( 22,24+gp*24,0xA2,0XA2);
else {lcddisp(22,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][9]&0xf));fuzhu=1;}
if(((toupcom[cheinggp][8]>>4)==0)&(fuzhu==0))lcddisp( 24,24+gp*24,0xA2,0XA2);
else {lcddisp(24,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][8]>>4));fuzhu=1;}
lcddisp(26,24+gp*24,0xA3,0XB0+(toupcom[cheinggp][8]&0xf));
lcddisp(28,24+gp*24,0xA3,0XA5);
}
}
}
void bendichuli(void)
{ unsigned char i,j,m,cheshutemp,chexingtemp;//,chexing2;
unsigned int xdata t_x_fee,ch_x_l_m;
//显示本地处理
lcddisp(22,90,0XB1,0XBE);
lcddisp(24,90,0XB5,0XD8);
lcddisp(26,90,0XB4,0XA6);
lcddisp(28,90,0XC0,0XED);
keyfinish=0;
feefinish=0;
cheshutemp=100;
chexingtemp=0x66;
while(feefinish==0){if(cheshutemp!=cheshu)gunping();
if(key==0xF2){key=0xFF;lcddisp(0,0,0xfd,0Xff);} /*背光切换*/
cheshutemp=cheshu;
dispclk();
if(key<10)chexing=key;
if(chexingtemp!=chexing){
lcddisp(10,112,0xA3,chexing+0xB0);
switch(chexing)
{case 0: t_x_fee=0;break;
case 1: t_x_fee=10;break;
case 2: t_x_fee=15;break;
case 3: t_x_fee=20;break;
case 4: t_x_fee=30;break;
case 5: t_x_fee=40;break;
case 6: t_x_fee=55;break;
case 7: t_x_fee=65;break;
case 8: t_x_fee=100;break;
case 9: t_x_fee=100;break;
}
ch_x_l_m=(toupcom[cheing][9]>>4)*1000+(toupcom[cheing][9]&0X0F)*100+(toupcom[cheing][8]>>4)*10+(toupcom[cheing][8]&0X0F);
if(ch_x_l_m>100)beilv=6;
else {if(ch_x_l_m>50)beilv=2;
else {if(ch_x_l_m>30)beilv=1;
else beilv=0;
}
}
t_x_fee=(t_x_fee*(2+beilv)/2);
todaping[1]=((chexing/10)<<4)+(chexing%10);
todaping[2+d_p_modi]=(((ch_x_l_m%100)/10)<<4)+(ch_x_l_m%10);
todaping[3+d_p_modi]=(ch_x_l_m%1000)/100;
todaping[4+d_p_modi]=(((t_x_fee%100)/10)<<4)+(t_x_fee%10);
todaping[5+d_p_modi]=(((t_x_fee/10000)%1000)<<4)+((t_x_fee%1000)/100);
/****************************显示费额********************************/
if((todaping[5+d_p_modi]&0x0f)==0)lcddisp(10,90,0xa2,0xa2);
else lcddisp(10,90,0xa3,(todaping[5+d_p_modi]&0x0f)+0XB0);
lcddisp(12,90,0xa3,(todaping[4+d_p_modi]>>4)+0XB0);
lcddisp(14,90,0xa3,(todaping[4+d_p_modi]&0x0f)+0XB0);
/********************end of 显示飞蛾***************/
for(i=0;i<8;i++){ST554C;;;;/*发送到室外大屏*/
ACC=ST05;
while(!ACC5){ST554C;ACC=ST05;}
RBR=todaping[i];
}
chexingtemp=chexing;
}//end of if(chexingtemp!=chexing)
CS256;
feefinish=feefinish&keyfinish;
m=0x66;
for(i=1;i<4;i++){if((cheing+i)%10==cheshu)m=0;}
if(m)feefinish=1;//后续车辆顶掉第一辆车
}//end of whiel(feefinsh);
feefinish=0;
if(cheing!=cheshu)
{
j=subcom[16];
toupcom[cheing][16+j*4]=todaping[2+d_p_modi];//(t_x_fee/100);/*金额*/
toupcom[cheing][17+j*4]=todaping[3+d_p_modi];//((t_x_fee%100)/10)*16+(t_x_fee%10);/*金额*/
toupcom[cheing][18+j*4]=(g8563_Store[5]);/*年*/
toupcom[cheing][19+j*4]=(g8563_Store[4]);/*月*/
toupcom[cheing][20+j*4]=(g8563_Store[3]);/*日*/
toupcom[cheing][21+j*4]=(g8563_Store[2]);/*时*/
toupcom[cheing][22+j*4]=(g8563_Store[1]);/*分*/
toupcom[cheing][23+j*4]=g8563_Store[0];/*秒*/
for(i=0;i<(24+subcom[16]*4);i++) toupcom[cheing][24+j*4]+=subcom[i];/*校验和*/
toupcom[cheing][25+j*4]=0xE0;/*结束标志*/
for(i=0;i<(26+toupcom[cheing][15]*4);i++) //此处在改改
{
j=toupcom[cheing][i];
address=savednum*58+i+0x20000;
F29040write(j);
CS256;
}
savednum++;if(savednum>5000)savednum=0;
address=0x10000;
F29040write(savednum);
address=0x10001;
F29040write(savednum>>8);
address=0x10002;
F29040write(sendnum);
address=0x10003;
F29040write(sendnum>>8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -