⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f0e4ac886489001d1e908c0bc771dfd8

📁 基于ALTERA公司的NIOSII的通用TFT-LCD控制器及PS2鼠标设计
💻
字号:
#include <io.h>
#include "GUI.h"
#include "system.h"
#include "alt_types.h"
#include <math.h>
#include "stdio.h"

alt_u32 FRAME_BUFFER;
alt_u32 FRAME_LENGTH;
alt_u32 START_REG;
alt_u32 CURRENT_COLOR;

int cover_data[25][48];
int star_cover_x = 50;
int star_cover_y = 50;

static double SIN45 = 0.70711;
static alt_u32 base = LCD_INTERFACE_0_BASE; 
static alt_u32 SDRAM_FRAMEBUFFER_ADDRESS = (SDRAM_0_BASE + 10000);
//static short int CNChar_Num = 121;

//设置颜色
void setColor(alt_u32 colorValue)
{
    IOWR_32DIRECT(base,0,colorValue);
    CURRENT_COLOR = colorValue;
}

//设置屏幕横宽
void setFrameLength(alt_u32 frameLength) 
{
    IOWR_32DIRECT(base,4,frameLength);
    FRAME_LENGTH = frameLength;
}

//开始传输标志
void setStartReg(alt_u32 startReg) 
{
    IOWR_32DIRECT(base,8,startReg);
    START_REG = startReg;
}

//帧缓存地址
void setFrameBuffer(alt_u32 frameBuffer)
{
    IOWR_32DIRECT(base,12,frameBuffer);
    FRAME_BUFFER = frameBuffer;
}

//设置光标显示
void setCursorShow(alt_u32 cursorShow)
{
    IOWR_32DIRECT(base,24,cursorShow);
}

//设置光标位置X
void setCursorBaseX(alt_u32 cursorBaseX)
{
    IOWR_32DIRECT(base,16,cursorBaseX);    
}

//设置光标位置Y
void setCursorBaseY(alt_u32 cursorBaseY)
{
    IOWR_32DIRECT(base,20,cursorBaseY);
}

//设置光标坐标
void setCursorPosition(alt_u32 x,alt_u32 y)
{
    setCursorBaseX(x * 3);
    setCursorBaseY(y);
}

int abs(int a)
{
    if(a < 0){
        a = -a;
    }
    return a;
}

//初始化屏幕操作
void init()
{
    int i,j;
    int raw_data;
    for(i = 0;i < 223938;i++){
        IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i,0);
    }
    for(i = 0;i < 233;i++){
        for(j = 0;j < 319;j++){     
            raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 4096);
            IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 + 2,raw_data);
            
            raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 1 + 4096);
            IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 ,raw_data);    
            
            raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 2 + 4096);
            IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 + 1,raw_data);            
        }
    }
    setFrameBuffer(SDRAM_FRAMEBUFFER_ADDRESS); 
    setFrameLength(957);
    setStartReg(1);
    setCursorShow(1);
    setCursorBaseX(50);
    setCursorBaseY(50);
}

//描点
void drawPixel(alt_u16 x,alt_u16 y)
{
    alt_u32 pix_addr = FRAME_BUFFER + (y * FRAME_LENGTH + x*3) + 2;
    IOWR_8DIRECT(pix_addr,0,CURRENT_COLOR); 
    IOWR_8DIRECT(pix_addr,1,CURRENT_COLOR>>8);
    IOWR_8DIRECT(pix_addr,2,CURRENT_COLOR>>16);   
}

//抗锯齿描点
void draw_AA_Pixel(alt_u16 x,alt_u16 y,alt_u32 color)
{
    alt_u32 pix_addr = FRAME_BUFFER + (y * FRAME_LENGTH + x*3);
    IOWR_8DIRECT(pix_addr,0,color); 
    IOWR_8DIRECT(pix_addr,1,color>>8);
    IOWR_8DIRECT(pix_addr,2,color>>16);   
}

//刷背景屏幕颜色
void setBKColor(alt_u32 bkColor)
{
    int temColor;
    temColor = CURRENT_COLOR;
    setColor(bkColor);
    fillRect(0,0,319,232);
    setColor(temColor);
}

//画竖线
void drawVLine(alt_u16 x,alt_u16 y1,alt_u16 y2)
{
    short int i;
    short temp;
    //保证y1上侧
    if(y1 > y2){
        temp = y1;
        y1 = y2;
        y2 = temp;
    }
    //画线
    for(i = y1;i <= y2;i++){
        drawPixel(x,i);
    }
}

//填充矩形
void fillRect(alt_u16 x,alt_u16 y,alt_u16 width,alt_u16 height)
{
    int i;
    for(i = 0;i <= width;i++){
        drawVLine(x + i,y,y + height);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -