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

📄 c0ad7746459b001d114bb919ad30f862

📁 基于ALTERA公司的NIOSII的GPS信息接收系统的设计
💻
字号:
#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;

#define CN_CHAR_NUM     23
#define CN_CHAR_WIDTH   14
#define CN_CHAR_HEIGHT  14
#define EN_CHAR_WIDTH   8
#define EN_CHAR_HEIGHT  12

extern int Font14_CN [][14];
extern int Font08AscII[][12];

static alt_u32 base = LCD_INTERFACE_0_BASE; 
static alt_u32 SDRAM_FRAMEBUFFER_ADDRESS = (SDRAM_0_BASE + 10000);

//设置颜色
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 init_lcd()
{
    int i,j;
    int raw_data;
    for(i = 0;i < 223938;i++){
        IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i,55);
    }
    for(i = 0;i < 233;i++){
        for(j = 0;j < 319;j++){
            
            raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 0x1000);
            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 + 0x1000);
            IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 ,raw_data);    
            
            raw_data = IORD_8DIRECT(CFI_FLASH_0_BASE,i * 957 + j * 3 + 2 + 0x1000);
            IOWR_8DIRECT(SDRAM_FRAMEBUFFER_ADDRESS,i * 957 + j * 3 + 1,raw_data);            
        }
    }
    setFrameBuffer(SDRAM_FRAMEBUFFER_ADDRESS); 
    setFrameLength(957);
    setStartReg(1);
    //setBKColor(GUI_RED);
}

//描点
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 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);
    }
}

//画字符
void drawChar(alt_u16 x,alt_u16 y,unsigned char asc)
{
    int i,j;
    unsigned short int Tmp;
    int* TmpFontAddr;
    unsigned char temp;
    TmpFontAddr = Font08AscII[0] + ((EN_CHAR_HEIGHT)*(asc - 32));
    for(i = 0;i < EN_CHAR_HEIGHT;i++){
        Tmp = x;
        temp = 0x01;
        for(j = 0;j < EN_CHAR_WIDTH;j++){ 
            if(((*TmpFontAddr) & temp) != 0){
                drawPixel(Tmp,y);
            }
            temp = temp<<1;
            Tmp++;
        }
        (TmpFontAddr)++;
        y++;
    }
}

//根据汉字机内码返回字模索引
int returnIndex(unsigned char high,unsigned char low)
{
    int i;
    for(i = 0;i < CN_CHAR_NUM;i++){//以数组长度为限
        if(high == CNChar_Code[i][1] && low == CNChar_Code[i][0]){    
            return CNChar_Code[i][2];
        }
    }
    return -1;
}

//画中文汉字
void drawCNChar(int x,int y,unsigned char* asc_cn)
{
    int i,j,index;
    unsigned short int TmpX,TemY;
    int temp;    
    int* TmpFontAddr;
    index = returnIndex(*asc_cn,*(asc_cn + 1));
    if(index >= 0){
        TmpFontAddr = Font14_CN[0] + (CN_CHAR_HEIGHT) * index;
        TemY = y;
        for(i = 0;i < CN_CHAR_HEIGHT;i++){
            TmpX = x;
            temp = 1;
            for(j = 0;j < CN_CHAR_WIDTH;j++){ 
                if(((*TmpFontAddr) & temp) != 0){
                    drawPixel(TmpX,TemY);
                }
                temp = temp<<1;
                TmpX++;
            }
            TemY++;
            TmpFontAddr++;
        }
    }
}

//画字符串
void drawString(alt_u16 x,alt_u16 y,unsigned char* string)
{
    int flag = 0;
    while(*string != '\0'){   
        if(*string > 0xa0){   
            if(! flag)   
                flag++;   
            else{   
                if(x > (FRAME_LENGTH - CN_CHAR_WIDTH)){
                    x = 0;
                    y = y + CN_CHAR_HEIGHT;
                }
                drawCNChar(x,y,--string);
                x = x + CN_CHAR_WIDTH;
                flag--;  
                string++;
            }   
        }   
        else{ 
            if(x > (FRAME_LENGTH - EN_CHAR_WIDTH)){
                x = 0;
                y = y + EN_CHAR_WIDTH;
            }
            drawChar(x,y,*string);
            x = x + EN_CHAR_WIDTH;
        }
        string++;           
    }  
}

⌨️ 快捷键说明

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