STM32单片机基本原理与应用(五)

12864液晶实验

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

  • DDRAM:(Data Display Ram),数据显示RAM,主要用于字符编码的显示
  • GDRAM:(Graphic Display RAM):图形显示RAM

实验原理图

STM32单片机基本原理与应用(五)_第1张图片

程序代码

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可以控制光线的透过率和不同颜色的透光量,从而显示出不同的色彩。
在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。

实验原理图

STM32单片机基本原理与应用(五)_第2张图片

程序代码

此处仅对主函数进行展示:

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液晶屏的区别

TFT-LCD和12864液晶屏都属于液晶显示技术,但它们在显示实验中存在一些不同。简单的说,12864液晶屏就是曾经的“黑白电视”,TFT-LCD就是“彩电”。
TFT-LCD通常具有更高的显示质量和更好的色彩表现,因为每个像素都由一个薄膜晶体管控制,这使得它们能够提供更高的对比度,并且支持更广的视角。并且,TFT-LCD的响应速度也更快,适用于需要快速更新画面的应用,如计算机显示器和电视。

12864液晶屏则通常用于小型设备和简单显示应用,具有较小的尺寸和较低的分辨率,而且通常只能显示基本的文本和图像。此外,12864液晶屏的原理通常使用并行或串行接口,而TFT-LCD的原理是通过改变液晶分子排列,与12864液晶屏大不相同。

总的来说,TFT-LCD和12864液晶屏在显示实验中的主要区别在于尺寸、分辨率、颜色表现和接口类型等方面。选择哪种显示技术取决于具体的显示需求和应用场景。

你可能感兴趣的:(单片机,stm32)