TQ2440裸板---lcd液晶显示(详细注释)
来源:互联网 发布:java 引用类型 编辑:程序博客网 时间:2024/04/28 10:39
lcd.h
#include "uart.h"#include <stdlib.h>#include <string.h>#include "def.h"#include "option.h"#include "2440addr.h"#include "2440lib.h"#include "2440slib.h"#define MVAL (13)#define MVAL_USED (0) //MMODE#define INVVDEN (1)#define BSWP (0)#define HWSWP (1)#define PNRMODE (3)#define BPPMODE (12)#define LCD_XSIZE_TFT (480)#define LCD_YSIZE_TFT (272)#define SCR_XSIZE_TFT (480)#define SCR_YSIZE_TFT (272)#define VBPD (2)#define VFPD (4)#define VSPW (8)#define HBPD (10)#define HFPD (19)#define HSPW (30)#define CLKAVL_TFT (4)#define FRM565 (1)#define LINEVAL (LCD_YSIZE_TFT-1)#define HOZVAL (LCD_XSIZE_TFT-1)#define M5D(n) ((n) & 0x1fffff)volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];void lcd_init(void){rGPCUP = 0x00000000;rGPCCON = 0xaaaa02a9;rGPDUP = 0x0;rGPDCON = 0xaaaaaaaa;//设置频率 | 确定vm的改变速度,设置为每帧变化模式 | 设置扫描方式 | 确定每个像素的位数模式rLCDCON1 = ((CLKAVL_TFT<<8)|(MVAL_USED<<7)|(MVAL_USED<<5)|(BPPMODE<<1)|0);//看时序图 | 确定显示的垂直方向的尺寸 |看时序图 |看时序图 rLCDCON2 = ((VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW));//看时序图 | 确定显示的水平方向的尺寸 |看时序图 rLCDCON3 = ((HBPD<<19)|(HOZVAL<<8|(HFPD)));//看时序图 |看时序图 (bit[15:8] MVAL,只有当LCDCON1 bit[7] MMODE=1才有效);bit[7:0](5:HSPW)rLCDCON4 = ((MVAL<<8)|(HSPW));//颜色格式设置rLCDCON5 = ((FRM565<<11)|(1<<9)|(1<<8)|(BSWP<<1)|(HWSWP));//视频帧缓冲区内存地址30-22位 | 视频帧缓冲区的开始地址21-1位rLCDSADDR1 = ((((U32)LCD_BUFFER>>22)<<21)|(M5D((U32)LCD_BUFFER>>1)));//视频帧缓冲区的结束地址21-1位rLCDSADDR2 = M5D(((U32)LCD_BUFFER + (SCR_XSIZE_TFT*SCR_YSIZE_TFT*2))>>1);//帧缓冲的对于屏幕的偏移 | 显示的宽度rLCDSADDR3 = (((SCR_XSIZE_TFT - LCD_XSIZE_TFT) << 11) | (LCD_XSIZE_TFT));rLCDINTMSK |= (3);//禁止LPC3600/LCC3600模式rTCONSEL &= (~7);//禁止调色板rTPAL = 0;}//设置lcd显示器的开关void lcd_envidONOFF(int onoff){if(onoff == 1){rLCDCON1 |= 1;}else{rLCDCON1 &= (~1);}}void lcd_ClearScr(U32 c){unsigned int x, y;for(y=0; y < SCR_YSIZE_TFT; y++){for(x=0; x<SCR_XSIZE_TFT; x++){LCD_BUFFER[y][x] = c;}}}void putPixel(U32 x, U32 y, U32 c){if((x<SCR_XSIZE_TFT) && (y<SCR_YSIZE_TFT))LCD_BUFFER[(y)][(x)] = c;}void glib_line(int x1, int y1, int x2, int y2, int color){int dx, dy, e;dx = x2 - x1;dy = y2 - y1;if(dx>=0){if(dy >= 0) // dy>=0{if(dx>=dy) // 1/8 octant{e=dy-dx/2;while(x1<=x2){putPixel(x1,y1,color);if(e>0){y1+=1;e-=dx;}x1+=1;e+=dy;}}else// 2/8 octant{e=dx-dy/2;while(y1<=y2){putPixel(x1,y1,color);if(e>0){x1+=1;e-=dy;}y1+=1;e+=dx;}}}else // dy<0{dy=-dy; // dy=abs(dy)if(dx>=dy) // 8/8 octant{e=dy-dx/2;while(x1<=x2){putPixel(x1,y1,color);if(e>0){y1-=1;e-=dx;}x1+=1;e+=dy;}}else// 7/8 octant{e=dx-dy/2;while(y1>=y2){putPixel(x1,y1,color);if(e>0){x1+=1;e-=dy;}y1-=1;e+=dx;}}}}else //dx<0{dx=-dx;//dx=abs(dx)if(dy >= 0) // dy>=0{if(dx>=dy) // 4/8 octant{e=dy-dx/2;while(x1>=x2){putPixel(x1,y1,color);if(e>0){y1+=1;e-=dx;}x1-=1;e+=dy;}}else// 3/8 octant{e=dx-dy/2;while(y1<=y2){putPixel(x1,y1,color);if(e>0){x1-=1;e-=dy;}y1+=1;e+=dx;}}}else // dy<0{dy=-dy; // dy=abs(dy)if(dx>=dy) // 5/8 octant{e=dy-dx/2;while(x1>=x2){putPixel(x1,y1,color);if(e>0){y1-=1;e-=dx;}x1-=1;e+=dy;}}else// 6/8 octant{e=dx-dy/2;while(y1>=y2){putPixel(x1,y1,color);if(e>0){x1-=1;e-=dy;}y1-=1;e+=dx;}}}}}void glib_filledrectangle(int x1, int y1, int x2, int y2, int color){int i;for (i= y1; i<=y2; i++)glib_line(x1, i, x2, i, color);}
lcd.c:
#define GLOBAL_CLK 1#include "uart.h"#include <stdlib.h>#include <string.h>#include "def.h"#include "option.h"#include "2440addr.h"#include "2440lib.h"#include "2440slib.h"#include "lcd.h"/**1.关闭看门狗2.初始化串口配置3.初始化lcd配置4.开启lcd显示屏5.打印提示press any key display a white pixel in (240,136)6.阻塞,获取任意键7.清屏0x08.在长240,宽136的位置显示,颜色为0xffffffff的一个像素点9.打印提示press any key display four line10.阻塞,获取任意键11..清屏0xffffffff12.显示几条线13.打印提示press any key display 7 rectangle14.阻塞,获取任意键15.清屏0xffffffff16.布满几块区域*/int Main(void){//关闭看门狗rWTCON = 0x0;//初始化串口配置init_uart();//初始化lcd配置lcd_init();//开启lcd显示屏lcd_envidONOFF(1);uart_printf("\npress any key display a white pixel in (240,136)\n");//任意键阻塞uart_getch();//清屏lcd_ClearScr(0x0);//显示putPixel(240,136,0xffffffff);uart_printf("\npress any key display four line\n");uart_getch();lcd_ClearScr(0xffffffff);glib_line(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, 0x0);glib_line(0, LCD_YSIZE_TFT, LCD_XSIZE_TFT, 0, 0x0);glib_line(0, LCD_YSIZE_TFT/2, LCD_XSIZE_TFT, LCD_YSIZE_TFT/2, 0x0);glib_line(LCD_XSIZE_TFT/2, 0, LCD_XSIZE_TFT/2, LCD_YSIZE_TFT, 0x0);uart_printf("\npress any key display 7 rectangle\n");uart_getch();lcd_ClearScr(0xffffffff);glib_filledrectangle(0,0,480,38, 0x001f);glib_filledrectangle(0,40,480,78, 0x07e0);glib_filledrectangle(0,80,480,118, 0xf800);glib_filledrectangle(0,120,480,158, 0xffe0);glib_filledrectangle(0,160,480,198, 0xf81f);glib_filledrectangle(0,200,480,238, 0x07ff);glib_filledrectangle(0,240,480,272, 0x0);while(1);}
- TQ2440裸板---lcd液晶显示(详细注释)
- TQ2440裸板---流水灯(详细注释)
- TQ2440裸板---pwm时钟(详细注释)
- TQ2440裸板---串口中断(详细注释)
- TQ2440裸板---adc模数转换(详细注释)
- TQ2440裸板---adc_lcd触摸屏模数转换(详细注释)
- LCD液晶显示可调时钟
- 1602LCD液晶显示
- 串口数据接收LCD液晶显示
- tq2440 lcd 移植
- 用verilog HDL实现LCD液晶显示代码
- arduino due lcd 8602液晶显示程序
- 基于Verilog的LCD液晶显示程序
- 51单片机第六弹---LCD液晶显示模块
- TQ2440内核移植之LCD
- TQ2440 LCD驱动移植第一天
- TQ2440 LCD驱动移植第二天
- LCD详细介绍
- android 上传Bitmap到服务器端
- 37-JavaScript-DOM-小游戏-小球碰撞后折返
- oozie hpdl参数分析
- 和我一起学习OC吧
- 2013-秋季校招之--java笔试--1
- TQ2440裸板---lcd液晶显示(详细注释)
- 服务器端返回json
- gcc和g++的区别
- Java学习的30个目标
- 设计模式--装饰者模式--UML
- Hibernate 文档学习
- 开始行人检测的道路
- 黑马程序员--Java基础之IO流(2)
- iOS学习笔记20131125-内存管理