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

📄 can

📁 can通信源码
💻
字号:
#include <reg51.h>
#include <intrins.h>

typedef unsigned char U8; 
typedef unsigned int U16; 
#define uchar unsigned char
#define uint unsigned int
#define u8  unsigned char 
#define u16 unsigned int 
u8 sg,sd,fg,fd,count,g,h,i,z,ab;
u8 nop; 
#define nop() nop++ 
unsigned char k,j,u,a,b,c,d,e,f,shi1,shi2,jia1,biaoshi; 

sbit    RST = P2^3;  //芯片复位     0有效 
sbit    SCE = P2^0;  //芯片使能 0有效 
sbit    D_C = P2^2;  //模式选择     1写数据   0写指令 
sbit    DIN = P2^1;  //串行数据线 数据类型---8位 
sbit    SCK = P2^4;  //串行时钟线   上升沿有效 
sbit p11=P1^1;
sbit p13=P1^3;
sbit P2_0=P1^0;
sbit p12=P1^2;
sbit p14=P1^4;
sbit p15=P1^5;

U8 U8FLAG;
U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;



///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
//delay_1ms: 大约延时1ms 
void delay_1ms(void)//1ms延时函数 
{ 
u16 i; 
for (i=0;i<500;i++) 
{ 
; 
} 

} 






///////////////////////////////////////////////////////////// /////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////// 
//LCD_Write_Byte: 写数据或命令到LCD 
//输入参数:u8 Data_or_Command:要写入的数据或命令; 
// u8 D_or_C  :1 写数据/ 0 写命令 

void LCD_Write_Byte(u8 Data_or_Command,u8 D_or_C) //写命令到LCD

{ 
u8 i;  
SCE=0;//选择芯片 
D_C=D_or_C;// 数据? 命令? 
for(i=0;i<8;i++)//写 
{  
if(0x80==(Data_or_Command&0x80)) //判断最高位是否为一

{ 
DIN=1; 
} 
else 
{ 
DIN=0; 
} 


Data_or_Command<<=1;//移位 

//造个上升沿 
SCK=0; 
nop(); 
nop(); 
nop(); 
nop(); 
SCK=1;  
} 
//回复到安全状态 保险 
D_C=1; 
SCE=1; 
DIN=1; 
} 
/////////////////////////////////////////////////////////////////////////////////////////
void LCD_Write_Byte2(u8 Data_or_Command,u8 D_or_C)   //写数据到LCD
{ 
u8 i;  
SCE=0;//选择芯片 
D_C=D_or_C;// 数据? 命令? 
for(i=0;i<8;i++)//写 
{  
if(0x01==(Data_or_Command&0x01)) //判断最低位是否为一
{ 
DIN=1; 
} 
else 
{ 
DIN=0; 
} 


Data_or_Command>>=1;//移位 

//造个上升沿 
SCK=0; 
nop(); 
nop(); 
nop(); 
nop(); 
SCK=1;  
} 
//回复到安全状态 保险 
D_C=1; 
SCE=1; 
DIN=1; 
} 




/////////////////////////////////////////////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////////////////////////////////// 
//LCD_init: LCD初始化 
void LCD_init(void) 
{ 
RST=0;   
   delay_1ms(); 
   RST=1; 
delay_1ms();   
LCD_Write_Byte(0x21,0);//初始化Lcd,功能设定使用扩充指令 
LCD_Write_Byte(0xd0,0);//设定液晶偏置电压 
LCD_Write_Byte(0x20,0);//使用基本指令 水平寻址 

//LCD_Write_Byte(0x0C,0);//设定显示模式,正常显示 
LCD_Write_Byte(0x0D,0);  //设定显示模式,反白显示 
} 

///////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////// 
//LCD_Set_XY: 设置LCD坐标函数 用于准备显示高度是‘8个点’的汉字或字母 
//输入参数:X:0-83  Y:0-5 
void LCD_Set_XY(u8 X, u8 Y) 
{ 
LCD_Write_Byte(0x40 | Y, 0);// 竖 
LCD_Write_Byte(0x80 | X, 0);// 横 
} 

///////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////// 

void LCD_Clear(void) 
{ 
u8 x; 
u8 y; 
LCD_Set_XY(0,0); 

for(y=0;y<=5;y++) 
{  
for(x=0;x<=83;x++) 
{  
LCD_Write_Byte(0x00,1); 
}  
} 
}  



///////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////// 
//LCD_Write_ABC: 显示8(宽)*16(高)点阵列数字字母符号等半角类 
//输入参数: x: 
// y: 
// ABC:显示的字符的序号 


///////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////// 
//LCD_Write_Chinese: 显示16(宽)*16(高)点阵列汉字等半角类 
//输入参数: 
// x: 
// y: 
// Chinese:显示的汉字的序号
void LCD_Write_Charater(u8 x,u8 y,u8 charater) //x的范围为0到9;y的范围为0到4
{
 unsigned char i;
 LCD_Set_XY(x*8,y);
 for(i=0;i<8;i++)
 {
  LCD_Write_Byte2(charater_table[charater*16+i],1); 
 }
  LCD_Set_XY(x*8, y+1);// 列,页  
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 Delay(U16 j)
{
U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}


///////////////////////////////////////////
void Delay_10us(void)
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
//////////////////////////////////////////////
void COM(void)
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!P2_0)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(P2_0)U8temp=1;
U8FLAG=2;
while((P2_0)&&U8FLAG++);
if(U8FLAG==1)break;

U8comdata<<=1;
U8comdata|=U8temp; 
}
}
/////////////////////////////////////////////

void RH(void)
{
P2_0=0;
Delay(180);
P2_0=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
P2_0=1;
if(!P2_0) 
{while((!P2_0)&&U8FLAG++);
U8FLAG=2;

while((P2_0)&&U8FLAG++);

COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
P2_0=1;

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
}
}
void main()
{
LCD_init();
LCD_Clear();
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);
while(1) 
  {RH();
for(u=0;u<256;u++)
    {
 if(u=U8RH_data_H)
       {
    d=u/100;
    e=u/10;
    f=u%10;
        }
LCD_Write_Charater(5,2,d);
LCD_Write_Charater(6,2,e);
LCD_Write_Charater(7,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(5,0,a);
LCD_Write_Charater(6,0,b);
LCD_Write_Charater(7,0,c);
break;
   }
  }
}

⌨️ 快捷键说明

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