微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stm32 驱动 TFT LCD

stm32 驱动 TFT LCD

时间:11-26 来源:互联网 点击:

752x++;

753}

754x=x0;

755y++;

756}

757}else{//叠加方式

758for(pos=0;pos

759{

760if(size==12)

761temp=asc2_1206[num][pos];//调用1206字体

762else

763temp=asc2_1608[num][pos];//调用1608字体

764

765for(t=0;t

766{

767if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点

768temp>>=1;

769}

770}

771}

772POINT_COLOR=colortemp;

773

774#else

775#define MAX_CHAR_POSX 232

776#define MAX_CHAR_POSY 304

777

778u8 temp;

779u8 pos,t;

780

781if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;

782//设置窗口

783

784LCD_WriteReg(R80,x);//水平方向GRAM起始地址

785LCD_WriteReg(R81,x+(size/2-1));//水平方向GRAM结束地址

786LCD_WriteReg(R82,y);//垂直方向GRAM起始地址

787LCD_WriteReg(R83,y+size-1);//垂直方向GRAM结束地址

788LCD_SetCursor(x,y);//设置光标位置

789LCD_WriteRAM_Prepare();//开始写入GRAM

790num=num- ;//得到偏移后的值

791if(!mode)//非叠加方式

792{

793for(pos=0;pos

794{

795if(size==12)

796temp=asc2_1206[num][pos];//调用1206字体

797else

798temp=asc2_1608[num][pos];//调用1608字体

799

800for(t=0;t

801{

802if(temp&0x01){

803LCD_WR_DATA(POINT_COLOR);

804}else{

805LCD_WR_DATA(BACK_COLOR);

806}

807

808temp>>=1;

809}

810}

811}else{//叠加方式

812

813for(pos=0;pos

814{

815if(size==12)

816temp=asc2_1206[num][pos];//调用1206字体

817else

818temp=asc2_1608[num][pos];//调用1608字体

819for(t=0;t

820{

821if(temp&0x01)

822LCD_DrawPoint(x+t,y+pos);//画一个点

823temp>>=1;

824}

825}

826}

827//恢复窗体大小

828LCD_WriteReg(R80, 0x0000);//水平方向GRAM起始地址

829LCD_WriteReg(R81, (LCD_WIDTH-1));//水平方向GRAM结束地址

830LCD_WriteReg(R82, 0x0000);//垂直方向GRAM起始地址

831LCD_WriteReg(R83, (LCD_HEIGHT-1));//垂直方向GRAM结束地址

832

833#endif

834

835}

836

837//m^n函数

838u32 mypow(u8 m,u8 n)

839{

840u32 result=1;

841while(n--)result*=m;

842returnresult;

843}

844

845//显示数字

846//x,y :起点坐标

847//len :数字的位数

848//size:字体大小

849//color:颜色

850//num:数值(0~4294967295);

851voidLCD_ShowNum(u8 x,u16 y,u32 num,u8 len,u8 size)

852{

853u8 t,temp;

854u8 enshow=0;

855for(t=0;t

856{

857temp=(num/mypow(10,len-t-1))%10;

858if(enshow==0&&t<(len-1))

859{

860if(temp==0)

861{

862LCD_ShowChar(x+(size/2)*t,y, ,size,0);

863continue;

864}else{

865enshow=1;

866}

867}

868LCD_ShowChar(x+(size/2)*t,y,temp+0,size,0);

869}

870}

871

872

873//显示字符串

874//x,y:起点坐标

875//*p:字符串起始地址

876//用16字体

877voidLCD_ShowString(u8 x,u16 y,constu8 *p)

878{

879while(*p!=)//字符串到达结束

880{

881if(x>MAX_CHAR_POSX){x=0;y+=16;}//换行

882if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}//超出屏幕显示范围

883LCD_ShowChar(x,y,*p,16,0);

884x+=8;

885p++;

886}

887}

LCD/ili93xx.h (相关I/O操作在此文件中以宏定义的方式实现)

001#include "stm32f10x.h"

002

003//TFTLCD部分外要调用的函数

004externu16 POINT_COLOR;//默认红色

005externu16 BACK_COLOR;//背景颜色.默认为白色

006

007//定义LCD的尺寸

008#define LCD_WIDTH 240

009#define LCD_HEIGHT 320

010

011//9320/9325 LCD寄存器

012#define R0 0x00

013#define R1 0x01

014#define R2 0x02

015#define R3 0x03

016#define R4 0x04

017#define R5 0x05

018#define R6 0x06

019#define R7 0x07

020#define R8 0x08

021#define R9 0x09

022#define R10 0x0A

023#define R12 0x0C

024#define R13 0x0D

025#define R14 0x0E

026#define R15 0x0F

027#define R16 0x10

028#define R17 0x11

029#define R18 0x12

030#define R19 0x13

031#define R20 0x14

032#define R21 0x15

033#define R22 0x16

034#define R23 0x17

035#define R24 0x18

036#define R25 0x19

037#define R26 0x1A

038#define R27 0x1B

039#define R28 0x1C

040#define R29 0x1D

041#define R30 0x1E

042#define R31 0x1F

043#define R32 0x20

044#define R33 0x21

045#define R34 0x22

046#define R36 0x24

047#define R37 0x25

048#define R40 0x28

049#define R41 0x29

050#define R43 0x2B

051#define R45 0x2D

052#define R48 0x30

053#define R49 0x31

054#define R50 0x32

055#define R51 0x33

056#define R52 0x34

057#define R53 0x35

058#define R54 0x36

059#define R55 0x37

060#define R56 0x38

061#define R57 0x39

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top