12864液晶模块是一种图形点阵液晶显示器,其像素点为128(列)x 64(行),可显示8x64个汉字或者128个ASCII字符,支持图形显示。
STM32单片机通过连接12864液晶模块不同功能的GPIO,发送指令和数据到12864液晶模块的液晶显示控制器,从而进行通信,实现液晶显示。12864液晶模块的指令集包括初始化指令、清屏指令、光标移动指令、字符/图形显示指令等。液晶显示控制器可以通过这些指令集来对液晶屏进行控制。
12864液晶模块的数据传输方式主要有并行和串行两种。并行数据传输方式可以快速传输数据,适用于显示汉字和ASCII字符的情况。串行数据传输方式适用于传输距离较长的情况,可以节省传输线缆和接口资源。此处实验采用8位并行总线驱动,显示汉字、数字和ASCII字符。
对于12864的操作有4种:
(1)读忙状态:即初始化后,对12864的读写进行检测
(2)写命令:即写操作,写指令集
(3)写数据:即写入数据,操作对象有DDRAM、GDRAM、CGRAM
(4)读数据:即读取数据,操作对象有DDRAM、GDRAM、CGRAM
1、12864液晶初始化
void InitDis(void) //初始化 12864 和要用到的 STM 32 的引脚。
{
IOInitOut();
delay_init();
delay_ms(2);
WriteCmd(0x30); //选择基本指令集,和,8位数据模式。
delay_ms(2);
WriteCmd(0x0c); //开显示,无游标,不反白.
delay_ms(2);
WriteCmd(0x01); //清除显示,并将 DDRAM 的地址计数器 AC 设为 00H.
delay_ms(2);
WriteCmd(0x06); //设置,外部读写数据后,地址记数器 AC 会自动加 1。
delay_ms(2);
WriteCmd(0x80); //将 DDRAM 地址计数器 AC 设为 0.
delay_ms(2);
}
2、显示字符函数
void DisStr(u8 *s) //显示字符串的函数。
{
while(*s != '\0')
{
WriteData(*s);
s++;
delay_ms(2); //控制每一个字符之间显示的时间 间隔
}
}
3、主函数代码:
int main(void)
{
delay_init(); //延时函数初始化
InitDis();
//lcd_clear();
DisStr(" 你好 ");
lcd_locate(2,1);
DisStr("123456789");
lcd_DisStr(4,2,"abcd");
while(1);
}
运行程序可以观察到12864LCD屏上显示指定字符串。
TFT-LCD,全称为薄膜晶体管液晶显示器,是一种利用薄膜晶体管来产生电压以控制液晶转向的显示技术。简单的说,就是利用电场改变液晶分子排列,进而改变光线的传播方向。配合偏振光片和彩色滤光片,TFT-LCD可以控制光线的透过率和不同颜色的透光量,从而显示出不同的色彩。
在TFT-LCD的切面结构中,上下两层玻璃间夹着液晶,形成了平行板电容器,称为CLC(capacitor of liquid crystal)。然而,这个电容无法将电压保持到下一次再更新画面数据的时候,因此需要加入一个储存电容CS以保持电压,使得充好电的电压能保持到下一次更新画面的时候。
本实验采用ILI9341 液晶控制器,支持多种颜色模式,包括全彩色、8-color显示模式。ILI9341 液晶控制器自带显存,其显存总大小为 172800(24032018/8),即 18 位模式(26万色)下的显存量。在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341 的 18 位数据线与 MCU 的 16 位数据线以及LCD GRAM 的对应关系如图
可见,D0和D12无效,ILI9341 的D17-D13 和 D11-D1 对应 MCU 的D15~D0。
此处仅对主函数进行展示:
int main(void)
{
u8 x=0;
u8 lcd_id[12]; //存放LCD ID字符串
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
LCD_Init();
POINT_COLOR=RED;
sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。
while(1)
{
switch(x)
{
case 0:LCD_Clear(WHITE);break;
case 1:LCD_Clear(BLACK);break;
case 2:LCD_Clear(BLUE);break;
case 3:LCD_Clear(RED);break;
case 4:LCD_Clear(MAGENTA);break;
case 5:LCD_Clear(GREEN);break;
case 6:LCD_Clear(CYAN);break;
case 7:LCD_Clear(YELLOW);break;
case 8:LCD_Clear(BRRED);break;
case 9:LCD_Clear(GRAY);break;
case 10:LCD_Clear(LGRAY);break;
case 11:LCD_Clear(BROWN);break;
}
POINT_COLOR=RED;
LCD_ShowString(30,40,210,24,24,"STM32 ^_^");
LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
LCD_ShowString(30,90,200,16,16,"STM32F103ZET6");
LCD_ShowString(30,110,200,16,16,lcd_id); //显示LCD ID
LCD_ShowString(30,130,200,12,12,"2020/5/4");
x++;
if(x==12)x=0;
LED0=!LED0;
delay_ms(1000);
}
}
程序运行后可以观察到TFTLCD液晶显示屏显示相应的字符串,并且屏幕底色不断的变换。
TFT-LCD和12864液晶屏都属于液晶显示技术,但它们在显示实验中存在一些不同。简单的说,12864液晶屏就是曾经的“黑白电视”,TFT-LCD就是“彩电”。
TFT-LCD通常具有更高的显示质量和更好的色彩表现,因为每个像素都由一个薄膜晶体管控制,这使得它们能够提供更高的对比度,并且支持更广的视角。并且,TFT-LCD的响应速度也更快,适用于需要快速更新画面的应用,如计算机显示器和电视。
12864液晶屏则通常用于小型设备和简单显示应用,具有较小的尺寸和较低的分辨率,而且通常只能显示基本的文本和图像。此外,12864液晶屏的原理通常使用并行或串行接口,而TFT-LCD的原理是通过改变液晶分子排列,与12864液晶屏大不相同。
总的来说,TFT-LCD和12864液晶屏在显示实验中的主要区别在于尺寸、分辨率、颜色表现和接口类型等方面。选择哪种显示技术取决于具体的显示需求和应用场景。