nRF52832 — 1.44寸 TFT屏

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 XX  作       者:ZHS(文化人)

 XX  联系方式:文章末尾Chat快问

 XX  版权声明:原创文章,欢迎评论和转载~转载时能告诉我一声就最好了

 XX  要说的话:作者水平有限,难免有不足之处,恳请指正!

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

写在前面:楼主正参与一个智能蓝牙的项目,项目中使用了TFT屏来显示温度和一些UI交互信息。

如题,屏幕大小是1.44寸,TFT-LCD屏幕,132 (H) x RGB x 162 (V) Bits,驱动芯片是ST7735S,3.3V和2.8V两组供电;

一、屏幕采用非标准的SPI通信协议,有关的参考代码(keil工程)和所有资料,可点击下载;

二、调试中我使用的取模软件是PCtoLCD2002.exe,西西软件园可下载;

       1、汉字==》楷体,阿拉伯数字==》Arial(数字的标准字体);

       2、C51格式(采用逆向、逐行式)

       3、字号自行设定,生成的字模可直接在代码中使用;

三、调试的难点在于汉字和阿拉伯数字的居中显示,不过也不算难;

      1、绝对居中效果==》始终显示在屏幕的中心;

            1)汉字:

nRF52832 — 1.44寸 TFT屏_第1张图片

void showhanzi(unsigned int x, unsigned int y, unsigned char index)
{
	unsigned char i, j;
	unsigned char *temp = (u8 *)hanzi;	//hanzi 是汉字字模的buf
	Address_set(x, y, x+39, y+49);		//39和49需要根据字号调整
	temp+=index*250;			//250是一个汉字占的字节数,index是下标
	for(j = 0; j < 250; j++)
	{
		for(i = 0; i < 8; i++)
		{
			if((*temp&(1<

void LCD_Display_fun_word(u16 color1, u16 color2, u8 offset)
{
	if(BACK_COLOR != color1)		//颜色改变时才清
	{	
		LCD_Clear(color1);
		BACK_COLOR = color1;
	}
	POINT_COLOR = color2;
	
	showhanzi(LCD_X_START_OFFSET, LCD_Y_START_OFFSET, 3*offset);
	showhanzi(LCD_X_START_OFFSET+WORD_ADD_GAP, LCD_Y_START_OFFSET, 3*offset+1);
	showhanzi(LCD_X_START_OFFSET+WORD_ADD_GAP*2, LCD_Y_START_OFFSET, 3*offset+2);
}

             nRF52832 — 1.44寸 TFT屏_第2张图片

2数字:

nRF52832 — 1.44寸 TFT屏_第3张图片

void shownumber(unsigned int x, unsigned int y, unsigned char index)  
{  
    unsigned char i, j;  
    unsigned char *temp = (u8 *)number;  //number是数字字模的buf  
    Address_set(x, y, x+23, y+49);      //23和49需要根据字号调整  
    temp+=index*180;            //180是一个数字占的字节数,index是下标  
    for(j = 0; j < 180; j++)  
    {  
        for(i = 0; i < 8; i++)  
        {  
            if((*temp&(1<

void LCD_Display_fun_temp(u16 color1, u16 color2, u8 offset)
{
	u8 len;
	len = Getnumlen(temp);			//获得温度的位数
	
	if(BACK_COLOR != color1)		//颜色改变时才清
	{	
		LCD_Clear(color1);
		BACK_COLOR = color1;
	}
	POINT_COLOR = color2;
	
	if(0 == temp)
		len = 1;					//0℃的显示
	
	for(int i = 0; i < len; i++)
	{
		shownumber(LCD_X_START_OFFSET1(len)+NUM_ADD_GAP*(len-i-1), LCD_Y_START_OFFSET1, temp%10);
		
		temp /= 10;
	}
	showdu(LCD_X_START_OFFSET1(len)+NUM_ADD_GAP*len, LCD_Y_START_OFFSET2, 0);
}

nRF52832 — 1.44寸 TFT屏_第4张图片

       2、相对居中效果==》参考市场产品,主要针对数字(补0);

nRF52832 — 1.44寸 TFT屏_第5张图片

void LCD_Display_fun_temp(u16 color1, u16 color2, u8 offset)  
{  
//    u8 len;  
//    len = Getnumlen(temp);          //获得温度的位数  
      
    if(BACK_COLOR != color1)        //颜色改变时才清  
    {     
        LCD_Clear(color1);  
        BACK_COLOR = color1;  
    }  
    POINT_COLOR = color2;  
      
//    if(0 == temp)  
//        len = 1;                    //0℃的显示  
      
    for(int i = 0; i < WORD_NUM; i++)  
    {  
	shownumber(LCD_X_START_OFFSET1+NUM_ADD_GAP*(2-i), LCD_Y_START_OFFSET1, temp%10);
//        shownumber(LCD_X_START_OFFSET1(len)+NUM_ADD_GAP*(len-i-1), LCD_Y_START_OFFSET1, temp%10);  
          
        temp /= 10;  
    }  
    showdu(LCD_X_START_OFFSET1+NUM_ADD_GAP*WORD_NUM, LCD_Y_START_OFFSET2, 0);//摄氏度℃
//    showdu(LCD_X_START_OFFSET1(len)+NUM_ADD_GAP*len, LCD_Y_START_OFFSET2, 0);  
}

nRF52832 — 1.44寸 TFT屏_第6张图片

你可能感兴趣的:(nRF52832)