我的课程设计学习——动态LED动态显示屏设计

我的课程设计学习——动态LED动态显示屏设计

最近在做课程设计,选题为动态LED动态显示屏设计,要求使用logisim平台实现
一开始本来啥都不会的,可是咱不会可以学呀,年轻最不缺的就是学习能力
写这篇文章算是对自己学习的记录,后续的同学如果遇到相同的问题,也可以参考学习
加油加油!
要求:

  • (1)汉字编码、汉字字库
  • (2)图像的动态显示
  • (3)显示方式包括左移、右移、上移、下移和频率控制
  • (4)采用仿真软件设计和调试完成

文章目录

  • 我的课程设计学习——动态LED动态显示屏设计
    • 一、1小时学习logisim
    • 二、构建一个最简单的数字电路
      • 输入输出引脚
      • 最简单的逻辑电路
      • 在其他电路中使用子电路
      • 使用颜色来表示电路的状态
      • 自动生成组合逻辑电路
    • 三、汉字编码实验
      • 1.实验目的:
      • 2.汉字表示法
      • 3.实验任务:
        • 3.1 实验原理:
        • 3.2 子电路及实验步骤
          • `国标转区位码字电路`
          • `汉字存储子电路`
        • 3.3 开始做实验
          • 第一步,国标码转区位码
          • 第二步,使用在线工具获取汉字的机内码传入GB2312ROM存储器中
    • 四、汉字字库显示
      • 1、什么是汉字字库
      • 2、汉字字库子电路
      • 3、字库显示原理
    • 五、汉字动态移动(左右,上下)
    • 六、几个疑惑的问题
      • 1、国标码转区位码子电路的原理
      • 2、国标码,区位码,机内码三者如何转换
        • 首先记住几个公式
        • 步骤
        • 举个例子
        • 那这个过程大概是怎样的呢?(非常重要)
    • 七、文章迭代说明
    • 八、参考文献
      • 相关参考博客和PPt
      • 相关Mooc课程和配套学习资料
      • 进制转换及三码相关知识
      • 相关工具
    • 吐槽一下下

一、1小时学习logisim

组件库

wiring(线路库)
在线路库里有一些常用的组件,比如分离器,引脚,探测器,隧道,上下拉电阻,时钟等。
Gates(逻辑门库)
Plexers(复用器)
Arithmetic(运算器)
Memory(存储器)
Input/Output(输入输出器)


二、构建一个最简单的数字电路

logisim采用原理图的方式来构建电路,每个子电路都是一个模块,都包括输入信号,输出信号(通过引脚来实现的)

输入引脚通常是方角,输出引脚是圆角
我的课程设计学习——动态LED动态显示屏设计_第1张图片

当连接完成后,输出引脚就会变成输入引脚的值

点击输入引脚,可以修改输入引脚的值,从而改变输出引脚的值
我的课程设计学习——动态LED动态显示屏设计_第2张图片

点击芯片封装
朝向向左的,会放在芯片的左侧,朝向向右的,会放在芯片的右侧,朝向向下上的引脚,会放在芯片的底部
我的课程设计学习——动态LED动态显示屏设计_第3张图片

在logisim中,每一个电路都可以进行封装,而在其他的电路中作为公共模块进行调用,输入输出引脚就是我们调用的接口,类似于c语言中函数调用的参数
这是logisim中非常重要的特性,所有的电路都可以作为子电路来进行封装,在其他的电路中进行调用。从而构建复杂的电路系统,甚至是CPU

输入输出引脚

输入引脚和输出引脚其实都是引脚,只不过输出的属性不一样,可以

  • 更改朝向
  • 更改是否输出
  • 更改数据的位宽(1-32位,快捷键alt+数字)
  • 更改是否三态(0,1,x高阻态)
  • 未定义处理(不变,上拉,下拉) 指的就是在没有连接或高阻态的情况下电路如何处理引脚的值,可以选择三种状态(保持原状,上拉成1,下拉成0)
  • 添加自定义标签

最简单的逻辑电路

我的课程设计学习——动态LED动态显示屏设计_第4张图片

采用数据选择器来进行或非门的选择
数据选择器有一个使能端和一个选择端,两个输入引脚,和一个输出引脚
使能端可以不接,可以自己在属性选择中去掉使能端

当选择端为0时为与门
我的课程设计学习——动态LED动态显示屏设计_第5张图片

当选择端为1是为或门
我的课程设计学习——动态LED动态显示屏设计_第6张图片

可以整体修改数据的宽度,例如将数据位宽改为4位

在其他电路中使用子电路

将子电路的封装进行排版,然后新建测试电路,用鼠标拖动子电路到测试电路,即可使用子电路的封装形式

子电路封装
我的课程设计学习——动态LED动态显示屏设计_第7张图片

测试电路使用子电路
可以看出和之前的子电路的效果相同
我的课程设计学习——动态LED动态显示屏设计_第8张图片

使用颜色来表示电路的状态

亮绿色表示高电平
深绿色表示低电平
蓝色表示高阻态或者悬浮态(未知状态) 电路中应该尽量消除这种状态,电路的引脚没有连接也有可能会产生高阻态
灰色表示飞线 表示两端并没有连接,通常使用灰线表示边框
红色表示信号冲突或者引脚类型不对

我的课程设计学习——动态LED动态显示屏设计_第9张图片

不兼容的位宽
黑色表示多位总线
橙色表示位宽不匹配

自动生成组合逻辑电路

logisim可以根据真值表或者表达式自动生成电路

但是只能生成组合逻辑,并且输入引脚只能是一位的引脚
输入引脚的个数最多只能有八个,输出引脚最多只能有12个

生成一位全加器的电路

选择project菜单栏里的分析电路
我的课程设计学习——动态LED动态显示屏设计_第10张图片

然后选择输入和输出引脚
我的课程设计学习——动态LED动态显示屏设计_第11张图片

我的课程设计学习——动态LED动态显示屏设计_第12张图片

使用真值表构建电路
真值表只适合引脚数目较少来构件电路
故采用表达式来进行构建
我的课程设计学习——动态LED动态显示屏设计_第13张图片

使用表达式来构建电路
我的课程设计学习——动态LED动态显示屏设计_第14张图片
我的课程设计学习——动态LED动态显示屏设计_第15张图片

构建电路
我的课程设计学习——动态LED动态显示屏设计_第16张图片

仅使用两个输入的逻辑门
我的课程设计学习——动态LED动态显示屏设计_第17张图片

采用最小项为和之积范式或积之和范式
我的课程设计学习——动态LED动态显示屏设计_第18张图片


三、汉字编码实验

1.实验目的:

  1. 理解汉字机内码
    通过工具批量获取一段文字的机内码
  2. 理解汉字区位码
    利用简单电路实现汉字机内码和区位码的转换
  3. 理解汉字字型码
    在实验环境中实现汉字机内码的点阵显示

2.汉字表示法

  1. 机内码:计算机内存储字符时使用的编码
    我的课程设计学习——动态LED动态显示屏设计_第19张图片英文字符采用ASCII码标准,只需要七个字节数即可表示对应的字符,通常采用单字节(8位)存储,MSB(最高有效位为0)
    汉字字符采用GB2312标准,采用了双字节(16位)字节表示,有效位为14位,两个最高有效位(MSB)都为1,最多可以表示2^14个汉字
  2. 区位码:采用四位十进制来表示汉字的一种方法,通常用于汉字的检索,配合GB2312标准一起使用
    通常将汉字放入一个94*94的矩阵当中,每一个行列坐标对应一个汉字

区号7位,位号也是7位,所以区位码是14位

行号对应区号,列号对应位号,编号从1开始,最大值为94
区位码和机内码之间的转换: GB2312 汉字机内码 = 区位码 + 0xA0A0

  1. 字形码:输出汉字点阵的信息编码

比如显示一个汉字,汉字的显示是采用像素点的方式,输出汉字对应的图形

  • 汉字字形码点阵信息量大,所占的存储空间大,一般情况下字形码用来做输出
  • 用来构成汉字字库,不能用于机内存储

通常汉字的字形码用来构建汉字的字库文件

3.实验任务:

3.1 实验原理:

把这个弄明白后面就好做了

  • 计数器连接时钟,计数器累加技术,每来一个时钟计数加1
  • 计数器的值直接连接到了GB2312的地址端,每一个时钟都会从存储器中取出一个16位的机内码
  • 对应的机内码传入国标转区位码,这时16位的机内码就转化为14位的区位码(7位的区号和7位的位号)
  • 14位的区位码传入字库电路,通过区位码检索字库电路中预先存储的字形码,并将汉字对应的1024位信息输出到32_32位的矩阵,从而显示汉字的内容 这时就是32_32位的字形码

重点

为了显示班级,姓名,学号和一段自选文字,需要将这些汉字转换为GB2312机内码
获取到的机内码,存入GB2312的ROM存储器中

3.2 子电路及实验步骤

国标转区位码字电路
  1. 输入输出引脚区

GB2312机内码的输入引脚16位,输出为两个7位的引脚,分别是区号和位号

  1. 探测区

GB2312的十六进制信息,区号和位号的十进制信息

  1. 转换的目的就是

将16位的GB2312码转换为7位的区号和7位的位号

汉字存储子电路

在此子电路中修改GB2312ROM存储器的内容,将获取到汉字的机内码存储存储器中

  1. 将汉字转为机内码存入GB2312存储器中,利用Windows记事本输入一段汉字,另存为数据文件,在编码选项框中选择ANSI编码,将对应的文字存储为GB2312标准的机内码。
  2. 这样就得到了GB2312标准的机内码,使用工具(文本编辑器或编程)即可获取机内码
  3. 将获得的一批汉字机内码批量的存入GB2312ROM存储器中
  4. 设置时钟频率为8HZ,驱动时钟,汉字即可实现

3.3 开始做实验

使用logisim打开data.circ,进入子电路

第一步,国标码转区位码

由前面的学习,可以知道

GB2312 汉字机内码 = 区位码 + 0xA0A0H

所以

区位码 = GB2312汉字机内码 - 0xA0A0H

而实验又要求采用加法器进行实现,并且输出区号和位号,采用补码的形式进行加法器实现

区位码 = GB2312汉字机内码 +(- 0xA0A0H)的补码

**而-0xA0A0H的补码为5F60H,两个字节的最高位+1,即等于0xDFE0 **
这里两个字节的最高位为什么加1呢?因为这是为了将国标码转换为机内码,存入GB2312存储器的就是机内码,而不是国标码,在后续的电路中转换成了国标码,从而转换成区位码
这里有点绕,可能会不好理解,请移步下文第六大点,有详细说明过程
所以

区位码 = 国标码 - 2020H
区位码 = 国标码 + 0xDFE0

添加一个DFE0常量,转为区位码

第二步,使用在线工具获取汉字的机内码传入GB2312ROM存储器中
  1. 利用在线工具查询汉字的机内码

  1. 将获取到的机内码传入GB2312ROM存储器中


  1. 查看汉字显示电路,准备开始仿真

  1. 设置时钟频率,使能时钟,计数器开始运行,LED显示屏开始显示

  1. 显示效果



四、汉字字库显示

1、什么是汉字字库

利用区号和位号进行检索的字形码存储器

2、汉字字库子电路

我的课程设计学习——动态LED动态显示屏设计_第20张图片
区位码转逻辑电路

(区号-1)*94 + 位号-1

电路的输入和输出

输入: 区号(7位) 位号(7位)
输出:((区号-1)*94 + 位号)-1
输出的是1024位点阵信息

3、字库显示原理

一个汉字的字形码需要32*32 = 1024位 ,而在logisim中ROM存储器最多为32位,所以应该进行位扩展 ,需要32片 16k X 32位的ROM

这样就达到了1024位的效果,将区号和位号进行传入,即可
输出1024位点阵信息,汉字即可显示
我的课程设计学习——动态LED动态显示屏设计_第21张图片

五、汉字动态移动(左右,上下)

六、几个疑惑的问题

1、国标码转区位码子电路的原理

国标码 = 区位码 + 2020H

所以

区位码 = 国标码 - 2020H

而要求使用加法器实现
所以源码的减法采用补码的加法实现,-2020H的补码就是DEF0H

区位码 = 国标码 + DFE0H

2、国标码,区位码,机内码三者如何转换

在查看了一些文章和资料后,还是有点懵,经过几次理解后,终于弄明白了

首先记住几个公式

国标码 = 区位码 + 2020H
机内码 = 国标码 + 8080H
GB2312 机内码 = 区位码 + A0A0H

步骤

根据以下步骤进行

  1. 将区位码转换为十六进制表示
  2. 将区位码 + 2020H 转换为国标码
  3. 将得到的国标码 + 8080H 转换为机内码

举个例子

汉字的区位码为5027(十进制)
说明区号为50,位号为27

  1. 转换为16进制表示 ,就是 321b
  2. 321bH + 2020H = 523B 国标码
  3. 523B + 8080H = D2BB 机内码

而这个GB2312机内码就是我们需要的到的数据
我们设计的GB2312机内码就得出来了,即直接向GB2312ROM存储器中存入D2BB,驱动时钟,显示汉字一
我的课程设计学习——动态LED动态显示屏设计_第22张图片

那这个过程大概是怎样的呢?(非常重要)

存入存储器中的D2BB机内码,存储汉字的机内码在前文说过,是16位双字节的,14位有效字节,所以拿之前的字来举例,它的机内码为D2BB,14位字节有效,两个最高有效位为1

而我们只需要看数据有效字节就可以了,即14位有效字节,把D2BB-8080H得出523B,即是国标码,通过国标码转区位码电路转换成区位码321B,区号为32(16进制),位号为1B(16进制)

懂了吧,应该很浅显易懂,hhhhh,就这些原理,花了两个半小时才弄懂
如下图
我的课程设计学习——动态LED动态显示屏设计_第23张图片

七、文章迭代说明

2023-05-09
学习了logisim软件的基本使用,一小时速成
2023-05-11
学习汉字编码实验及原理,成功在logisim平台上显示
2023-05-12
弄懂汉字显示电路基本原理,弄懂国标码、区位码、机内码三者如何转化,并做出相应说明
2023-05-14
弄懂字库子电路及原理,字扩展及位扩展

待更新。。。。。。


八、参考文献

由于这次课程设计选题为动态LED动态显示屏设计
采用以下参考文献,感谢优秀的Mooc课程和各位大佬的开源链接

相关参考博客和PPt

logisim基本组件介绍

汉字编码实验-ppt

计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)

实验五 汉字字库实验(Logisim)

汉字字库存储芯片扩展实验

相关Mooc课程和配套学习资料

计算机硬件系统设计-Mooc课程

《计算机硬件系统设计》—自己动手画CPU

谭志虎 / 自己动手画CPU - gitee开源链接

进制转换及三码相关知识

进制转换转换以及原码反码和补码相关知识
区位码,国标码,机内码三者怎样转换?

相关工具

汉字字符集编码查询

原码,反码,补码相互转换在线计算器

在线进制转换

16进制加法,减法,乘法,除法在线计算器

吐槽一下下

CSDN

自己写笔记是使用的其他平台写的,直接导入的markdown文件,文章更新迭代只能在自带的编辑器里进行编辑迭代,但是喂,我直接导入文件迭代不行吗?

我刚才更新文章,采用导入方式,没想到发出了两篇一模一样的文章,这个功能十分不人性化,吐槽一下下

可恶,以后更新要在CDSN更新了!

你可能感兴趣的:(课程设计,课程设计,学习,logisim,计算机组成原理,计算机系统结构)