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

📄 can

📁 can通信源码
💻
📖 第 1 页 / 共 2 页
字号:
#include <reg51.h>
#include <intrins.h>
#include <can_def.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;
u8 nop; 
#define nop() nop++ 
unsigned char k,j,u,a,b,c,d,e,f,shi1,shi2,jia1,biaoshi; 
int jian1=4;
void CAN_init( void ); // 初始化CAN总线芯片
void CAN_TXD( void );//CAN发送子函数
void CAN_RXD(void);
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;
/////////////////////////////////////////////

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;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
u8 code Chinese_table[]= 
{ 
/*--  文字0:  温  --*/ 
/*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=17x16   --*/ 

0x08,0x84,0x61,0x0E,0x00,0x7E,0x52,0x52,0x52,0x52,0x52,0x7E,0x00,0x00,0x00,0x00,
0x40,0x7F,0x80,0x02,0xFE,0x82,0x82,0xFE,0x82,0x82,0xFE,0x82,0x82,0xFE,0x02,0x00,

/*--  文字1:  度  --*/ 
/*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=17x16   --*/ 
0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00,
/*--  文字2:  湿  --*/ 
/*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=17x16   --*/ 
0x08,0x06,0x40,0x33,0x00,0x00,0x7C,0x54,0x55,0x54,0x55,0x54,0x7C,0x00,0x00,0x00,
0x10,0x10,0x7F,0x80,0x02,0x42,0x32,0x02,0xFE,0x02,0xFE,0x12,0x22,0x42,0x02,0x00,
/*--  文字3:  度  --*/ 
/*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=17x16   --*/ 
0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00,
/*--  文字4:  光  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x02,0x42,0x22,0x3A,0x13,0x02,0xFE,0x02,0x03,0x0A,0x72,0x22,0x06,0x02,0x00,
0x00,0x01,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0xFC,0x02,0x02,0x02,0x02,0x1E,0x00,

/*--  文字5:  照  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x7F,0x44,0x44,0x7F,0x02,0x84,0x8B,0xF2,0x82,0x8A,0x86,0xFB,0x00,0x00,
0x02,0x06,0xDC,0x80,0x90,0xCC,0x06,0x00,0xF0,0x4C,0x46,0x40,0x50,0xEC,0x06,0x00,

/*--  文字6:  等  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x09,0x11,0xE5,0x45,0x65,0x5D,0x45,0x1F,0xE5,0x45,0x65,0x5D,0x45,0x41,0x01,0x00,
0x00,0x20,0x20,0x20,0x20,0x30,0x2C,0x20,0x22,0x21,0xFE,0x20,0x20,0x20,0x00,0x00,

/*--  文字7:  级  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x04,0x0C,0x35,0xC6,0x04,0x18,0x40,0x41,0x7E,0x41,0x42,0x4E,0x72,0x03,0x02,0x00,
0x08,0xC8,0x88,0x92,0x94,0x89,0x31,0xC2,0x02,0xC4,0x28,0x18,0x66,0x83,0x02,0x00,
/*--  文字8:  为  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x08,0x08,0x48,0x28,0x38,0x08,0x0F,0xF9,0x08,0x08,0x08,0x08,0x1F,0x08,0x00,
0x00,0x00,0x02,0x04,0x08,0x10,0x60,0x80,0x00,0x88,0x64,0x02,0x04,0xF8,0x00,0x00,
/*--  文字9:  已  --*/
/*--  宋体9;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x47,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3C,0x08,0x00,

/*--  文字:  发  --*/
/*--  宋体10;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x08,0x7C,0x08,0x08,0x0F,0xF9,0x09,0x09,0x49,0x29,0x38,0x08,0x08,0x08,0x00,
0x02,0x04,0x08,0x11,0xE1,0x82,0x62,0x14,0x08,0x14,0xE4,0x02,0x03,0x02,0x00,0x00,

/*--  文字:  送  --*/
/*--  宋体11;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x82,0x63,0x00,0x02,0x12,0x92,0x72,0x1F,0x32,0xD2,0x12,0x12,0x02,0x00,0x00,
0x02,0x04,0xF8,0x04,0x02,0x12,0x22,0xC2,0x02,0x82,0x42,0x32,0x02,0x02,0x02,0x00,
/*--  文字:  和  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x24,0x24,0x25,0x3F,0x44,0x44,0x44,0x00,0x1F,0x10,0x10,0x10,0x1F,0x00,0x00,
0x08,0x10,0x60,0x80,0xFF,0x80,0x70,0x20,0x00,0xFC,0x08,0x08,0x08,0xFC,0x00,0x00
};
/*  数字 0~9   */
u8 code charater_table[]=
{
 0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,
 0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
 0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,
 0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00,
 0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00,
 0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00,
 0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00,
 0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,
 0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,
 0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00,
 0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
 0x18,0x10,0x10,0x1F,0x10,0x10,0x18,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,0x00
}; 




///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
//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) 
{ 
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) 
{ 
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);// 横 
} 

///////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////// 
//LCD_Clear: LCD清屏函数 
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)
{
 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);// 列,页  

⌨️ 快捷键说明

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