1.为什么要升级彩屏?
随着科技的日新月异,品质升级已也成为延长产品生命周期的重要因素之一,彩屏替换传统的显示方案也早已是大势所趋。传统显示方案主要包括单色液晶屏(120*120、128*64、192*64、240*128)、断码液晶屏(va、tn、htn、stn)以及数码管,都可以升级为t5uic1彩屏。
本文主要介绍如何从传统单色显示方案快速升级为t5uic1平台彩屏。
2.t5uic1平台彩屏特点是什么?
何为t5uic1彩屏呢?t5uic1平台是基于迪文科技t5cpu,针对不需要触摸屏、ui功能简单、成本要求苛刻的应用,例如小家电、美容养生、电梯、自动化仪表等。
主要特点包括:
t5cpu驱动方案,显示效果好,成本极低;
匹配基本的ui需求,开发简单;
功能齐全:涵盖图标指示、jpeg解压、动态二维码、ascii(6*12-64*64)、汉字库(12*12-64*64gb2312)、绘图。
3.如何升级t5uic1平台彩屏?
对于硬件方面,需要在控制部分预留一个串口,并保障电源电压匹配。对于软件部分,t5uic1平台产品为指令集开发模式(具体开发指南可以参照t5uic1应用指南——可在迪文官网“资料下载”栏目的“应用设计参考”子栏目下载压缩文件包《t5cpu智能屏开发指南》,即可从中找到文件“t5uic1应用指南_v20”)。
本文将mcu指令(以stm32为例)和t5uic1指令做成了库函数的形式(main.c),开发者可直接复制使用。
本文库函数主要涵盖字符串显示、二维码显示、绘图、图标显示、动态图标等功能。文件主要包括头文件dwin.h和库函数main.c。
3.1头文件(dwin.h)
头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明。
相关内容:
#ifndef__dwin_h
#define__dwin_h
#include
#include"stm32f10x_conf.h"
voidlcd_printf(u8 mode,u16 color,u16 bcolor,u16 x,u16 y,const char*format, ...);//显示字符串或者变量
voiderweima(u16 x,u16 y,u8 qr_pixel,const char *format, ...);//生成二维码
voidclr(u16 color);//清屏
voidlinear_interpolation(u8 num,u16 color,...);//绘制直线
voidplace_point(u8 num,u16 color,u16 nx,u16 ny,...);//绘制点
voiddim_set(u8 set);//调节背光
voidbode_set(u16 set);//调节扩展串口波特率
voiddisd_ico(u16 x,u16 y,u8 mode,u8 icon_lib,u8 icon_ids,u8 icon_0ide,u8delay_time);//设置动态图标
voiddis_ico(u16 x,u16 y,u8 mode,u8 ids);//显示ico图标
voidpic(u8 id);//写数据存储器
#endif
3.2库函数(main.c)
内容如下:
#include
#include"stm32f10x_conf.h"
#include"dwin.h"
/****************显示字符串函数*****************/
/*参数:mode:d7********************************/
voidlcd_printf(u8 mode,u16 color,u16 bcolor,u16 x,u16 y,const char*format, ...)
{
chartmp[200];
va_listarg;
va_start(arg,format);
vsprintf(tmp,format,arg);
va_end(arg);
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x11);
usart_sendbyte(usart1,mode);//模式
usart_sendbyte(usart1,color/256);
usart_sendbyte(usart1,color%6);//前景颜色
usart_sendbyte(usart1,bcolor/256);
usart_sendbyte(usart1,bcolor%6);//背景颜色
usart_sendbyte(usart1,x/256);
usart_sendbyte(usart1,x%6);//横坐标
usart_sendbyte(usart1,y/256);
usart_sendbyte(usart1,y%6);//y坐标
usart_sendstring(usart1,tmp);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************显示二维码函数*****************/
/*参数:mode:d7********************************/
voiderweima(u16 x,u16 y,u8 qr_pixel,const char *format, ...)
{
chartmp[200];
va_listarg;
va_start(arg,format);
vsprintf(tmp,format,arg);
va_end(arg);
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x21);
usart_sendbyte(usart1,x/256);
usart_sendbyte(usart1,x%6);//横坐标
usart_sendbyte(usart1,y/256);
usart_sendbyte(usart1,y%6);//y坐标
usart_sendbyte(usart1,qr_pixel);//二维码每个点的大小
usart_sendstring(usart1,tmp);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************读存储器***********************/
/*参数:mode:d7********************************/
voidread_sram_flsh(u16 length,u8 type,u16 address)//写数据存储器
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x32);
usart_sendbyte(usart1,type);
usart_sendbyte(usart1,address/256);
usart_sendbyte(usart1,address%6);
usart_sendbyte(usart1,length);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************绘图清屏函数*****************/
/*参数:mode:d7********************************/
voidclr(u16 color)
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x01);
usart_sendbyte(usart1,color/256);
usart_sendbyte(usart1,color%6);//颜色
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************绘图直线插入函数*****************/
/*参数:mode:d7********************************/
voidlinear_interpolation(u8 num,u16 color,...)
{
va_listarg_ptr;
inttempvalue;
num*=2;
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x03);
usart_sendbyte(usart1,color/256);
usart_sendbyte(usart1,color%6);
va_start(arg_ptr,color);
while(num--)
{
tempvalue=va_arg(arg_ptr,int);
usart_sendbyte(usart1,tempvalue/256);
usart_sendbyte(usart1,tempvalue%6);
}
va_end(arg_ptr);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************绘图打点插入函数*****************/
/*参数:mode:d7********************************/
voidplace_point(u8 num,u16 color,u16 nx,u16 ny,...)
{
va_listarg_ptr;
inttempvalue;
num*=2;
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x02);
usart_sendbyte(usart1,color/256);
usart_sendbyte(usart1,color%6);
usart_sendbyte(usart1,nx%6);
usart_sendbyte(usart1,ny%6);
va_start(arg_ptr,ny);
while(num--)
{
tempvalue=va_arg(arg_ptr,int);
usart_sendbyte(usart1,tempvalue/256);
usart_sendbyte(usart1,tempvalue%6);
}
va_end(arg_ptr);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************屏幕背光亮度设置*****************/
/*参数:mode:d7********************************/
voiddim_set(u8 set)
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x30);
usart_sendbyte(usart1,set);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************设置扩展串口波特率**************/
/*参数:mode:d7********************************/
voidbode_set(u16 set)//调节扩展串口波特率
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x38);
usart_sendbyte(usart1,15667200/set/256);
usart_sendbyte(usart1,15667200/set%6);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************从扩展串口发送字符串**************/
/*参数:mode:d7********************************/
voiduart_tx(const char *format, ...)//串口发送字符串
{
chartmp[200];
va_listarg;
va_start(arg,format);
vsprintf(tmp,format,arg);
va_end(arg);
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x39);
usart_sendstring(usart1,tmp);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************显示ico图标**************/
/*参数:mode:d7********************************/
voiddis_ico(u16 x,u16 y,u8 mode,u8 ids)//显示ico图标
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x23);
usart_sendbyte(usart1,x/256);
usart_sendbyte(usart1,x%6);
usart_sendbyte(usart1,y/256);
usart_sendbyte(usart1,y%6);
usart_sendbyte(usart1,mode);
usart_sendbyte(usart1,ids);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************设置动态图标*******************/
/*参数:mode:d7********************************/
voiddisd_ico(u16 x,u16 y,u8 mode,u8 icon_lib,u8 icon_ids,u8 icon_0ide,u8delay_time)//显示ico图标
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x28);
usart_sendbyte(usart1,x/256);
usart_sendbyte(usart1,x%6);
usart_sendbyte(usart1,y/256);
usart_sendbyte(usart1,y%6);
usart_sendbyte(usart1,mode);
usart_sendbyte(usart1,icon_lib);
usart_sendbyte(usart1,icon_ids);
usart_sendbyte(usart1,icon_0ide);
usart_sendbyte(usart1,delay_time);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************控制动态图标*******************/
/*参数:mode:d7********************************/
voiddisc_ico(u16 set)//控制ico动态图标
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x29);
usart_sendbyte(usart1,set/256);
usart_sendbyte(usart1,set%6);
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************写存储器***********************/
/*参数:mode:d7********************************/
voidwrit_sram_flsh(u16 length,u8 type,u16 address)//写数据存储器
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x31);
usart_sendbyte(usart1,type);
usart_sendbyte(usart1,address/256);
usart_sendbyte(usart1,address%6);
while(length--)
{
usart_sendbyte(usart1,address );
}
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
/****************读存储器***********************/
/*参数:mode:d7********************************/
voidpic(u8 id)
{
usart_sendbyte(usart1,0xaa);
usart_sendbyte(usart1,0x22);
usart_sendbyte(usart1,0x00);
usart_sendbyte(usart1,id);
\
usart_sendbyte(usart1,0xcc);
usart_sendbyte(usart1,0x33);
usart_sendbyte(usart1,0xc3);
usart_sendbyte(usart1,0x3c);
}
4.常用功能例程
4.1显示文本和数据
voidlcd_printf(u8 mode,u16 color,u16 bcolor,u16 x,u16 y,const char*format, ...);//显示字符串或者变量
参数mode:
.7字符宽度调整设置1=调整0=不调整。
.6背景色显示设置1=显示0=不显示。
.5-.4写0。.3-.0:字号大小,0x00-0x09,对应字体大小于下:0x00=6*120x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28 0x05=16*32 0x06=20*400x07=24*48 0x08=28*56 0x09=32*64
color:字符显示颜色。
bcolor:字符背景显示颜色。
(x,y):字符串显示的左上角坐标。
例程:lcd_printf(0x42,0xffff,0xf00f,10,10,"迪文科技:d",x );
如示例的调用形式将显示“迪文科技:x的值的十进制展现形式”
4.2绘图类
voidclr(u16 color);//清屏
color:颜色
voidlinear_interpolation(u8 num,u16 color,...);// 端点连线
num:点的个数
color:连线的颜色
…:各点坐标
例程:linear_interpolation(3,0xff00,0x0000,0x0000,0x0100,0x0100,0x0100,0x0000);
voidplace_point(u8 num,u16 color,u16 nx,u16 ny,...);//绘制点
4.3二维码显示
voiderweima(u16 x,u16 y,u8 qr_pixel,const char *format, ...);//生成二维码
x,y为二维码左上角坐标。qr_pixel表示二维码每个点占用的像素点。
…:url此函数的分钟同样类似printf
例程:erweima(148,50,0x04,"https://www.dwin.com.cn");
4.4调节背光亮度
voiddim_set(u8 set);//调节背光
set:0x00-0xff
例程:dim_set(0xff);//调节背光到最亮
4.5调节串口波特率
voidbode_set(u16 set);//调节扩展串口波特率
set:波特率
例程:bode_set(9600);//设置波特率为9600
5. 文件下载说明
库函数&头文件及升级说明见压缩文件《单色屏升级:如何快速升级t5uic1彩屏》,文件获取方式如下:
在迪文大奖官方网站手机版下载官网“资料下载”栏目的“应用设计参考”子栏目下载压缩文件包《单色屏升级:如何快速升级t5uic1彩屏》,即可从中找到有关文件。
(作者/祖晓晨 编辑/孙惠英)
关注迪文及时了解更多产品资讯