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

📄 text1

📁 液晶兼容0701
💻
📖 第 1 页 / 共 3 页
字号:
#include <hn.h>
void main(void)
{
unsigned char i,j,m;//,/*ssb,*/addcode[4][2];	
unsigned int xdata  zongzhong,zhouzhong[8];//,zongzhong2; 
unsigned int xdata maintemp;
unsigned char xdata zhouxing[8];
unsigned int xdata  chaoxianlv;


 initial();/*51的初始化*/
 lcdinit();/*液晶界面的初始化*/
 init554();/*554的初始化*/

 if(key==0X66)modifyclk();//系统设置
 if(key==0xF1)modchedaohao();//系统设置

 P10=0;
 while(1)
 {    
     dispclk();
     if(k_x_jishi==0){  k_x_jishi=5;
                        ST554A;;;;/*发送到上位机得空闲码*/
                        ACC=ST05;
                        while(!ACC5){ST554A;ACC=ST05;}
                        RBR=0xAA;
                      }
     
	 CS256;
     lcddisp(22,90,0XA2,0XA2);
     lcddisp(24,90,0XA2,0XA2);
     lcddisp(26,90,0XA2,0XA2);
     lcddisp(28,90,0XA2,0XA2);

     lcddisp(16,0,0XA3,cheshu+0XB0);/*排队车数*/
     lcddisp(14,0,0XA3,cheing+0XB0);/*正在处理车的序号*/

     gunping();
  if(cheing<cheshu)shishi=1;
  if(cheing==0)tongbudata();
  if(shishi) {   zongzhong=0;
                 i=subcom[cheing][16];
        		 for(j=0;j<i;j++) zongzhong+=subcom[cheing][17+2*j]*2560+subcom[cheing][17+2*j+1]*10;
//////////////////////////////////////////////////////////////////////////////
                 for(i=0;i<8;i++) zhouzhong[i]=0;
                 i=subcom[cheing][16];
			  	
	     for(j=0;j<i;j++) zhouzhong[j]=subcom[cheing][17+2*j]*2560+subcom[cheing][17+2*j+1]*10;
 		 for(j=0;j<i;j++) zhouxing[j]=subcom[cheing][17+2*i+j];                 

                 ch_x_l_m=0;

        for(i=0;i<subcom[cheing][16];i++){
                                         switch(zhouxing[i])
                					      { case 0: chaoxianlv=0;break;
                         					case 1: chaoxianlv=(zhouzhong[i]/ezai1); break;                
					                        case 2: chaoxianlv=(zhouzhong[i]/ezai2);break;                
                    					    case 3: chaoxianlv=(zhouzhong[i]/ezai3);break;                
					                        case 4: chaoxianlv=(zhouzhong[i]/ezai4);break;                
                    					    case 5: chaoxianlv=(zhouzhong[i]/ezai5);break;                
					                        case 6: chaoxianlv=(zhouzhong[i]/ezai6);break;                 
					                        case 7: chaoxianlv=(zhouzhong[i]/ezai7);break;                 
					                        case 8: chaoxianlv=(zhouzhong[i]/ezai8);break;                 
                                          }

                 if(zhouxing[i]>8)chaoxianlv=0;
                 if(chaoxianlv>ch_x_l_m)ch_x_l_m=chaoxianlv;
                                           }

                 if(ch_x_l_m>100)ch_x_l_m=ch_x_l_m-100;
                 else ch_x_l_m=0;
  	
			  			  			  			  			  
/********************清除显示费额***************/
               lcddisp(10,90,0XA2,0XA2);
               lcddisp(12,90,0XA2,0XA2);
               lcddisp(14,90,0XA2,0XA2);
/********************end of清除 显示飞蛾***************/ 
               lcddisp(10,112,0XA2,0XA2);
/***********************end of 清除下半部屏幕************************************/                  
             todaping[2]=(((ch_x_l_m%100)/10)<<4)+(ch_x_l_m%10);
             todaping[3]=(ch_x_l_m%1000)/100;
 for(i=0;i<8;i++){ST554C;;;;/*发送到室外大屏*/
                               ACC=ST05;
                               while(!ACC5){ST554C;ACC=ST05;}
                               RBR=todaping[i];
                               }
 CS256;
 /***********************把数据发送到上位机*************/ 
                shishi=0;


               tempa=0xff; //发送完成
			   m=5;//发送次数
while((tempa!=0xf0)&(m>0)){             
              m--;
              toupcom[0]=0xF0;/*起始标志*/
			  i=xuhao/10;
              j=xuhao%10;
			  toupcom[1]=(i<<4)+j;/*车辆通过的序号*/
              toupcom[2]=chedaoh;/*车道号*/
              toupcom[3]=0;/*超载标志*/
              if(ch_x_l_m>50) toupcom[3]=1;
              toupcom[4]=(subcom[cheing][16]<<4)+1;/*车型*/
              toupcom[5]=((zongzhong%100)/10)*16+(zongzhong%10);          /*总重*/
              toupcom[6]=((zongzhong%10000)/1000)*16+(zongzhong%1000)/100;/*总重*/
              toupcom[7]=zongzhong/10000;                                 /*总重*/
              toupcom[8]=(((ch_x_l_m%100)/10)<<4)+(ch_x_l_m%10);/*超载率*/
              toupcom[9]=((ch_x_l_m/1000)<<4)+((ch_x_l_m%1000)/100);/*超载率*/
              maintemp=subcom[cheing][12]*256+subcom[cheing][13];
              toupcom[10]=(((maintemp%1000)/100)<<4)+(maintemp%100)/10;/*车速*/
              toupcom[11]=((maintemp/10000)<<4)+((maintemp%10000)/1000);/*车速*/
              j=subcom[cheing][16];
              for(i=0;i<j-1;i++)maintemp=subcom[cheing][17+j*3+i]*256+subcom[cheing][17+j*3+i+1];
              toupcom[12]=((maintemp%100)/10<<4)+(maintemp%10);/*总轴距*/;
              toupcom[13]=(((maintemp%10000)/1000)<<4)+(maintemp%1000)/100;/*总轴距*/;
              toupcom[14]=((maintemp/100000)<<4)+(maintemp%100000)/10000;/*总轴距*/;
              toupcom[15]=subcom[cheing][16];/*轴数*/
              j=2*subcom[cheing][16];
for(i=0;i<subcom[cheing][16];i++)toupcom[16+i*4]=subcom[cheing][17+(2*(subcom[cheing][16]))+i];/*轴型1*/

for(i=0;i<subcom[cheing][16];i++){
              toupcom[17+i*4]=((((subcom[cheing][17+2*i]*2560+subcom[cheing][17+2*i+1]*10)%100)/10)<<4)+(subcom[cheing][17+2*i]*2560+subcom[cheing][17+2*i+1]*10)%10;/*轴重1*/
              toupcom[17+i*4+1]=((((subcom[cheing][17+2*i]*2560+subcom[cheing][17+2*i+1]*10)%10000)/1000)<<4)+((subcom[cheing][17+2*i]*2560+subcom[cheing][17+2*i+1]*10)%1000)/100;/*轴重1*/
              toupcom[17+i*4+2]=(((subcom[cheing][17+2*i]*2560+subcom[cheing][17+2*i+1]*10)/100000)<<4)+((subcom[cheing][17+2*i]*2560+subcom[cheing][17+2*i+1]*10)%100000)/10000;/*轴重1*/
                                  }/*end of 计算轴重*/

              for(i=0;i<(16+subcom[cheing][16]*4);i++) toupcom[16+subcom[cheing][16]*4]+=subcom[cheing][i];/*校验和*/
              toupcom[17+subcom[cheing][16]*4]=0xE0;/*结束标志*/
             
              for(i=0;i<(18+subcom[cheing][16]*4);i++) 
                              {

                               j=toupcom[i];
                               ST554A;;;;/*发送到上位机*/
                               ACC=ST05;
                               while(!ACC5){ST554A;ACC=ST05;}
                               RBR=j;
        //                       F29040write(i+0xff,j);
		                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                               CS256;
                               }
/***********************end of 把数据发送到上位机*************/ 

          delay_time(500);
  }// end of while((shishi==0)&(m>0))发送五次

if(m==0)bendichuli();//指m==0时为通讯中断

              xuhao++;
			  if(xuhao>99)xuhao=0;
			  cheing++;
			  if(cheing==cheshu){cheing=0;cheshu=0;}

}//end of if(shishi)                 

if(key==0xF2){     key=0xFF;    lcddisp(0,0,0Xfd,0Xff);}//背光切换      
}//end while(1)

}
/////////////////////////////end of main////////////////////////////////////////////////  
void ct0() interrupt 1 using 0    /*每1ms采集一次传感器数据*/
{ 
TH0=0x00;
TL0=0x01;
time++;if(time>10){count=0;time=0;
P14=~P14;
if(k_x_jishi)k_x_jishi--;
}


void int0() interrupt 0 using 1 /*外部中断0 用来接受键盘发来的数据*/
{
     time=0;
     dat>>=1;            /*接受数据 低->高*/
     if(sda)   dat|=0x80; 
     count++;
    if(count==9 ) dat2=dat;
    if(count>35){count=0;
                 switch(dat2)
                    { 
                     case  0x45: key0=key;key=0;keyfinish=1;break;//0
                     case  0x16: key0=key;key=1;keyfinish=1;break;//1
                     case  0x1E: key0=key;key=2;keyfinish=1;break;//2
                     case  0x26: key0=key;key=3;keyfinish=1;break;//3
                     case  0x25: key0=key;key=4;keyfinish=1;break;//4
                     case  0x2E: key0=key;key=5;keyfinish=1;break;//5
                     case  0x36: key0=key;key=6;keyfinish=1;break;//6
                     case  0x3D: key0=key;key=7;keyfinish=1;break;//7
                     case  0x3E: key0=key;key=8;keyfinish=1;break;//8
                     case  0x46: key0=key;key=9;keyfinish=1;break;//9               
                     case  0x49: key0=key;key=0xa;keyfinish=1;break; //.               
                     case  0x5a: key0=0;key=0;feefinish=1;break;  //enter
                     case  0x04: key=0XF3;break;/*校验用*/
                     case  0x06: key=0XF2;break;/*开关背光*/
                     case  0x66: key=0X66;break;/*更改时间*/
                     case  0x05: key=0xF1;break;/*更改车道号*/  
                     }
                 }
     

}//end of void int0() interrupt 0 using 1
  
void interrupt1() interrupt 2 using 3
{
ST554A;
ACC=ST05;
if(ACC0){tempa=RBR;if(tempa==0xf0){P10=~P10;}}


ST554D;
ACC=ST05;
if(ACC0){tempd=RBR; modifytime();}    /*以后接收传来的时钟修正信息信息*/
       
ST554C;
ACC=ST05;
if(ACC0)tempc=RBR;

ST554B;
ACC=ST05;
if(ACC0){tempb=RBR;jieshou();}

CS256;
}// end of void interrupt1() interrupt 2 using 3

void serial() interrupt 4 using 2                /*  串行口接收中断服务子程序  */
{ 
if(TI)TI=0;
if(txtolcd&(txtolcdnum<5)){SBUF=tolcd[txtolcdnum];txtolcdnum++;}
                 else {txtolcdnum=0; txtolcd=0;}

if(RI){RI=0;if(SBUF==0x66)lcdok=1;}
}//end of void serial() interrupt 4 using 2

void init554(void)       
{ 
   delay_time(500);
   ST554D;  
   ST03=0X83; RBR=0x30; ST01=0;  /*得到2400的波特率*/   
   ST03=0x03; ST01=0X01;ST04=0X08;  

   ST554C;  
   ST03=0X83; RBR=0x30; ST01=0; /*得到2400的波特率*/    
   ST03=0x03; ST01=0X0;ST04=0X08; 
   
   ST554B;  
   ST03=0X83; RBR=0X0C; ST01=0;     
   ST03=0x03; ST01=0X01;ST04=0X08; 
  
   ST554A;  
   ST03=0X83; RBR=0x0c; ST01=0;     
   ST03=0x03; ST01=0X01;ST04=0X08; 

   EX1=1;/*打开来自554的中断*/
}//end of void init554(void)

void initial(void)                          /*  初始化子程序  */
{
 RCAP2L=0xDC;		/*0MHz  计数初值F7dd可得到300的波特率*/
 RCAP2H=0xFF;
 TL2=0xDC;
 TH2=0xFF;  
 T2CON=52;
 SCON=0x50;
 REN=1;
 ES=1;

 TH0=0x00;
 TL0=0x01;
 TR0=1;
 TMOD=0X01;
 ET0=1;
  
  IT0=1;
  EX0=1;
  IP=0X0;

  IT1=1;   /*不使用*/
  EX1=0;   /*554初始化之前关掉来自554的中断*/
  EA=1;

}
void delay_time(unsigned int delay)                 /*  延时子程序,基本延时单元为1ms  */
{                                           /*  该程序段能完成延时delay个ms  */   
    unsigned int j;
    unsigned char i;
    for (j=0;j<delay;j++)
      for (i=0;i<125;i++);                  /*  一个基本延时单元  */
}

void jieshou(void)
{
	unsigned int crc=0;
	unsigned char i;
	CS256;
	if(subnum==0){if(tempb==0xff){subcom[cheshu][0]=tempb;subnum=subnum+1;}}
	else
	{	subcom[cheshu][subnum]=tempb;/*如果接收缓存不空,写入缓存*/

	    subnum=subnum+1;
		if(subnum==subcom[cheshu][03])/*缓存字节=5*/
		{                        /*crc校验*/
	           for( i=0; i<subcom[cheshu][03]-2;i++) crc = xcrc(crc,subcom[cheshu][i]);
               if(crc==(subcom[cheshu][subcom[cheshu][03]-2]<<8)+subcom[cheshu][subcom[cheshu][03]-1]) {subrecok=1; cheshu++;}/*校验成功*/
               else  subrecok=0; 

               if(subrecok){receipt[0]=0xff;receipt[1]=0x00;receipt[2]=0x00;receipt[03]=0X00;receipt[04]=0x4B;receipt[05]=0xA3;}
               else        {receipt[0]=0xff;receipt[1]=0x00;receipt[2]=0x00;receipt[03]=0X01;receipt[04]=0x5B;receipt[05]=0x82;}
              ST554B;
			  delay_time(5);
              for(i=0;i<6;i++){ACC=ST05;
                               while(!ACC5)ACC=ST05;
                               RBR=receipt[i];
                              }

       subnum=0;
        }//end of if(subnum==subcom[cheshu][03])
   }///end of else
 
    CS256; 
}
                  
void lcdinit(void)
{unsigned char i;
 delay_time(800);
 lcddisp(0xff,0xff,0xff,0xff);//cls
 lcddisp(0x0,0x0,0xd7,0xdc);//总
 lcddisp(10,0,0xd6,0xd8);/*重*/
 lcddisp(22,0x0,0xb3,0xac);/*超*/
 lcddisp(24,0x0,0xcf,0xde);/*限*/
 lcddisp(26,0x0,0xc2,0xca);/*率*/
 lcddisp(0,90,0xd3,0xA6);/*应*/
 lcddisp(2,90,0xBd,0xc9);/*缴*/
 lcddisp(4,90,0xB7,0xd1);/*费*/
 lcddisp(6,90,0xB6,0xEE);/*额*/
 lcddisp(0,112,0xB3,0xB5);/*车*/
 lcddisp(6,112,0xD0,0xCd);/*型*/
 lcddisp(8,112,0xA3,0xBA);/*:*/
 lcddisp(12,112,0xD0,0xCd);/*型*/
 lcddisp(17,112,0xCA,0xB1);/*时*/
 lcddisp(19,112,0xBC,0xE4);/*间*/
 lcddisp(21,112,0xA3,0xBA);/*:*/
 lcddisp(8,90,0xA3,0xBA);/*:*/
 lcddisp(17,90,0xD4,0xAA);/*:*/

for(i=0x1E;i>0;i--)/*-----------*///
 	{
         while(!lcdok); lcdok=0;
         while(txtolcd);
	 tolcd[1]=i-1;//
	 tolcd[2]=2;
	 tolcd[3]=0xFF;
	 tolcd[4]=0x0D;
	 txtolcd=1;
         TI=1;
//         while(!lcdok); lcdok=0;          
//         while(txtolcd);
//	 tolcd[1]=i-1;
//	 tolcd[2]=11;
//	 tolcd[3]=0xFF;
//	 tolcd[4]=0x0D;
//	 txtolcd=1;
  //       TI=1;
        }


}
/********************************************
内部函数,延时1uS
********************************************/
void In1uSDelay()
{
    _nop_();
}

/********************************************
内部函数,I2C开始
********************************************/
void InI2C_Start()
{
     I2C_SDA=1;
     In1uSDelay();
     I2C_SCK=1;
     In1uSDelay();
     I2C_SDA=0;
     In1uSDelay();
     I2C_SCK=0;
}

/********************************************
内部函数,I2C结束
********************************************/
void InI2C_Stop()
{
    I2C_SCK=1;
    In1uSDelay();
    In1uSDelay();
    In1uSDelay();
    In1uSDelay();
    I2C_SDA=0;
    In1uSDelay();
    I2C_SDA=1;
    In1uSDelay();
}

/********************************************
内部函数,输入ACK
********************************************/
void InI2C_ReadACK()
{
    In1uSDelay();
    I2C_SCK=1;
    In1uSDelay();
    I2C_SCK=0;
    In1uSDelay();
}

/********************************************
内部函数,输出ACK=1
********************************************/
void InI2C_WriteACK()
{
    In1uSDelay();
    I2C_SCK=1;
    In1uSDelay();
    I2C_SDA=1;
    In1uSDelay();
    I2C_SCK=0;
    In1uSDelay();
}

/********************************************
内部函数.输出数据字节
入口:B=数据
********************************************/
void InI2C_Write()
{
    unsigned char i=8;
    do{
        ACC=B;
        I2C_SDA=ACC7;
        ACC+=ACC;
        B=ACC;
        _nop_();
        _nop_();
        I2C_SCK=1;
        In1uSDelay();
        I2C_SCK=0;
    }while(--i);
}

⌨️ 快捷键说明

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