新聞中心

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

        STM32學(xué)習(xí)筆記——TFT2.4彩屏顯示字符和漢字

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

        #else//條件編譯-8位數(shù)據(jù)模式

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

        {

        //LCD_DataPortH=VH;//八位模式都用P0口送數(shù)據(jù)

        //LCD_wr(0);

        //LCD_wr(1);

        //LCD_DataPortH=VL;//八位模式都用P0口送數(shù)據(jù)

        //LCD_wr(0);

        //LCD_wr(1);

        }

        #endif

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

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

        {

        LCD_rs(0);

        LCD_Writ_Bus(VH,VL);

        }

        //參數(shù)VH,VL分別為要寫入數(shù)據(jù)的高8位和低8位

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

        {

        LCD_rs(1);

        LCD_Writ_Bus(VH,VL);

        }

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

        {

        inti,j;

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

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

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

        {

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

        {

        LCD_Write_DATA(VH,VL);

        }

        }

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

        }

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

        {

        LCD_Write_COM(0x00,0x20);LCD_Write_DATA(x1>>8,x1);//設(shè)置X坐標(biāo)位置

        LCD_Write_COM(0x00,0x21);LCD_Write_DATA(y1>>8,y1);//設(shè)置Y坐標(biāo)位置

        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);//結(jié)束X

        LCD_Write_COM(0x00,0x53);LCD_Write_DATA(y2>>8,y2);//結(jié)束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;//指向指定大小的漢字?jǐn)?shù)據(jù)存儲的數(shù)組的指針

        uchar*pchar;//指向指定數(shù)組中指定要顯示的漢字的數(shù)據(jù)的指針

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

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

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

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

        if(size==0)

        {

        ncols=16-1;

        nrows=16-1;

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

        }

        else

        if(size==1)

        {

        ncols=24-1;

        nrows=24-1;

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

        }

        else

        if(size==2)

        {

        ncols=32-1;

        nrows=32-1;

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

        }

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

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

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

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

        {

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

        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);//設(shè)置字符顯示的地址范圍

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

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

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

        {

        //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!=

        主站蜘蛛池模板: 顺平县| 文登市| 三台县| 哈密市| 禹州市| 晋中市| 边坝县| 西乌珠穆沁旗| 苏尼特右旗| 潮安县| 育儿| 瑞昌市| 万州区| 临洮县| 格尔木市| 左权县| 临西县| 尼勒克县| 屯门区| 尉犁县| 垫江县| 茂名市| 麻城市| 介休市| 庆城县| 莒南县| 扎赉特旗| 德令哈市| 大渡口区| 临朐县| 澎湖县| 阜宁县| 蓝山县| 客服| 霍邱县| 息烽县| 南木林县| 平谷区| 保德县| 胶州市| 惠州市|