概述
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屏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复