为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

图片查看器

2017-09-25 16页 doc 37KB 136阅读

用户头像

is_713593

暂无简介

举报
图片查看器图片查看器 /************************************************************** The initial and control for 640×480 16Bpp TFT LCD----VGA **************************************************************/ #include "def.h" #include "option.h" #include "2440addr.h" #include "2...
图片查看器
图片查看器 /************************************************************** The initial and control for 640×480 16Bpp TFT LCD----VGA **************************************************************/ #include "def.h" #include "option.h" #include "2440addr.h" #include "2440lib.h" #include "2440slib.h" #include "lcd.h" #include "mmu.h" #define LCD_WIDTH 640 //HOZVAL #define LCD_HEIGHT 480 //LINVAL #define LCD_PIXCLOCK 4 #define LCD_RIGHT_MARGIN 64 //水平HBPD #define LCD_LEFT_MARGIN 19 //HFPD #define LCD_HSYNC_LEN 5//HSPW,水平5个脉冲信号 #define LCD_UPPER_MARGIN 10 //VBPD #define LCD_LOWER_MARGIN 10 //VFPD #define LCD_VSYNC_LEN 1 //VSPW #define LCD_XSIZE LCD_WIDTH #define LCD_YSIZE LCD_HEIGHT #define SCR_XSIZE LCD_WIDTH #define SCR_YSIZE LCD_HEIGHT volatile static unsigned short LCD_BUFFER[SCR_YSIZE][SCR_XSIZE]; /************************************************************** 640×480 TFT LCD数据和控制端口初始化 **************************************************************/ static void Lcd_Port_Init( void ) { rGPCUP=0xffffffff; // Disable Pull-up register rGPCCON=0xaaaa02a8; //Initialize VD[7:0],VM,VFRAME,VLINE,VCLK rGPDUP=0xffffffff; // Disable Pull-up register rGPDCON=0xaaaaaaaa; //Initialize VD[15:8] } /************************************************************** 640×480 TFT LCD功能模块初始化 **************************************************************/ static void LCD_Init(void) { #define M5D(n) ((n)&0x1fffff) #define LCD_ADDR ((U32)LCD_BUFFER) rLCDCON1 = (LCD_PIXCLOCK << 8) | (3 << 5) | (12 << 1); rLCDCON2 = (LCD_UPPER_MARGIN << 24) | ((LCD_HEIGHT - 1) << 14) | (LCD_LOWER_MARGIN << 6) | (LCD_VSYNC_LEN << 0); rLCDCON3 = (LCD_RIGHT_MARGIN << 19) | ((LCD_WIDTH - 1) << 8) | (LCD_LEFT_MARGIN << 0); rLCDCON4 = (13 << 8) | (LCD_HSYNC_LEN << 0); #if !defined(LCD_CON5) # define LCD_CON5 ((1<<11) | (1 << 9) | (1 << 8) | (1 << 3) | (1 << 0)) #endif rLCDCON5 = LCD_CON5; rLCDSADDR1 = ((LCD_ADDR >> 22) << 21) | ((M5D(LCD_ADDR >> 1)) << 0); rLCDSADDR2 = M5D((LCD_ADDR + LCD_WIDTH * LCD_HEIGHT * 2) >> 1); rLCDSADDR3 = LCD_WIDTH; rLCDINTMSK |= 3; rTCONSEL &= (~7); rTPAL = 0x0; rTCONSEL &= ~((1<<4) | 1); } /************************************************************** LCD视频和控制信号输出或者停止,1开启视频输出 **************************************************************/ static void Lcd_EnvidOnOff(int onoff) { if(onoff==1) rLCDCON1|=1; // ENVID=ON else rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off } /************************************************************** 320×240 8Bpp TFT LCD 电源控制引脚使能 **************************************************************/ static void Lcd_PowerEnable(int invpwren,int pwren) { //GPG4 is setted as LCD_PWREN rGPGUP = rGPGUP|(1<<4); // Pull-up disable rGPGCON = rGPGCON|(3<<8); //GPG4=LCD_PWREN //Enable LCD POWER ENABLE Function rLCDCON5 = rLCDCON5&(~(1<<3))|(pwren<<3); // PWREN rLCDCON5 = rLCDCON5&(~(1<<5))|(invpwren<<5); // INVPWREN } /************************************************************** 640×480 TFT LCD单个象素的显示数据输出 **************************************************************/ static void PutPixel(U32 x,U32 y,U16 c) { if(x=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; } } } } } /************************************************************** 在LCD屏幕上用颜色填充一个矩形 **************************************************************/ static void Glib_FilledRectangle(int x1,int y1,int x2,int y2, U16 color) { int i; for(i=y1;i<=y2;i++) Glib_Line(x1,i,x2,i,color); } /************************************************************** 在LCD屏幕上指定坐标点画一个指定大小的图片 **************************************************************/ static void Paint_Bmp(int x0,int y0,int h,int l,const unsigned char *bmp) { int x,y; U32 c; int p = 0; for( y = 0 ; y < l ; y++ ) { for( x = 0 ; x < h ; x++ ) { c = bmp[p+1] | (bmp[p]<<8) ; if ( ( (x0+x) < SCR_XSIZE) && ( (y0+y) < SCR_YSIZE) ) LCD_BUFFER[x0+x][y0+y] = c ; p = p + 2 ; } } } /***************************************************************/ static void Paint_Bmp2(int x0,int y0,int h,int l,const unsigned char *bmp) { int x,y; U32 c; int p = 0; for( y = 0 ; y < l ; y++ ) { p = (1+y)*480-2; for( x = 0 ; x < h ; x++ ) { c = bmp[p+1] | (bmp[p]<<8) ; if ( ( (x0+x) < SCR_XSIZE) && ( (y0+y) < SCR_YSIZE) ) LCD_BUFFER[x0+x][y0+y] = c ; p = p - 2 ; } } } /************************************************************** **************************************************************/ void TFT_LCD_Init(void) { LCD_Init(); //LcdBkLtSet( 70 ) ; Lcd_PowerEnable(0, 1); Lcd_EnvidOnOff(1); //turn on vedio Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) ); } /************************************************************** **************************************************************/ unsigned int delay(unsigned int s) { unsigned int i,j; for (i=0; i>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); ChangeClockDivider(key, 12) ; TFT_LCD_Init(); while (1) { rGPGCON = 0x0; rGPBCON = 0x1400; Glib_FilledRectangle(0,0,240,320,0xffff);//全屏显示一个矩形 Paint_Bmp2(0, 0, 240,320,bootlogo); while (1) { flag = delay(1000); if (flag==1)flagstop=1; if ((flagstop==0)&&(flag==0))break; if ((flagstop==1)&&(flag==2)){flagstop=0;break;} } Glib_FilledRectangle(0,0,240,320,0xffff);//全屏显示一个矩形 Paint_Bmp(0, 0, 240,320,sunflower_240x320); while (1) { flag = delay(1000); if (flag==1)flagstop=1; if ((flagstop==0)&&(flag==0))break; if ((flagstop==1)&&(flag==2)){flagstop=0;break;} } Glib_FilledRectangle(0,0,240,320,0xffff);//全屏显示一个矩形 Paint_Bmp(0, 0, 240,320,sunflower); while (1) { flag = delay(1000); if (flag==1)flagstop=1; if ((flagstop==0)&&(flag==0))break; if ((flagstop==1)&&(flag==2)){flagstop=0;break;} } Glib_FilledRectangle(0,0,240,320,0xffff);//全屏显示一个矩形 Paint_Bmp(0, 0, 240,320,FISH); while (1) { flag = delay(1000); if (flag==1)flagstop=1; if ((flagstop==0)&&(flag==0))break; if ((flagstop==1)&&(flag==2)){flagstop=0;break;} } Glib_FilledRectangle(0,0,240,320,0xffff);//全屏显示一个矩形 Paint_Bmp(0, 0, 240,320,GREEN); while (1) { flag = delay(1000); if (flag==1)flagstop=1; if ((flagstop==0)&&(flag==0))break; if ((flagstop==1)&&(flag==2)){flagstop=0;break;} } } while(1); return 0; }
/
本文档为【图片查看器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索