一直看到坛友发的模拟器,芯片太多不好做.
我没有自己画图,就借网友的图修改修改做个示意就好了,反正很简单.
蓝牙背光可用并可自己控制。修改了车机can的两根线用于下载程序,下载好了之后这两根又是按键背光和点火.
顺便把我自己写的程序也贡献出来好了.
当时因为数据的来源原因一直没有发布,但是现在已经在网上开始流传了,应该不能怪我头上了.
先贴我的修改好的图,就一张,和示意用的电路图,修改网友的来的.不是抄袭哈.实在是就是这么简单
这些都不重要,重要的是我的c程序.一直用到现在,证明是可靠的.
你可以随意添加适用的数据.我这只有5gg 035 185 和 34d 035 185的
当然也可以加低速的,不过程序可以参考我的,你添加低速的发送程序,
理论上可以高速低速全整合,可以通吃所有的can车机(前提车机只收不发并且你有数据)
直接贴代码加工程
#define nop _nop_()
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include<stc15f104e.h>
#include<intrins.h>
#include<erjinzhi.h>
//型号:stc15f104e 频率设定为12MHz
sbit can_l=P3^4; //输出引脚,和rx同相
sbit acc=P3^0; //点火
sbit led=P3^1; //背光
uchar time;
void delay(uint t)
{
uchar i,j;
for(;t;t--)
for(i=200;i;i--)
for(j=25;j;j--);
}
void sendcan(uint canid,uchar num,uchar dat1,uchar dat2,uchar dat3,uchar dat4,uint cancrc)
{
uchar i,j;
uchar idata loadbuf[80];
for(i=79;i;i--)loadbuf=0xff;
loadbuf[0]=0; //起始
i=1;
canid<<=5;
for(j=11;j;j--)//id
{
if(canid&0x8000)loadbuf[i++]=1;
else loadbuf[i++]=0;
canid<<=1;
}
loadbuf[i++]=0; //非远程请求
loadbuf[i++]=0; //非扩展帧
loadbuf[i++]=0; //保留位
num<<=4;
for(j=4;j;j--)//数据长度
{
if(num&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
num<<=1;
}
for(j=8;j;j--)//数据1
{
if(dat1&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat1<<=1;
}
for(j=8;j;j--)//数据2
{
if(dat2&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat2<<=1;
}
for(j=8;j;j--)//数据3
{
if(dat3&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat3<<=1;
}
for(j=8;j;j--)//数据4
{
if(dat4&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat4<<=1;
}
cancrc<<=1;
for(j=15;j;j--)//crc
{
if(cancrc&0x8000)loadbuf[i++]=1;
else loadbuf[i++]=0;
cancrc<<=1;
}
loadbuf[i++]=1;
loadbuf[i++]=0;
loadbuf[i++]=1; //结束位
j=79; //j指向底部
for(;i;)
loadbuf[j--]=loadbuf[--i];//底部对齐
num=1;
i=loadbuf[0]=0;
for(j+=2;j<80;) //重新左对齐,并逢5添码
{
if(loadbuf==loadbuf[j])
{
loadbuf[++i]=loadbuf[j];
num++;
if(num>=5)
{
num=1;
i++;
loadbuf=loadbuf[j]; //添反码
loadbuf++;
loadbuf&=0x01;
}
j++;
}
else
{
loadbuf[++i]=loadbuf[j++];
num=1;
}
}
for(i++;i<80;)loadbuf[i++]=0x01;
for(i=0;i<80;i++)
{
can_l=loadbuf;
nop;nop;nop;
}
}
void main()
{
delay(400);
for(time=10;time>0;time--)
{
delay(500);
if(acc)sendcan(0x3c0,0x4,0xa0,0xa0,0x33,0x33,0x1ceb);//开电源
else sendcan(0x3c0,0x4,0x00,0x00,0x00,0x00,0x0190);//关电源
delay(100);
if(led)sendcan(0x5f0,0x4,0xe4,0xe4,0x00,0x00,0x1efd);//开大灯
else sendcan(0x5f0,0x4,0x00,0x00,0x00,0x00,0x0391);//关大灯
}
while(1)
{
// delay(60000);time++;
if(acc)sendcan(0x3c0,0x4,0xa0,0xa0,0x33,0x33,0x1ceb);//开电源
else sendcan(0x3c0,0x4,0x00,0x00,0x00,0x00,0x0190);//关电源
delay(100);
if(led)sendcan(0x5f0,0x4,0xe4,0xe4,0x00,0x00,0x1efd);//开大灯
else sendcan(0x5f0,0x4,0x00,0x00,0x00,0x00,0x0391);//关大灯
// sendcan(0x470,0x4,0x00,0x00,0x47,0x00,0x3d5a);
// sendcan(0x470,0x4,0x00,0x00,0x00,0x00,0x769f);
// delay(100);
// sendcan(0x5f0,0x4,0xe4,0xe4,0x00,0x00,0x1efd);
// sendcan(0x5f0,0x4,0x00,0x00,0x00,0x00,0x0391);
// delay(100);
// sendcan(0x570,0x4,0x03,0x00,0x00,0x00,0x0c63);
// sendcan(0x570,0x4,0x00,0x00,0x00,0x00,0x2f6b);
// delay(100);
// sendcan(0x3c0,0x4,0xa0,0xa0,0x33,0x33,0x1ceb);
// sendcan(0x3c0,0x4,0x00,0x00,0x00,0x00,0x0190);
// delay(400);
}
}
工程: can.rar (36 K) 下载次数:4
编译好的hex文件直接在工程中.
不过要注意的是频率要选择12m.另外我为了适应适应自己的车机,重新修改到p3.4输出了。你需要重新定义编译下。
我没有自己画图,就借网友的图修改修改做个示意就好了,反正很简单.
蓝牙背光可用并可自己控制。修改了车机can的两根线用于下载程序,下载好了之后这两根又是按键背光和点火.
顺便把我自己写的程序也贡献出来好了.
当时因为数据的来源原因一直没有发布,但是现在已经在网上开始流传了,应该不能怪我头上了.
先贴我的修改好的图,就一张,和示意用的电路图,修改网友的来的.不是抄袭哈.实在是就是这么简单
这些都不重要,重要的是我的c程序.一直用到现在,证明是可靠的.
你可以随意添加适用的数据.我这只有5gg 035 185 和 34d 035 185的
当然也可以加低速的,不过程序可以参考我的,你添加低速的发送程序,
理论上可以高速低速全整合,可以通吃所有的can车机(前提车机只收不发并且你有数据)
直接贴代码加工程
#define nop _nop_()
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include<stc15f104e.h>
#include<intrins.h>
#include<erjinzhi.h>
//型号:stc15f104e 频率设定为12MHz
sbit can_l=P3^4; //输出引脚,和rx同相
sbit acc=P3^0; //点火
sbit led=P3^1; //背光
uchar time;
void delay(uint t)
{
uchar i,j;
for(;t;t--)
for(i=200;i;i--)
for(j=25;j;j--);
}
void sendcan(uint canid,uchar num,uchar dat1,uchar dat2,uchar dat3,uchar dat4,uint cancrc)
{
uchar i,j;
uchar idata loadbuf[80];
for(i=79;i;i--)loadbuf=0xff;
loadbuf[0]=0; //起始
i=1;
canid<<=5;
for(j=11;j;j--)//id
{
if(canid&0x8000)loadbuf[i++]=1;
else loadbuf[i++]=0;
canid<<=1;
}
loadbuf[i++]=0; //非远程请求
loadbuf[i++]=0; //非扩展帧
loadbuf[i++]=0; //保留位
num<<=4;
for(j=4;j;j--)//数据长度
{
if(num&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
num<<=1;
}
for(j=8;j;j--)//数据1
{
if(dat1&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat1<<=1;
}
for(j=8;j;j--)//数据2
{
if(dat2&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat2<<=1;
}
for(j=8;j;j--)//数据3
{
if(dat3&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat3<<=1;
}
for(j=8;j;j--)//数据4
{
if(dat4&0x80)loadbuf[i++]=1;
else loadbuf[i++]=0;
dat4<<=1;
}
cancrc<<=1;
for(j=15;j;j--)//crc
{
if(cancrc&0x8000)loadbuf[i++]=1;
else loadbuf[i++]=0;
cancrc<<=1;
}
loadbuf[i++]=1;
loadbuf[i++]=0;
loadbuf[i++]=1; //结束位
j=79; //j指向底部
for(;i;)
loadbuf[j--]=loadbuf[--i];//底部对齐
num=1;
i=loadbuf[0]=0;
for(j+=2;j<80;) //重新左对齐,并逢5添码
{
if(loadbuf==loadbuf[j])
{
loadbuf[++i]=loadbuf[j];
num++;
if(num>=5)
{
num=1;
i++;
loadbuf=loadbuf[j]; //添反码
loadbuf++;
loadbuf&=0x01;
}
j++;
}
else
{
loadbuf[++i]=loadbuf[j++];
num=1;
}
}
for(i++;i<80;)loadbuf[i++]=0x01;
for(i=0;i<80;i++)
{
can_l=loadbuf;
nop;nop;nop;
}
}
void main()
{
delay(400);
for(time=10;time>0;time--)
{
delay(500);
if(acc)sendcan(0x3c0,0x4,0xa0,0xa0,0x33,0x33,0x1ceb);//开电源
else sendcan(0x3c0,0x4,0x00,0x00,0x00,0x00,0x0190);//关电源
delay(100);
if(led)sendcan(0x5f0,0x4,0xe4,0xe4,0x00,0x00,0x1efd);//开大灯
else sendcan(0x5f0,0x4,0x00,0x00,0x00,0x00,0x0391);//关大灯
}
while(1)
{
// delay(60000);time++;
if(acc)sendcan(0x3c0,0x4,0xa0,0xa0,0x33,0x33,0x1ceb);//开电源
else sendcan(0x3c0,0x4,0x00,0x00,0x00,0x00,0x0190);//关电源
delay(100);
if(led)sendcan(0x5f0,0x4,0xe4,0xe4,0x00,0x00,0x1efd);//开大灯
else sendcan(0x5f0,0x4,0x00,0x00,0x00,0x00,0x0391);//关大灯
// sendcan(0x470,0x4,0x00,0x00,0x47,0x00,0x3d5a);
// sendcan(0x470,0x4,0x00,0x00,0x00,0x00,0x769f);
// delay(100);
// sendcan(0x5f0,0x4,0xe4,0xe4,0x00,0x00,0x1efd);
// sendcan(0x5f0,0x4,0x00,0x00,0x00,0x00,0x0391);
// delay(100);
// sendcan(0x570,0x4,0x03,0x00,0x00,0x00,0x0c63);
// sendcan(0x570,0x4,0x00,0x00,0x00,0x00,0x2f6b);
// delay(100);
// sendcan(0x3c0,0x4,0xa0,0xa0,0x33,0x33,0x1ceb);
// sendcan(0x3c0,0x4,0x00,0x00,0x00,0x00,0x0190);
// delay(400);
}
}
工程: can.rar (36 K) 下载次数:4
编译好的hex文件直接在工程中.
不过要注意的是频率要选择12m.另外我为了适应适应自己的车机,重新修改到p3.4输出了。你需要重新定义编译下。
[ 此帖被decai在2016-04-12 11:29重新编辑 ]