(2)创建lcd.c,并添加以下代码。
#include lcd.h#include font.h#include delay.hvoid lcd_writereg( u16 lcd_reg, u16 lcd_regvalue ){ lcd->lcd_reg = lcd_reg ; //写入寄存器序号 lcd->lcd_ram = lcd_regvalue ; //写入数据}_lcd_dev lcddev ; //管理lcd重要参数void lcd_setcursor( u16 xpos, u16 ypos ){ lcd_writereg( lcddev.setxcmd, xpos>>8 ) ; lcd_writereg( lcddev.setxcmd+1, xpos&0xff ) ; lcd_writereg( lcddev.setycmd, ypos>>8 ) ; lcd_writereg( lcddev.setycmd+1, ypos&0xff ) ;}void lcd_display_dir(){ u16 temp; lcddev.wramcmd = 0x2c00 ; lcddev.setxcmd = 0x2a00 ; lcddev.setycmd = 0x2b00 ; lcddev.width = 480 ; lcddev.height = 800 ; //交换x,y if( lcddev.width>lcddev.height ) { temp = lcddev.width ; lcddev.width = lcddev.height ; lcddev.height = temp ; } //设置扫描方向 lcd_writereg( 0x3600, 0 ) ; lcd_writereg( lcddev.setxcmd, 0 ) ; lcd_writereg( lcddev.setxcmd+1, 0 ) ; lcd_writereg( lcddev.setxcmd+2, ( lcddev.width-1 )>>8 ) ; lcd_writereg( lcddev.setxcmd+3, ( lcddev.width-1 )&0xff ) ; lcd_writereg( lcddev.setycmd, 0 ) ; lcd_writereg( lcddev.setycmd+1, 0 ) ; lcd_writereg( lcddev.setycmd+2, ( lcddev.height-1 )>>8 ) ; lcd_writereg( lcddev.setycmd+3, ( lcddev.height-1 )&0xff ) ;}void lcd_init(){ rcc->ahbenr |= 1
crl |= 0x00000003 ; //portd复用推挽输出 gpiod->crh &= 0x00fff000 ; gpiod->crh |= 0xbb000bbb ; gpiod->crl &= 0xff00ff00 ; gpiod->crl |= 0x00bb00bb ; //porte复用推挽输出 gpioe->crh &= 0x00000000 ; gpioe->crh |= 0xbbbbbbbb ; gpioe->crl &= 0x0fffffff ; gpioe->crl |= 0xb0000000 ; //portg12复用推挽输出 gpiog->crh &= 0xfff0ffff ; gpiog->crh |= 0x000b0000 ; gpiog->crl &= 0xfffffff0 ; //pg0->rs gpiog->crl |= 0x0000000b ; fsmc_bank1->btcr[ 6 ] = 0x00000000 ; fsmc_bank1->btcr[ 7 ] = 0x00000000 ; fsmc_bank1e->bwtr[ 6 ] = 0x00000000 ; fsmc_bank1->btcr[ 6 ] |= 1lcd_reg = 0x2900 ; lcd_display_dir() ; //默认为竖屏 lcd_led = 1 ; //点亮背光 lcd_clear( white ) ;}void lcd_clear( u16 color ){ u32 index = 0 ; u32 totalpoint = lcddev.width ; totalpoint *= lcddev.height ; //得到总点数 lcd_setcursor( 0, 0 ) ; //设置光标位置 lcd->lcd_reg = lcddev.wramcmd ; //开始写入gram for( index=0; indexlcd_ram = color ;}void lcd_fast_drawpoint( u16 x, u16 y, u16 color ){ lcd_writereg( lcddev.setxcmd, x>>8 ) ; lcd_writereg( lcddev.setxcmd+1, x&0xff ) ; lcd_writereg( lcddev.setycmd, y>>8 ) ; lcd_writereg( lcddev.setycmd+1, y&0xff ) ; lcd_writereg( lcddev.wramcmd, color ) ; }u16 point_color=red ; //画笔颜色u16 back_color=white ; //背景色void lcd_showchar( u16 x, u16 y, u8 num ){ u8 temp, t1, t ; u16 y0=y ; num = num-' ' ; //得到偏移后的值 for( t=0; t<16; t++ ) { temp = asc2_1608[ num ][ t ] ; //调用1608字体 for( t1=0; t1<8; t1++ ) { if( ( temp&0x80 )==0x80 ) lcd_fast_drawpoint( x, y, point_color ) ; else lcd_fast_drawpoint( x, y, back_color ) ; temp <=lcddev.height ) return ; if( ( y-y0 )==16 ) { y = y0 ; x ++ ; //超区域了 if( x>=lcddev.width ) return ; break ; } } }}void lcd_showstring( u16 x, u16 y, u8 *p ){ //判断是不是非法字符 while( ( *p=' ' ) ) { //退出 if( ( y>=lcddev.height )||( x>=lcddev.width ) ) break ; lcd_showchar( x, y, *p ) ; x += 8 ; p ++ ; } }注1 :省略的初始化代码是在采购屏幕的时候生产厂家提供的驱动代码,这部分代码包括初始化屏幕的伽马校正以及显示地址增加等功能,可以不去管,只需要复制到初始化的位置即可。
注2 :清屏函数lcd_clear
清屏其实就是在屏幕中送入白色或者别的颜色,一般都是全部像素点写入白色,该函数也可以用于填充颜色使用,程序中首先通过横坐标点数和纵坐标点数计算出所有像素点的个数,由于初始化中设置了地址自增加功能,所以可以设定开始地址后直接不停的发送白色的数据代码,直到所有像素点全部填充后结束。
注3 :显示1个字符函数lcd_showchar
tftlcd由于内部没有字库,所以所有的英文包括ascii码,中文都需要自己取模,取模的方式类似于之前的51单片机驱动点阵,这种情况下可以采用厂家提供的现成的代码,或者自己用取模软件直接生成代码,文件中包含的头文件font.h其实就是自己通过软件得到的ascii码的字符点阵数据。读取点阵的时候,1的位置写入设置的颜色(画笔颜色),0的位置写入背景颜色,当背景颜色和刷屏颜色一样的时候,看起来就像是显示了数据一样(也可以不写入背景颜色,直接在1的位置写入画笔颜色,0的位置不管,这种情况下可以实现字体的透明效果)。
注4 :显示字符串函数lcd_showstring
显示字符串函数实际就是频繁调用函数lcd_showchar,通过while循环来判断字符串的结尾,将结尾之前的数据全部写入后退出循环。有的厂家会提供完整的例程,里面包括显示数字,显示图像,其实本质都是通过判断点阵数据来写入画笔颜色和背景颜色。
(3)创建font.h,自己通过取模软件来添加字符的字模。
#ifndef _font_h_#define _font_h_//常用ascii表//阴码+逐列式+顺向+c51格式const unsigned char asc2_1608[95][16]={ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/* ,0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xcc,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00},/*!,1*/{0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*,2*/{0x02,0x20,0x03,0xfc,0x1e,0x20,0x02,0x20,0x03,0xfc,0x1e,0x20,0x02,0x20,0x00,0x00},/*#,3*/{0x00,0x00,0x0e,0x18,0x11,0x04,0x3f,0xff,0x10,0x84,0x0c,0x78,0x00,0x00,0x00,0x00},/*$,4*/{0x0f,0x00,0x10,0x84,0x0f,0x38,0x00,0xc0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*%,5*/{0x00,0x78,0x0f,0x84,0x10,0xc4,0x11,0x24,0x0e,0x98,0x00,0xe4,0x00,0x84,0x00,0x08},/*&,6*/{0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*',7*/{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*(,8*/{0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00},/*),9*/{0x02,0x40,0x02,0x40,0x01,0x80,0x0f,0xf0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/**,10*/{0x00,0x80,0x00,0x80,0x00,0x80,0x0f,0xf8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*+,11*/{0x00,0x01,0x00,0x0d,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*,,12*/{0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*-,13*/{0x00,0x00,0x00,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*.,14*/{0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*/,15*/{0x00,0x00,0x07,0xf0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xf0,0x00,0x00},/*0,16*/{0x00,0x00,0x08,0x04,0x08,0x04,0x1f,0xfc,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*1,17*/{0x00,0x00,0x0e,0x0c,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0e,0x0c,0x00,0x00},/*2,18*/{0x00,0x00,0x0c,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0c,0x70,0x00,0x00},/*3,19*/{0x00,0x00,0x00,0xe0,0x03,0x20,0x04,0x24,0x08,0x24,0x1f,0xfc,0x00,0x24,0x00,0x00},/*4,20*/{0x00,0x00,0x1f,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*5,21*/{0x00,0x00,0x07,0xf0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*6,22*/{0x00,0x00,0x1c,0x00,0x10,0x00,0x10,0xfc,0x13,0x00,0x1c,0x00,0x10,0x00,0x00,0x00},/*7,23*/{0x00,0x00,0x0e,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0e,0x38,0x00,0x00},/*8,24*/{0x00,0x00,0x07,0x00,0x08,0x8c,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xf0,0x00,0x00},/*9,25*/{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0c,0x03,0x0c,0x00,0x00,0x00,0x00,0x00,0x00},/*:,26*/{0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*;,27*/{0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00},/*,30*/{0x00,0x00,0x0e,0x00,0x12,0x00,0x10,0x0c,0x10,0x6c,0x10,0x80,0x0f,0x00,0x00,0x00},/*?,31*/{0x03,0xe0,0x0c,0x18,0x13,0xe4,0x14,0x24,0x17,0xc4,0x08,0x28,0x07,0xd0,0x00,0x00},/*@,32*/{0x00,0x04,0x00,0x3c,0x03,0xc4,0x1c,0x40,0x07,0x40,0x00,0xe4,0x00,0x1c,0x00,0x04},/*a,33*/{0x10,0x04,0x1f,0xfc,0x11,0x04,0x11,0x04,0x11,0x04,0x0e,0x88,0x00,0x70,0x00,0x00},/*b,34*/{0x03,0xe0,0x0c,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1c,0x10,0x00,0x00},/*c,35*/{0x10,0x04,0x1f,0xfc,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xf0,0x00,0x00},/*d,36*/{0x10,0x04,0x1f,0xfc,0x11,0x04,0x11,0x04,0x17,0xc4,0x10,0x04,0x08,0x18,0x00,0x00},/*e,37*/{0x10,0x04,0x1f,0xfc,0x11,0x04,0x11,0x00,0x17,0xc0,0x10,0x00,0x08,0x00,0x00,0x00},/*f,38*/{0x03,0xe0,0x0c,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1c,0x78,0x00,0x40,0x00,0x00},/*g,39*/{0x10,0x04,0x1f,0xfc,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1f,0xfc,0x10,0x04},/*h,40*/{0x00,0x00,0x10,0x04,0x10,0x04,0x1f,0xfc,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00},/*i,41*/{0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1f,0xfe,0x10,0x00,0x10,0x00,0x00,0x00},/*j,42*/{0x10,0x04,0x1f,0xfc,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1c,0x10,0x04,0x00,0x00},/*k,43*/{0x10,0x04,0x1f,0xfc,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0c,0x00,0x00},/*l,44*/{0x10,0x04,0x1f,0xfc,0x1f,0x00,0x00,0xfc,0x1f,0x00,0x1f,0xfc,0x10,0x04,0x00,0x00},/*m,45*/{0x10,0x04,0x1f,0xfc,0x0c,0x04,0x03,0x00,0x00,0xe0,0x10,0x18,0x1f,0xfc,0x10,0x00},/*n,46*/{0x07,0xf0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xf0,0x00,0x00},/*o,47*/{0x10,0x04,0x1f,0xfc,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00},/*p,48*/{0x07,0xf0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1c,0x08,0x0a,0x07,0xf2,0x00,0x00},/*q,49*/{0x10,0x04,0x1f,0xfc,0x11,0x04,0x11,0x00,0x11,0xc0,0x11,0x30,0x0e,0x0c,0x00,0x04},/*r,50*/{0x00,0x00,0x0e,0x1c,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1c,0x38,0x00,0x00},/*s,51*/{0x18,0x00,0x10,0x00,0x10,0x04,0x1f,0xfc,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*t,52*/{0x10,0x00,0x1f,0xf8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1f,0xf8,0x10,0x00},/*u,53*/{0x10,0x00,0x1e,0x00,0x11,0xe0,0x00,0x1c,0x00,0x70,0x13,0x80,0x1c,0x00,0x10,0x00},/*v,54*/{0x1f,0xc0,0x10,0x3c,0x00,0xe0,0x1f,0x00,0x00,0xe0,0x10,0x3c,0x1f,0xc0,0x00,0x00},/*w,55*/{0x10,0x04,0x18,0x0c,0x16,0x34,0x01,0xc0,0x01,0xc0,0x16,0x34,0x18,0x0c,0x10,0x04},/*x,56*/{0x10,0x00,0x1c,0x00,0x13,0x04,0x00,0xfc,0x13,0x04,0x1c,0x00,0x10,0x00,0x00,0x00},/*y,57*/{0x08,0x04,0x10,0x1c,0x10,0x64,0x10,0x84,0x13,0x04,0x1c,0x04,0x10,0x18,0x00,0x00},/*z,58*/{0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*[,59*/{0x00,0x00,0x30,0x00,0x0c,0x00,0x03,0x80,0x00,0x60,0x00,0x1c,0x00,0x03,0x00,0x00},/*\\,60*/{0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7f,0xfe,0x00,0x00,0x00,0x00,0x00,0x00},/*],61*/{0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00},/*^,62*/{0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},/*_,63*/{0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*`,64*/{0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xfc,0x00,0x04},/*a,65*/{0x10,0x00,0x1f,0xfc,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*b,66*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00},/*c,67*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1f,0xfc,0x00,0x04},/*d,68*/{0x00,0x00,0x00,0xf8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xc8,0x00,0x00},/*e,69*/{0x00,0x00,0x01,0x04,0x01,0x04,0x0f,0xfc,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00},/*f,70*/{0x00,0x00,0x00,0xd6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xc9,0x01,0x06,0x00,0x00},/*g,71*/{0x10,0x04,0x1f,0xfc,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xfc,0x00,0x04},/*h,72*/{0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xfc,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*i,73*/{0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xfe,0x00,0x00,0x00,0x00},/*j,74*/{0x10,0x04,0x1f,0xfc,0x00,0x24,0x00,0x40,0x01,0xb4,0x01,0x0c,0x01,0x04,0x00,0x00},/*k,75*/{0x00,0x00,0x10,0x04,0x10,0x04,0x1f,0xfc,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*l,76*/{0x01,0x04,0x01,0xfc,0x01,0x04,0x01,0x00,0x01,0xfc,0x01,0x04,0x01,0x00,0x00,0xfc},/*m,77*/{0x01,0x04,0x01,0xfc,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xfc,0x00,0x04},/*n,78*/{0x00,0x00,0x00,0xf8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xf8,0x00,0x00},/*o,79*/{0x01,0x01,0x01,0xff,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*p,80*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xff,0x00,0x01},/*q,81*/{0x01,0x04,0x01,0x04,0x01,0xfc,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00},/*r,82*/{0x00,0x00,0x00,0xcc,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00},/*s,83*/{0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xf8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00},/*t,84*/{0x01,0x00,0x01,0xf8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xfc,0x00,0x04},/*u,85*/{0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0c,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00},/*v,86*/{0x01,0xf0,0x01,0x0c,0x00,0x30,0x01,0xc0,0x00,0x30,0x01,0x0c,0x01,0xf0,0x01,0x00},/*w,87*/{0x00,0x00,0x01,0x04,0x01,0x8c,0x00,0x74,0x01,0x70,0x01,0x8c,0x01,0x04,0x00,0x00},/*x,88*/{0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0e,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*y,89*/{0x00,0x00,0x01,0x84,0x01,0x0c,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0c,0x00,0x00},/*z,90*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3e,0xfc,0x40,0x02,0x40,0x02},/*{,91*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00},/*|,92*/{0x00,0x00,0x40,0x02,0x40,0x02,0x3e,0xfc,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*},93*/{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*~,94*/};#endif
阻碍智能家居发展的原因主要有以下三点
贝加莱推出首款采用集成安全技术的X90控制器
2011年手机行业大事回顾
南通数字孪生工厂3D模型,三维可视化建模,三维虚拟仿真交互模型
武汉凯迪正大倍频感应耐压试验装置
STM32入门学习笔记之TFTLCD显示实验4
Niantic放出AR云平台预览版本,或将再次改变沉浸式内容游戏
中兴发布行业安全终端天机A41系列
3D打印是什么?3D打印给生活带来了什么?
关于第二代0.18微米5V/40V BCD工艺平台的介绍和应用
利用数据线中的共模扼流圈(CMC)提高电磁兼容性
如何快速生成Verilog代码文件列表
氮化镓晶体管到底有什么了不起?
免调中频VCO的实现
开关电源的维修技巧和常见故障
微软修补了之前谷歌发现的Windows零日漏洞
你们都错了?小米6发布时间拟定,然而终极大招却不是骁龙835!
高匿动态爬虫代理ip怎么选择?
基于MSP430内嵌温度传感器的温度告警系统
有哪些已经融入到了生活中的物联网技术应用