各位大蝦幫幫小弟吧,有誰做過類似項目的能否幫幫我: 我所使用的打印機是佳能的BJC-55,這個打印機既有并口,又有USB接口,去年我曾通過并口順利的打印出了數(shù)據(jù),但現(xiàn)在改成USB后,無法打印。
去年通過并口打印的程序如下所示:
/*并口發(fā)送數(shù)據(jù)*/
void SendChar(unsigned char character) { BUSY=1; while (BUSY==1) ; STROBE=1; //Delay(2); PrintPort=character; // Delay(2); STROBE=0; Delay(2); STROBE=1; } //一個測試打印的程序,在主程序中調(diào)用
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);//打印數(shù)字1 SendChar(0x32);//打印數(shù)字2 SendChar(0x33);//打印數(shù)字3 SendChar(0x0c);//打印結束的命令
} 這款打印機基本上還是采用的是ESC指令,但和EPSON的還是有一點區(qū)別。通過這個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(); //不管有沒有此函數(shù),都不打印,而且如果加上此函數(shù),去掉下一行的初始化命令,也沒有打印 send_data( 2, InitByte ); //象并口一樣,發(fā)送初始化命令
m[0]=0x1b;
m[1]=0x54;
send_data(2, m);//象并口一樣,在發(fā)送完初始化命令后,發(fā)送0x1b,0x54 m[0]=0x31; m[1]=0x32; send_data(2, m);//準備打印數(shù)字1和2 m[0]=0x0c;
send_data(1,m);//發(fā)送打印結束命令
此程序在運行后,到init_print語句都一切正常,說明單片機的數(shù)據(jù)已經(jīng)通過375到達了打印機,但打印機就是不能打印,只能聽到打印機發(fā)出聲音,而且在從打印機的指示燈不停的閃爍來看,確實也收到了數(shù)據(jù)(或命令),但打印紙就是一動也不動。我估計硬件上應該沒什么問題了,畢竟通過液晶,我能看到從375返回的數(shù)據(jù)表明都操作成功了,但對于發(fā)出去的控制命令,也不說石沉大海一般,打印機的噴頭好象是在運動,但就是不打印。
不知道各位大蝦有何意見?不甚感激