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

📄 0203.c

📁 液晶兼容0701
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <hn.h>
void main(void)
{
 unsigned char i,j,m;//,/*ssb,*/addcode[4][2];	
  
 initial();/*51的初始化*/
 lcdinit();/*液晶界面的初始化*/
 init554();/*554的初始化*/

if(key==0xf3)modifyclk();
if(key==0xF5)modchedaohao();//系统设置
if(key==0xF4)his_del();
if(key==0xF1)help();


 keyfinish=0;feefinish=0; 

 address=0x00000;
 chedaoh=F29040read();

 address=0x00001;
 d_p_modi=F29040read();
 if(d_p_modi>1)d_p_modi=2;
 else d_p_modi=0;

 address=0x10000;

 savednum=F29040read();
 address++;

 savednum+=(F29040read()<<8);

 address=0x10002;
 sendnum=F29040read();
 address++;
 sendnum+=(F29040read()<<8);



while(1)
 {          

    CS256;
    dispclk();
    if(k_x_jishi==0)  sendidel();    
    if(key==0xF2){key=0xFF;lcddisp(0,0,0xfd,0Xff);} /*背光切换*/ 

     CS256;
     lcddisp(22,90,0xA3,chedaoh+0XB0);
     lcddisp(24,90,0xb3,0Xb5);
     lcddisp(26,90,0xb5,0Xc0);
     lcddisp(28,90,0xa2,0xa2);//清除本地处理 

     gunping();

     if(cheing!=cheshu){   
                        tempa=0xff; //发送完成
                        for(m=0;m<5;m++){for(i=0;i<(18+toupcom[cheing][15]*4);i++){j=toupcom[cheing][i];
                                                                                   ST554A;;;;/*发送到上位机*/
                                                                                   ACC=ST05;
                                                                                   while(!ACC5){ST554A;ACC=ST05;}
                                                                                   RBR=j;
                                                                                   CS256;
                                                                                   }
                                       delay_time(500);
                                       if(tempa==0xf0)m=50;
       
                                       }//发送五次
/***********************end of 把数据发送到上位机*************/ 
                       if(m==5)bendichuli();
                       if(cheing!=cheshu)cheing=(cheing+1)%10;
                      }

      else tongbudata();  


}//end while(1)

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


void int0(void) 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  0x05: key=0XF1;break;/*开关背光*/
                     case  0x0c: key=0XF4;break;/*开关背光*/
                     case  0x03: key=0XF5;break;/*开关背光*/
                                              
                     }
                 }
     

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

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

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

void serial(void) 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=0X0;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[0]=tempb;subnum=subnum+1;}}
	else
	{	subcom[subnum]=tempb;/*如果接收缓存不空,写入缓存*/

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

               for(i=0;i<6;i++){ ST554B;ACC=ST05;
                               while(!ACC5)ACC=ST05;
                               RBR=receipt[i];
                              }
             
                subnum=0;

         }//end of if(subnum==subcom[cheshu][03])
   }///end of else
   CS256;
 if(subrecok){if(subcom[2]==0x06){if(cheing!=cheshu){ if(cheshu==0)cheshu=9;
                                                      else cheshu--;}
								   subrecok=0;
								  }

              else {tobuff();cheshu=(cheshu+1)%10;subrecok=0;}
			 }
    CS256; 

}
                  
void lcdinit(void)
{unsigned char i;
delay_time(300); 
// while(!lcdok); lcdok=0;
// while(txtolcd);
 tolcd[0]=0xFF;  /*CLS*/
 tolcd[1]=0XFF;
 tolcd[2]=0XFF;
 tolcd[3]=0XFF;
 tolcd[4]=0XFF;
 txtolcd=1;
 TI=1;
lcddisp(0,0,0XD7,0XDC);//总
lcddisp(10, 0, 0XD6, 0XD8); /*重*/
lcddisp(22, 0, 0XB3, 0XAC); /*超*/
lcddisp(24,0, 0XCF, 0XDE); /*限*/
lcddisp(26, 0, 0XC2, 0XCA); /*率*/
lcddisp(0, 90, 0XD3, 0XA6); /*应*/
lcddisp(2, 90, 0XBD, 0XC9); /*缴*/
lcddisp(4, 90,0XB7, 0XD1); /*费*/
lcddisp(6, 90, 0XB6, 0XEE); /*额*/
lcddisp(00, 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--) lcddisp(i-1, 2, 0Xff, 0X0d); /*-----------*///
}
/********************************************
内部函数,延时1uS
********************************************/
void In1uSDelay()
{
    _nop_();_nop_();_nop_();_nop_();
}

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

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

    I2C_SCK=1;
    In1uSDelay();
    I2C_SDA=1;
    EA=1;
}

/********************************************
内部函数,输入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);
}

/********************************************
内部函数.输入数据
出口: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();          /*写命令,设置地址*/

⌨️ 快捷键说明

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