S3C2451_lcd 函数封装
来源:互联网 发布:跳跃网络300tank是什么 编辑:程序博客网 时间:2024/06/11 00:34
S3C2451_lcd.h#ifndef _S3C2451_LCD_H__#define _S3C2451_LCD_H__#include "typedef.h"typedef struct{ U32 VIDCON0; U32 VIDCON1; U32 VIDTCON0; U32 VIDTCON1; U32 VIDTCON2; U32 WINCON0; U32 WINCON1; U32 UNUSED1; U32 UNUSED2; U32 UNUSED3; U32 VIDOSD0A; U32 VIDOSD0B; U32 UNUSED4; U32 VIDOSD1A; U32 VIDOSD1B; U32 VIDOSD1C; U32 UNUSED5[9]; U32 VIDW00ADD0B0; U32 VIDW00ADD0B1; U32 VIDW01ADD0; U32 UNUSED6; U32 UNUSED7; U32 UNUSED8; U32 VIDW00ADD1B0; U32 VIDW00ADD1B1; U32 VIDW01ADD1; U32 UNUSED9; U32 UNUSED10; U32 UNUSED11; U32 VIDW00ADD2B0; U32 VIDW00ADD2B1; U32 VIDW01ADD2; U32 UNUSED12; U32 UNUSED13; U32 UNUSED14; U32 VIDINTCON; U32 W1KEYCON0; U32 W1KEYCON1; U32 W2KEYCON0; U32 W2KEYCON1; U32 W3KEYCON0; U32 W3KEYCON1; U32 W4KEYCON0; U32 W4KEYCON1; U32 WIN0MAP; U32 WIN1MAP; }volatile *LCD_MemMapPtr;#define LCDCTRL_BASE_PTR ((LCD_MemMapPtr)0x4C800000)#define FRAME_BUFFER LCD_BUFFER/*TD35*/#if 0#define LCD_X 240#define LCD_Y 320#define HSPW (4)#define HBPD (101 - 1)#define HFPD (1 - 1)#define VSPW (9)#define VBPD (1 - 1)#define VFPD (1 - 1)#define LINEVAL (LCD_Y-1)#define HOZVAL (LCD_X-1)#else/*P43*/#define LCD_X 480#define LCD_Y 272#define HSPW (30)#define HBPD (10)#define HFPD (19)#define VSPW (8)#define VBPD (2)#define VFPD (4)#define LINEVAL (LCD_Y-1)#define HOZVAL (LCD_X-1)#endif#define LeftTopX 0#define LeftTopY 0#define RightBotX (LCD_X-1)#define RightBotY (LCD_Y-1)//extern const unsigned char zero2nine8x16[11][17];//extern const char char_mode8x15[][15];//const unsigned char feiji_320x240[]£»//extern const unsigned char gImage_picture[];extern void LCD_GPIO_Init(void); //³õʼ»¯ LCDÏà¹ØGPIOextern void LCD_Init(void); //³õʼ»¯LCDÅäÖòÎÊýextern void LCD_PutPixel(U32 x,U32 y,U32 c);extern void LCD_Clear( U32 c);extern void LCD_Display_Bmp(int x0,int y0,int h,int l,const unsigned char *bmp);extern void LCD_Display_8x16(U32 x, U32 y, U32 col, const unsigned char ch[]);extern void LCDDisplay_Char(U32 x, U32 y, U32 col, char s);extern void LCDDisplay_String(U32 x, U32 y, U32 col, char *s);#endifS3C2451_lcd.c#include "S3C2451_lcd.h"#include "S3C2451_gpio.h"LCD_MemMapPtr const LCD_BASE_PTR = LCDCTRL_BASE_PTR;volatile unsigned int LCD_BUFFER[LCD_Y][LCD_X];//0x000000//0xff0000void LCD_GPIO_Init(void){ //端口复用设置 GPIO_Init_Typedef gpio_init_struct; gpio_init_struct.pinx = 0x0000ffff; gpio_init_struct.mode = GPIO_MODE_ALT; gpio_init_struct.udp = GPIO_UDP_PULLUP; GPIO_Init(GPIOC,gpio_init_struct); gpio_init_struct.pinx = 0x0000ffff; gpio_init_struct.mode = GPIO_MODE_ALT; gpio_init_struct.udp = GPIO_UDP_PULLUP; GPIO_Init(GPIOD,gpio_init_struct); //背光控制 gpio_init_struct.pinx = GPIO_PIN_1; gpio_init_struct.mode = GPIO_MODE_OUT; gpio_init_struct.udp = GPIO_UDP_PULLUP; GPIO_Init(GPIOB,gpio_init_struct); GPIO_WriteBit(GPIOB,GPIO_PIN_1,BIT_SET); //电源控制 gpio_init_struct.pinx = GPIO_PIN_2; gpio_init_struct.mode = GPIO_MODE_OUT; gpio_init_struct.udp = GPIO_UDP_PULLUP; GPIO_Init(GPIOG,gpio_init_struct); GPIO_WriteBit(GPIOG,GPIO_PIN_2,BIT_SET);}void LCD_Init(void){ // 配置VIDCONx,设置接口类型、时钟、极性和使能LCD控制器等/ LCD_BASE_PTR->VIDCON0 = (0<<22)|(0<<13)|(9<<6)|(1<<5)|(1<<4)|(0<<2)|(3<<0); LCD_BASE_PTR->VIDCON1 |= (1<<6)|(1<<5); // 配置VIDTCONx,设置时序和长宽等 // 设置时序 LCD_BASE_PTR->VIDTCON0 = VBPD<<16 | VFPD<<8 | VSPW<<0; LCD_BASE_PTR->VIDTCON1 = HBPD<<16 | HFPD<<8 | HSPW<<0; // 设置长宽 LCD_BASE_PTR->VIDTCON2 = (LINEVAL << 11) | (HOZVAL << 0); // 配置WINCON0,设置window0的数据格式 LCD_BASE_PTR->WINCON0 = 0xB<<2; //RGB888 LCD_BASE_PTR->WINCON0 |= (1<<0);// LCD_BASE_PTR->WINCON0 &= ~(0xf << 2); // 配置VIDOSD0A/B/C,设置window0的坐标系 LCD_BASE_PTR->VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0); LCD_BASE_PTR->VIDOSD0B = (RightBotX<<11) | (RightBotY << 0); // 置VIDW00ADD0B0和VIDW00ADD1B0,设置framebuffer的地址 LCD_BASE_PTR->VIDW00ADD0B0 = (unsigned long)FRAME_BUFFER; //显示的BUFFER LCD_BASE_PTR->VIDW00ADD1B0 =(unsigned long)FRAME_BUFFER + sizeof(FRAME_BUFFER);}/*LCD描点函数*/void LCD_PutPixel(U32 x,U32 y,U32 c){ if(x>=LCD_X||y>=LCD_Y) return; LCD_BUFFER[y][x] = c;}/*LCD清屏函数*/void LCD_Clear( U32 c){ U16 x,y; for(y=0;y<LCD_Y;y++) for(x=0;x<LCD_X;x++) { LCD_BUFFER[y][x] = c; //delay(100000); }}/*LCD 显示图片*/void LCD_Display_Bmp(int x0,int y0,int w,int h,const unsigned char *bmp){ U16 x,y; U32 c; U32 i=0; for(y=0;y<h;y++) for(x=0;x<w;x++) { c = bmp[i]<<24 | bmp[i+1]<<16 | bmp[i+2]<<8 | bmp[i+3]; LCD_PutPixel(x0+x,y0+y,c); i+=4; }}void LCDDisplay_Char(U32 x, U32 y, U32 col, char s){// int i;// // for(i=0;i<11;i++)// {// if(zero2nine8x16[i][0] == s)// {// break; // }// }// // LCD_Display_8x16(x,y,col,&zero2nine8x16[i][1]);}void LCDDisplay_String(U32 x, U32 y, U32 col, char *s){ U16 ypos =y; do{ LCDDisplay_Char(x, ypos, col, *s); ypos+=8; s++; }while(*s != '\0');}void LCD_Display_8x16(U32 x, U32 y, U32 col, const unsigned char ch[]){ unsigned short i, j; unsigned char mask, tem ; for(i=0; i<16; i++) { mask= 0x80 ; tem = ch[i] ; //俩个字节一组16位,取第一个字节 for(j=0; j<8; j++) { if(tem & mask) { LCD_PutPixel(y+j, x+i+8, col) ; } mask = mask >> 1 ; } }}void LCD_Display_8x15(U32 x, U32 y, U32 col, const unsigned char ch[]){ unsigned short i, j; unsigned char mask, tem ; for(i=0; i<15; i++) { mask= 0x80 ; tem = ch[i] ; //俩个字节一组16位,取第一个字节 for(j=0; j<8; j++) { if(tem & mask) { LCD_PutPixel(x+j, y+i, col) ; }else LCD_PutPixel(x+j, y+i, 0) ; mask = mask >> 1 ; } }}#if 0void LCD_Display_mxn(U32 x, U32 y, U32 col, U16 width, U16 height, const unsigned char ch[]){ unsigned short i, j; unsigned char mask, tem ; int byteperline = (width +7)/8 ; char *ptr; ptr = ch; for(i=0; i<height; i++){ ptr += i * byteperline; for(m= 0; m < byteperline; m ++){ mask= 0x80 ; tem = *(ptr + m); //俩个字节一组16位,取第一个字节 for(j=0; j<8; j++) { if(tem & mask) { LCD_PutPixel(x+ m*8+j, y+i, col) ; }else LCD_PutPixel(x+ m*8+j, y+i, 0) ; mask = mask >> 1 ; } } }}void LCD_Display_Char((U32 x, U32 y, U32 col, U16 width, U16 height, char *charBase[], char chard){ LCD_Display_mxn(x, y, col,width, height,charBase[chard - ' ']);}#endif
0 0
- S3C2451_lcd 函数封装
- S3C2451_lcd屏显示操作详解代码_ARM
- 函数封装
- 封装函数
- 函数封装
- 封装函数
- 函数封装
- 封装函数
- 封装函数
- 函数的封装解释
- uname函数初步封装
- VML绘图函数封装
- API常用函数封装
- 封装线程函数
- Python 函数封装
- JavaScript基本函数封装
- 封装的VC函数
- VML绘图函数封装
- js实现二分查找
- 一个屌丝程序猿的人生(六十三)
- java代码通过ssh免密操作远程服务器shell
- 设计模式--MVVM
- Day2
- S3C2451_lcd 函数封装
- c++ 小数的四舍五入
- 冒泡排序&选择排序
- 阿里巴巴java开发手册一方库、二方库、三方库都是什么
- Ubuntu常用快捷键
- WebSocket之解析数据帧
- 题目1091:棋盘游戏
- 效率(3)PPT
- 数据结构与算法学习笔记第一天--什么是数据结构