我把地址定义都加到.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 }; } 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 ;
上一篇:S3C2440裸机学习[2] - LCD驱动原理及代码分析[二]
下一篇:MINI2440裸机实验之LCD
推荐阅读
史海拾趣
随着公司规模的不断扩大和市场竞争的加剧,Corex Intervest Inc公司意识到单打独斗已经无法满足市场需求。因此,公司开始积极寻求与其他企业的战略合作,共同推动电子行业的发展。公司与多家知名企业建立了战略合作关系,共同研发新产品、开拓新市场,实现了资源共享和互利共赢。
随着国内市场的逐渐饱和,成都华微科技开始将目光投向国际市场。公司凭借过硬的产品质量和完善的服务体系,逐渐在国际市场上崭露头角。通过与国外客户的深入合作,华微科技不仅提升了自身的国际影响力,也为中国集成电路设计行业在国际市场上赢得了更多的话语权。
随着全球经济的一体化,电子行业也逐渐呈现出全球化的趋势。Connor-Winfield敏锐地把握住了这一机遇,开始实施全球化战略。公司积极拓展海外市场,与多家国际知名企业建立了紧密的合作伙伴关系。这些合作不仅为公司带来了更多的商业机会,也使其在全球化竞争中保持了领先地位。
町洋始终坚守品质至上的原则,从原材料采购到生产流程再到成品检验,每一个环节都严格把关。这种对品质的执着追求使得町洋的产品在市场上享有极高的声誉。客户对町洋产品的信任和认可也成为了公司最宝贵的财富。
随着电子行业的快速发展和市场竞争的加剧,Dearborn Electronics Inc.面临着诸多挑战。为了保持竞争优势,公司不断进行转型升级,推出了一系列具有更高性能、更小尺寸、更低成本的新产品。同时,公司也积极拓展新的应用领域和市场,寻找新的增长点。
人才是企业发展的核心驱动力。CUI公司深知这一点,因此一直注重人才培养和引进。公司建立了完善的人才培养和激励机制,为员工提供了广阔的发展空间和良好的职业前景。同时,公司还积极与高校和研究机构合作,引进高层次人才和技术成果,为公司的创新发展提供了强大的智力支持。
以上五个故事框架只是基于电子行业CUI公司可能的发展路径和趋势的构想,并不特指任何具体的公司或事件。在实际情况中,每个公司的发展故事都是独一无二的,受到多种因素的影响和塑造。
RS485网络与光纤网络的问题概述以及解决方案 一、 传统485通信存在问题 配网自动化设备大多暴露在室外,环境恶劣,因此必须能够抵御高温、低温、日晒、雨淋、风雪、冰雹和雷电等自然环境的侵袭。同时,尽量避免各种电磁干扰,保证长期稳定可 ...… 查看全部问答∨ |
|
问题:很多关于在Modeksim仿真下Xilinx与Altera的建立仿真库存的方法,但是没有谈到Lattic的仿真库的方法,关键不知道相关的文件放在哪里\" 方法:在MODELSIM的库文件夹下新建一个文件夹,再用MODELSIM将LATTICE的器件库编译到这个文件夹中,再把这 ...… 查看全部问答∨ |
|
刚接触sqlite,请问最新的sqlite3.6.10的wince版本现在有吗?有的话哪里获取? 没有的话可以利用官网上的源文件自己编译吗?可以的话要修改什么? 谢谢… 查看全部问答∨ |
|
我现在在WinCE的Local Machine下的software下建立了subkey,AA,然后我就行用代码删除subkey,用registrykey=registry.loacalmachine.openkey("software",true);然后registrykey.deletsubkey("AA"),老是提示没有权限去删除,请问该怎么做好 ...… 查看全部问答∨ |
|
#include <AT89X51.H> #include <intrins.h> //***********************<define.h>**************************************** #define uchar unsigned char #define uint unsigned int #define EEPROMSTARTADDR 0x20 ...… 查看全部问答∨ |