CH372 的 USB HID類鍵盤,如果響應(yīng)上位機(jī)?現(xiàn)在子程序執(zhí)行的時間比較長,很容易造成死機(jī),USB HID類鍵盤要求多長時間內(nèi)必須響應(yīng)一次?程序如下:
main( ) { unsigned char i,time,k; unsigned char real_data[11]; //需要上傳的數(shù)據(jù)緩沖區(qū)
unsigned char data_flag=0; //有無數(shù)據(jù)標(biāo)志 unsigned char idata ucsenddata[11]; unsigned char code uckeycode1[11]={ 0x62 //0 ,0x59 //1 ,0x5a //2 ,0x5b //3 ,0x5c //4 ,0x5d //5 ,0x5e //6 ,0x5f //7 ,0x60 //8 ,0x61 //9 ,0x58 //回車 };
Delay50ms( ); // 延時等待CH375初始化完成,如果單片機(jī)由CH375提供復(fù)位信號則不必延時 // //mInitSTDIO( ); CH375_Init( ); // 初始化CH375 // // EA=1;
myprogram(); // 子程序,運(yùn)行的時間可能200毫秒 up_time=0; time=0;k=0; for(i=0;i<8;i++) buf[i]=0;
while(1){ // 主程序 //
if (data_flag==0)//檢測到數(shù)據(jù)輸入,開發(fā)上傳 { real_data[0]=0x62; //0 real_data[1]=0x62; //0 real_data[2]=0x5e; //6 real_data[3]=0x5d; //5 real_data[4]=0x5b; //3 real_data[5]=0x5a; //2 real_data[6]=0x59; //1 real_data[7]=0x5a; //2 real_data[8]=0x5e; //6 real_data[9]=0x61; //9 real_data[10]=0x58; //回迭 data_flag=1; //有按鍵按下,置標(biāo)志1 //goto SEND;
//up_data( ); up_time=0; time=0;k=0; for(i=0;i<8;i++) buf[i]=0; up_data( ); data_flag=0; up_time=0; SPK_P=0; RED_LED=1; GREEN_LED=0; Delay50ms( ); Delay50ms( ); RED_LED=0; GREEN_LED=1; Delay50ms( ); Delay50ms( );
SPK_P=1; //data_flag=1; //有按鍵按下,置標(biāo)志1 //PcdHalt(); //goto SEND; }
if(CH375_INT_WIRE == 0){ mCH375Interrupt( );
if((UPDATA_FLAG==0x01)&&(k<=1)){ //先發(fā)八個字節(jié)的0包,相當(dāng)于確保按鍵的取消 for(i=0;i<8;i++) buf[i]=0; up_data( ); k++; }
else { if((UPDATA_FLAG==0x01)&&(time%2==1)){ //按鍵按下 if(up_time<=10){ // printf("%d\n",(unsigned short)up_time); buf[2]=real_data[up_time]; //發(fā)送八個字節(jié),相當(dāng)于發(fā)送1個按鍵 up_data( ); up_time++; } } else if((UPDATA_FLAG==0x01)&&(time%2==0)){ //按鍵取消 for(i=0;i<8;i++) buf[i]=0; up_data( ); } time++; }
//if(up_time==11) up_time=0; //循環(huán)上傳 if(up_time==11) { up_time=0;} //循環(huán)上傳
} } }