[求助]關于用CH375S控制佳能打印機BJC-85

各位大蝦幫幫小弟吧,有誰做過類似項目的能否幫幫我: 我所使用的打印機是佳能的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ā)出去的控制命令,也不說石沉大海一般,打印機的噴頭好象是在運動,但就是不打印。

不知道各位大蝦有何意見?不甚感激

可以不可以讓我看下send_data()程序啊?


send_data()也是用的是ch375prt.c中的程序,既然你想看看,那我也就貼出來吧。

void send_data( unsigned short len, unsigned char *buf ) { /* 主機發(fā)送數(shù)據(jù)塊,一次最多64KB */ unsigned char l, s; while( len ) { /* 連續(xù)輸出數(shù)據(jù)塊給USB打印機 */ toggle_send( tog_send ); /* 數(shù)據(jù)同步 */ l = len>endp_out_size?endp_out_size:len; /* 單次發(fā)送不能超過端點尺寸 */ wr_usb_data( l, buf ); /* 將數(shù)據(jù)先復制到CH375芯片中 */ s = issue_token( ( endp_out_addr << 4 ) | DEF_USB_PID_OUT ); /* 請求CH375輸出數(shù)據(jù) */ if ( s==USB_INT_SUCCESS ) { /* CH375成功發(fā)出數(shù)據(jù) */ tog_send = ~ tog_send; /* 切換DATA0和DATA1進行數(shù)據(jù)同步 */ len-=l; /* 計數(shù) */ buf+=l; /* 操作成功 */ ShowChar(1,220,"sent sucessful",1); } else if ( s==USB_INT_RET_NAK ) { ShowChar(1,220,"printer busy",1); /* USB打印機正忙,如果未執(zhí)行SET_RETRY命令則CH375自動重試,所以不會返回USB_INT_RET_NAK狀態(tài) */ /* USB打印機正忙,正常情況下應該稍后重試 */ /* s=get_port_status( ); 如果有必要,可以檢查是什么原因?qū)е麓蛴C忙 */ } else { /* 操作失敗,正常情況下不會失敗 */ ShowChar(1,220,"sent failure",1); clr_stall( endp_out_addr ); /* 清除打印機的數(shù)據(jù)接收端點,或者 soft_reset_print() */ /* soft_reset_print(); 打印機出現(xiàn)意外錯誤,軟復位 */ tog_send = 0; /* 操作失敗 */ } //Watchdog(); /* 如果數(shù)據(jù)量較大,可以定期調(diào)用get_port_status()檢查打印機狀態(tài) */ } }

感謝關注!


你的程序在第一個發(fā)送的數(shù)據(jù)也就是send_data( 2, InitByte ); 發(fā)送初始化命令; 這個在USB打印機中是不需要的,因為你上面的init_print()已經(jīng)進行枚舉初始化了,就不需要在加上send_data( 2, InitByte );了


我按照你說的,把這個send_data(2,InitByte)去掉了,也沒有打印。是不是還得加上一些指令呢?


首先你要知道你寫的打印機的語言對不對,如果不對的話打印機沒辦法識別.也就沒辦法打印了啊~~


這個打印語言是正確的,因為我用上面并口的程序在這臺打印機上已經(jīng)成功打印了123出來。但到了USB的話,會不會還要額外添加什么命令呢?


USB打印機和并口打印機命令是一樣的嗎?


USB的數(shù)據(jù)打印格式應該不同于并口的吧,把并口的照搬過來應該不對


USB的數(shù)據(jù)打印格式和并口不一樣???我想只是發(fā)送命令的方式不同而且已啊,一個是通過USB,一個是通過并口,命令怎么會不一樣呢?哪位大蝦遇到過這樣的情況呢?


感謝各位大蝦的幫助,小弟終于調(diào)試出來了?,F(xiàn)在得出的結論如下: 1.USB的打印命令和在并口下的打印命令是一樣的 2.ch375prt.c的結構定義中有點問題,所以才導致我調(diào)試了很久未果,一定要用新的ch375prt.c 3.在調(diào)試USB方面的東東時,可以使用bus hound來幫助,可以先將命令通過bus hound直接發(fā)過去,如果能行,那么說明你的命令是沒有問題的,如果有問題,肯定是在375上。

現(xiàn)在我還要做CH375驅(qū)動EPSON 的C67,歡迎大家相互交流


好!值得借鑒


大哥,我現(xiàn)在也很想做一個USB驅(qū)動打印機的程序,不過是用單片機做的,能不能向你請教一下啊?


我正在做單片機驅(qū)動打印機的項目,能幫我一下嗎?我的email:個人信息保護,已隱藏


suntop你能告訴我你的郵箱嗎?


我也正在做單片機驅(qū)動打印機的項目,能幫我一下嗎?我的email:個人信息保護,已隱藏


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频