<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          stm32 驅(qū)動(dòng) TFT LCD

          作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
          577//清屏函數(shù)
          578//Color:要清屏的填充色
          579voidLCD_Clear(u16 Color)
          580{
          581u32 index=0;
          582LCD_SetCursor(0x00,0x0000);//設(shè)置光標(biāo)位置
          583LCD_WriteRAM_Prepare();//開始寫入GRAM
          584for(index=0;index<76800;index++)
          585{
          586LCD_WR_DATA(Color);//向每個(gè)GRAM寫入數(shù)據(jù)
          587}
          588}
          589
          590//在指定區(qū)域內(nèi)填充指定顏色
          591//區(qū)域大小:
          592// (xend-xsta)*(yend-ysta)
          593voidLCD_Fill(u8 xsta,u16 ysta,u8 xend,u16 yend,u16 color)
          594{
          595
          596#if USE_HORIZONTAL //橫屏
          597
          598u16 colortemp=POINT_COLOR;
          599u16 ytemp=ysta;
          600POINT_COLOR=color;
          601for(;xsta<=xend;xsta++)
          602{
          603for(;ysta<=yend;ysta++)LCD_DrawPoint(xsta,ysta);
          604ysta=ytemp;
          605}
          606POINT_COLOR=colortemp;
          607
          608#else //豎屏
          609
          610u32 n;
          611//設(shè)置窗口
          612LCD_WriteReg(R80, xsta);//水平方向GRAM起始地址
          613LCD_WriteReg(R81, xend);//水平方向GRAM結(jié)束地址
          614LCD_WriteReg(R82, ysta);//垂直方向GRAM起始地址
          615LCD_WriteReg(R83, yend);//垂直方向GRAM結(jié)束地址
          616LCD_SetCursor(xsta,ysta);//設(shè)置光標(biāo)位置
          617LCD_WriteRAM_Prepare();//開始寫入GRAM
          618n=(u32)(yend-ysta+1)*(xend-xsta+1);
          619while(n--){LCD_WR_DATA(color);}//顯示所填充的顏色.
          620//恢復(fù)設(shè)置
          621LCD_WriteReg(R80, 0x0000);//水平方向GRAM起始地址
          622LCD_WriteReg(R81, (LCD_WIDTH-1));//水平方向GRAM結(jié)束地址
          623LCD_WriteReg(R82, 0x0000);//垂直方向GRAM起始地址
          624LCD_WriteReg(R83, (LCD_HEIGHT-1));//垂直方向GRAM結(jié)束地址
          625
          626#endif
          627
          628}
          629
          630//畫線
          631//x1,y1:起點(diǎn)坐標(biāo)
          632//x2,y2:終點(diǎn)坐標(biāo)
          633voidLCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
          634{
          635u16 t;
          636intxerr=0,yerr=0,delta_x,delta_y,distance;
          637intincx,incy,uRow,uCol;
          638
          639delta_x=x2-x1;//計(jì)算坐標(biāo)增量
          640delta_y=y2-y1;
          641uRow=x1;
          642uCol=y1;
          643if(delta_x>0)incx=1;//設(shè)置單步方向
          644elseif(delta_x==0)incx=0;//垂直線
          645else{incx=-1;delta_x=-delta_x;}//終點(diǎn)坐標(biāo)小于起始坐標(biāo),反方向,將坐標(biāo)重新定位為正坐標(biāo)
          646if(delta_y>0)incy=1;
          647elseif(delta_y==0)incy=0;//水平線
          648else{incy=-1;delta_y=-delta_y;}//終點(diǎn)坐標(biāo)小于起始坐標(biāo),反方向,將坐標(biāo)重新定位為正坐標(biāo)
          649if( delta_x>delta_y)distance=delta_x;//選取基本增量坐標(biāo)軸
          650elsedistance=delta_y;
          651for(t=0;t<=distance+1;t++ )//畫線輸出
          652{
          653LCD_DrawPoint(uRow,uCol);//根據(jù)坐標(biāo)畫點(diǎn)
          654xerr+=delta_x ;//X坐標(biāo)增量
          655yerr+=delta_y ;//Y坐標(biāo)增量
          656if(xerr>distance)
          657{
          658xerr-=distance;
          659uRow+=incx;
          660
          661}
          662if(yerr>distance)
          663{
          664yerr-=distance;
          665uCol+=incy;
          666}
          667}
          668}
          669
          670//畫矩形
          671voidLCD_DrawRectangle(u8 x1, u16 y1, u8 x2, u16 y2)
          672{
          673LCD_DrawLine(x1,y1,x2,y1);
          674LCD_DrawLine(x1,y1,x1,y2);
          675LCD_DrawLine(x1,y2,x2,y2);
          676LCD_DrawLine(x2,y1,x2,y2);
          677}
          678
          679//在指定位置畫一個(gè)指定大小的圓
          680//(x,y):中心點(diǎn)
          681//r :半徑
          682voidDraw_Circle(u8 x0,u16 y0,u8 r)
          683{
          684inta,b;
          685intdi;
          686a=0;b=r;
          687di=3-(r<<1);//判斷下個(gè)點(diǎn)位置的標(biāo)志
          688while(a<=b)
          689{
          690LCD_DrawPoint(x0-b,y0-a);//3
          691LCD_DrawPoint(x0+b,y0-a);//0
          692LCD_DrawPoint(x0-a,y0+b);//1
          693LCD_DrawPoint(x0-b,y0-a);//7
          694LCD_DrawPoint(x0-a,y0-b);//2
          695LCD_DrawPoint(x0+b,y0+a);//4
          696LCD_DrawPoint(x0+a,y0-b);//5
          697LCD_DrawPoint(x0+a,y0+b);//6
          698LCD_DrawPoint(x0-b,y0+a);
          699
          700a++;
          701
          702//使用Bresenham算法畫圓
          703if(di<0){
          704di +=4*a+6;
          705}else{
          706di+=10+4*(a-b);
          707b--;
          708}
          709LCD_DrawPoint(x0+a,y0+b);
          710}
          711}
          712
          713//在指定位置顯示一個(gè)字符
          714//x:0~234
          715//y:0~308
          716//num:要顯示的字符:" "--->"~"
          717//size:字體大小 12/16
          718//mode:疊加方式(1)還是非疊加方式(0)
          719voidLCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode)
          720{
          721
          722#if USE_HORIZONTAL
          723
          724#define MAX_CHAR_POSX 312
          725#define MAX_CHAR_POSY 232
          726
          727u8 temp;
          728u8 pos,t;
          729u16 x0=x;
          730u16 colortemp=POINT_COLOR;
          731if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
          732//設(shè)置窗口
          733num=num- ;//得到偏移后的值
          734if(!mode)//非疊加方式
          735{
          736for(pos=0;pos
          737{
          738if(size==12)
          739temp=asc2_1206[num][pos];//調(diào)用1206字體
          740else
          741temp=asc2_1608[num][pos];//調(diào)用1608字體
          742
          743for(t=0;t
          744{
          745if(temp&0x01)
          746POINT_COLOR=colortemp;
          747else
          748POINT_COLOR=BACK_COLOR;
          749
          750LCD_DrawPoint(x,y);
          751temp>>=1;
          752x++;
          753}
          754x=x0;
          755y++;
          756}
          757}else{//疊加方式
          758for(pos=0;pos
          759{
          760if(size==12)
          761temp=asc2_1206[num][pos];//調(diào)用1206字體
          762else
          763temp=asc2_1608[num][pos];//調(diào)用1608字體
          764
          765for(t=0;t
          766{
          767if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//畫一個(gè)點(diǎn)
          768temp>>=1;
          769}
          770}
          771}
          772POINT_COLOR=colortemp;
          773
          774#else
          775#define MAX_CHAR_POSX 232
          776#define MAX_CHAR_POSY 304
          777
          778u8 temp;
          779u8 pos,t;
          780
          781if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
          782//設(shè)置窗口
          783
          784LCD_WriteReg(R80,x);//水平方向GRAM起始地址
          785LCD_WriteReg(R81,x+(size/2-1));//水平方向GRAM結(jié)束地址
          786LCD_WriteReg(R82,y);//垂直方向GRAM起始地址
          787LCD_WriteReg(R83,y+size-1);//垂直方向GRAM結(jié)束地址
          788LCD_SetCursor(x,y);//設(shè)置光標(biāo)位置
          789LCD_WriteRAM_Prepare();//開始寫入GRAM
          790num=num- ;//得到偏移后的值
          791if(!mode)//非疊加方式
          792{
          793for(pos=0;pos
          794{
          795if(size==12)
          796temp=asc2_1206[num][pos];//調(diào)用1206字體
          797else
          798temp=asc2_1608[num][pos];//調(diào)用1608字體
          799
          800for(t=0;t
          801{
          802if(temp&0x01){
          803LCD_WR_DATA(POINT_COLOR);
          804}else{
          805LCD_WR_DATA(BACK_COLOR);
          806}
          807
          808temp>>=1;
          809}
          810}
          811}else{//疊加方式
          812
          813for(pos=0;pos
          814{
          815if(size==12)
          816temp=asc2_1206[num][pos];//調(diào)用1206字體
          817else
          818temp=asc2_1608[num][pos];//調(diào)用1608字體
          819for(t=0;t
          820{
          821if(temp&0x01)
          822LCD_DrawPoint(x+t,y+pos);//畫一個(gè)點(diǎn)
          823temp>>=1;
          824}
          825}
          826}
          827//恢復(fù)窗體大小
          828LCD_WriteReg(R80, 0x0000);//水平方向GRAM起始地址
          829LCD_WriteReg(R81, (LCD_WIDTH-1));//水平方向GRAM結(jié)束地址
          830LCD_WriteReg(R82, 0x0000);//垂直方向GRAM起始地址
          831LCD_WriteReg(R83, (LCD_HEIGHT-1));//垂直方向GRAM結(jié)束地址
          832
          833#endif
          834
          835}
          836
          837//m^n函數(shù)
          838u32 mypow(u8 m,u8 n)
          839{
          840u32 result=1;
          841while(n--)result*=m;
          842returnresult;
          843}
          844
          845//顯示數(shù)字
          846//x,y :起點(diǎn)坐標(biāo)
          847//len :數(shù)字的位數(shù)
          848//size:字體大小
          849//color:顏色
          850//num:數(shù)值(0~4294967295);
          851voidLCD_ShowNum(u8 x,u16 y,u32 num,u8 len,u8 size)
          852{
          853u8 t,temp;
          854u8 enshow=0;
          855for(t=0;t
          856{
          857temp=(num/mypow(10,len-t-1))%10;
          858if(enshow==0&&t<(len-1))
          859{
          860if(temp==0)
          861{
          862LCD_ShowChar(x+(size/2)*t,y, ,size,0);
          863continue;
          864}else{
          865enshow=1;
          866}
          867}
          868LCD_ShowChar(x+(size/2)*t,y,temp+0,size,0);
          869}
          870}
          871
          872
          873//顯示字符串
          874//x,y:起點(diǎn)坐標(biāo)
          875//*p:字符串起始地址
          876//用16字體
          877voidLCD_ShowString(u8 x,u16 y,constu8 *p)
          878{
          879while(*p!=看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();