完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/********************************************************** * | | / / |----| /-------------------- * | /| / / |---| / @沐雨迎风工作室 * | / | | | | / Data:2014-3-24 * | | | | | / Project:STM32 * ----------------------/ File:Printf.c ********************************************************** *--------------------------------------------------------- * Modification history *--------------------------------------------------------- * | Date | Author | Function *--------------------------------------------------------- * 2014-3-24 Zhan Lei Create the file */ #include "Printf.h" #include #include #include #include PrintfInfo_Typedef TFT_PrintfInfo; PrintfCoord_Typedef TFT_PrintfCooed={ 0, 0, 0, 0, 240, 320 }; PrintfColor_Typedef TFT_PrintfColor={ 0x07e0, 0xf800 }; PrintfBuffer_Typedef TFT_PrintfBuffer; PrintfFont_Typedef TFT_PrintfFont={ 8, 16 }; PrintfWinFun_Typedef TFT_PrintfWinFun={ TFT_FillRect, TFT_PutChar }; void Printf_InfoInit(PrintfInfo_Typedef *pInfo, PrintfCoord_Typedef *Cooed, PrintfColor_Typedef *Color, PrintfBuffer_Typedef *Buffer, PrintfFont_Typedef *Font, PrintfWinFun_Typedef *WinFun) { pInfo->Flag=0; pInfo->Cooed=Cooed; pInfo->Color=Color; pInfo->Buffer=Buffer; pInfo->Font=Font; pInfo->WinFun=WinFun; pInfo->Cooed->x=pInfo->Cooed->x_start; pInfo->Cooed->y=pInfo->Cooed->y_start; pInfo->Buffer->WRpBuffer=0; pInfo->Buffer->RDpBuffer=0; pInfo->WinFun->ClearWin(pInfo->Cooed->x_start, pInfo->Cooed->y_start, pInfo->Cooed->x_limit, pInfo->Cooed->y_limit, pInfo->Color->BackgroundColor); } static void __WriteBuffer(PrintfInfo_Typedef *pInfo,char Data) { //-------Store in Buffer--------// pInfo->Buffer->DataBuffer[pInfo->Buffer->WRpBuffer]=Data; if(Data) { pInfo->Buffer->WRpBuffer++; if(pInfo->Buffer->WRpBuffer>=BufferSize) pInfo->Buffer->WRpBuffer=0; } } static int __PutBufferToTFT(PrintfInfo_Typedef *pInfo,int offset) { int y=pInfo->Cooed->y_start,x=pInfo->Cooed->x_start,Num=0; while(pInfo->Buffer->DataBuffer[offset]) { if(y==pInfo->Cooed->y_start) Num++; switch(pInfo->Buffer->DataBuffer[offset]) { case 'n': y+=pInfo->Font->FontHigh; break; case 'r': x = pInfo->Cooed->x_start; break; case 't': x = x + ((4-((x - pInfo->Cooed->x_start) / pInfo->Font->FontWide % 4)) * pInfo->Font->FontWide); if(x > (pInfo->Cooed->x_limit - pInfo->Font->FontWide)) { x = pInfo->Cooed->x_start; y += pInfo->Font->FontHigh; } break; default: if((pInfo->Buffer->DataBuffer[offset] >= 0x20) && (pInfo->Buffer->DataBuffer[offset] <= 0x7e)) { pInfo->WinFun->PutChar(x,y,pInfo->Buffer->DataBuffer[offset],pInfo->Color->FontColor,0); x += pInfo->Font->FontWide; if(x > (pInfo->Cooed->x_limit - pInfo->Font->FontWide)) { x = pInfo->Cooed->x_start; y += pInfo->Font->FontHigh; } } else { pInfo->WinFun->PutChar(x,y,'?',pInfo->Color->FontColor,0); x += pInfo->Font->FontWide; if(x > (pInfo->Cooed->x_limit - pInfo->Font->FontWide)) { x = pInfo->Cooed->x_start; y += pInfo->Font->FontHigh; } } break; } offset++; if(offset>=BufferSize) offset=0; } pInfo->Cooed->x = x; return Num; } void Printf_putstr(PrintfInfo_Typedef *pInfo,char *pBuf) { while(*pBuf!=' |