ADI Blackfin DSP处理器-BF533的开发详解31:汉字/ASIC II 字库(含源代码)

news2024/9/23 1:34:43

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

功能介绍

代码实现了汉字库和 ASIC II 码 字库的功能,代码会在编译时,将字库文件加载到内存中,所以必须使用 xml 文件对内存进行初始化,所以必须用光盘中的 ADSP-BF533-proc.xml 文件把 Visual DSP++ 下的 ADSP-BF533-proc.xml文件替换掉,才能保证字库文件正确加载。

代码实现了在指定的坐标处显示出指定的汉字,字母,光标及平铺区域显示,可以对文字的颜色进行修该。

编译并运行代码,会将指定的文字数据写入指定的内存区域,通过使用 image view 工具进行查看。

代码使用说明

清除内存:
memset(DisplayBuffer,‘\0’,391680);
将 DisplayBuffer 内存清为空,清除大小为 391680 字节。

ASICII 码显示:
Glib_disp_ascii16x8_v(130,0,“A”,0x0000ff);
在坐标 130,0 位置显示字母 A,颜色为蓝色。

汉字显示:
Glib_disp_hzk16_v(130,200,“北京”,0xffffff);
在坐标 130,200 位置显示汉字“北京”,颜色为白色。

填充区域:
Rect(100,100,200,100,0xff0000);
在坐标 100,100 位置填充一个宽为 200,高为 100 的区域,填充色为红色。

光标显示:
Mouse(240,135,0x00ff00);
在坐标 240,135 位置显示绿色的光标。

调试步骤

  1. 编译并运行代码
  2. 待代码运行完成后,选择 Visual DSP++ 菜单下“View -->DebugWindows–>image viewer…”选项。
  3. 按下图配置选项:

在这里插入图片描述

  1. 点“OK”后观察输出的内存图像。

代码调试结果

在 image view 窗口上可以看到如下图像:

在这里插入图片描述

程序源码

cpu.c

#include <cdefBF533.h>

void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0x7bb07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void delay(int tem)
{
int i;
for(i=0;i<tem;i++);
}

ziku.c

#include “ascii16_8.h”
#include “hzk16.h”

section (“sdram0_bank1”) unsigned char DisplayBuffer[272][1440];

void PutPixel(int x,int y,unsigned int color)
{
if((x<480)&&(y<272))
{
DisplayBuffer[y][3x] = (color>>16)&0xff;
DisplayBuffer[y][3
x+1] = (color>>8)&0xff;
DisplayBuffer[y][3*x+2] = (color)&0xff;
}
}

/以特定颜色填充一块区域/
void Rect(int x,int y,int width,int high,unsigned int color)
{
int i,j;
for(i=y;i<y+high+4;i++) //加上暗线4条
{
for(j=x;j<(x+width);j++)
{
DisplayBuffer[i][3j] = (color>>16)&0xff;
DisplayBuffer[i][3
j+1] = (color>>8)&0xff;
DisplayBuffer[i][3*j+2] = (color)&0xff;
}
}
}

//水平方向显示字符串
void Glib_disp_ascii16x8_v(int x,int y,char *s,int colour)
{

int i,j,k;
while(*s)
{
   for(i=0;i<91;i++)
   {
      if(*s==ASCII_16x8[i].Index)
      {
          for (j=0;j<16;j++)
          {
              for(k=0;k<8;k++)
              {
                  if(  ((ASCII_16x8[i].ASCII_Dot[j]>>(7-k)) & 0x1)!=0 )
   				  {
   				      PutPixel(x+k,y+j,colour);  //加4条暗线
   				  }
              }
          }
       }
    } 
    
    s+=1;											
	x+=8;
 }      

}

//显示汉字
void Glib_disp_hzk16_v(int x,int y,char s,int colour)
{
char buffer[32]; /
32字节的字模缓冲区 /
int i,j,k;
unsigned char qh,wh;
unsigned long location;
while(s)
{
qh=s-0xa0; / 计算区码 /
wh=
(s+1)-0xa0; /
计算位码 /
location=(94
(qh-1)+(wh-1))32L; / 计算字模在文件中的位置 /
memcpy(buffer, &HZK16X16[location], 32); /
获取汉字字模 /
for(i=0;i<16;i++) /
每一行 /
{
for(j=0;j<2;j++) /
一行两个字节 /
{
for(k=0;k<8;k++) /
每个字节按位显示 /
{
if(((buffer[i
2+j]>>(7-k)) & 0x1) != 0)
PutPixel(x+8
(j)+k,y+4+i,colour); /* 显示一位 /
}
}
}
s+=2; /
下一个汉字 /
x+=16; /
汉字间距 */
}
}

void Mouse(int x,int y,int color)
{
int i,j,k;

for (i=0;i<16;i++)
{
	for(j=0;j<2;j++)
	{	
	    for(k=0;k<8;k++)
	    {
	         if(  ((mouse[i*2+j]>>(7-k)) & 0x1)!=0 )
		     {
		         PutPixel(x+8*j+k,y+i,color);
		     }
	   }
	}
}

}

main.c

#include <stdio.h>

extern DisplayBuffer[272][1440];

main()
{
Set_PLL(16,4);
Init_SDRAM();
Init_EBIU();
memset(DisplayBuffer,‘\0’,391680);
Glib_disp_ascii16x8_v(130,0,“A”,0x0000ff);
Glib_disp_ascii16x8_v(138,0,“bcd”,0xffffff);
Glib_disp_ascii16x8_v(162,0,“E”,0xffff00);
Glib_disp_ascii16x8_v(170,0,“f”,0xff0000);
Glib_disp_ascii16x8_v(178,0,“GH”,0xffffff);
Glib_disp_hzk16_v(130,200,“北京”,0xffffff);
Rect(100,100,200,100,0xff0000);
Mouse(240,135,0x00ff00);
Glib_disp_hzk16_v(100,130,“液晶屏汉字库测试”,0x0000ff);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试基础篇(6)

两个测试模型: 一:软件测试V模型:从上到下是一个开发模型&#xff0c;从下到上是一个测试模型(V模型也是瀑布模型的一个变种) 需求分析--->计划---->设计---->编码----->测试 用户需求 验收测试需求分析与…

java基于springboot的共享单车系统-计算机毕业设计

项目介绍 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Ma…

合并有序数组

目录 I.合并有序数组 Time Limit:1s Memory Limit: 256M Description: Input: Output: Sample input: Sample output: 约束&#xff1a; 思路代码: 1.暴力法 1.2暴力代码: 2.双指针(归并排序思路) 2.2双指针代码 总结: 题目链接: I.合并有序数组 Time Limit:1s Me…

专注推荐系统13年,我收获最大的4个成长

‍‍ 作者 | gongyouliu编辑 | gongyouliu我从2010年开始接触推荐系统&#xff0c;到现在差不多有13年了&#xff0c;这13年间我基本没有间断过对推荐系统的学习和实践&#xff08;今年还看了两本推荐系统相关的书籍和一些论文&#xff09;。回顾一下这十几年的经历&#x…

Java项目:SSM高校教职工差旅报销管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能&#xff1a; 管理员登录,修改管理员资料,用户管理,公告管理,报销类型管理,系别信息管理,报销审核管理等功能。 用户角色…

Python webdriver.Chrome()的使用

1.前提 Python与Chrome路径下均安装chromedriver.exe。 2.chromedriver.exe版本选择及下载 下载地址为&#xff1a;http://npm.taobao.org/mirrors/chromedriver/ Chrome版本查看&#xff1a;浏览器右上角三个点->帮助->关于Google Chrome 找到对应的版本&#xff0c;主…

大数据面试之YARN常见题目

大数据面试之YARN常见题目 1 YARN工作机制 1.1 图解 上面有单词少个r&#xff0c;就不改了&#xff0c;大家知道就行。 1.2 文字描述 文字版描述&#xff1a; 1、MapReduce程序提交到Client所在节点&#xff0c;在MR程序的主函数当中有job.waitForCompletion()将任务进行提…

Linux网络-五种IO模型

Linux网络-高级IO零、前言一、什么是IO二、五种IO模型1、阻塞IO2、非阻塞IO3、信号驱动IO4、IO多路转接5、异步IO三、高级IO重要概念1、同步通信 vs 异步通信2、阻塞 vs 非阻塞3、其他高级IO零、前言 本章主要就Linux网络讲解非常重要的一个话题-高级IO 一、什么是IO IO是输入i…

20221211英语学习

今日新词&#xff1a; helplessly adv.无助地&#xff1b;无能为力地 physicist n.物理学家, 物理学研究者 capable adj.有能力的&#xff0c;有才能的&#xff1b;能胜任的&#xff1b;可以…的&#xff1b;容许…的 spokeswoman n.女发言人 production n.产量&#xff1…

卡尔曼滤波应用

卡尔曼滤波器的过程 卡尔曼滤波器的过程分为&#xff1a; 状态方程&#xff1a; xkAxk−1Buk−1ωk−1zkHxkνk这样就得到了状态方程和观测方程的表达式其中xk是状态向量&#xff0c;A是转移矩阵&#xff0c;B是输入转换为状态的矩阵&#xff0c;uk是系统输入&#xff0c;ωk是…

【波段自适应梯度和细节校正:统一遥感融合】

A Unified Pansharpening Model Based on Band-Adaptive Gradient and Detail Correction &#xff08;基于波段自适应梯度和细节校正的统一全色锐化模型&#xff09; 利用全色锐化技术将全色&#xff08;PAN&#xff09;图像与多光谱&#xff08;MS&#xff09;图像融合&…

谈谈Java应用发布时CPU抖动的优化

研究背景 通常情况下应用发布或重启时都存在cpu抖动飙高&#xff0c;甚至打满的现象&#xff0c;这是由于应用启动时&#xff0c;JVM重新进行类加载与对象的初始化&#xff0c;CPU在整个过程中需要进行比平时更多的编译工作。同样&#xff0c;闲鱼的消息系统在重新发布时经常有…

fsQCA+NCA方法的软件操作及注意事项、论文实证分析部分的写作范式

目录前言1 软件操作步骤2 fsQCA方法的详细操作步骤2.1 软件下载2.2 数据的准备2.3 校准点的确定2.4 变量的校准步骤及闪退问题2.5 fsQCA的数据必要性检验&#xff08;开始一次最后一次&#xff09;2.6 频数、一致性水平、PRI一致性水平的确定2.6.1 频数的确定2.6.2 一致性水平、…

【中级ECharts技术】前端框架ECharts的dataset 管理数据对数据可视化的高级dataset 管理

dataset 管理数据 提供一份数据。 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。 option = {legend: {},tooltip: {},dataset:

Mac 中 MongoDB 使用

根据 homebrew-brew 官方的解释得知&#xff0c;MongoDB 不再是开源的了&#xff0c;并且已经从 Homebrew中移除 #43770 正是由于 MongoDB 的商业化不太理想&#xff0c;所以它选择了闭源。所以&#xff0c;在它闭源之前的那些 brew 安装方法都会报错了。网上很多的文章都是基…

[附源码]JAVA毕业设计雅博书城在线系统(系统+LW)

[附源码]JAVA毕业设计雅博书城在线系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

你想要的图片效果(动态实现)

一、前言 没有使用任何框架API&#xff0c;代码或逻辑在html或小程序都适用。主要实现图片随机位置、随机大小、不重叠&#xff0c;在页面上排布&#xff1b;还有扩展功能选定固定图片位置槽数、固定大小、不重叠&#xff0c;在页面上通过添加&#xff0c;图片随机排布。 二、…

我的创作纪念日(4周年)

机缘 回想当初&#xff0c;博主2017年底从北京中石油&#xff08;沙河总部&#xff09;辞职&#xff0c;一心想回到自己的家乡成都工作、不想在北京待了&#xff0c;在总部赵总的推荐下来到四川中石油工作&#xff08;刚好这边有人离职&#xff0c;所谓一个萝卜一个坑&#xf…

C语言入门(二)——常量,变量和表达式

继续Hello World 常量 变量 赋值 表达式 字符类型与字符编码 继续Hello World 前一个章节已经对Hello World程序做各种改动程序做各种改动看编译运行结果&#xff0c;其中有些改动会导致编译出错&#xff0c;有些改动会影响程序的输出&#xff0c;有些改动则没有任何影响…

C++:类的内存布局

文章目录1、虚的含义2、单基继承2.1、单继承2.2、单虚继承2.3、单虚继承 虚函数2.4、测试代码3、多基继承3.1、多继承 虚函数3.2、虚拟多继承 虚函数3.3、测试代码4、菱形继承4.1、菱形继承4.2、菱形虚拟继承4.3、测试代码5、效率分析建议先了解 C 继承与多态的相关知识&…