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

📄 can

📁 can通信源码
💻
📖 第 1 页 / 共 2 页
字号:
for(i=8; i<16;i++)  
{ 
LCD_Write_Byte2(charater_table[charater*16+i],1); 
} 
} 

void LCD_Write_Chinese(u8 x, u8 y,u8 Chinese) 
{ 
unsigned char i;   

LCD_Set_XY(x*8, y);// 列,页  
for(i=0; i<16;i++)  
{ 
LCD_Write_Byte2(Chinese_table[Chinese*32+i],1);  
} 

    LCD_Set_XY(x*8, y+1);// 列,页  
for(i=16; i<32;i++)  
{ 
LCD_Write_Byte2(Chinese_table[Chinese*32+i],1); 
} 
} 
//////////////////////////////////////////////        按键子程序
void anjian()
{
 if(p15==0)
{
 Delay(1000);
 if(p15==0)
{ 
 biaoshi=1;
jian1--;
 if(jian1<0)
  jian1=4;
 CAN_TXD();
while(!p15);
}
}
 if(p11==0)
  {
Delay(500); 
if(p11==0)
   {  
biaoshi=2;
CAN_TXD();
 LCD_Clear(); 
LCD_Write_Chinese(0,0,0); 
LCD_Write_Chinese(2,0,1); 
LCD_Write_Chinese(6,0,2); 
LCD_Write_Chinese(8,0,3); 
LCD_Write_Chinese(4,0,12);
LCD_Write_Chinese(0,2,9); 
LCD_Write_Chinese(2,2,10); 
LCD_Write_Chinese(4,2,11); 
Delay(1000);
Delay(60000);
Delay(60000);
 LCD_Clear(); 
 while(!p11);
   }  
  }
if(p13==0)
{
 Delay(500);
 if(p13==0)
  {
   LCD_Clear(); 
LCD_Write_Chinese(0,0,4); 
LCD_Write_Chinese(2,0,5); 
LCD_Write_Chinese(4,0,6); 
LCD_Write_Chinese(6,0,7); 
LCD_Write_Chinese(8,0,8);
LCD_Write_Charater(4,2,RX_buffer[5]);
while(!p13);
 LCD_Clear(); 

  }
}
if(p14==0)
{
 Delay(500);
 if(p14==0)
  {
    biaoshi=0;
    jia1++;
   if(jia1>=4)
    jia1=0;
   CAN_TXD();
  while(!p14);
  }
}

}
///////////////////////////////////////////////////主函数////////////////////////////////////
void main()
{

fg=0;
fd=0;
sg=0;
sd=0;
shi1=0;
shi2=0;
count=0;
RST=0; 
Delay(100);
Delay(100);
Delay(100);
Delay(100);
Delay(100);

RST=1;    
LCD_init(); 
LCD_Clear(); 

SJA_RST = 0; //复位引脚
	Delay(100);
    SJA_RST = 1;//CAN总线复位管脚
 	Delay(100);
	Delay(100);
	Delay(100);
    SJA_CS = 0;//CAN总线片选有效
    	Delay(100);
    SJA_CS = 1;//CAN总线片选无效,保证数据线上的变化不会影响SJA1000
//CPU初始化

    CAN_init(); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片选有效无效
    _nop_();
    _nop_();
	Delay(200);
TMOD=0x01;
EA=1;
ET0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(1)                              ////////////死循环////////////
{

LCD_Write_Chinese(0,0,0); 
LCD_Write_Chinese(2,0,1); 
LCD_Write_Charater(4,0,10);
LCD_Write_Chinese(0,2,2); 
LCD_Write_Chinese(2,2,3); 
LCD_Write_Charater(4,2,10);
LCD_Write_Charater(0,4,11);
LCD_Write_Charater(1,4,10);
LCD_Write_Charater(4,4,10);
RH();
for(u=0;u<256;u++)
{
 if(u=U8RH_data_H)
   {
    d=u/100;
    e=u/10;
    f=u%10;
   }
LCD_Write_Charater(6,2,d);
LCD_Write_Charater(7,2,e);
LCD_Write_Charater(8,2,f);
break;
}
for(j=0;j<256;j++)
{
 if(j=U8T_data_H)
   {
    a=j/100;
    b=j/10;
    c=j%10;
   }
LCD_Write_Charater(6,0,a);
LCD_Write_Charater(7,0,b);
LCD_Write_Charater(8,0,c);
break;
}
anjian();
CAN_RXD();
if(count>=20)
 {
   count=0;
    fd++;
	  if(fd>=10)
	  {
	   fd=0;
	   fg++;
	   if(fg>=6)
	   {
	    fg=0;
		sd++;
        if(sd>=10)
         {
          sd=0;
          sg++;
          if(sg>=6)
           {
            sg=0;
            shi1++;
            if(shi1>=10)
             {
              shi1=0;
              shi2++;
              if((shi2=2)&&(shi1=4))
                {
                  shi1=0;
                  shi2=0;
                }
             }
           }
         }
	   }
	  }
      LCD_Write_Charater(2,4,shi1);
      LCD_Write_Charater(3,4,shi2);
      LCD_Write_Charater(5,4,sg);
	  LCD_Write_Charater(6,4,sd);
	  LCD_Write_Charater(7,4,10);
	  LCD_Write_Charater(8,4,fg);
      LCD_Write_Charater(9,4,fd);
	  }

anjian();
CAN_RXD();
}
}
void zhongduan()interrupt 1
{
 count++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}void CAN_init( void )
{
   
    uchar ACRR[4];
    uchar AMRR[4];
    ACRR[0] = 0x11;
    ACRR[1] = 0x22;
    ACRR[2] = 0x33;
    ACRR[3] = 0x44;//接收代码寄存器,节点1
    AMRR[0] = 0xff;
    AMRR[1] = 0xff;
    AMRR[2] = 0xff;
    AMRR[3] = 0xff;//接收屏蔽寄存器。 只接收主机发送的信息
    //  .0=1---reset MODRe,进入复位模式,以便设置相应的寄存器
    	 //防止未进入复位模式,重复写入;
    MODR   = 0x09;

    CDR  = 0x88;//时钟分频; CDR.3=1--时钟关闭, CDR.7=0---basic CAN, CDR.7=1---Peli CAN

    BTR0 = 0x03;
    BTR1 = 0x1c;//16M晶振,波特率125Kbps

    IER  = 0x01;// .0=1--接收中断使能;  .1=0--关闭发送中断使能
    OCR  = 0xaa;// 配置输出控制寄存器
    CMR  = 0x04;//命令寄存器;释放接收缓冲器

    ACR  = ACRR[0];
    ACR1 = ACRR[1];
    ACR2 = ACRR[2];
    ACR3 = ACRR[3];//初始化标示码

    AMR  = AMRR[0];
    AMR1 = AMRR[1];
    AMR2 = AMRR[2];
    AMR3 = AMRR[3];//初始化掩码


	MODR   = 0x08;

}
void CAN_TXD( void )
{                    
			        uchar data qushu;
				    uchar data TX_buffer[ N_can ] ;
                       
			
					    TX_buffer[0] = 0x88;//TX.7=1扩展帧;TX.6=0数据帧; .3=1数据长度
					    TX_buffer[1] = 0x00;//本节点地址
					    TX_buffer[2] = 0x01;//
					    TX_buffer[3] = 0x02;//
					    TX_buffer[4] = biaoshi;//
																		
						    TX_buffer[5]  = d;
						    TX_buffer[6]  = e;
						    TX_buffer[7]  = f;
						    TX_buffer[8]  = a;//
						    TX_buffer[9]  = b;//
						    TX_buffer[10] = c;//
						    TX_buffer[11] = jia1;//
						    TX_buffer[12] = jian1;//
   do{
    qushu=SR;
   	Delay(100);
	Delay(100);

      }while(qushu&0x20);
     do{
        qushu=SR;
           	Delay(100);
       }while(qushu&0x10);

	   		        TBSR   = TX_buffer[0];
				    TBSR1  = TX_buffer[1];
				    TBSR2  = TX_buffer[2];
				    TBSR3  = TX_buffer[3];
				    TBSR4  = TX_buffer[4];
				    TBSR5  = TX_buffer[5];
				    TBSR6  = TX_buffer[6];
				    TBSR7  = TX_buffer[7];
				    TBSR8  = TX_buffer[8];
				    TBSR9  = TX_buffer[9];
				    TBSR10 = TX_buffer[10];
				    TBSR11 = TX_buffer[11];
				    TBSR12  = TX_buffer[12];
					CMR = 0x01;	
Delay(100);
Delay(100);

				 
}

void CAN_RXD( void )
{//接收数据函数,在中断服务程序中调用

    uchar data Judge;
Delay(100);
Delay(100);
    Judge=SR;
if(!(Judge&0x20))
{
 if(!(Judge&0x10))
  { 
if(Judge&0x01)
    {

        RX_buffer[0] =  RBSR;
        RX_buffer[1] =  RBSR1;
        RX_buffer[2] =  RBSR2;
        RX_buffer[3] =  RBSR3;
        RX_buffer[4] =  RBSR4;
        RX_buffer[5] =  RBSR5;
        RX_buffer[6] =  RBSR6;
        RX_buffer[7] =  RBSR7;
        RX_buffer[8] =  RBSR8;
        RX_buffer[9] =  RBSR9;
        RX_buffer[10] =  RBSR10;
        RX_buffer[11] =  RBSR11;
        RX_buffer[12] =  RBSR12;
        CMR=0x04;	//释放接收缓冲器
        Judge = ALC;//释放仲裁随时捕捉寄存器
        Judge = ECC;//释放错误代码捕捉寄存器
LCD_Clear(); 
LCD_Write_Chinese(0,0,4); 
LCD_Write_Chinese(2,0,5); 
LCD_Write_Chinese(4,0,6); 
LCD_Write_Chinese(6,0,7); 
LCD_Write_Chinese(8,0,8);
LCD_Write_Charater(4,2,RX_buffer[5]);
       Delay(60000);
LCD_Clear(); 

}    
}
}
}

⌨️ 快捷键说明

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