?? display.c
字號:
} }}//DrawCircle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 填充圓形.// 描述: 在屏幕指定區域填充一個圓形.//// [參數表]// x, y: 圓心坐標.// radius: 半徑.// color1: 邊框顏色.// color2: 填充顏色.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void FillCircle(WORD x,WORD y,WORD radius,WORD color1,WORD color2){ int i; Circle(x, y, radius, color1); // 畫邊框 for( i=radius-1; i>=0; i-- ) // 填充 Circle(x,y,i,color2); }//FillCircle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 畫矩形.// 描述: 在屏幕指定區域畫矩形.//// [參數表]// x1, y1: 左上角坐標.// x2, y2: 右下角坐標.// color: 邊框顏色.// cType: 邊框線型.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void Rectangle(WORD x1,WORD y1,WORD x2,WORD y2,WORD color,BYTE cType){ Line(x1,y1,x2,y1,color,cType); Line(x2,y1,x2,y2,color,cType); Line(x1,y2,x2,y2,color,cType); Line(x1,y1,x1,y2,color,cType);}//Rectangle()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 區域反白.// 描述: 將指定矩形區域反白顯示.//// [參數表]// x1, y1: 左上角坐標.// x2, y2: 右下角坐標.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ReverseBlock(WORD x1,WORD y1,WORD x2,WORD y2){ int i,j; for(i=x1;i<=x2;i++) for(j=y1;j<=y2;j++) ReversePutPixel(i,j);}//ReverseBlock()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 恢復區域顯示.// 描述: 從內存中讀出儲存的屏幕數據, 恢復指定區域的顯示.//// [參數表]// x, y: 需要恢復區域的左上角坐標.// width: 區域寬度.// height: 區域高度.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void RestoreArea(WORD x,WORD y,WORD width,WORD height){ WORD i; int addr; if(x==0 && width==SCREEN_WIDTH) { addr = GetAddress(x,y); // 顯存偏移地址; memcpy_four((int *)addr,(int *)(SDRAM_ADDR_LCDBACK+(y)*SCREEN_WIDTH*2+(x)*2),width*height*2); return; } width *= 2; // 每個pos要寫一個WORD width = width + 2*(x%2); x = 2*(x/2); for(i=0; i<height; i++) { addr = GetAddress(x,i+y); // 顯存偏移地址; memcpy_four((int *)addr,(int *)(SDRAM_ADDR_LCDBACK+(y+i)*SCREEN_WIDTH*2+(x)*2),width); }}//RestoreArea()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 恢復鍵盤顯示之前狀態.//// [參數表]// x, y: 需要恢復區域的左上角坐標.// width: 區域寬度.// height: 區域高度.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//恢復鍵盤顯示之前狀態void ReKeyBoradBefor(WORD x,WORD y,WORD width,WORD height){ WORD i; int addr; width *= 2; // 每個pos要寫一個WORD width = width + 2*(x%2); x = 2*(x/2); for(i=0;i<height;i++) { addr = GetAddress(x,i+y); // 顯存偏移地址; memcpy_four((int *)addr,(int *)(SAVE_CURR_SCREEN+(y+i)*SCREEN_WIDTH*2+(x)*2),width); }}//ReKeyBoradBefor()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 反色顯示所按的按鍵.//// [參數表]// cx1, cy1: 按鍵的左上角坐標.// cx2, cy2: 按鍵的右下角坐標.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowTouched(WORD cx1,WORD cy1,WORD cx2,WORD cy2){ ReverseBlock(cx1,cy1,cx2,cy2); udelay(100000); ReverseBlock(cx1,cy1,cx2,cy2);}//ShowTouched()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 顯示數字.// 描述: 定長顯示數字, 長度不夠則補空格.//// [參數表]// data: 需要顯示的數值.// dot: 小數點位.// cDigital: 指定位數.// xx, yy: 左上角坐標.// fColor: 前景顏色.// bColor: 背景顏色.// fontSize: 字體大小.//// 注: 如果data位數超出指定的cDigital,顯示為#.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void NumberDisplay (int data,BYTE dot,BYTE cDigital,WORD xx,WORD yy,WORD fColor,int bColor,BYTE fontSize){ int i,j=1; char buf[SCREEN_WIDTH/8 + 2],format[SCREEN_WIDTH/8 + 2]; int x=abs(data); WORD cCharSize,VSize ; VSize = 16; GetCharSize(fontSize,(WORD *)&cCharSize,(WORD *)&VSize); if( dot == 0 ) sprintf(buf," %10d",data); // 如果出現亂碼,調整顯示寬度 else { //帶小數點的顯示,分成整數與小數來顯示 j = 1; for(i=0;i<dot;i++) j *= 10; if( data<0 ) sprintf(format," -%%d.%%0%dd",dot); else sprintf(format," %%d.%%0%dd",dot); sprintf(buf,format,x/j,x%j); } //判斷實際數據是否超過設定的最大長度。如果超出則顯示#### i = strlen(buf)- cDigital; for(j=0;j<i;j++) { if(( buf[j] != ' ') && (buf[j] != '0')) { for(j=0; j<strlen(buf);j++) buf[j] = '#'; break; } } RestoreArea(xx,yy,cDigital*cCharSize,VSize); ShowString(buf+i,xx,yy,fColor,NO_BACK_COLOR,fontSize);}//NumberDisplay()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 顯示浮點數.// 描述: 在指定位置,按指定小數位數顯示一個浮點數.//// [參數表]// data: 需要顯示的數值.// dot: 小數點位.// cDigital: 指定位數.// xx, yy: 左上角坐標.// fColor: 前景顏色.// bColor: 背景顏色.// direct: 對齊方式. 0-靠左對齊; 1-靠右對齊.// cfont: 字號.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void DispFloat(int data, WORD dot,WORD digital, WORD x, WORD y, WORD fColor, WORD bColor,BYTE direct,BYTE cfont){ int i, j,sym; char format[SCREEN_WIDTH/8 + 2],buf[SCREEN_WIDTH/8 + 2]; if(data == 0) sym = 1; else sym = abs(data)/data;//符號位 if(dot==0) //整數直接顯示 sprintf(buf,"%d",data); else //浮點數按要求的小數位數顯示 { j = 1; for(i=0;i<dot;i++) j*=10; if(sym > 0) sprintf(format,"%%d.%%0%dd",dot); else sprintf(format,"-%%d.%%0%dd",dot); sprintf(buf,format,abs(data/j),abs(data%j)); } if( direct == 0 )//靠左顯示 ShowString(buf,x,y,fColor,bColor,cfont); else //靠右顯示 ShowString_back(buf,x,y,fColor,bColor,cfont);}//DispFloat()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 保存屏幕.// 描述: 保存當前全屏屏幕數據.//// [參數表]// SaveAddr: 存儲屏幕數據的存儲區起始地址.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void SaveCurrScreen (DWORD SaveAddr){ memcpy_four((int *)SaveAddr,(int *)(SCREEN_ADDR + 0x100000 -NotUseViewmem),SCREEN_WIDTH*SCREEN_HEIGHT*2);}//SaveCurrScreen()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 恢復屏幕.// 描述: 從存儲區讀出全屏數據, 恢復屏幕.//// [參數表]// SaveAddr: 存儲屏幕數據的存儲區起始地址.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void RestoreScreen(DWORD SaveAddr){ memcpy_four((int *)(SCREEN_ADDR + 0x100000 -NotUseViewmem),(int *)SaveAddr,SCREEN_WIDTH*SCREEN_HEIGHT*2);}//RestoreScreen()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 靠右顯示字符串.// 描述: 靠右對齊顯示字符串(含中文和英文).//// [參數表]// s: 字符串首地址.// x, y: 顯示區右上角的坐標.// fcolor: 前景(字體)顏色.// bcolor: 背景顏色.// cfont: 字號.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowString_back(char *s,WORD x,WORD y,WORD fColor,WORD bColor,BYTE cfont){ WORD j; j = strlen(s); x = x-j*12; ShowString(s,x,y,fColor,bColor,cfont);}//ShowString_back()//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 函數: 顯示字符串外加方框.//// [參數表]// msg: 字符串起始地址.// x, y: 顯示框左上角坐標.// cleft: 字符串左、右邊距.// cTop: 字符串上、下邊距.// cfontSize: 字號大小.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void ShowStringAndBox(char *msg,WORD x,WORD y,int fcolor,int bcolor,BYTE cLeft,BYTE cTop,BYTE cfontSize){ BYTE bLen,cCharSize,cCharHeight; WORD wTotalLens; switch( cfontSize ) // 根據字號選擇字符尺寸 { case 0: // 8*16 case 1: // 16*16 cCharSize = 8; cCharHeight = 16; break; case 2: // 16*24 cCharSize = 8; cCharHeight = 24; break; case 3: // 16*32 cCharSize = 8; cCharHeight = 32; break; case 4: // 24*24 cCharSize = 12; cCharHeight = 24; break; case 5: // 32*32 cCharSize = 16; cCharHeight = 32; break; case 6: // 48*48 cCharSize = 24; cCharHeight = 48; break; default: cCharSize = 8; break; } bLen = strlen(msg); // 字符串長度 wTotalLens = x + bLen*cCharSize + 2*cLeft; // 顯示方框結束點 Rectangle(x,y,wTotalLens,y + cCharHeight + 2*cTop,fcolor,cLine); // 邊框 ShowString(msg,x + cLeft,y + cTop,fcolor,bcolor,cfontSize); // 顯示字符串}//ShowStringAndBox()//!!!!! 以下函數都是沒用的 !!!!!/*void ShowString48(char *s,WORD x,WORD y,WORD fcolor,WORD bcolor){ int i=0,j; j = strlen(s); while(i<j) { if(x + 48 > SCREEN_WIDTH) //達到屏幕右邊界 { //顯示移動到下一行 x = 0;//tmpX; y += LineHeight;//下一行+2個點 if (y + 48 > SCREEN_HEIGHT) break; } //ShowChineseChar48(s+i,x,y,fcolor,bcolor); //ShowChineseChar(s+i,x,y,fcolor,bcolor);//ShowChinese3232(s+i,x,y,fcolor,bcolor); x += 48;//48; //漢字為16*16 i += 2; }}//ShowString48*//*// 顯示16*16漢字 ******************************void ShowChinese1616(char *hz,WORD x,WORD y,WORD color,WORD bkcolor){ int i,j,hzaddr; int pos; BYTE value; //45120*288/32 //計算出漢字在字庫中的位置 //16*16(32個字節時 = 33088 + ((hz[0] - 176) * 94 + (hz[1] - 161)) * 32 //RestoreArea(x,y,16,16); pos = (33088 + ((hz[0] - 176) * 94 + (hz[1] - 161)) * 32); //加入顯示全角字符處理 if( pos < 0 ) pos =12032+ pos; hzaddr = dwChFontAddr + pos ; for(i=0;i<32;i++)//一個24*24漢字72個字節 { value = *(BYTE *)(hzaddr+i); for(j=0;j<8;j++) { if( value&0x80 ) PutPixel(x+(i%2)*8+j,y+(i/2),color);// else// PutPixel(x+(i%2)*8+j,y+(i/2),bkcolor); value <<= 1; } }}*//*void RestoreDisArea(char *s,WORD x,WORD y){ WORD wTotalLens; wTotalLens = strlen(s); wTotalLens *= 24; wTotalLens += (2*(x%2)); x = 2*(x/2); RestoreArea(x,y,wTotalLens/2,24);}*//*//數據格式:前64個字節為頭信息//圖像數據是16位色,照片都是24位色,要先轉換為16位色才能正常顯示void ShowBMP(short *bmp,short x,short y){ short i,j,width,height; char info[100]; short *dst; width = *bmp; height = *(bmp+1); printf("ShowBMP -- Width:%d,Height:%d\n",width,height); if( width < 1 || width+x > 1024 || height < 1 || height+y>768 ) { sprintf(info, "Data Error. Width=%d Height=%d\n",width,height); //video_drawstring (0, 0, info); return; } bmp += 32; //指針移動到圖像數據 dst = (short *)CONFIG_SM501_MEM_BASE; //顯存地址 for(i=0;i<height;i++) for(j=0;j<width;j++) { *(dst+i*SCREEN_WIDTH+j) = *bmp++;// *(dst+i*SCREEN_WIDTH*2+j*2+1) = *bmp++; }} // ShowBMP*//*void ShowErrData(BYTE cCmdNo){ WORD k; for( k=0;k<mapProperty.wTotalElements;k++ ) { //判斷該數據項對應的命令序號是否等于當前命令串號 if( mapProperty.MapProperty.cCommandIndex[k] == cCmdNo ) { ShowString("XXXX",GeneralButton[k].wLeft,GeneralButton[k].wTop,COLOR_BLACK,COLOR_WHITE,GeneralButton[k].cReceType/10); }//if (mapProperty.MapProperty.cCommandIndex[k] == i) }//for}*//************************出現5次以上通信不成功顯示通信故障Delayms************************//*void CommErr(void){ BYTE i; for(i = 0;i<COMMANDNUMS;i++) { if( cCommErr[i] >= 5 ) //10次通訊失敗顯示"通訊故障" { ShowErrData(i+1); cCommErr[i] = 0; ClearSystemStatus(COMMAND0_DATA); } } }//CommErr*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -