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

📄 text1

📁 液晶兼容0701
💻
📖 第 1 页 / 共 3 页
字号:
/********************************************
内部函数.输入数据
出口:B
********************************************/
void InI2C_Read()
{
    unsigned char i=8;
    do{
        I2C_SCK=1;
        ACC=B;
        ACC+=ACC;
        ACC0=I2C_SDA;
        B=ACC;
        I2C_SCK=0;
        In1uSDelay();
    }while(--i);
}

/********************************************
输出数据->pcf8563
********************************************/
void I2C_WriteData(unsigned char mLocation,unsigned char mData)
{
    InI2C_Start();

    B=0xa2;
    InI2C_Write();          /*写命令*/
    InI2C_ReadACK();

    B=mLocation;
    InI2C_Write();          /*写地址*/
    InI2C_ReadACK();

    B=mData;
    InI2C_Write();          /*写数据*/
    InI2C_ReadACK();

    InI2C_Stop();
}

/********************************************
输入数据<-pcf8563
********************************************/
unsigned char I2C_ReadData(unsigned char mLocation)
{
    InI2C_Start();

    B=0xa2;
    InI2C_Write();          /*写命令,设置地址*/
    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 modifytime()
{
	if(numd==0){if(tempd==0xff)numd++;}
	else  	{g8563_Store[numd-1]=tempd;/*如果接收缓存不空,写入缓存*/
		 numd++;
		 if(numd==7){numd=0;shizhong=1;}/*缓存字节=7*/
                }
 }

void F29040reset()
{XBYTE[0000]=flashreset;/*块的任意地址写入0XF0都会初始化块*/
}


void selectpage() /*给出一个地址,自动送出页面地址,且返回页内偏移地址*/
{
 lowaddress=(unsigned int)(address&0xFFFF);
 page=(unsigned char)(address/0XFFFF);
 switch(page)
  {/*********选择第一块29F040即512B**/
   case 0x0: CS512B;A18=0;A17=0;A16=0;
   case 0x1: CS512B;A18=0;A17=0;A16=1;
   case 0x2: CS512B;A18=0;A17=1;A16=0;
   case 0x3: CS512B;A18=0;A17=1;A16=1;
   case 0x4: CS512B;A18=1;A17=0;A16=0;
   case 0x5: CS512B;A18=1;A17=0;A16=1;
   case 0x6: CS512B;A18=1;A17=1;A16=0;
   case 0x7: CS512B;A18=1;A17=1;A16=1;
  /*********选择第二块29F040即512A**/
   case 0x8: CS512A;A18=0;A17=0;A16=0;
   case 0x9: CS512A;A18=0;A17=0;A16=1;
   case 0xA: CS512A;A18=0;A17=1;A16=0;
   case 0XB: CS512A;A18=0;A17=1;A16=1;
   case 0XC: CS512A;A18=1;A17=0;A16=0;
   case 0XD: CS512A;A18=1;A17=0;A16=1;
   case 0XE: CS512A;A18=1;A17=1;A16=0;
   case 0XF: CS512A;A18=1;A17=1;A16=1;
  }
} 

unsigned char F29040write(unsigned char byte) 
{ unsigned char b1,b2;
  unsigned char i=0; 
  selectpage();
  XBYTE[flashaddress5555]=0xaa;
  XBYTE[flashaddress2AAA]=0x55;
  XBYTE[flashaddress5555]=0xa0;
  XBYTE[lowaddress]=byte;
  
  do{b1=XBYTE[lowaddress]; /*读flash数据总线*/
     b1&=0x80;
     b2=byte & 0x80;
     if(b1==b2) return(0); /*成功*/
     b1=XBYTE[lowaddress];
     b1&=0x80;
    }while(b1==0); /*写字节周期完成*/
    
  b1=XBYTE[lowaddress]; /*读flash数据总线*/
  b1&=0x80;
  b2=byte&0x80;
  if(b1==b2) return(0); /*成功  */
  else  return(1); /*失败*/
}

unsigned char F29040read() /*向flash读一个字节,写入之前请调用F29040_reset*/
{
  unsigned char ret;
  F29040reset();
  selectpage();
  ret=XBYTE[lowaddress];
  return(ret);
}//END

void dispclk()
{unsigned char i; 
 P8563_ReadTime();
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*年*/
 tolcd[1]=22;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[5]>>4)+0X10;
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*年*/
 tolcd[1]=23;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[5]&0XF)+0X10;
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*/*/
 tolcd[1]=24;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=0X0D;//g8563_Store[3];
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*月*/
 tolcd[1]=25;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[4]>>4)+0X10;
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*月*/
 tolcd[1]=26;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[4]&0XF)+0X10;
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*/*/
 tolcd[1]=27;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=0X0D;//g8563_Store[3];
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*日*/
 tolcd[1]=28;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[3]>>4)+0X10;
 txtolcd=1;
 TI=1; 
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*日*/
 tolcd[1]=29;//20;
 tolcd[2]=14;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[3]&0XF)+0X10;
 txtolcd=1;
 TI=1; 

 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*时*/
 tolcd[1]=22;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[2]>>4)+0X10;
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*时*/
 tolcd[1]=23;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[2]&0XF)+0X10;
 txtolcd=1;
 TI=1; 
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*/*/
 tolcd[1]=24;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=0X1A;
 txtolcd=1;
 TI=1; 
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*分*/
 tolcd[1]=25;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[1]>>4)+0X10;
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd); tolcd[0]=0xFF;  /*分*/
 tolcd[1]=26;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(g8563_Store[1]&0X0F)+0X10;
 txtolcd=1;
 TI=1;
/////////////////////////////////////
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*/*/
 tolcd[1]=27;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=0X1A;
 txtolcd=1;
 TI=1; 
 i=g8563_Store[0];
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*秒*/
 tolcd[1]=28;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(i>>4)+0X10;
 txtolcd=1;
 TI=1;
 while(!lcdok); lcdok=0;
 while(txtolcd);
 tolcd[0]=0xFF;  /*秒*/
 tolcd[1]=29;//20;
 tolcd[2]=15;//112;
 tolcd[3]=0xFF;
 tolcd[4]=(i&0X0F)+0X10;
 txtolcd=1;
 TI=1;
}//end if(shizhong==0)

void bendichuli()
{         unsigned char i,j,chexing2;
          unsigned int xdata t_x_fee;
                             
                              while(!lcdok); lcdok=0;
	                          while(txtolcd);//本
                	          tolcd[1]=22;
                	          tolcd[2]=90;
                     	      tolcd[3]=0XB1;
                              tolcd[4]=0xBE;
                              txtolcd=1; 
                              TI=1;

                              while(!lcdok); lcdok=0;
	                          while(txtolcd);//本
                	          tolcd[1]=24;
                	          tolcd[2]=90;
                     	      tolcd[3]=0XB5;
                              tolcd[4]=0xd8;
                              txtolcd=1; 
                              TI=1;							  
							  while(!lcdok); lcdok=0;
	                          while(txtolcd);//本
                	          tolcd[1]=26;
                	          tolcd[2]=90;
                     	      tolcd[3]=0XB4;
                              tolcd[4]=0xa6;
                              txtolcd=1; 
                              TI=1;
                              while(!lcdok); lcdok=0;
	                          while(txtolcd);//本
                	          tolcd[1]=28;
                	          tolcd[2]=90;
                     	      tolcd[3]=0Xc0;
                              tolcd[4]=0xEd;
                              txtolcd=1; 
                              TI=1;



///////////////////////////////////////////////////////////////// 
                              keyfinish=0;feefinish==0;
while((cheshu<(cheing+4))&(feefinish==0))
                     {gunping();
                     if(keyfinish==0){key=0;/*feefinish=0;*/}//没有按下车型而按下回车无效
			         else{    chexing=key;
                              while(!lcdok); lcdok=0;
	                          while(txtolcd);
                	          tolcd[1]=10;
                	          tolcd[2]=112;
                     	      tolcd[3]=0XA3;
                              tolcd[4]=chexing+0xB0;
                              txtolcd=1; 
                              TI=1;

                              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;                                                            
                               }

                 if(ch_x_l_m>100)beilv=3;
                 else {if(ch_x_l_m>50)beilv=1;
                       else if(ch_x_l_m>30)beilv=0.5;
                       }
                     
                             t_x_fee=(t_x_fee*(1+beilv));

/****************************显示费额********************************/
                 while(!lcdok); lcdok=0;
                 while(txtolcd);/**/
                 tolcd[1]=10;
                 tolcd[2]=90;
                 tolcd[3]=0xA3;
                 tolcd[4]=(t_x_fee/100)+0XB0;
                     if(tolcd[4]==0xB0){tolcd[3]=0xA2;tolcd[4]=0XA2;}
                 txtolcd=1;  
                 TI=1;  

                 while(!lcdok); lcdok=0;
                 while(txtolcd);/**/
                 tolcd[1]=12;
                 tolcd[2]=90;
                 tolcd[3]=0xA3;

⌨️ 快捷键说明

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