基于NIOS II的液晶显示设计——自定义图形库

下面是我写的简单图形库

//

graphics.h

/

#ifndef GRAPHICS_H_
#define GRAPHICS_H_

#include"IO.h"
#include"system.h"
#include"alt_types.h"
//定义SRAM缓存的基地址
    #define SRAM_BASE       LCD_BASE + 320*2
    #define lcd_frame       320*240
//数据类型定义
    #define WORD            alt_u16
    #define SHORT           alt_u16
    #define pi              3.1415926
//色彩编码
    #define BLACK           (WORD) 0x0000
    #define BRIGHTBLUE      (WORD) 0x001f
    #define BRIGHTGREEN     (WORD) 0x07e0
    #define BRIGHTCYAN      (WORD) 0x07ff
    #define BRIGHTRED       (WORD) 0xf800
    #define BRIGHTMAGENTA   (WORD) 0xf81f
    #define BRIGHTYELLOW    (WORD) 0xffe0
    #define BLUE            (WORD) 0x0010
    #define GREEN           (WORD) 0x0400
    #define CYAN            (WORD) 0x0410
    #define RED             (WORD) 0x8000
    #define MAGENTA         (WORD) 0x8010
    #define BROWN           (WORD) 0xfc00
    #define LIGHTGRAY       (WORD) 0x8410
    #define DARKGRAY        (WORD) 0x4208
    #define LIGHTBLUE       (WORD) 0x841f
    #define LIGHTGREEN      (WORD) 0x87f0
    #define LIGHTCYAN       (WORD) 0x87ff
    #define LIGHTRED        (WORD) 0xfc10
    #define LIGHTMAGENTA    (WORD) 0xfc1f
    #define YELLOW          (WORD) 0xfff0
    #define WHITE           (WORD) 0xffff

#define GRAY0           (WORD) 0xe71c
    #define GRAY1           (WORD) 0xc618
    #define GRAY2           (WORD) 0xa514
    #define GRAY3           (WORD) 0x8410
    #define GRAY4           (WORD) 0x630c
    #define GRAY5           (WORD) 0x4208
    #define GRAY6           (WORD) 0x2104
  
 
 //TFT LCD 初始化
void lcd_init(void);
/
//set TFT LCD display color
void set_color(alt_u16 color);
///
//display a box
void box(alt_u16 x1, alt_u16 y1, alt_u16 x2, alt_u16 y2);
//
//display frame
void frame(alt_u16 x1, alt_u16 y1, alt_u16 x2, alt_u16 y2, alt_u16 width);
///
//move to pixel
void move_to(alt_u16 x, alt_u16 y);

//display one pixel
void pixel(alt_u16 x, alt_u16 y);

//display a line
void line(alt_u16 x1, alt_u16 y1, alt_u16 x2, alt_u16 y2, alt_u16 width);
///
//display a line ,start dot is x_pos,y_pos
void line_to(alt_u16 x, alt_u16 y, alt_u16 width);

//display circle
void circle(alt_u16 x0, alt_u16 y0, alt_u16 radius,alt_u8 width);

#endif /*GRAPHICS_H_*/

/

graphics.c

/

#include"IO.h"
#include"math.h"
#include"graphics.h"

//define TFT LCD color
alt_u16         pixel_color;
alt_u16         x_pos,y_pos;
alt_u32         address;

//TFT LCD 初始化
void lcd_init(void)
{
   int i;
   for(i=0;i<lcd_frame/2;i++)  IOWR_32DIRECT(SRAM_BASE,4*i,BLACK);
   x_pos = 0;
   y_pos = 0;
}
/
//set TFT LCD display color
void set_color(alt_u16 color)
{
    pixel_color = color;

///
//display a box
void box(alt_u16 x1, alt_u16 y1, alt_u16 x2, alt_u16 y2)
{
    int offset, row, col;
    for (row = y1; row <= y2; row++)
    {
        col = x1;
        while (col <= x2)
        {
            offset = row*320 + col;
            IOWR_16DIRECT(SRAM_BASE,2*offset,pixel_color);
            ++col;
        }
    }
   x_pos = x2;
   y_pos = y2;
}
//
//display frame
void frame(alt_u16 x1, alt_u16 y1, alt_u16 x2, alt_u16 y2, alt_u16 width)
{
   box(x1,y1,x2,y1+width);
   box(x1,y2-width,x2,y2);
   box(x1,y1,x1+width,y2);
   box(x2-width,y1,x2,y2);
   x_pos = x2;
   y_pos = y2;
}
///
//move to pixel
void move_to(alt_u16 x, alt_u16 y)
{
    x_pos = x;
    y_pos = y;
    address = y_pos*320 + x_pos;
}

//display one pixel
void pixel(alt_u16 x, alt_u16 y)
{
   x_pos = x;
   y_pos = y;
   address = y_pos*320 + x_pos;
   IOWR_16DIRECT(SRAM_BASE,2*address,pixel_color);
}

//display a line
void line(alt_u16 x1, alt_u16 y1, alt_u16 x2, alt_u16 y2, alt_u16 width)
{
    int i,j,k;
    float slope;
    for(i=0;i<width;i++)
    {
        if(x1==x2)
        {
            for(k=y1;k<=y2;k++)  pixel(x1+i,k); 
        }
        else if(y1==y2)
        {
            for(j=x1;j<=x2;j++)  pixel(j,y1+i);
        }
        else
        {
            slope =(float)(y1-y2)/(x1-x2);
            for(j=x1;j<=x2;j++)
            {
               k=floor( slope*(j-x1)+y1 + 0.5);
               pixel(j+i,k);               
            }
           
        }
    }
    x_pos = x2;
    y_pos = y2;
}
///
//display a line ,start dot is x_pos,y_pos
void line_to(alt_u16 x, alt_u16 y, alt_u16 width)
{
     line(x_pos,y_pos,x,y,width);
     x_pos = x;
     y_pos = y;
}

//display circle
void circle(alt_u16 x0, alt_u16 y0, alt_u16 radius,alt_u8 width )
{
    alt_u16 j,k;
    alt_u32 RR;
    for(j=x0-radius;j<=x0+radius;j++)
    {
      for(k=y0-radius;k<=y0+radius;k++)
      {
        RR = (j-x0)*(j-x0) + (k-y0)*(k-y0);
        if( RR>= (radius-width)*(radius-width) && RR <= radius*radius )  pixel(j,k);        
     }
   }
   x_pos = x0;
   y_pos = y0;
}

posted on 2011-04-25 11:26 Neddy11 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Neddy/archive/2011/04/25/2026884.html

基于NIOS II的液晶显示设计——自定义图形库相关推荐

  1. 基于NIOS II的电子钟设计

    此设计为笔者实验课期末设计,仅供参考,博客贴出实现方法和C语言部分程序源代码,实现过程用时不长,故没有对代码进行优化,但功能已实现.工程文件提交到CSDN下载当中,需要可以下载,https://dow ...

  2. 基于 Nios II 的串口打印和流水灯设计【使用 Quartus 软件】【掌握 SOPC 开发流程】

    目录 一.前言 二.实验步骤 第一步:硬件部分设计 1)建立新项目 2)进行 Qsys 系统设计 3)完成 Qsys 设计的后续工作 4)原理图设计 5)编译工程及物理针脚分配. 第二步:软件部分设计 ...

  3. HDMI系列之一:基于Nios II的HDMI显示图片

    一休哥将在本文中介绍一个基于Nios II的HDMI显示图片的工程.我将主要分三个部分来介绍这一工程,从而实现工程效果. 1. Nios II的常规使用套路 2. 自定义HDMI IP核的制作 3. ...

  4. Nios II 基础工程和自定义组件

    软件环境:Quartus Prime Standard 18.1 Window 10 硬件环境:小梅哥 AC501 开发板 主要参考: Intel Quartus Prime Standard Edi ...

  5. NIOS II 创建示例设计_Quartus II 9.0

    安装设计文件 在继续之前,您必须安装 Quartus II 软件和 Nios II 嵌入式设计套件. 分析系统要求 本部分介绍的教程示例设计的系统要求.设计的目标如下: 有关这些和其他组件,完整详细信 ...

  6. 【转载】基于Nios II的DMA传输总结(附源码)

    转载:http://blog.ednchina.com/chactor/185802/message.aspx#92932 最近练了一段时间的DMA传输,现做如下的总结,分享自己获得心得以及遇到的一些 ...

  7. 【原创】基于NIOS II的ADS1256 SPI驱动

    /*********************************说明**********************************/             在SOPC里面SPI设置如下: ...

  8. NIOS II软核处理器

    前不久,Altera 正式推出了Nios II系列32位RSIC嵌入式处理器.Nios II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在Altera FPG ...

  9. 【Nios II】以SOPC开发流程完成流水灯以及串口输出实验

    一.前言 实验内容及步骤 使用 FPGA 资源搭建一个简单 Nios II 处理器系统,具体包括: (1) 在 Quartus Prime 中建立一个工程: (2) 使用 PD 建立并生成一个简单的基 ...

最新文章

  1. 防止对 Visual Basic .NET 或 C# 代码进行反相工程
  2. Vue常用特性——表单操作、表单域修饰符(number:转化为数值 ;trim:去掉开始和结尾的空格 ; lazy : 将input事件切换为change事件)||自定义指令|| 局部指令
  3. SAP UI5列表的排序
  4. unix 只有root 可以使用chown吗_chmod 777 是开发的常规操作吗?
  5. 重新绘制TabControl的Tabpage标签,添加图片及关闭按钮
  6. Asset Store 下载的package存在什么地方?
  7. python3.7.4安装教程win7_Window10下python3.7 安装与卸载教程图解
  8. 【图像融合】基于matlab高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】
  9. BZOJ 4030: [HEOI2015]小L的白日梦
  10. 什么是WAP?wap技术简介(转)
  11. 分析:G20相争 IMF得利
  12. 面板数据、工具变量选择和Hausman检验的若干问题
  13. 纳税服务系统四(角色模块)【角色与权限、角色与用户】
  14. 图解IFRS 9 金融工具(13)实施时间及结语
  15. 核函数和核矩阵【转】
  16. 支付那些事,支付设计遇到的那些坑(一)(聚合支付平台踩过的那些坑)
  17. 【2023秋招面经】深信服 前端 一面(1h)
  18. 论文笔记2:Video-based Person Re-identification with Spatial and Temporal Memory Networks
  19. Android四大组件及其作用
  20. excel模板批量导入数据

热门文章

  1. hdu 4738 桥
  2. 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义
  3. Oracle学习笔记:blank_trimming的含义
  4. HDOJ 1030 Delta-wave
  5. java 马踏棋盘优化_我所知道的十大常用算法之马踏棋盘算法(深度搜索、贪心思想优化 )...
  6. docker-compose安装问题
  7. 阿里云应用实战-IoT工业数据上云优化实践
  8. 网络语言不c,哪些网络用语不文明?
  9. java 8是指什么_java中8个基本数据类型到底是指什么?是什么意思,有什么作用?我需要权威的回答,...
  10. linux下的五种io模型,Linux下的五种IO模型