北邮数电实验报告 双色点阵显示控制器

合集下载

北邮数字电路综合实验报告

北邮数字电路综合实验报告

数字电路综合实验报告简易智能密码锁一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。

基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。

通过密码设置确定键(BTN 键)进行锁定。

2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。

输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。

3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。

闭锁状态下不能清除密码。

4、用点阵显示开锁和闭锁状态。

提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。

2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。

二、系统设计2.1系统总体框图2.2逻辑流程图2.3MDS图2.4分块说明程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。

以下进行详细介绍。

1.键盘模块本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。

同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

北邮数字电路与逻辑设计实验-实验报告(下)

北邮数字电路与逻辑设计实验-实验报告(下)

北京邮电大学电路实验中心<数字电路与逻辑设计实验(下)>实验报告班级: xxx 学院: xxx实验室: xxx 审阅教师:姓名(班内序号): xxx 学号: xxx实验时间: xxx评定成绩:目录一、任务要求 (2)1.基本要求 (2)2.提高要求 (2)二、系统设计 (2)1.设计思路 (2)2.总体框图 (4)3.分块设计 (5)(1)分频器模块 (5)(2)4×4键盘输入模块 (5)(3)数码管显示模块 (6)(4)8×8 LED点阵显示模块 (6)(5)LCD液晶屏显示模块 (6)(6)中心模块 (6)三、仿真波形及波形分析 (6)1.分频器模块 (6)2.4×4键盘输入模块 (7)3.数码管显示模块 (7)4.8×8 LED点阵显示模块 (8)5.LCD液晶屏显示模块 (8)6.中心模块 (8)四、源程序 (9)1.分频器模块 (9)2.4×4键盘输入模块 (9)3.数码管显示模块 (11)4.8×8 LED点阵显示模块 (12)5.LCD液晶屏显示模块 (19)6.中心模块 (23)五、功能说明及资源利用情况 (26)六、故障及问题分析 (27)七、总结和结论 (27)一、任务要求本电路可供甲乙二人进行猜拳游戏。

通过不同的按键控制,选择多种出拳方式,显示猜拳的结果,实现猜拳游戏,防止了作弊的可能。

1.基本要求1、甲乙双方各用4×4 键盘中的三个按键模拟“石头”、“剪刀”、“布”,一个按键为“确认”。

4×4 键盘第一行为甲,第二行为乙;2、裁判用4×4 键盘第三行的一个按键模拟“开”,一个按键为“准备”,一个按键为“复位”;3、裁判宣布“准备”后,甲乙双方分别选择出拳方式并确认;4、裁判“开”以后,用点阵的左右三列同时显示甲乙双方的猜拳选择(如下图所示),并用两个数码管显示甲乙的猜拳比分;图1甲“布”,乙“剪刀”;甲“剪刀”,乙“石头”5、猜拳游戏为五局三胜制。

北邮数电实验报告

北邮数电实验报告

北邮数电实验报告北邮数电实验报告一、引言数电实验是电子信息类专业学生必修的一门实验课程,通过实践操作,帮助学生巩固理论知识,培养实际动手能力。

本次实验旨在通过设计和搭建一个简单的数字电路,来理解数字电路的基本原理和工作方式。

二、实验目的本次实验的目的是设计一个4位二进制加法器,实现两个4位二进制数的相加运算。

通过实验,我们可以加深对于数字电路的理解,掌握数字电路的设计和搭建方法。

三、实验原理1. 二进制加法器二进制加法器是一种用于计算二进制数相加的数字电路。

它由若干个逻辑门和触发器组成,可以实现二进制数的加法运算。

在本次实验中,我们将设计一个4位二进制加法器,即可以计算两个4位二进制数的相加结果。

2. 逻辑门逻辑门是数字电路中常用的基本元件,用于实现逻辑运算。

常见的逻辑门有与门、或门、非门、异或门等。

在本次实验中,我们将使用与门和异或门来构建4位二进制加法器。

四、实验步骤1. 设计4位二进制加法器的电路图根据实验要求,我们需要设计一个能够计算两个4位二进制数相加的电路。

首先,我们可以将两个4位二进制数分别用D0~D3和E0~E3表示,其中D0和E0分别为最低位。

然后,我们需要使用与门和异或门来实现加法器的功能。

通过逻辑运算,我们可以得到每一位的和以及进位。

最后,将每一位的和连接起来,即可得到最终的结果。

2. 搭建电路根据电路图,我们可以开始搭建实验电路。

首先,将所需的逻辑门和触发器连接起来,形成一个完整的电路。

然后,将所需的输入信号和电源连接到电路上。

最后,使用示波器等工具检查电路的工作状态,确保电路正常运行。

3. 进行实验测试在搭建好电路后,我们可以进行实验测试。

首先,将两个4位二进制数的输入信号连接到电路上。

然后,通过观察输出信号,判断电路是否正确计算了两个二进制数的相加结果。

如果输出信号与预期结果一致,说明电路设计和搭建成功。

五、实验结果与分析在进行实验测试后,我们可以得到实验结果。

通过观察输出信号,我们可以判断电路是否正确计算了两个二进制数的相加结果。

北邮-数电实验报告

北邮-数电实验报告

北邮-数电实验报告数字电路实验报告学院:信息与通信工程专业:信息工程班级:2013211125学号:2013210681姓名:袁普实验一:QuartusⅡ原理图输入法设计与实现一:实验要求①:用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。

②:用实验一生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。

③:用3线—8线译码器和逻辑门设计实现函数F,仿真验证其功能,下载到实验板测试。

要求用拨码开关设定输入信号,发光二极管显示输出信号。

二:报告内容①:实验一(2)的原理图用两个已经生成的半加器图形模块单元和一个双输入或门即可实现全加器②:仿真波形图以及分析波形图:波形分析:通过分析ab ci三个输入在8中不同组合下的输出,发现与全加器的真值表吻合,说明实现了全加器的逻辑功能。

同时看见波形中出现了毛刺(冒险),这也与事实一致。

③:故障及问题分析第一次在做全加器的时候发现找不到已经生成的半加器模块,后来发现是因为在建立工程时这两个项目没有建在同一个文件夹里,在调用的时候就找不到。

后来我将全加器工程建在同一个文件夹里解决了此问题。

实验二:用VHDL设计和实现组合逻辑电路一:实验要求①:用VHDL设计一个8421码转换为格雷码的代码转换器,仿真验证其功能。

②:用VHDL设计一个4位二进制奇校验器,要求在为奇数个1时输出为1,偶数个1时输出为0,仿真验证其功能。

③:用VHDL设计一个数码管译码器,仿真验证其功能,下载到实验板测试,要求用拨码开关设定输入信号,数码管显示输出信号,并且只使一个数码管有显示,其余为熄灭状态。

二:故障及问题分析在刚开始实现让一个数码管显示的时候,我本来准备再设置6个输入和输出,通过实验板上的拨码来输入信息分别控制不同的数码管的的开闭状态,但是后来发现这样效率很低而且实验板上的拨码开关数量根本不够。

点阵显示实验报告心得

点阵显示实验报告心得

点阵显示实验报告心得1. 引言点阵显示是一种常见的显示技术,通过控制每个点的亮度或颜色,可以显示出图像、文字等内容。

在本次实验中,我们使用了Arduino开发板和一块8x8点阵模块,进行了点阵显示实验。

通过这次实验,我对点阵显示技术有了更深入的理解,并且学到了一些实际操作的技巧和注意事项。

2. 实验内容本次实验的主要内容是使用Arduino控制8x8点阵显示模块,显示一些简单的图案和文字。

实验过程中,我们需要通过Arduino的数字输出口控制点阵的行和列,使得点阵显示出我们期望的图案。

3. 实验步骤3.1 准备工作在实验开始前,我们准备了一些必要的材料,包括Arduino开发板、8x8点阵模块、杜邦线等。

同时,我们下载了Arduino IDE软件,并确保Arduino开发板与计算机正常连接。

3.2 硬件连接首先,我们在Arduino开发板的数字输出口连接点阵模块的行,以及连接点阵模块的列。

这样,我们就通过Arduino可以对点阵模块的每个点进行控制。

3.3 编写代码接下来,我们在Arduino IDE中编写代码。

代码的主要功能是通过控制点阵模块的行和列,实现我们期望的图案显示。

在编写代码时,我们需要了解点阵模块的工作原理,以及如何通过Arduino的数字输出控制点阵。

3.4 上传程序完成代码编写后,我们将代码上传到Arduino开发板。

在上传过程中,需要确保开发板与计算机的连接正常,并选择正确的开发板类型和端口。

3.5 调试和展示代码上传完成后,我们可以进行调试和展示。

在调试过程中,我们可以通过修改代码的参数,调整点阵显示的亮度和速度等。

在展示过程中,我们可以尝试显示不同的图案和文字,观察点阵显示的效果。

4. 实验心得通过本次实验,我对点阵显示技术有了更深入的了解。

我学习到了使用Arduino 控制点阵的基本原理和方法,并且通过实际操作,我也掌握了一些实际的技巧和注意事项。

在实验的过程中,我遇到了一些问题,但通过调试和尝试,我可以解决这些问题,并取得预期的效果。

点阵显示器设计实验报告

点阵显示器设计实验报告
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar code table1[]=;
uchar code table2[]=;
void main()
{
WL=1;
P1=0xff;
WL=0;
while(1)
{
for(a=0;a<8;a++)
{
P0=table1[a];
P1=table2[a];
七、实验心得与体会
在这次实验中,我体会到了合作的重要性。一个人也可能实现这一系列的过程,但是要花费很多精力和时间。群策群力,分工明确,可以使我们更好、更快地完成我们的工作。在此期间,你可以更好知道自己的不足和缺陷,来得到改正。还可以知道自己的优势所在,把握好自己的优势。
自我评分
教师评分
delay(2);
}
}
}
六、思考题:
点阵显示器的动态扫描原理?
LED点阵模块由8*8个发光管组成。每行8个发光管,每一行的发光管的阳极接在行线上。每列8个发光管,每一列的发光管的阴极接在列线。这样在行线上输入高电平,列输入低电平,相对应位置上的发光管就点亮了。根据编好的程序来控制每一时刻向行列输入的高低电平,进而控制每一时刻要显示的行和列即能动态循环显示
2、常见的字模滚动方式的控制
3、点阵显示器的实现
三、实验软硬件设备:
Keil C51软件,Proteus软件,51单片机试验台,联想电脑。
四、实验原理图:
本字符显示器采用AT89C52单片机作为控制器,12MHz晶振,8*8点阵共阳LED显示器。其中,P0作为字符数据输出口,P2作为字符显示扫描输出口,第31引脚(EA)接电源,P1.0~P1.2口分别接开关K1、K2、K3,改变电阻(270Ω)的大小可以改变显示字符的亮度,驱动用9012三极管。

LED双色点阵显示实验

LED双⾊点阵显⽰实验LED 双⾊点阵显⽰实验⼀、实验⽬的1.了解8×8矩阵LED 显⽰的基本原理和功能2.掌握8×8矩阵LED 和单⽚机的硬件接⼝和软件设计⽅法⼆、实验说明使⽤双⾊共阴极LED 点阵,其结构如图1所⽰。

系统使⽤74HC595芯⽚,使串⾏输出转换成并⾏输出,驱动矩阵LED 。

图1 LED 点阵结构三、实验内容及步骤根据系统提供的电路,掌握8×8矩阵LED 的⼯作原理,编程实现显⽰⼀个‘箭头’从左向右滚动的效果。

本实验需要⽤到单⽚机最⼩应⽤系统(F1区)和双⾊点阵显⽰(I1区)。

1、单⽚机最⼩应⽤系统的P1.0⼝接LED 点阵显⽰的DIN ,P1.1⼝接LED 点阵的SCLK ,P1.2⼝接LED 点阵显⽰的RCLK 。

2、⽤串⾏数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的⽅向:缺⼝朝上。

3、打开Keil uVision2仿真软件,⾸先建⽴本实验的项⽬⽂件,接着添加“TH30_LED 点阵.ASM ”源程序,进⾏编译,直到编译⽆误。

4、进⾏软件设置,选择硬件仿真,选择串⾏⼝,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN 按钮运⾏程序。

观察点阵显⽰(显⽰向左移动的彩⾊箭头)。

6、也可以把源程序编译成可执⾏⽂件,⽤ISP 烧录器烧录到89S52/89S51芯⽚中。

(ISP 烧录器的使⽤查看附录⼆)四、实验参考程序(见光盘中的程序⽂件夹)五、思考题根据实验内容编写⼀个程序,并在实验仪上调试和验证。

六、电路原理图H_ATB124H_ATB223H_ATB322H_ATB421H_ATB54H_ATB63H_ATB72H_ATB81G_LTR15G_LTR26G_LTR37G_LTR48G_LTR59G_LTR610G_LTR711G_LTR812 R_LTR813R_LTR714R_LTR615R_LTR516R_LTR417R_LTR318R_LTR219R_LTR120H _A T B 124H _A T B 223H _A T B 322H _A T B 421H _A T B 54H _A T B 63H _A T B 72H _A T B 81G _L T R 15G _L T R 26G _L T R 37G _L T R 48G _L T R 59G _L T R610G _L T R 711G _L T R 812R _L T R 813R _L T R 714R _L T R 615R _L T R 516R _L T R 417R _L T R 318R _L T R 219R _L T R 120D I S 1ISER 14SRCLK 11SRCLR 10RCLK 12E13O015O11O22O33O44O55O66O77Q79VCC 16GND874HC595VCCVCC VCCVCC R 1_L 1R 1_L 2R 1_L 3R 1_L 4R 1_L 5R 1_L 6R 1_L 7R 1_L 8H _A 1H _A 2H _A 3H _A 4H _A T B 124H _A T B 223H _A T B 322H _A T B 421H _A T B 54H _A T B 63H _A T B 72H _A T B 81G _L T R 15G _L T R 26G _L T R 37G _L T R 48G _L T R 59G _L T R 610G _L T R 711G _L T R 812R _L T R 813R _L T R 714R _L T R 615R _L T R 516R _L T R 417R _L T R 318R _L T R 219R _L T R 120D I S 2IVCC VCC VCCVCCVCCVCCSERSCLK RCLK 123Q1I 9013123Q2I 9013123Q3I 9013123Q4I 9013123Q5I 9013123Q6I 9013123Q7I 9013123Q8I 9013H_A5H_A6H_A7H_A8H_A1H_A2H_A3H_A4HA1I HA2I HA3I HA4I HA5I HA6I HA7I HA8I HA1IHA2IHA3IHA4IHA5IHA6IHA7IHA8ISER14SRCLK 11SRCLR10RCLK12E13O015O11O22O33O44O55O66O77Q79VCC16GND874HC595SER 14SRCLK 11SRCLR 10RCLK 12E 13O015O11O22O33O44O55O66O77Q79VCC 16GND 8U5I 74HC595SER 14SRCLK11SRCLR 10RCLK 12E13O015O11O22O33O44O55O66O77Q79VCC16GND874HC595SER 14SRCLK 11SRCLR 10RCLK 12E 13O015O11O22O33O44O55O66O77Q79VCC 16GND 874HC595DIN SCLK RCLK VCCG 1_L 1G 1_L 2G 1_L 3G 1_L 4G 1_L 5G 1_L 6G 1_L 7G 1_L 8H _A 5H _A 6H _A 7H _A 8G 2_L 1G 2_L 2G 2_L 3G 2_L 4G 2_L 5G 2_L 6G 2_L 7G 2_L 8H _A 5H _A 6H _A 7H _A 8R 2_L 1R 2_L 2R 2_L 3R 2_L 4R 2_L 5R 2_L 6R 2_L 7R 2_L 8H _A 1H _A 2H _A 3H _A 4R1_L1R1_L2R1_L3R1_L4R1_L5R1_L6R1_L7R1_L8G1_L1G1_L2G1_L3G1_L4G1_L5G1_L6G1_L7G1_L8R2_L1R2_L2R2_L3R2_L4R2_L5R2_L6R2_L7R2_L8G2_L1G2_L2G2_L3G2_L4G2_L5G2_L6G2_L7G2_L8。

点阵显示电路课程设计实验报告

燕山大学课程设计说明书题目:点阵显示电路学院(系):电气工程学院年级专业: 11级电力系统及其自动化学号: 110103030172 学生姓名:刘二召指导教师:吕宏诗李建霞教师职称:实验师燕山大学课程设计(论文)任务书院(系):电气工程学院基层教学单位:电子实验中心2013年12 月19日目录第一章设计思路 (4)第二章基本原理2.1 模块介绍 (4)2.2 真值表 (5)第三章设计原理图及仿真图3.1模块一原理图 (8)3.2模块二原理图 (8)3.3模块三原理图 (9)3.4模块四原理图 (9)3.5总原理图 (10)3.6波形仿真图 (10)第四章管脚锁定及管脚连接4.1 硬件连接 (11)4.2 管脚锁定 (12)第五章总结 (13)参考文献 (14)燕山大学课程设计评审意见表 (15)第一章设计思路根据任务书可以得到以下任务目的及解决方法:1)选用行扫描,用一片3-8译码器进行;2)分别用一片3-8译码器控制列,与控制行的3-8译码器配合,在8-8矩阵中分别显示出由小到大变化的口字;3)为达到行扫描的目的和保证控制行的与控制列的3-8译码器同步,选用一十进制计数器同时控制四个3-8译码器;4)为达到四个口字分别显示和视觉延时效果,用一片计数器显示的不同数字分别控制四个控制列的译码器5)为了达到口字的视觉延时效果,需要控制行扫描的八进制计数器的时钟脉冲频率高,而控制列的计数器的时钟脉冲频率低(并且要保证高频率是低频率的8的整数倍)。

第二章基本原理2.1 模块介绍根据设计目的及解决方法可以将整个设计分为四个模块:✧模块一:控制行扫描的模块用一片3-8译码器控制行低电平从第一行到第八行依次出现✧模块二、控制四个由小到大的口显示的模块根据真值表,分别用一片3-8译码器配合模块一控制列电平的高低使8-8矩阵依次由小到大显示口字,第一个和第三个口字输出端接红色点阵显示接线组“COL1-8R(T)”显示红色口;第二个和第四个口字输出端接绿色点阵显示接线组“COL1-8G(T)”显示绿色口。

北邮数电实验报告

北邮数电实验报告1. 实验目的本实验的目的是通过实际操作和实验验证,加深对数字电路的理解和掌握。

具体实验内容包括: 1. 实现各种基本逻辑电路(与门、或门、非门、异或门等)的电路设计。

2. 学习使用开关和LED灯进行数字信号输入和输出。

3. 掌握数字电路实验中常用的仪器设备的使用方法。

2. 实验器材和环境本实验所使用的器材和环境如下: - FPGA实验箱 - 数字逻辑集成电路(与门、或门、非门、异或门等) - 电源 - 接线板 - 数字电路实验仪器3. 实验步骤3.1 实验准备首先,我们需要将实验所需的器材连接好,包括将数字逻辑集成电路插入到FPGA实验箱上的插槽中,并将电源正确连接。

3.2 电路设计与布线根据实验要求,我们需要设计不同的基本逻辑电路。

比如,要设计一个与门电路,可以通过将两个输入端分别与两个开关连接,将输出端连接到一个LED灯上。

其他的逻辑电路同样可以设计类似的方式。

在设计和布线的过程中,需要注意保持电路的连通性,并避免出现短路等问题。

3.3 输入和输出信号设置根据实验要求,我们需要设置输入和输出信号。

可以通过控制开关的开合状态来设置输入信号,然后观察LED灯的亮灭情况来判断输出信号的状态是否符合预期。

3.4 实验数据记录和分析在实验过程中,我们需要记录每个逻辑电路的输入和输出信号状态,并进行分析。

可以通过绘制真值表或者逻辑门表来记录并分析数据。

4. 实验结果与分析根据实验步骤中记录的数据,我们可以得出实验结果,并进行进一步的分析。

比如,可以通过比对设计的逻辑电路输出和预期输出的差异,来判断实验是否成功完成。

5. 总结与反思通过本次实验,我深入了解和掌握了数字电路的基本原理和实验方法。

通过设计和实验验证,加深了对基本逻辑电路的理解,并熟悉了数字电路实验所使用的仪器设备。

在实验过程中,我遇到了一些问题,比如电路连接错误导致的信号不稳定等,但通过仔细调试和排查,最终解决了这些问题。

数电实验报告北邮(3篇)

第1篇一、实验名称数字电路基础实验二、实验目的1. 熟悉数字电路的基本原理和组成。

2. 掌握常用数字电路元件(如逻辑门、触发器、计数器等)的功能和使用方法。

3. 培养动手能力和实验技能。

三、实验原理数字电路是由逻辑门、触发器、计数器等基本元件组成的。

逻辑门是数字电路的基本单元,用于实现基本的逻辑运算。

触发器是数字电路中的记忆单元,用于存储信息。

计数器是数字电路中的时序单元,用于实现计数功能。

四、实验仪器与设备1. 数字电路实验箱2. 万用表3. 导线4. 74LS00集成电路5. 74LS20集成电路五、实验内容1. 组合逻辑电路分析(1)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。

(2)搭建一个2输入与非门电路,输入端分别为A、B,输出端为Y。

(3)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。

要求输出Y为A、B、C、D的异或运算结果。

2. 触发器应用(1)搭建一个D触发器电路,输入端为D,输出端为Q。

(2)搭建一个JK触发器电路,输入端为J、K,输出端为Q。

(3)搭建一个计数器电路,使用D触发器实现一个4位二进制计数器。

3. 计数器应用(1)搭建一个十进制计数器电路,使用74LS90集成电路实现。

(2)搭建一个任意进制计数器电路,使用74LS90集成电路实现。

(3)搭建一个分频器电路,使用计数器实现。

六、实验步骤1. 根据实验原理和电路图,在实验箱上搭建实验电路。

2. 使用万用表测试电路的各个节点电压,确保电路连接正确。

3. 根据实验要求,输入不同的信号,观察输出结果。

4. 记录实验数据,分析实验结果。

七、实验结果与分析1. 组合逻辑电路分析(1)4输入与非门电路:当A、B、C、D都为0时,Y为1;否则,Y为0。

(2)2输入与非门电路:当A、B都为0时,Y为1;否则,Y为0。

(3)4输入与非门电路:当A、B、C、D中有奇数个1时,Y为1;否则,Y为0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路与逻辑设计实验设计方案题目:双色点阵显示控制器一、设计思路⏹基本要求:1.固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn按钮实现亮度调节,亮度变化视觉效果要尽量明显。

2.用从红到绿8级渐变色显示一个固定汉字或图形。

3.分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn按键进行切换。

4.显示的图形或汉字要尽量饱满美观。

⏹提高要求:1.滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。

2.自拟其它功能。

二、系统设计总体框图方框图(模块划分)ASM图MDS图三、仿真波形及仿真分析1.时钟分频分析:这个进程组用于产生不同频率的时钟用于不同用途的时钟信号,图中所表达的也是如此,不同频率的时钟信号。

对于lightness信号来说,它是一个低分频的,可控占空比的信号,图中所示为占空比为80%时的信号。

2.防抖分析:Mode_in和intensity_in信号有短时间的抖动现象,在经过防抖之后,短时间的抖动并不会影响mode和intensity信号。

Mode_in和intensity_in信号有长时间的高电平,这会使控制电路既要检测上升沿又要检测下降沿。

经过防抖程序之后,将控制信号mode和intensity处理成脉冲信号,这样控制电路只需检测是否有正脉冲就可以了。

3.状态控制与亮度调节分析:每当mode信号有一个正脉冲时,state就变化一次。

每当intensity信号有一个正脉冲时,lightness就改变一次占空比。

4.颜色改变分析:当状态改变到S1的时候,占空比信号才会改变。

从图中可以看出,可控占空比信号是每八个时间单位为一组,这八个时间单位分别代表着第一行被选中、第二行被选中、……第八行被选中。

当第一行被选中时,可以清楚看到红色和绿色控制信号的占空比是不同的,这样就会导致点阵点的颜色中红色成分和绿色成分亮度不同,从而改变其颜色。

5.字符显示部分分析:从图中可以看出,当模式切换后,列内容信号会被赋予不同的值,且随时间而改变。

6.显示部分分析:从图中可以看出,各个信号之间的逻辑关系符合代码中的表达式。

四、源程序(含注释)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY pointmatrix ISPORT(clk:IN STD_LOGIC;mode_in:IN STD_LOGIC;intensity_in:IN STD_LOGIC;row:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);red_col:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);green_col:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END pointmatrix;ARCHITECTURE a OF pointmatrix ISTYPE all_state IS (S0,S1,S2,S3,S4);SIGNAL state:all_state;SIGNAL clk_move:STD_LOGIC;SIGNAL clk_div:STD_LOGIC;SIGNAL clk_occupy:STD_LOGIC;SIGNAL clk_temp:STD_LOGIC;SIGNAL clk_lightness:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data0,data1,data2,data3,data4,data5,data6,data7:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data_row:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data_col:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL gr_occupy:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL re_occupy:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL mode:STD_LOGIC;SIGNAL intensity:STD_LOGIC;SIGNAL occupy_count:INTEGER RANGE 0 TO 100;SIGNAL tmp1,tmp2,tmp3,tmp4:STD_LOGIC;BEGINdiv_move:PROCESS(clk) --用于防抖的分频V ARIABLE count:INTEGER RANGE 0 TO 25000000;BEGINIF clk'EVENT AND clk='1' THENIF count=9999999 THENcount:=0;ELSEcount:=count+1;END IF;IF count<5000000 THENclk_move<='1';ELSEclk_move<='0';END IF;END IF;END PROCESS div_move;div_occupy:PROCESS(clk) --控制占空比进程和数码管显示的高频时钟V ARIABLE count:INTEGER RANGE 0 TO 25000000;BEGINIF clk'EVENT AND clk='1' THENIF count=19999 THENcount:=0;ELSEcount:=count+1;END IF;IF count<10000 THENclk_occupy<='1';ELSEclk_occupy<='0';END IF;END IF;END PROCESS div_occupy;div_clk:PROCESS(clk) --控制字符图形显示的高频时钟V ARIABLE count:INTEGER RANGE 0 TO 25000000;BEGINIF clk'EVENT AND clk='1' THENIF count=159999 THENcount:=0;ELSEcount:=count+1;END IF;IF count<80000 THENclk_div<='1';ELSEclk_div<='0';END IF;END IF;END PROCESS div_clk;div_temp:PROCESS(clk) --用于防抖进程组和检测输入信号的中频时钟V ARIABLE count:INTEGER RANGE 0 TO 25000000;BEGINIF clk'EVENT AND clk='1' THENIF count=255 THENcount:=0;ELSEcount:=count+1;END IF;IF count<128 THENclk_temp<='1';ELSEclk_temp<='0';END IF;END IF;END PROCESS div_temp;in_mode:PROCESS(mode_in,clk_temp,tmp1,tmp2) --按键防抖1 BEGINIF clk_temp'event AND clk_temp='0' THENtmp1<=tmp2;tmp2<=mode_in;END IF;mode<=clk_temp AND tmp2 AND (NOT tmp1);END PROCESS in_mode;in_intensity:PROCESS(intensity_in,clk_temp,tmp3,tmp4) --按键防抖2 BEGINIF clk_temp'event AND clk_temp='0' THENtmp3<=tmp4;tmp4<=intensity_in;END IF;intensity<=clk_temp AND tmp4 AND (NOT tmp3);END PROCESS in_intensity;state_choose:PROCESS(mode) --状态机状态选择BEGINIF mode'EVENT AND mode='1' THENCASE state ISWHEN S0=>state<=S1;WHEN S1=>state<=S2;WHEN S2=>state<=S3;WHEN S3=>state<=S4;WHEN S4=>state<=S0;END CASE;END IF;END PROCESS state_choose;intensity_choose:PROCESS(intensity)BEGINIF intensity'EVENT AND intensity='1' THENCASE occupy_count ISWHEN 100=>occupy_count<=50;WHEN 50=>occupy_count<=25;WHEN 25=>occupy_count<=12;WHEN 12=>occupy_count<=100;WHEN OTHERS=>occupy_count<=100;END CASE;END IF;END PROCESS intensity_choose;div_clk_lightness:PROCESS(clk,occupy_count) --单字调节亮度V ARIABLE count:INTEGER RANGE 0 TO 25000000;BEGINIF clk'EVENT AND clk='1' THENIF count=99 THENcount:=0;ELSEcount:=count+1;END IF;IF count<occupy_count THENclk_lightness<="00000000";ELSEclk_lightness<="11111111";END IF;END IF;END PROCESS div_clk_lightness;load_data:PROCESS(clk_move,state) --设置显示状态V ARIABLE count:INTEGER RANGE 0 TO 31;V ARIABLE count1:INTEGER RANGE 0 TO 3; BEGINIF clk_move'EVENT AND clk_move='1' THEN IF count1=3 THENcount1:=0;ELSEcount1:=count1+1;END IF;IF count=31 THENcount:=0;ELSEcount:=count+1;END IF;END IF;CASE state ISWHEN S0=>data0<="01100110";data1<="11111111";data2<="11111111";data3<="01111110";data4<="00111100";data5<="00011000";data6<="00011000";data7<="00011000";WHEN S1=>data0<="01100110";data1<="11111111";data2<="11111111";data3<="01111110";data4<="00111100";data5<="00011000";data6<="00011000";data7<="00011000"; WHEN S2=>CASE count1 ISWHEN 0=>data0<="11111110";data1<="10000001";data2<="10000001";data3<="11111110";data4<="11111110";data5<="10000001";data6<="10000001";data7<="11111110";WHEN 1=>data0<="11000011";data1<="11000011";data2<="11000011";data3<="11000011";data4<="11000011";data5<="01100110";data6<="00111100";data7<="00011000";WHEN 2=>data0<="11111100";data1<="10000010";data2<="10000001";data3<="10000010";data4<="11111100";data5<="10000000";data6<="10000000";data7<="10000000";WHEN 3=>data0<="11111111";data1<="11111111";data2<="00011000";data3<="00011000";data4<="00011000";data5<="00011000";data7<="00011000";END CASE;WHEN S3=>CASE count ISWHEN 0=>data0<="11111110";data1<="10000001";data2<="10000001";data3<="11111110";data4<="11111110";data5<="10000001";data6<="10000001";data7<="11111110";WHEN 1=>data0<="11111101";data1<="00000011";data2<="00000011";data3<="11111101";data4<="11111101";data5<="00000010";data6<="00000010";data7<="11111100";WHEN 2=>data0<="11111011";data1<="00000111";data2<="00000111";data3<="11111011";data4<="11111011";data5<="00000101";data6<="00000100";data7<="11111000";WHEN 3=>data0<="11110110";data1<="00001110";data2<="00001110";data3<="11110110";data4<="11110110";data5<="00001011";data6<="00001001";data7<="11110000";WHEN 4=>data1<="00011100";data2<="00011100";data3<="11101100";data4<="11101100";data5<="00010110";data6<="00010011";data7<="11100001"; WHEN 5=>data0<="11011000";data1<="00111000";data2<="00111000";data3<="11011000";data4<="11011000";data5<="00101100";data6<="00100111";data7<="11000011"; WHEN 6=>data0<="10110000";data1<="01110000";data2<="01110000";data3<="10110000";data4<="10110000";data5<="01011001";data6<="01001111";data7<="10000110"; WHEN 7=>data0<="01100001";data1<="11100001";data2<="11100001";data3<="01100001";data4<="01100001";data5<="10110011";data6<="10011110";data7<="00001100"; WHEN 8=>data0<="11000011";data1<="11000011";data2<="11000011";data3<="11000011";data4<="11000011";data5<="01100110";data6<="00111100";data7<="00011000";WHEN 9=>data0<="10000111";data1<="10000111";data2<="10000111";data3<="10000111";data4<="10000111";data5<="11001101";data6<="01111001";data7<="00110001"; WHEN 10=>data0<="00001111";data1<="00001110";data2<="00001110";data3<="00001110";data4<="00001111";data5<="10011010";data6<="11110010";data7<="01100010"; WHEN 11=>data0<="00011111";data1<="00011100";data2<="00011100";data3<="00011100";data4<="00011111";data5<="00110100";data6<="11100100";data7<="11000100"; WHEN 12=>data0<="00111111";data1<="00111000";data2<="00111000";data3<="00111000";data4<="00111111";data5<="01101000";data6<="11001000";data7<="10001000"; WHEN 13=>data0<="01111111";data1<="01110000";data2<="01110000";data3<="01110000";data4<="01111111";data5<="11010000";data6<="10010000";WHEN 14=>data0<="11111111";data1<="11100000";data2<="11100000";data3<="11100000";data4<="11111111";data5<="10100000";data6<="00100000";data7<="00100000"; WHEN 15=>data0<="11111110";data1<="11000001";data2<="11000000";data3<="11000001";data4<="11111110";data5<="01000000";data6<="01000000";data7<="01000000"; WHEN 16=>data0<="11111100";data1<="10000010";data2<="10000001";data3<="10000010";data4<="11111100";data5<="10000000";data6<="10000000";data7<="10000000"; WHEN 17=>data0<="11111001";data1<="00000101";data2<="00000010";data3<="00000100";data4<="11111000";data5<="00000000";data6<="00000000";data7<="00000000"; WHEN 18=>data0<="11110011";data1<="00001011";data2<="00000100";data3<="00001000";data4<="11110000";data5<="00000000";data7<="00000000"; WHEN 19=>data0<="11100111";data1<="00010111";data2<="00001000";data3<="00010000";data4<="11100000";data5<="00000000";data6<="00000000";data7<="00000000"; WHEN 20=>data0<="11001111";data1<="00101111";data2<="00010001";data3<="00100001";data4<="11000001";data5<="00000001";data6<="00000001";data7<="00000001"; WHEN 21=>data0<="10011111";data1<="01011111";data2<="00100011";data3<="01000011";data4<="10000011";data5<="00000011";data6<="00000011";data7<="00000011"; WHEN 22=>data0<="00111111";data1<="10111111";data2<="01000110";data3<="10000110";data4<="00000110";data5<="00000110";data6<="00000110";data7<="00000110"; WHEN 23=>data0<="01111111";data1<="01111111";data2<="10001100";data3<="00001100";data4<="00001100";data6<="00001100";data7<="00001100"; WHEN 24=>data0<="11111111";data1<="11111111";data2<="00011000";data3<="00011000";data4<="00011000";data5<="00011000";data6<="00011000";data7<="00011000"; WHEN 25=>data0<="11111110";data1<="11111110";data2<="00110000";data3<="00110000";data4<="00110000";data5<="00110000";data6<="00110000";data7<="00110000"; WHEN 26=>data0<="11111100";data1<="11111100";data2<="01100000";data3<="01100000";data4<="01100000";data5<="01100000";data6<="01100000";data7<="01100000"; WHEN 27=>data0<="11111000";data1<="11111000";data2<="11000000";data3<="11000000";data4<="11000000";data5<="11000000";data6<="11000000";data7<="11000000"; WHEN 28=>data0<="11110000";data1<="11110000";data2<="10000000";data3<="10000000";data5<="10000000";data6<="10000000";data7<="10000000";WHEN 29=>data0<="11100000";data1<="11100000";data2<="00000000";data3<="00000000";data4<="00000000";data5<="00000000";data6<="00000000";data7<="00000000";WHEN 30=>data0<="11000000";data1<="11000000";data2<="00000000";data3<="00000000";data4<="00000000";data5<="00000000";data6<="00000000";data7<="00000000";WHEN 31=>data0<="10000000";data1<="10000000";data2<="00000000";data3<="00000000";data4<="00000000";data5<="00000000";data6<="00000000";data7<="00000000";END CASE;WHEN S4=>CASE count ISWHEN 0=>data0<="11111110";data1<="10000001";data2<="10000001";data3<="11111110";data4<="11111110";data5<="10000001";data6<="10000001";data7<="11111110";WHEN 1=>data0<="10000001";data1<="10000001";data2<="11111110";data3<="11111110";data4<="10000001";data5<="10000001";data6<="11111110";data7<="11000011"; WHEN 2=>data0<="10000001";data1<="11111110";data2<="11111110";data3<="10000001";data4<="10000001";data5<="11111110";data6<="11000011";data7<="11000011"; WHEN 3=>data0<="11111110";data1<="11111110";data2<="10000001";data3<="10000001";data4<="11111110";data5<="11000011";data6<="11000011";data7<="11000011"; WHEN 4=>data0<="11111110";data1<="10000001";data2<="10000001";data3<="11111110";data4<="11000011";data5<="11000011";data6<="11000011";data7<="11000011"; WHEN 5=>data0<="10000001";data1<="10000001";data2<="11111110";data3<="11000011";data4<="11000011";data5<="11000011";data6<="11000011";data7<="11000011";WHEN 6=>data0<="10000001";data1<="11111110";data2<="11000011";data3<="11000011";data4<="11000011";data5<="11000011";data6<="11000011";data7<="01100110"; WHEN 7=>data0<="11111110";data1<="11000011";data2<="11000011";data3<="11000011";data4<="11000011";data5<="11000011";data6<="01100110";data7<="00111100"; WHEN 8=>data0<="11000011";data1<="11000011";data2<="11000011";data3<="11000011";data4<="11000011";data5<="01100110";data6<="00111100";data7<="00011000"; WHEN 9=>data0<="11000011";data1<="11000011";data2<="11000011";data3<="11000011";data4<="01100110";data5<="00111100";data6<="00011000";data7<="11111100"; WHEN 10=>data0<="11000011";data1<="11000011";data2<="11000011";data3<="01100110";data4<="00111100";data5<="00011000";data6<="11111100";WHEN 11=>data0<="11000011";data1<="11000011";data2<="01100110";data3<="00111100";data4<="00011000";data5<="11111100";data6<="10000010";data7<="10000001"; WHEN 12=>data0<="11000011";data1<="01100110";data2<="00111100";data3<="00011000";data4<="11111100";data5<="10000010";data6<="10000001";data7<="10000010"; WHEN 13=>data0<="01100110";data1<="00111100";data2<="00011000";data3<="11111100";data4<="10000010";data5<="10000001";data6<="10000010";data7<="11111100"; WHEN 14=>data0<="00111100";data1<="00011000";data2<="11111100";data3<="10000010";data4<="10000001";data5<="10000010";data6<="11111100";data7<="10000000"; WHEN 15=>data0<="00011000";data1<="11111100";data2<="10000010";data3<="10000001";data4<="10000010";data5<="11111100";data7<="10000000"; WHEN 16=>data0<="11111100";data1<="10000010";data2<="10000001";data3<="10000010";data4<="11111100";data5<="10000000";data6<="10000000";data7<="10000000"; WHEN 17=>data0<="10000010";data1<="10000001";data2<="10000010";data3<="11111100";data4<="10000000";data5<="10000000";data6<="10000000";data7<="11111111"; WHEN 18=>data0<="10000001";data1<="10000010";data2<="11111100";data3<="10000000";data4<="10000000";data5<="10000000";data6<="11111111";data7<="11111111"; WHEN 19=>data0<="10000010";data1<="11111100";data2<="10000000";data3<="10000000";data4<="10000000";data5<="11111111";data6<="11111111";data7<="00011000"; WHEN 20=>data0<="11111100";data1<="10000000";data2<="10000000";data3<="10000000";data4<="11111111";data6<="00011000";data7<="00011000"; WHEN 21=>data0<="10000000";data1<="10000000";data2<="10000000";data3<="11111111";data4<="11111111";data5<="00011000";data6<="00011000";data7<="00011000"; WHEN 22=>data0<="10000000";data1<="10000000";data2<="11111111";data3<="11111111";data4<="00011000";data5<="00011000";data6<="00011000";data7<="00011000"; WHEN 23=>data0<="10000000";data1<="11111111";data2<="11111111";data3<="00011000";data4<="00011000";data5<="00011000";data6<="00011000";data7<="00011000"; WHEN 24=>data0<="11111111";data1<="11111111";data2<="00011000";data3<="00011000";data4<="00011000";data5<="00011000";data6<="00011000";data7<="00011000"; WHEN 25=>data0<="11111111";data1<="00011000";data2<="00011000";data3<="00011000";data5<="00011000";data6<="00011000";data7<="00000000"; WHEN 26=>data0<="00011000";data1<="00011000";data2<="00011000";data3<="00011000";data4<="00011000";data5<="00011000";data6<="00000000";data7<="00000000"; WHEN 27=>data0<="00011000";data1<="00011000";data2<="00011000";data3<="00011000";data4<="00011000";data5<="00000000";data6<="00000000";data7<="00000000"; WHEN 28=>data0<="00011000";data1<="00011000";data2<="00011000";data3<="00011000";data4<="00000000";data5<="00000000";data6<="00000000";data7<="00000000"; WHEN 29=>data0<="00011000";data1<="00011000";data2<="00011000";data3<="00000000";data4<="00000000";data5<="00000000";data6<="00000000";data7<="00000000";data7<="00000000"; WHEN 30=>data0<="00011000";data1<="00011000";data3<="00000000";data4<="00000000";data5<="00000000";data6<="00000000";data7<="00000000";WHEN 31=>data0<="00011000";data1<="00000000";data2<="00000000";data3<="00000000";data4<="00000000";data5<="00000000";data6<="00000000";data7<="00000000";END CASE;END CASE;END PROCESS load_data;change_occupy:PROCESS (clk_occupy,state) --改变占空比V ARIABLE count:INTEGER RANGE 0 TO 63;BEGINIF clk_occupy'EVENT AND clk_occupy='1' THEN IF count=63 THENcount:=0;ELSEcount:=count+1;END IF;CASE state ISWHEN S1=>CASE count ISWHEN 0 =>gr_occupy<="11111111";re_occupy<="11111111";WHEN 1 =>gr_occupy<="00000000";re_occupy<="11111111";WHEN 2 =>gr_occupy<="00000000";re_occupy<="11111111";WHEN 3 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 4 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 5 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 6 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 7 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 8 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 9 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 10 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 11 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 12 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 13 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 14 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 15 =>gr_occupy<="00000000";re_occupy<="00000000"; WHEN 16 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 17 =>gr_occupy<="11111111";WHEN 18 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 19 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 20 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 21 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 22 =>gr_occupy<="00000000";re_occupy<="00000000"; WHEN 23 =>gr_occupy<="00000000";re_occupy<="00000000"; WHEN 24 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 25 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 26 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 27 =>gr_occupy<="11111111";re_occupy<="11111111"; WHEN 28 =>gr_occupy<="00000000";re_occupy<="11111111"; WHEN 29 =>gr_occupy<="00000000";re_occupy<="00000000"; WHEN 30 =>gr_occupy<="00000000";re_occupy<="00000000"; WHEN 31 =>gr_occupy<="00000000";re_occupy<="00000000"; WHEN 32 =>。

相关文档
最新文档