我把地址定义都加到.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 ; 

[1] [2] [3]
关键字:Mini2440  裸机  液晶屏 引用地址:Mini2440裸机液晶屏TD35驱动

上一篇:S3C2440裸机学习[2] - LCD驱动原理及代码分析[二]
下一篇:MINI2440裸机实验之LCD

推荐阅读

1、业界|太空机器人:俄罗斯欲建造机器人月球基地罗斯航天局Roscosmos计划建立一个技术系统,听起来好像直接来自科幻电影管理其最近宣布的月球基地。Roscosmos上周公布了建立月球基地的计划,俄罗斯计划在未来二十年内登陆月球表面。现在,机构管理员Dimitry Rogozin已经解释说,用于管理长期基地的系统将涉及人类在地球上操作机器人在月球上的化身。据俄...
很多富有经验的工程师毫无怀疑的记着当仅有的调制技术是模拟调制而功放的性能可以用加性高斯白噪声(AWGN)来验证时设计一个基站或移动电话的放大器是如何的简单。现在,第二代及以后的无线网络需要用到数字调制技术,使用服务中所提供的信号来激励功放或其他电路就成为了必须。因此需要将基带信号处理和射频/微波电路设计工具与实际的产生调制信号和评估其...
法律规定,汽车必须配备危险信号灯按钮,按下按钮,警示灯就会闪烁。但是,法律却没有让事情变得简单,反而为给未来的汽车配备新型闪烁黄灯既提供了机遇,也带来了挑战。(图片来源:ESS)据外媒报道,美国国家高速公路交通安全管理局(NHTSA)规定,危险信号灯可以让公共道路上的机动车更显眼,增强其在太阳光和黑暗或其他条件下的能见度。但,Emergency...
疫情反复之下,全球遭遇“芯片荒”,半导体行业发展受到关注。正在上海举行的第四届进博会上,业内人士指出,基于全球生产基地和巨大市场两大属性,中国对全球半导体产业“两链”稳定颇为重要,尤其粤港澳大湾区作用值得期待。  在进博会期间举行的粤港澳大湾区半导体产业国际合作论坛上,中国商务部对外贸易司副司长张冠彬表示,新冠疫情暴发以来,居家...

史海拾趣

问答坊 | AI 解惑

串口到光纤解决远距离传输中的应用的方案

RS485网络与光纤网络的问题概述以及解决方案  一、 传统485通信存在问题   配网自动化设备大多暴露在室外,环境恶劣,因此必须能够抵御高温、低温、日晒、雨淋、风雪、冰雹和雷电等自然环境的侵袭。同时,尽量避免各种电磁干扰,保证长期稳定可 ...…

查看全部问答∨

电子元件基础教程

非常基础的有关元器件知识的教程…

查看全部问答∨

请各位大大帮看看这程序错在哪里啊?

红外遥控电子密码锁的程序 小弟感激不尽啊!…

查看全部问答∨

Lattic器件 在Modelsim中怎么建立仿真库

问题:很多关于在Modeksim仿真下Xilinx与Altera的建立仿真库存的方法,但是没有谈到Lattic的仿真库的方法,关键不知道相关的文件放在哪里\" 方法:在MODELSIM的库文件夹下新建一个文件夹,再用MODELSIM将LATTICE的器件库编译到这个文件夹中,再把这 ...…

查看全部问答∨

sqlite3.6.10的wince版本问题

刚接触sqlite,请问最新的sqlite3.6.10的wince版本现在有吗?有的话哪里获取? 没有的话可以利用官网上的源文件自己编译吗?可以的话要修改什么? 谢谢…

查看全部问答∨

问下删除注册表SubKey的问题

我现在在WinCE的Local Machine下的software下建立了subkey,AA,然后我就行用代码删除subkey,用registrykey=registry.loacalmachine.openkey("software",true);然后registrykey.deletsubkey("AA"),老是提示没有权限去删除,请问该怎么做好 ...…

查看全部问答∨

朋友们进来接分喽

我在深圳搞嵌入式开发,近来有创业的念头。 问问大家订什么报纸比较适合我看,好了解一下现在市场的大背景。 培训嵌入式的机构有教驱动开发吗?深圳有哪些有名的培训机构啊? 进来的朋友都有分的,哈哈! …

查看全部问答∨

EEPROM的程序错在哪里?

#include <AT89X51.H> #include <intrins.h> //***********************<define.h>**************************************** #define uchar unsigned char #define uint unsigned int #define EEPROMSTARTADDR    0x20 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved