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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32學習筆記——TFT2.4彩屏顯示字符和漢字

          STM32學習筆記——TFT2.4彩屏顯示字符和漢字

          作者: 時間:2016-11-28 來源:網絡 收藏

          #else//條件編譯-8位數據模式

          voidLCD_Writ_Bus(charVH,charVL)//并行數據寫入函數

          {

          //LCD_DataPortH=VH;//八位模式都用P0口送數據

          //LCD_wr(0);

          //LCD_wr(1);

          //LCD_DataPortH=VL;//八位模式都用P0口送數據

          //LCD_wr(0);

          //LCD_wr(1);

          }

          #endif

          //參數VH,VL分別為要寫入命令的高8位和低8位

          voidLCD_Write_COM(charVH,charVL)//發(fā)送命令

          {

          LCD_rs(0);

          LCD_Writ_Bus(VH,VL);

          }

          //參數VH,VL分別為要寫入數據的高8位和低8位

          voidLCD_Write_DATA(charVH,charVL)//發(fā)送數據

          {

          LCD_rs(1);

          LCD_Writ_Bus(VH,VL);

          }

          voidPant(charVH,charVL)//涂滿全屏函數

          {

          inti,j;

          LCD_cs(0);//打開片選使能

          Address_set(0,0,239,319);//設置地址范圍為全屏

          for(i=0;i<320;i++)

          {

          for(j=0;j<240;j++)

          {

          LCD_Write_DATA(VH,VL);

          }

          }

          LCD_cs(1);//關閉片選使能

          }

          voidAddress_set(unsignedintx1,unsignedinty1,unsignedintx2,unsignedinty2)//設置地址范圍函數

          {

          LCD_Write_COM(0x00,0x20);LCD_Write_DATA(x1>>8,x1);//設置X坐標位置

          LCD_Write_COM(0x00,0x21);LCD_Write_DATA(y1>>8,y1);//設置Y坐標位置

          LCD_Write_COM(0x00,0x50);LCD_Write_DATA(x1>>8,x1);//開始X

          LCD_Write_COM(0x00,0x52);LCD_Write_DATA(y1>>8,y1);//開始Y

          LCD_Write_COM(0x00,0x51);LCD_Write_DATA(x2>>8,x2);//結束X

          LCD_Write_COM(0x00,0x53);LCD_Write_DATA(y2>>8,y2);//結束Y

          LCD_Write_COM(0x00,0x22);

          }

          voidChineseChar(uintx,uinty,intsize,uintFor_color,uintBk_color,charc)

          {

          inte=0,i,j;

          inted;

          uintncols;

          uintnrows;

          uintnbytes;

          uchar*pfont;//指向指定大小的漢字數據存儲的數組的指針

          uchar*pchar;//指向指定數組中指定要顯示的漢字的數據的指針

          uchar*fonttable[]={(uchar*)hz16,(uchar*)hz24,(uchar*)hz32};//漢字的三種大小,16位,24位,32位

          //其中hz16,hz24,hz32為三個數組,分別存儲宋體12,宋體18和宋體24的漢字的數據

          //每個數組中的數據可能包含相同大小字體的多個漢字

          pfont=(uchar*)fonttable[size];//指向指定大小的漢字的數組

          if(size==0)

          {

          ncols=16-1;

          nrows=16-1;

          nbytes=32;//每個字取模的字節(jié)數=(16*16)/8

          }

          else

          if(size==1)

          {

          ncols=24-1;

          nrows=24-1;

          nbytes=72;//每個字取模的字節(jié)數=(24*24)/8

          }

          else

          if(size==2)

          {

          ncols=32-1;

          nrows=32-1;

          nbytes=132;//每個字取模的字節(jié)數=(32*32)/8

          }

          pchar=pfont+(nbytes*(c-1));//指定要顯示指定數組中的第c個漢字

          //每個數組中的數據可能包含相同大小字體的多個漢字

          Address_set(x,y,x+nrows,y+ncols);//設置漢字顯示的范圍

          for(i=0;i//每個漢字含有nbytes個字節(jié),所以要循環(huán)nbytes次

          {

          ed=*pchar++;//ed取出指定要顯示的字節(jié)的數據

          if(size==0)//???

          {

          if(i%2==0)//???

          e=8;

          else

          e=4;//???

          }

          else

          e=8;

          for(j=0;j{

          if((ed>>j)&0x01)//判斷是漢字還是背景,然后分別寫入不同的顏色

          {

          LCD_Write_DATA(For_color>>8,For_color);//textcolor

          }

          else

          {

          LCD_Write_DATA(Bk_color>>8,Bk_color);//backcolor

          }

          }

          }

          }

          voidLCD_ShowChar(uintx,uinty,uintFor_color,uintBk_color,charch)

          {

          uchartemp,Bytes;

          ucharpos,t;

          uintCHAR_W,CHAR_H;//一個字符的大小

          //CHAR_W=8;//8*16

          //CHAR_H=16;

          CHAR_W=16;//16*24字符的大小為16*24

          CHAR_H=24;

          if(x>(LCD_SIZE_X-CHAR_W)||y>(LCD_SIZE_Y-CHAR_H))//如果指定的字符顯示的位置超過了彩屏的分辨率,則返回

          return;

          Address_set(x,y,x+CHAR_W-1,y+CHAR_H-1);//設置字符顯示的地址范圍

          ch=ch-32;//按照ASCII編碼順序得到相應字母的編碼

          Bytes=(CHAR_W*CHAR_H)/8;//每個字母取模字節(jié)數一個字節(jié)為8位,也即是8個像素點是一個字節(jié)

          for(pos=0;pos//一個字節(jié)一個字節(jié)的寫入,知道這個字符的全部字節(jié)數寫完

          {

          //temp=Font8x16[ch][pos];//8*16的字體

          temp=Font16x24[ch][pos];//字體的大小為16*24

          for(t=0;t<8;t++)//一個字節(jié)為8位,所以要循環(huán)8次寫入,一次只能寫入一個像素點

          {

          //判斷哪里是顯示字符的地方,哪里是背景,然后分別寫入不同的顏色就可以了

          if(temp&0x80)//如果是顯示字符的地方

          LCD_Write_DATA(For_color>>8,For_color);//textcolor

          else//否則就是背景的地方

          LCD_Write_DATA(Bk_color>>8,Bk_color);//backcolor

          temp<<=1;//右移一位

          }

          }

          }

          voidLCD_ShowString(uintx,uinty,uintFor_color,uintBk_color,char*p)

          {

          while(*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); })();