单片机开发教程5——51单片机驱动TFT彩屏

文章目录

  • 代码例程
  • TFT模块
  • 介绍
  • 使用要点
  • 减少刷新像素
  • 坐标系
  • 游戏设计
  • 对象
  • VS Code
  • 代码例程

    TFT.zip

    开发资料中的例程有些瑕疵,上面是整理后的例程,修改了一些参数,也添加了不少函数,函数都有对应的注释,只要花心思去看一应该是能看懂怎么用的。此外,这个例程也可以作为你们工程的模板,往上面添加一些函数、完善一下内容,差不多就能做出一个作品了

    TFT模块

    介绍

    TFT的全称:Thin Film Transistor,中文名字是薄膜晶体管。现在我们所使用的笔记本电脑以及台式电脑都运用了相对先进的TFT显示屏,这类显示屏都由液晶像素点组成,并由集成在像素点后面的薄膜晶体管驱动

    不难看出,TFT也是属于LCD液晶屏的一种,它的每一液晶像素点都是由集成在其后的薄膜晶体管来驱动的

    使用要点

    减少刷新像素

    请添加图片描述

    我们使用到是一块1.8寸TFT LCD,分辨率是128X160,驱动芯片是ST7735S,支持SPI串口

    虽然分辨率不高,但对于一款51单片机来说,这已经是在负重前行了,可以计算一下,128X160=20480个像素,每个像素是16位彩色数据,也就是刷新一个屏幕的数据量是40960Byte=40KB,这对于单片机的运行频率来说,无疑是个大数目了,烧录开发资料中的刷屏例程可以看出,刷新一帧画面需要5s~6s,这是不能接受的,为了提高画面刷新频率,必须要尽量减少刷新的内容,而对于固定的背景和元素,只在初始化时刷新的,因此设计得花里胡哨也没事

    上图是链接中的例程运行效果,以一款贪吃蛇游戏为例,贪吃蛇在运动时,本质上只有头和尾需要做出改变,因此只需要把最后一格换成背景色,最前面一格前添加一个小元素,就可以完成一个流动帧,这样刷新的帧率完全足够

    坐标系

    /*************************************************
    函数名:LCD_Set_Region
    功能:设置lcd显示区域,在此区域写点数据自动换行
    入口参数:xy起点和终点
    返回值:无
    *************************************************/
    void Lcd_SetRegion(unsigned int x_start,unsigned int y_start,unsigned int x_end,unsigned int y_end)
    {		
    	Lcd_WriteIndex(0x2a);
    	Lcd_WriteData(0x02);
    	Lcd_WriteData(x_start+2);
    	Lcd_WriteData(0x02);
    	Lcd_WriteData(x_end+2);
    
    	Lcd_WriteIndex(0x2b);
    	Lcd_WriteData(0x01);
    	Lcd_WriteData(y_start+1);
    	Lcd_WriteData(0x01);
    	Lcd_WriteData(y_end+1);
    	
    	Lcd_WriteIndex(0x2c);
    }
    

    这是开发资料中 TFT 驱动代码的一个函数,用于设置写入数据的范围,如果烧录可以看到,屏幕边缘会出现一些不能刷新的地方,在 TFT.zip 中,对这块内容做了修改,把+1/+2删掉了

    使用时需要注意,Lcd_SetRegion函数参数传入的坐标是从0开始的,每个坐标点对应一个像素点,也就是最大坐标点为(127,159)

    其他需要传入坐标数据的Lcd函数,都会引用到Lcd_SetRegion,因此使用时,要知道像素与坐标的对应关系

    游戏设计

    对象

    typedef struct  
    {	
    	u8 life;
    	u8 headX;			
    	u8 headY;		
    	u8 snakeX[300];
    	u8 snakeY[300];	
    	u8 length;
    	int dir;
    	int tpdir;
    	u8 foodX;
    	u8 foodY;
    
    }Snake; 
    

    游戏设计最重要的就是对象,这方面是面向对象编程语言的长处,而对于C语言,结构体也能体现这一点。上面代码是一个贪吃蛇对象(结构体),可以非常直观地表达贪吃蛇的状态,这在游戏设计中是很重要的,尤其是多对象的情况(现在大概率用不到),学会使用结构体,对变量的管理和内容的设计都会带来很大便利

    VS Code

    这里就推荐使用vs code作为代码的编辑器,因为它的自动补全真的很香,尤其是在使用结构体变量时

    如果你有VS Code,只需安装一个插件Keil Assistant,再配置一下路径就可以用了


    物联沃分享整理
    物联沃-IOTWORD物联网 » 单片机开发教程5——51单片机驱动TFT彩屏

    发表评论