基于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;
}
转载于:https://www.cnblogs.com/Neddy/archive/2011/04/25/2026884.html
基于NIOS II的液晶显示设计——自定义图形库相关推荐
- 基于NIOS II的电子钟设计
此设计为笔者实验课期末设计,仅供参考,博客贴出实现方法和C语言部分程序源代码,实现过程用时不长,故没有对代码进行优化,但功能已实现.工程文件提交到CSDN下载当中,需要可以下载,https://dow ...
- 基于 Nios II 的串口打印和流水灯设计【使用 Quartus 软件】【掌握 SOPC 开发流程】
目录 一.前言 二.实验步骤 第一步:硬件部分设计 1)建立新项目 2)进行 Qsys 系统设计 3)完成 Qsys 设计的后续工作 4)原理图设计 5)编译工程及物理针脚分配. 第二步:软件部分设计 ...
- HDMI系列之一:基于Nios II的HDMI显示图片
一休哥将在本文中介绍一个基于Nios II的HDMI显示图片的工程.我将主要分三个部分来介绍这一工程,从而实现工程效果. 1. Nios II的常规使用套路 2. 自定义HDMI IP核的制作 3. ...
- Nios II 基础工程和自定义组件
软件环境:Quartus Prime Standard 18.1 Window 10 硬件环境:小梅哥 AC501 开发板 主要参考: Intel Quartus Prime Standard Edi ...
- NIOS II 创建示例设计_Quartus II 9.0
安装设计文件 在继续之前,您必须安装 Quartus II 软件和 Nios II 嵌入式设计套件. 分析系统要求 本部分介绍的教程示例设计的系统要求.设计的目标如下: 有关这些和其他组件,完整详细信 ...
- 【转载】基于Nios II的DMA传输总结(附源码)
转载:http://blog.ednchina.com/chactor/185802/message.aspx#92932 最近练了一段时间的DMA传输,现做如下的总结,分享自己获得心得以及遇到的一些 ...
- 【原创】基于NIOS II的ADS1256 SPI驱动
/*********************************说明**********************************/ 在SOPC里面SPI设置如下: ...
- NIOS II软核处理器
前不久,Altera 正式推出了Nios II系列32位RSIC嵌入式处理器.Nios II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在Altera FPG ...
- 【Nios II】以SOPC开发流程完成流水灯以及串口输出实验
一.前言 实验内容及步骤 使用 FPGA 资源搭建一个简单 Nios II 处理器系统,具体包括: (1) 在 Quartus Prime 中建立一个工程: (2) 使用 PD 建立并生成一个简单的基 ...
最新文章
- 防止对 Visual Basic .NET 或 C# 代码进行反相工程
- Vue常用特性——表单操作、表单域修饰符(number:转化为数值 ;trim:去掉开始和结尾的空格 ; lazy : 将input事件切换为change事件)||自定义指令|| 局部指令
- SAP UI5列表的排序
- unix 只有root 可以使用chown吗_chmod 777 是开发的常规操作吗?
- 重新绘制TabControl的Tabpage标签,添加图片及关闭按钮
- Asset Store 下载的package存在什么地方?
- python3.7.4安装教程win7_Window10下python3.7 安装与卸载教程图解
- 【图像融合】基于matlab高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】
- BZOJ 4030: [HEOI2015]小L的白日梦
- 什么是WAP?wap技术简介(转)
- 分析:G20相争 IMF得利
- 面板数据、工具变量选择和Hausman检验的若干问题
- 纳税服务系统四(角色模块)【角色与权限、角色与用户】
- 图解IFRS 9 金融工具(13)实施时间及结语
- 核函数和核矩阵【转】
- 支付那些事,支付设计遇到的那些坑(一)(聚合支付平台踩过的那些坑)
- 【2023秋招面经】深信服 前端 一面(1h)
- 论文笔记2:Video-based Person Re-identification with Spatial and Temporal Memory Networks
- Android四大组件及其作用
- excel模板批量导入数据
热门文章
- hdu 4738 桥
- 卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义
- Oracle学习笔记:blank_trimming的含义
- HDOJ 1030 Delta-wave
- java 马踏棋盘优化_我所知道的十大常用算法之马踏棋盘算法(深度搜索、贪心思想优化 )...
- docker-compose安装问题
- 阿里云应用实战-IoT工业数据上云优化实践
- 网络语言不c,哪些网络用语不文明?
- java 8是指什么_java中8个基本数据类型到底是指什么?是什么意思,有什么作用?我需要权威的回答,...
- linux下的五种io模型,Linux下的五种IO模型