我是靠谱客的博主 无聊雪碧,最近开发中收集的这篇文章主要介绍nRF52832 — 1.44寸 TFT屏,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 XX  作       者:文化人

 XX  联系方式:

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

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

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

写在前面:楼主正参与一个智能蓝牙的项目,项目中使用了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)汉字:

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<<i))!=0)
				LCD_WR_DATA(POINT_COLOR);
			else
				LCD_WR_DATA(BACK_COLOR);
		}
		temp++;
	}
}

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);
}

             

2)数字:

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<<i))!=0)  
                LCD_WR_DATA(POINT_COLOR);  
            else  
                LCD_WR_DATA(BACK_COLOR);  
        }  
        temp++;  
    }  
}  

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);
}

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

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屏的全部内容,希望文章能够帮你解决nRF52832 — 1.44寸 TFT屏所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部