历史上的今天
返回首页

历史上的今天

今天是:2024年11月08日(星期五)

正在发生

2021年11月08日 | Mini2440裸机液晶屏TD35驱动

2021-11-08 来源:eefocus

我把地址定义都加到.h文件中,使用时只需包含lcd_td35.h即可。


能简单实现画点,画线,画矩形,显示图片,显示字符和字符串,显示数字功能。


// lcd_td35.h

// 2015.12.16


#ifndef __LCD_TD35_H__

#define __LCD_TD35_H__


#define U32 unsigned int

#define U16 unsigned short

#define S32 int

#define S16 short int

#define U8  unsigned char

#define    S8  char


#define    BYTE    char

#define    WORD     short

#define    DWORD    int

#define    UINT    U32

#define    LPSTR    U8 *        


#define TRUE     1   

#define FALSE     0

#define OK        1

#define FAIL    0


// S3C2440地址宏定义

//=====================================================================

// I/O PORT 

#define rGPACON    (*(volatile unsigned *)0x56000000)    //Port A control

#define rGPADAT    (*(volatile unsigned *)0x56000004)    //Port A data


#define rGPBCON    (*(volatile unsigned *)0x56000010)    //Port B control

#define rGPBDAT    (*(volatile unsigned *)0x56000014)    //Port B data

#define rGPBUP     (*(volatile unsigned *)0x56000018)    //Pull-up control B


#define rGPCCON    (*(volatile unsigned *)0x56000020)    //Port C control

#define rGPCDAT    (*(volatile unsigned *)0x56000024)    //Port C data

#define rGPCUP     (*(volatile unsigned *)0x56000028)    //Pull-up control C


#define rGPDCON    (*(volatile unsigned *)0x56000030)    //Port D control

#define rGPDDAT    (*(volatile unsigned *)0x56000034)    //Port D data

#define rGPDUP     (*(volatile unsigned *)0x56000038)    //Pull-up control D


#define rGPECON    (*(volatile unsigned *)0x56000040)    //Port E control

#define rGPEDAT    (*(volatile unsigned *)0x56000044)    //Port E data

#define rGPEUP     (*(volatile unsigned *)0x56000048)    //Pull-up control E


#define rGPFCON    (*(volatile unsigned *)0x56000050)    //Port F control

#define rGPFDAT    (*(volatile unsigned *)0x56000054)    //Port F data

#define rGPFUP     (*(volatile unsigned *)0x56000058)    //Pull-up control F


#define rGPGCON    (*(volatile unsigned *)0x56000060)    //Port G control

#define rGPGDAT    (*(volatile unsigned *)0x56000064)    //Port G data

#define rGPGUP     (*(volatile unsigned *)0x56000068)    //Pull-up control G


#define rGPHCON    (*(volatile unsigned *)0x56000070)    //Port H control

#define rGPHDAT    (*(volatile unsigned *)0x56000074)    //Port H data

#define rGPHUP     (*(volatile unsigned *)0x56000078)    //Pull-up control H


#define rGPJCON    (*(volatile unsigned *)0x560000d0)    //Port J control

#define rGPJDAT    (*(volatile unsigned *)0x560000d4)    //Port J data

#define rGPJUP     (*(volatile unsigned *)0x560000d8)    //Pull-up control J


// PWM TIMER 1

#define rTCFG0  (*(volatile unsigned *)0x51000000)    //Timer 0 configuration

#define rTCFG1  (*(volatile unsigned *)0x51000004)    //Timer 1 configuration

#define rTCON   (*(volatile unsigned *)0x51000008)    //Timer control

#define rTCNTB1 (*(volatile unsigned *)0x51000018)    //Timer count buffer 1

#define rTCMPB1 (*(volatile unsigned *)0x5100001c)    //Timer compare buffer 1

#define rTCNTO1 (*(volatile unsigned *)0x51000020)    //Timer count observation 1

// TIMER 3

#define rTCNTB3 (*(volatile unsigned *)0x51000030)    //Timer count buffer 3

#define rTCMPB3 (*(volatile unsigned *)0x51000034)    //Timer compare buffer 3

#define rTCNTO3 (*(volatile unsigned *)0x51000038)    //Timer count observation 3


// LCD CONTROLLER

#define rLCDCON1    (*(volatile unsigned *)0x4d000000)    //LCD control 1

#define rLCDCON2    (*(volatile unsigned *)0x4d000004)    //LCD control 2

#define rLCDCON3    (*(volatile unsigned *)0x4d000008)    //LCD control 3

#define rLCDCON4    (*(volatile unsigned *)0x4d00000c)    //LCD control 4

#define rLCDCON5    (*(volatile unsigned *)0x4d000010)    //LCD control 5

#define rLCDSADDR1  (*(volatile unsigned *)0x4d000014)    //STN/TFT Frame buffer start address 1

#define rLCDSADDR2  (*(volatile unsigned *)0x4d000018)    //STN/TFT Frame buffer start address 2

#define rLCDSADDR3  (*(volatile unsigned *)0x4d00001c)    //STN/TFT Virtual screen address set

#define rREDLUT     (*(volatile unsigned *)0x4d000020)    //STN Red lookup table

#define rGREENLUT   (*(volatile unsigned *)0x4d000024)    //STN Green lookup table 

#define rBLUELUT    (*(volatile unsigned *)0x4d000028)    //STN Blue lookup table

#define rDITHMODE   (*(volatile unsigned *)0x4d00004c)    //STN Dithering mode

#define rTPAL       (*(volatile unsigned *)0x4d000050)    //TFT Temporary palette

#define rLCDINTPND  (*(volatile unsigned *)0x4d000054)    //LCD Interrupt pending

#define rLCDSRCPND  (*(volatile unsigned *)0x4d000058)    //LCD Interrupt source

#define rLCDINTMSK  (*(volatile unsigned *)0x4d00005c)    //LCD Interrupt mask

#define rTCONSEL     (*(volatile unsigned *)0x4d000060)    //LPC3600 Control --- edited by junon

#define PALETTE     0x4d000400                        //Palette start address

//=================================================================================


// LCD_TD35

#define LCD_TD35

#define LCD_WIDTH 240

#define LCD_HEIGHT 320


#define LCD_PIXCLOCK 4


#define LCD_RIGHT_MARGIN 100

#define LCD_LEFT_MARGIN 0

#define LCD_HSYNC_LEN 4


#define LCD_UPPER_MARGIN 0

#define LCD_LOWER_MARGIN 0

#define LCD_VSYNC_LEN 9


// 延时Ms

void Lcd_Delay_Ms(int time);

// LCD背光

void LcdBkLtSet(U32 HiRatio);


// 初始化用于LCD的引脚

void Lcd_Port_Init(void);


// MODE_16BIT_240320

void Lcd_Init(void);


/*

 * 设置是否输出LCD电源开关信号LCD_PWREN

 * 输入参数:

 *     invpwren: 0 - LCD_PWREN有效时为正常极性

 *               1 - LCD_PWREN有效时为反转极性

 *     pwren:    0 - LCD_PWREN输出有效

 *               1 - LCD_PWREN输出无效

 */

void Lcd_PowerEnable(int invpwren, int pwren);

// LCD控制器是否输出信号

void Lcd_EnvidOnOff(int onoff);

// 完成所有初始化

void Lcd_TD35_Init(void);

// 画像素点

void PutPixel(U32 x,U32 y,U16 c);

// 用单颜色清屏(5:6:5 RGB)

void Lcd_ClearScr(U16 c);

// 画线

void Draw_Line(int x1,int y1,int x2,int y2, U16 color);

// 画矩形

void Draw_Rectangle(int x1,int y1,int x2,int y2, U16 color);

// 显示图片(240x320)

void Draw_Bmp(int x0,int y0,int h,int l,const unsigned char *bmp);

// 显示ASCII 字符

// x,y:起始坐标

// color:颜色

// size:字体大小 12/16/24

// mode:当前背景(1)自定义白色背景(0)

// ch:要显示的字符:" "--->"~"

void Draw_Char(U16 x, U16 y, U16 color, U8 size, U8 mode, U8 ch);

// 显示字符串

// x,y:起点坐标

// width,height:区域大小  

// color:颜色

// size:字体大小 12/16/24

// mode:当前背景(1)自定义白色背景(0)

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

void Draw_String(U16 x, U16 y, U16 width, U16 height, U16 color, U8 size, U8 mode, U8 p[]);  

// m^n次方

U32 Lcd_Pow(U8 m,U8 n);

// 显示数字

// x,y:起点坐标

// color:颜色

// size:字体大小 12/16/24

// mode:当前背景(1)自定义白色背景(0)

// num:  

// len:显示位数

// 超过前面是否补0,是(1)

void Draw_Num(U16 x,U16 y,U16 color,U8 size,U8 mode,U32 num,U8 len,U8 show0);



// 测试用

void Lcd_TD35_Test(void);


#endif

// lcd_td35.c

// 2015.12.16


#include "lcd_td35.h"

#include "lcd_font.h"

#include "scene1_240x320.h" // 包含图片数据


#define GPB1_TO_OUT()       (rGPBUP &= 0xfffd, rGPBCON &= 0xfffffff3, rGPBCON |= 0x00000004)

#define GPB1_TO_1()         (rGPBDAT |= 0x0002)

#define GPB1_TO_0()         (rGPBDAT &= 0xfffd)



#define LCD_XSIZE  LCD_WIDTH    // 240

#define LCD_YSIZE  LCD_HEIGHT   // 320

#define SCR_XSIZE  LCD_WIDTH

#define SCR_YSIZE  LCD_HEIGHT   


volatile static unsigned short LCD_BUFFER[SCR_YSIZE][SCR_XSIZE];



void Lcd_Delay_Ms(int time)

{

    // PCLK=50MHz

    //U32 val = (PCLK>>3)/1000-1;

    U32 val = (50000000>>3)/1000-1; // 6250-1=6249


    rTCFG0 &= ~(0xff<<8);

    rTCFG0 |= 3<<8;         //prescaler = 3+1

    rTCFG1 &= ~(0xf<<12);

    rTCFG1 |= 0<<12;        //mux = 1/2


    rTCNTB3 = val;          //1000Hz   freq=50M/4/2/6249

    rTCMPB3 = val>>1;       // 50%

    rTCON &= ~(0xf<<16);

    rTCON |= 0xb<<16;       //interval, inv-off, update TCNTB3&TCMPB3, start timer 3

    rTCON &= ~(2<<16);      //clear manual update bit

    while(time--) {

        while(rTCNTO3>=val>>1);

        while(rTCNTO3>1);

    };

}


void LcdBkLtSet(U32 HiRatio)

{

#define FREQ_PWM1       1000


    if(!HiRatio)

    {

        rGPBCON  = rGPBCON & (~(3<<2)) | (1<<2);

        rGPBDAT &= ~(1<<1);

        return;

    }

    rGPBCON = rGPBCON & (~(3<<2)) | (2<<2);

    

    if( HiRatio > 100 )

        HiRatio = 100 ; 

推荐阅读

史海拾趣

富瀚(Fullhan)公司的发展小趣事
确保电动机保护器已正确安装并连接到电动机上,同时准备好测试用的负载设备(如电阻箱或可调负载器)。
川晶科技公司的发展小趣事

品质是川晶科技的生命线。公司始终将品质管理贯穿于产品研发、生产、销售等各个环节,严格执行质量管理体系标准。通过引进先进的检测设备和方法,加强产品质量控制和检验,确保每一件产品都符合客户的要求和期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。川晶科技凭借卓越的品质和优质的服务赢得了客户的信赖和支持。

Able Systems公司的发展小趣事

随着电子行业的不断变革,Able Systems公司也面临着新的挑战。例如,新技术的出现、市场需求的变化等都对公司的发展提出了新的要求。然而,Able Systems始终保持着敏锐的市场洞察力,不断调整战略,积极应对挑战。通过不断创新和改进,公司成功克服了各种困难,保持了稳健的发展态势。

Excelight Communications Inc公司的发展小趣事

Excelight Communications Inc公司成立于XX世纪初,当时正值通信技术飞速发展的时代。创始人李明(化名)是一位电子工程专家,他对光通信技术有着浓厚的兴趣。在创办公司之前,李明曾在一家大型通信企业工作,积累了丰富的技术和管理经验。他发现市场上对于高速、高效的光通信产品有着巨大的需求,于是决定创立Excelight,专注于研发和生产光通信模块和设备。

创业初期,Excelight面临着资金、技术和市场等多方面的挑战。李明带领团队日夜兼程,不断攻克技术难关,同时积极寻找合作伙伴和投资人。经过几年的努力,Excelight逐渐在市场上崭露头角,其光通信产品因性能优越、价格合理而受到了客户的广泛好评。

ETERNA公司的发展小趣事

ETERNA公司起源于1856年,由格斯塔夫·罗斯切尔德和约翰·乌尔里希在瑞士的圣伊米尔创立。自成立之初,ETERNA便以精湛的制表工艺和不懈的创新精神闻名于世。公司不断推出具有划时代意义的腕表产品,其中最具代表性的是其“五点星座”设计,这一设计成为了品牌的象征,并引领了制表业的新潮流。ETERNA通过不断的技术创新和设计突破,逐渐在电子行业中崭露头角。

EMI Filter Company公司的发展小趣事

Kemet公司在EMI滤波器领域也有着一席之地。他们致力于研发符合环保标准的EMI滤波器。随着全球对环保问题的日益重视,Kemet看到了绿色环保EMI滤波器的巨大潜力。他们采用环保材料和无铅工艺,生产出了符合RoHS标准的EMI滤波器。这些产品不仅性能稳定,而且对环境友好,赢得了众多环保意识强烈的客户的青睐。

问答坊 | AI 解惑

求教PFC电路LT1248芯片问题

我的PFC电路用的是LT1248芯片,输出500W,后面是半桥电路输出36V14A,半桥都调的没什么问题了,就是带载后PFC这边有响声,载越大响声越大,PFC电感用铁硅铝环绕了40圈,感量在700多MH,电感前电容680V225,电路就是照资料上搭的,大家看附件,多多 ...…

查看全部问答>

2410或2440具有WIFI模块的开发板,那里有

如题,最近想试着开发一款基于WIFI下应用的小设备,但是却找不到具有WIFI功能的2410或2440的开发板,其它的ARM11的有,但不适用,只要2410和2440的,如有知道的朋友麻烦回复一下,那里有卖,最好是珠三角的城市的公司…

查看全部问答>

急求FPGA设计的多功能波形发生器的目标芯片

小女子做的课题,初次接触FPGA的设计 用的是Quartus2的平台运行,综合编译已通过,但是时序仿真出了错:说是目标芯片不适用。 求各位大侠能指点指点,给出合适波形发生器的芯片型号,先在此谢过 下为VHDL开头部分程序: library ieee; use ie ...…

查看全部问答>

msp430串口通讯问题:不能进入接收中断

   我想实习通过串口调试助手向单片机发送一个字符,单片机接收后发回pc机,通讯线路完好,能实习单片机向pc机发送,但就是不能进入接收中断,请高手帮帮忙~谢谢   p3.4为发送,p3.5为接收,通过max3221转化。 代码: &n ...…

查看全部问答>

cec文件中Guid是怎么生成的?

{35E7043C-EEA9-11d2-A092-0060085C1832}…

查看全部问答>

寻求合作人,关于arm 9200

  由于项目工期缩短,寻找合作伙伴,大概情况是这样的:板子已经做好了,可以正常的启动,linux也可以运行,并且我已经做了一些测试用的驱动等,现在我想找人帮我做网络接口部分的程序,要求是:能自动拨号上网(ADSL,固定IP),掉线自 ...…

查看全部问答>

求windows ce 程序设计第二版 中文版电子书

请发到我邮箱,直接粘附件。 leslie.li@delphi.com…

查看全部问答>

新人求教,舵机的控制问题

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 我编了个舵机控制程序,想让舵机转到90度,延时一会,再转到180度,但无论我如何改jd,舵机总是转到最右边。我又在网上下了一个程序,也是一样的,舵机直接转到最右边,我快奔溃了。程序使用keil遍的 ...…

查看全部问答>

【问TI】MSP430F1612的HEX文件能否直接烧入到MSP430F149里面

MSP430F1612的HEX文件能否直接烧入到MSP430F149里面…

查看全部问答>