各位大虾帮帮小弟吧,有谁做过类似项目的能否帮帮我: 我所使用的打印机是佳能的BJC-55,这个打印机既有并口,又有USB接口,去年我曾通过并口顺利的打印出了数据,但现在改成USB后,无法打印。
去年通过并口打印的程序如下所示:
/*并口发送数据*/
void SendChar(unsigned char character) { BUSY=1; while (BUSY==1) ; STROBE=1; //Delay(2); PrintPort=character; // Delay(2); STROBE=0; Delay(2); STROBE=1; } //一个测试打印的程序,在主程序中调用
unsigned char code InitByte[2]={0x1b,0x40}; void testprint() { unsigned char i; for (i=0;i<2;i++) SendChar(InitByte[i]);//打印机初始化的命令 SendChar(0x1b);//这条语句及下条语句的作用我忘了 SendChar(0x54);
SendChar(0x31);//打印数字1 SendChar(0x32);//打印数字2 SendChar(0x33);//打印数字3 SendChar(0x0c);//打印结束的命令
} 这款打印机基本上还是采用的是ESC指令,但和EPSON的还是有一点区别。通过这个testprint,就可以打印出123出来,但我将这部分程序移植到USB程序时,却没能打印出来,USB的程序如下所示(关于USB的程序都是采用贵公司ch375prt.c中的程序):
unsigned char sss;
unsigned char m[2];
unsigned char code InitByte[2]={0x1b,0x40};
sss=set_usb_mode( 7 ); /* 复位USB设备,CH375向USB信号线的D+和D-输出低电平 */ if (sss==1) ShowChar(1,220,"reset true",1);//如果复位正常,则在液晶上显示reset true else ShowChar(1,220,"reset false",1); //如果复位不正常,则在液晶上显示reset false Delay( 10 ); /* 复位时间不少于1mS,建议为10mS */ sss=set_usb_mode( 6 ); /* 结束复位 */ if (sss==1) ShowChar(1,220,"host true",1);//如果设置主机方式成功,则在液晶上显示host true else ShowChar(1,220,"host false",1);//如果设置主机方式失败,则在液晶上显示host false Delay( 100 );
while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待复位之后的设备端再次连接上来 */ Delay( 200 ); sss=init_print(); //soft_reset_print(); //不管有没有此函数,都不打印,而且如果加上此函数,去掉下一行的初始化命令,也没有打印 send_data( 2, InitByte ); //象并口一样,发送初始化命令
m[0]=0x1b;
m[1]=0x54;
send_data(2, m);//象并口一样,在发送完初始化命令后,发送0x1b,0x54 m[0]=0x31; m[1]=0x32; send_data(2, m);//准备打印数字1和2 m[0]=0x0c;
send_data(1,m);//发送打印结束命令
此程序在运行后,到init_print语句都一切正常,说明单片机的数据已经通过375到达了打印机,但打印机就是不能打印,只能听到打印机发出声音,而且在从打印机的指示灯不停的闪烁来看,确实也收到了数据(或命令),但打印纸就是一动也不动。我估计硬件上应该没什么问题了,毕竟通过液晶,我能看到从375返回的数据表明都操作成功了,但对于发出去的控制命令,也不说石沉大海一般,打印机的喷头好象是在运动,但就是不打印。
不知道各位大虾有何意见?不甚感激