[求助]關(guān)于用CH375S控制佳能打印機(jī)BJC-85

各位大蝦幫幫小弟吧,有誰(shuí)做過(guò)類(lèi)似項(xiàng)目的能否幫幫我: 我所使用的打印機(jī)是佳能的BJC-55,這個(gè)打印機(jī)既有并口,又有USB接口,去年我曾通過(guò)并口順利的打印出了數(shù)據(jù),但現(xiàn)在改成USB后,無(wú)法打印。

去年通過(guò)并口打印的程序如下所示:

/*并口發(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; } //一個(gè)測(cè)試打印的程序,在主程序中調(diào)用

unsigned char code InitByte[2]={0x1b,0x40}; void testprint() { unsigned char i; for (i=0;i<2;i++) SendChar(InitByte[i]);//打印機(jī)初始化的命令 SendChar(0x1b);//這條語(yǔ)句及下條語(yǔ)句的作用我忘了 SendChar(0x54);

SendChar(0x31);//打印數(shù)字1 SendChar(0x32);//打印數(shù)字2 SendChar(0x33);//打印數(shù)字3 SendChar(0x0c);//打印結(jié)束的命令

} 這款打印機(jī)基本上還是采用的是ESC指令,但和EPSON的還是有一點(diǎn)區(qū)別。通過(guò)這個(gè)testprint,就可以打印出123出來(lái),但我將這部分程序移植到USB程序時(shí),卻沒(méi)能打印出來(lái),USB的程序如下所示(關(guān)于USB的程序都是采用貴公司ch375prt.c中的程序):

unsigned char sss;

unsigned char m[2];

unsigned char code InitByte[2]={0x1b,0x40};

sss=set_usb_mode( 7 ); /* 復(fù)位USB設(shè)備,CH375向USB信號(hào)線的D+和D-輸出低電平 */ if (sss==1) ShowChar(1,220,"reset true",1);//如果復(fù)位正常,則在液晶上顯示reset true else ShowChar(1,220,"reset false",1); //如果復(fù)位不正常,則在液晶上顯示reset false Delay( 10 ); /* 復(fù)位時(shí)間不少于1mS,建議為10mS */ sss=set_usb_mode( 6 ); /* 結(jié)束復(fù)位 */ if (sss==1) ShowChar(1,220,"host true",1);//如果設(shè)置主機(jī)方式成功,則在液晶上顯示host true else ShowChar(1,220,"host false",1);//如果設(shè)置主機(jī)方式失敗,則在液晶上顯示host false Delay( 100 );

while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待復(fù)位之后的設(shè)備端再次連接上來(lái) */ Delay( 200 ); sss=init_print(); //soft_reset_print(); //不管有沒(méi)有此函數(shù),都不打印,而且如果加上此函數(shù),去掉下一行的初始化命令,也沒(méi)有打印 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);//準(zhǔn)備打印數(shù)字1和2 m[0]=0x0c;

send_data(1,m);//發(fā)送打印結(jié)束命令

此程序在運(yùn)行后,到init_print語(yǔ)句都一切正常,說(shuō)明單片機(jī)的數(shù)據(jù)已經(jīng)通過(guò)375到達(dá)了打印機(jī),但打印機(jī)就是不能打印,只能聽(tīng)到打印機(jī)發(fā)出聲音,而且在從打印機(jī)的指示燈不停的閃爍來(lái)看,確實(shí)也收到了數(shù)據(jù)(或命令),但打印紙就是一動(dòng)也不動(dòng)。我估計(jì)硬件上應(yīng)該沒(méi)什么問(wèn)題了,畢竟通過(guò)液晶,我能看到從375返回的數(shù)據(jù)表明都操作成功了,但對(duì)于發(fā)出去的控制命令,也不說(shuō)石沉大海一般,打印機(jī)的噴頭好象是在運(yùn)動(dòng),但就是不打印。

不知道各位大蝦有何意見(jiàn)?不甚感激

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


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

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

感謝關(guān)注!


你的程序在第一個(gè)發(fā)送的數(shù)據(jù)也就是send_data( 2, InitByte ); 發(fā)送初始化命令; 這個(gè)在USB打印機(jī)中是不需要的,因?yàn)槟闵厦娴膇nit_print()已經(jīng)進(jìn)行枚舉初始化了,就不需要在加上send_data( 2, InitByte );了


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


首先你要知道你寫(xiě)的打印機(jī)的語(yǔ)言對(duì)不對(duì),如果不對(duì)的話打印機(jī)沒(méi)辦法識(shí)別.也就沒(méi)辦法打印了啊~~


這個(gè)打印語(yǔ)言是正確的,因?yàn)槲矣蒙厦娌⒖诘某绦蛟谶@臺(tái)打印機(jī)上已經(jīng)成功打印了123出來(lái)。但到了USB的話,會(huì)不會(huì)還要額外添加什么命令呢?


USB打印機(jī)和并口打印機(jī)命令是一樣的嗎?


USB的數(shù)據(jù)打印格式應(yīng)該不同于并口的吧,把并口的照搬過(guò)來(lái)應(yīng)該不對(duì)


USB的數(shù)據(jù)打印格式和并口不一樣?。课蚁胫皇前l(fā)送命令的方式不同而且已啊,一個(gè)是通過(guò)USB,一個(gè)是通過(guò)并口,命令怎么會(huì)不一樣呢?哪位大蝦遇到過(guò)這樣的情況呢?


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

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


好!值得借鑒


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


我正在做單片機(jī)驅(qū)動(dòng)打印機(jī)的項(xiàng)目,能幫我一下嗎?我的email:個(gè)人信息保護(hù),已隱藏


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


我也正在做單片機(jī)驅(qū)動(dòng)打印機(jī)的項(xiàng)目,能幫我一下嗎?我的email:個(gè)人信息保護(hù),已隱藏


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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