北邮数电综合实验报告
- 格式:docx
- 大小:593.44 KB
- 文档页数:17
数字电路综合实验报告简易智能密码锁一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。
基本要求: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行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
数字电路综合实验报告简易智能密码锁一、实验课题及任务要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。
基本要求: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行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
北京邮电大学数字电路与逻辑设计实验学院:信息与通信工程学院班级: 2013211127 作者:薄士宁学号: 2013212543 ____一.实验名称和任务要求LED 点阵风扇的设计与实现基本要求:1、用8×8 点阵模拟风扇转动,并采用双色点阵显示。
2、风扇转动方式如图1 所示,包括四个点阵显示状态并按顺序循环显示。
风扇转动速度根据环境温度分为4 档,其中1 档的四个显示状态之间的切换时间为2 秒,2 档为1 秒,3 档为0.5 秒,4 档为静止不动。
图1 点阵模拟风扇转动示意图3、环境温度通过2 个BTN 按键设置,一个用来增加,一个用来减少,温度可设置范围为10℃~40℃,温度精度为1℃,并用两个数码管进行温度显示。
风扇根据不同的温度自动采用不同的转动速度,其中20℃~24℃对应1档,25℃~29℃对应2 档,30℃~40℃对应3 档,10℃~19℃对应4 档,用一个数码管显示档位。
4、定时模式:在风扇不同转动速度下,可以通过按键切换进入定时模式。
定时时间可设置范围为20~59 秒,采用两个数码管进行倒计时显示,当倒计时结束后,风扇状态保持静止不动。
5、设置开关键。
风扇开机初始状态为20℃、1 档,并有不小于5 秒的开机音乐。
关机状态为点阵全灭。
提高要求:1、设计LED 风扇的其他工作模式。
2、利用实验板上的温度传感器代替按键直接获取温度数据,实现对LED 风扇四档转速的自动控制。
3、用数码管实时显示温度传感器的温度数据,精度为0.1℃。
4、自拟其他功能。
二.基本思路根据实验要求,画出总的原理图。
实验的基本要求,即8×8双色点阵模拟风扇转动、风扇转动分四个档位(每个档位对应“四种”状态)、通过环境温度控制档位的自动选择、设计定时模式、开关机状态。
为了实现这些既定要求,设计出了温度控制模块、倒计时控制模块、音乐控制模块、点阵风扇模块、数码管显示模块等,通过对时钟的分频、加减法计数器、数据选择器等的运用,来实现上述功能。
北邮数电实验报告北邮数电实验报告一、引言数电实验是电子信息类专业学生必修的一门实验课程,通过实践操作,帮助学生巩固理论知识,培养实际动手能力。
本次实验旨在通过设计和搭建一个简单的数字电路,来理解数字电路的基本原理和工作方式。
二、实验目的本次实验的目的是设计一个4位二进制加法器,实现两个4位二进制数的相加运算。
通过实验,我们可以加深对于数字电路的理解,掌握数字电路的设计和搭建方法。
三、实验原理1. 二进制加法器二进制加法器是一种用于计算二进制数相加的数字电路。
它由若干个逻辑门和触发器组成,可以实现二进制数的加法运算。
在本次实验中,我们将设计一个4位二进制加法器,即可以计算两个4位二进制数的相加结果。
2. 逻辑门逻辑门是数字电路中常用的基本元件,用于实现逻辑运算。
常见的逻辑门有与门、或门、非门、异或门等。
在本次实验中,我们将使用与门和异或门来构建4位二进制加法器。
四、实验步骤1. 设计4位二进制加法器的电路图根据实验要求,我们需要设计一个能够计算两个4位二进制数相加的电路。
首先,我们可以将两个4位二进制数分别用D0~D3和E0~E3表示,其中D0和E0分别为最低位。
然后,我们需要使用与门和异或门来实现加法器的功能。
通过逻辑运算,我们可以得到每一位的和以及进位。
最后,将每一位的和连接起来,即可得到最终的结果。
2. 搭建电路根据电路图,我们可以开始搭建实验电路。
首先,将所需的逻辑门和触发器连接起来,形成一个完整的电路。
然后,将所需的输入信号和电源连接到电路上。
最后,使用示波器等工具检查电路的工作状态,确保电路正常运行。
3. 进行实验测试在搭建好电路后,我们可以进行实验测试。
首先,将两个4位二进制数的输入信号连接到电路上。
然后,通过观察输出信号,判断电路是否正确计算了两个二进制数的相加结果。
如果输出信号与预期结果一致,说明电路设计和搭建成功。
五、实验结果与分析在进行实验测试后,我们可以得到实验结果。
通过观察输出信号,我们可以判断电路是否正确计算了两个二进制数的相加结果。
北邮数电综合实验报告综合实验报告:基于北邮数电实验的电子门禁系统设计与实现摘要:本次实验通过使用北邮数电实验室提供的器件和设备,设计并实现了一个简易的电子门禁系统。
该系统能够通过输入正确的密码或使用合法的身份卡,实现对门禁的控制和管理。
本文将详细介绍系统设计的原理、实验过程和结果,并对实验进行了总结和评价。
一、引言电子门禁系统是当前社会中广泛应用的一种重要安全保障设施。
它通过使用密码、身份卡等识别方式,对人员出入进行控制和管理。
本实验旨在通过北邮数电实验的学习和实践,学习和掌握电子门禁系统的设计与实现。
二、实验器材与原理实验器材:1.键盘2.蜂鸣器3.LCD显示屏4.数码安全码锁5.单片机开发板6.电源模块7.连线模块实验原理:该电子门禁系统的基本原理如下:1.用户通过键盘输入密码或刷合法的身份卡;2.单片机接收到输入的密码或读取身份卡信息;3.单片机对输入的密码或身份卡信息进行核对;5. 若核对失败,则控制蜂鸣器发出门禁错误提示音,并在LCD显示屏上显示“Access Denied”等拒绝信息。
三、实验过程与结果1.按照实验器材的接线要求,将键盘、蜂鸣器和LCD显示屏与开发板连接好;2.根据实验原理,编写相应的控制程序,并将程序烧录到单片机中;3.打开电源模块,开启电子门禁系统;4.用户通过键盘输入密码或刷合法的身份卡;5.系统接收到用户输入并进行核对;7. 核对失败时,蜂鸣器发出门禁错误提示音,LCD显示屏上显示“Access Denied”等拒绝信息。
实验结果显示,该电子门禁系统能够根据用户输入的密码或身份卡信息,进行核对并作出相应的操作。
当核对成功时,系统会解锁门禁并显示欢迎信息;当核对失败时,系统会发出错误提示并拒绝门禁。
四、实验总结本次实验通过设计和实现基于北邮数电实验的电子门禁系统,使得我们更加深入地了解了电子门禁系统的原理和应用。
通过实验,我们学会了利用键盘、蜂鸣器和LCD显示屏等器材,通过单片机控制,实现了一个简易的电子门禁系统。
数字电路与逻辑设计实验综合实验报告目录一、实验题目和任务要求 (3)(一)Quartus II原理图输入法设计与实现 (3)(二)用VHDL设计与实现组合逻辑电路 (3)(三)用VHDL设计与实现时序逻辑电路 (3)(四)用VHDL设计与实现相关电路 (4)二、实验内容、原理图、VHDL代码和仿真波形分析 (4)(一)Quartus II原理图输入法设计与实现 (4)1. 半加器 (4)2. 全加器 (5)3. 3-8线译码器 (6)(二)用VHDL设计与实现组合逻辑电路 (6)1. 数码管译码器 (6)2. 8421码转余3码 (6)3. 奇校验器 (7)(三)用VHDL设计与实现时序逻辑电路 (8)1. 8421十进制计数器 (8)2. 分频器 (8)3. 组合电路实现数码管0到9循环显示 (8)(四)用VHDL设计与实现相关电路 (13)1. 数码管动态扫描控制器 (13)2. 点阵行扫描控制器 (16)三、故障及问题分析 (20)四、总结和结论 (21)五、参考文献 (21)一、实验题目和任务要求(一)QuartusII原理图输入法设计与实现实验题目Quartus II原理图输入法设计与实现任务要求1)用逻辑门设计一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
2)用生成的半加器模块和逻辑门设计与实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。
3)用3-8线译码器和逻辑门设计和实现函数F CBA CBA CBA CBA=+++,仿真验证其功能。
(二)用VHDL设计与实现组合逻辑电路实验题目1)数码管译码器2)8421码转余3码3)奇校验器任务要求1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。
北邮数电实验报告1. 实验目的本实验的目的是通过实际操作和实验验证,加深对数字电路的理解和掌握。
具体实验内容包括: 1. 实现各种基本逻辑电路(与门、或门、非门、异或门等)的电路设计。
2. 学习使用开关和LED灯进行数字信号输入和输出。
3. 掌握数字电路实验中常用的仪器设备的使用方法。
2. 实验器材和环境本实验所使用的器材和环境如下: - FPGA实验箱 - 数字逻辑集成电路(与门、或门、非门、异或门等) - 电源 - 接线板 - 数字电路实验仪器3. 实验步骤3.1 实验准备首先,我们需要将实验所需的器材连接好,包括将数字逻辑集成电路插入到FPGA实验箱上的插槽中,并将电源正确连接。
3.2 电路设计与布线根据实验要求,我们需要设计不同的基本逻辑电路。
比如,要设计一个与门电路,可以通过将两个输入端分别与两个开关连接,将输出端连接到一个LED灯上。
其他的逻辑电路同样可以设计类似的方式。
在设计和布线的过程中,需要注意保持电路的连通性,并避免出现短路等问题。
3.3 输入和输出信号设置根据实验要求,我们需要设置输入和输出信号。
可以通过控制开关的开合状态来设置输入信号,然后观察LED灯的亮灭情况来判断输出信号的状态是否符合预期。
3.4 实验数据记录和分析在实验过程中,我们需要记录每个逻辑电路的输入和输出信号状态,并进行分析。
可以通过绘制真值表或者逻辑门表来记录并分析数据。
4. 实验结果与分析根据实验步骤中记录的数据,我们可以得出实验结果,并进行进一步的分析。
比如,可以通过比对设计的逻辑电路输出和预期输出的差异,来判断实验是否成功完成。
5. 总结与反思通过本次实验,我深入了解和掌握了数字电路的基本原理和实验方法。
通过设计和实验验证,加深了对基本逻辑电路的理解,并熟悉了数字电路实验所使用的仪器设备。
在实验过程中,我遇到了一些问题,比如电路连接错误导致的信号不稳定等,但通过仔细调试和排查,最终解决了这些问题。
第1篇一、实验目的1. 熟悉数字电子技术实验的基本流程和注意事项。
2. 掌握数字电路的基本测试方法和实验技巧。
3. 理解数字电路的基本原理,加深对数字电子技术的认识。
4. 提高动手能力和团队协作能力。
二、实验内容及要求1. 实验一:TTL与非门参数测试(1)测试TTL与非门的外形和管脚排列。
(2)测试TTL与非门的逻辑功能。
(3)测试TTL与非门的主要参数,如低电平输出电源电流IccL和高电平输出电源电流IccH。
2. 实验二:组合逻辑电路设计(1)设计一个4位二进制加法器。
(2)设计一个奇偶校验电路。
(3)设计一个编码器。
3. 实验三:时序逻辑电路设计(1)设计一个异步复位D触发器。
(2)设计一个同步复位D触发器。
(3)设计一个计数器。
4. 实验四:数字电子钟设计(1)设计一个秒表。
(2)设计一个定时器。
(3)设计一个闹钟。
三、实验电路1. 实验一:TTL与非门参数测试电路- 使用74LS20 TTL与非门芯片。
- 使用万用表测试低电平输出电源电流IccL和高电平输出电源电流IccH。
2. 实验二:组合逻辑电路设计电路- 使用74LS00 TTL与非门芯片。
- 使用电阻、电位器等元件设计加法器、奇偶校验电路和编码器。
3. 实验三:时序逻辑电路设计电路- 使用74LS74 TTL触发器芯片。
- 使用电阻、电容等元件设计异步复位D触发器、同步复位D触发器和计数器。
4. 实验四:数字电子钟设计电路- 使用555定时器芯片。
- 使用电阻、电容、二极管等元件设计秒表、定时器和闹钟。
四、实验结果记录1. 实验一:TTL与非门参数测试结果- 低电平输出电源电流IccL:0.5mA- 高电平输出电源电流IccH:1.2mA2. 实验二:组合逻辑电路设计结果- 4位二进制加法器:功能正常,能够实现4位二进制加法运算。
- 奇偶校验电路:功能正常,能够实现奇偶校验。
- 编码器:功能正常,能够实现8-3编码。
3. 实验三:时序逻辑电路设计结果- 异步复位D触发器:功能正常,能够实现异步复位。
数字电路综合实验报告学院:信息与通信工程学院班级:201*******班内序号:**学生姓名:****学号:201*******一:设计课题的任务要求-------------------------------------------------------------------------------3基本要求:------------------------------------------------------------------------------3提高要求:------------------------------------------------------------------------------3二:系统设计(包括设计思路、总体框图、分块设计)------------------------------------------3设计思路:-------------------------------------------------------------------------------3总体框图:-------------------------------------------------------------------------------4分块设计:------------------------------------------------------------------------------41:分频器------------------------------------------------------------------42:防抖模块---------------------------------------------------------------53:模式调节模块---------------------------------------------------------54:手动定时&默认定时模块------------------------------------------75:倒计时模块------------------------------------------------------------86:火力调节模块---------------------------------------------------------87:数码管驱动模块------------------------------------------------------98:led显示模块----------------------------------------------------------109:关机模块---------------------------------------------------------------1110:蜂鸣器模块----------------------------------------------------------1111:点阵显示模块-------------------------------------------------------11三:仿真波形及波形分析--------------------------------------------------------------------------------121:分频器-----------------------------------------------------------------122:模式选择模块--------------------------------------------------------133:定时模块--------------------------------------------------------------134:倒计时模块-----------------------------------------------------------145:火力调节模块--------------------------------------------------------146:led显示模块---------------------------------------------------------157:蜂鸣器模块-----------------------------------------------------------15四:源程序--------------------------------------------------------------------------------------------------16总程序结构和原理图------------------------------------------------------------------16各部分程序结构原理图---------------------------------------------------------------181:分频器-----------------------------------------------------------------182:防抖模块--------------------------------------------------------------203:模式控制模块--------------------------------------------------------204:定时&倒计时模块---------------------------------------------------235:火力调节模块--------------------------------------------------------286:数码管显示模块-----------------------------------------------------307:led显示模块---------------------------------------------------------328:关机模块-------------------------------------------------------------339:蜂鸣器模块-----------------------------------------------------------3410:点阵显示模块------------------------------------------------------34五:功能说明-----------------------------------------------------------------------------------------------38六:元件清单和利用情况--------------------------------------------------------------------------------38七:故障和问题分析--------------------------------------------------------------------------------------39八:总结和结论--------------------------------------------------------------------------------------------40一:设计课题的任务要求设计制作一个简易电磁炉控制器。
题目: 简易猜数字游戏机的设计与实现姓名学院专业班级学号班内序号一、设计课题的任务要求基本要求:1、游戏规则:通常由两个人玩,一方出数字,另一方猜。
出数字的人要想好一个没有重复数字的 4 位数,不能让猜的人知道。
2、数字设置:通过 4*4 键盘进行 4 位数字输入,在数码管(DISP0~DISP3)上显示当前所输入的数字。
通过设置确定键(BTN1 键)进行锁定,此时数码管上的数值消失,同时用点阵开始倒计时,即:初始状态点阵全亮,然后从右下角开始,由右到左、由下到上逐点逐排依次熄灭,间隔时间为 1s,共计 64s。
3、猜数字:可以通过 4*4 键盘进行 4 位数字输入进行猜数字,且每输入一位数字在数码管(DISP0~DISP3)上显示当前所输入的数字,按确定键(BTN2 键)进行确认,此时要根据输入的这组数字给出几 A 几 B,其中:A前面的数字表示位置正确的数的个数,用DISP5显示B前的数字表示数字正确而位置不对的数的个数,用DISP4显示如正确答案为 2134,而猜的人猜 5314,则是1A2B,其中有一个4的位置对了,记为1A,而1和3这三个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B 接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。
4、若数字正确则显示猜数字成功,点阵显示“☺”笑脸;若输入数字错误系统仍然处于猜数字状态,点阵显示“X”,并用蜂鸣器或 led 闪烁报警。
5、若到点阵全灭时(64s 结束)仍未猜出正确数字,游戏失败,点阵显示“囧”。
6、设置游戏机开关。
提高要求:1、若数字正确则显示猜数字成功,用蜂鸣器播放一段乐曲。
2、随机产生数字,并不在数码管上显示,进行猜数字游戏,用点阵进行 128s 计时,即点阵轮询熄灭两次,其他要求同基本功能3、4 和 5。
3、自拟其他功能。
二、系统设计设计思路:首先是状态机的设定,设定了5个状态,分别是idle、s1、s2、s3和over。
点阵赛车游戏学院:信息与通信工程学院专业:通信工程班级:姓名:学号:班内序号:一、设计课题的任务要求用8×8点阵进行5秒倒计时显示,当5秒倒计时结束后,点阵显示赛道和赛车的初始位置,赛车游戏开始,并开始计时,用两个数码管显示时间。
用红色表示赛道,黄色表示赛车的初始位置,箭头表示赛车行进的方向。
用BTN1~BTN3三个按键分别控制赛车的左移、前进、右移,最终使赛车在不碰撞赛道的情况下走完全程,游戏结束,点阵显示“V”图案,数码管显示走完全程所耗费的时间。
当游戏时间超过59秒,或者赛车在行进过程中碰撞赛道,游戏失败,点阵显示“X”图案。
通过按键BTN0进行复位,控制点阵返回到初始状态。
二、系统设计1、设计思路这个过程乍一看蛮复杂的,但是当我经过仔细分析后发现,我的代码可以按照这个游戏的运行过程来写。
这个游戏分为4个状态,即倒计时,运行,成功和失败。
倒计时部分根据不同数字在点阵上的位置很容易设计出来,运行部分便是初始化赛道,赛车的位置,然后用按键来控制赛车运动,在这个过程中要不断判断赛车是否撞墙和到达终点,如果到达终点便进入第三个状态,成功,即显示“V”;若果撞墙便进入第四个状态,失败,即显示“X”。
在游戏运行的同时数码管还要计时。
2、总体框图(1)系统结构图(2)ASM 图译码显示器分频器控制器 计时器赛道及赛车CPRESET BTN1BTN2 BTN3启动NY是否碰到边界是否到达终点显示“V ”显示“×”计时移动是否复位是否复位YNNYNYN(4)功能模块图显示存储器控制器 方向控制模块计时器数码管分频器点阵显示倒计时移动显示“V ”显示“X ”3、模块设计(1)分频模块分频器:因为原有低频时钟为50MHZ,如果直接用这个时钟信号同时实现计时和显示部分,故需两个分频器,分别将时钟频率分为1Hz和1kHz,1Hz用来控制倒计时和游戏运行过程中的计时,1kHz用来控制点阵和数码管的显示。
(2)游戏模块刚开始的代码有一个判断是否复位的代码,如果RESET=1,将代码中定义的一些信号初始化,之后整个过程分为四个状态,即STATE可取0,1,2,3四个值。
0处于倒计时状态,1处于用按键控制赛车运动的状态,2处于到达终点的状态,并且显示“V”,3处于失败的状态,并且显示“X”。
当STATE=0时,游戏处于倒计时状态,倒计时五秒,利用五个数字在点阵上的不同位置初始化点阵,分别对应五个数字,在时钟1Hz下做倒计时五秒的工作。
当STATE=1时,处于用按键控制赛车运动的状态,此期间分别用BTN1,BTN2,BTN3来控制赛车的右,前,左的运动方向,运动期间还要不断判断赛车是否撞到墙或者障碍物,以及判断赛车是否到达终点,一次来确定游戏是否进入STATE=2或STATE=3状态。
当STATE=2时,要在点阵上显示“V”,即给点阵矩阵初始化显示此图形的数据。
当STATE=3时,要在点阵上显示“X”,即给点阵矩阵初始化显示此图形的数据。
(3)显示模块因为所有状态不能同时显示,故循环显示电路分别扫描。
当时钟频率足够大时,根据视觉暂留则可看到较为稳定的画面。
点阵显示是在时钟频率1kHz下一行一行扫描,这样在不同时候就可以显示不同的图形,比如倒计时的5,4,3,2,1和赛道,赛车的位置;其次是数码管的显示,数码管首先有个控制计数的代码,此计数是在时钟频率1Hz下工作的,然后在时钟频率1kHz的控制下分别让两个数码管显示,此即为计时器的显示。
三、仿真波形及波形分析倒计时波形数码管显示及波形点阵显示倒计时波形点阵显示波形四、源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CAR ISPORT(CLK:IN STD_LOGIC; --时钟信号RESET:IN STD_LOGIC;--复位输入CONTROL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);--赛车控制ROW:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--行控制输出COLR,COLG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--列控制输出CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);--数码管选通点阵列显示波形点阵行显示波形DISPLAY:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)—数码管显示);END CAR;ARCHITECTURE behave OF CAR ISSIGNAL TEMP1:INTEGER RANGE 0 TO 49999;--分频信号SIGNAL TEMP2:INTEGER RANGE 0 TO 49999999;SIGNAL CLK1K:STD_LOGIC;--频率1kHz时钟SIGNAL CLK1HZ:STD_LOGIC; --频率1Hz时钟SIGNAL TIMEH:INTEGER RANGE 0 TO 5;--十位计数SIGNAL TIMEL:INTEGER RANGE 0 TO 9;--个位计数SIGNAL LIGHTH:STD_LOGIC_VECTOR(6 DOWNTO 0);--十位数码管控制信号SIGNAL LIGHTL:STD_LOGIC_VECTOR(6 DOWNTO 0);--个位数码管控制信号TYPE PRESENT_STATE IS (H,L);--自定义变量SIGNAL P_STATE:PRESENT_STATE;SIGNAL STATE:INTEGER RANGE 0 TO 3;--四个状态控制信号SIGNAL COUNT : INTEGER RANGE 0 TO 6;--倒计时控制信号SIGNAL CX,CY:INTEGER RANGE 0 TO 7;--赛车坐标控制信号SIGNAL ROWS:STD_LOGIC_VECTOR(7 DOWNTO 0);--行控制信号SIGNAL COLR7,COLR6,COLR5,COLR4,COLR3,COLR2,COLR1,COLR0,--列控制信号COLG7,COLG6,COLG5,COLG4,COLG3,COLG2,COLG1,COLG0:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINDIV1K:PROCESS(CLK) --分频1kHzBEGINIF CLK'EVENT AND CLK = '1' THENIF TEMP1 = 49999 THENTEMP1 <= 0;ELSETEMP1 <= TEMP1 + 1;END IF;IF TEMP1 < 25000 THENCLK1K <= '0';ELSECLK1K <= '1';END IF;END IF;END PROCESS;DIV1HZ:PROCESS(CLK) --分频1HzBEGINIF CLK'EVENT AND CLK = '1' THENIF TEMP2 = 49999999 THENTEMP2 <= 0;ELSETEMP2 <= TEMP2 + 1;END IF;IF TEMP2 < 25000000 THENCLK1HZ <= '0';ELSECLK1HZ <= '1';END IF;END IF;END PROCESS;GAMERUN:PROCESS(CLK1HZ,RESET) --游戏运行进程BEGINIF RESET = '1' THEN --复位和初始化STATE <= 0;COUNT <= 6;CX <= 2;CY <= 0;TIMEH <= 0;TIMEL <= 0;COLG7 <= "00000000";COLG6 <= "00000000";COLG5 <= "00000000";COLG4 <= "00000000";COLG3 <= "00000000";COLG2 <= "00000000";COLG1 <= "00000000";COLG0 <= "00000000";ELSIF CLK1HZ'EVENT AND CLK1HZ = '1' THENCASE STATE ISWHEN 0 =>CASE COUNT IS --点阵倒计时WHEN 6 => COUNT <= 5;COLR7 <= "00000000";COLR6 <= "00000000";COLR5 <= "00000000";COLR4 <= "00000000";COLR3 <= "00000000";COLR2 <= "00000000";COLR1 <= "00000000";COLR0 <= "00000000"; WHEN 5 => COUNT <= 4;COLR7 <= "00111100";COLR6 <= "00100000";COLR5 <= "00100000";COLR4 <= "00111100";COLR3 <= "00000100";COLR2 <= "00000100";COLR1 <= "00000100";COLR0 <= "00111100"; WHEN 4 => COUNT <=3;COLR7 <= "00100100";COLR6 <= "00100100";COLR5 <= "00100100";COLR4 <= "00111100";COLR3 <= "00000100";COLR2 <= "00000100";COLR1 <= "00000100";COLR0 <= "00000100"; WHEN 3 => COUNT <= 2;COLR7 <= "00111100";COLR6 <= "00000100";COLR5 <= "00000100";COLR4 <= "00111100";COLR3 <= "00000100";COLR2 <= "00000100";COLR1 <= "00000100";COLR0 <= "00111100"; WHEN 2 => COUNT <= 1;COLR7 <= "00111100";COLR6 <= "00000100";COLR5 <= "00000100";COLR4 <= "00111100";COLR3 <= "00100000";COLR2 <= "00100000";COLR1 <= "00100000";COLR0 <= "00111100"; WHEN 1 => COUNT <= 0;COLR7 <= "00001000";COLR6 <= "00001000";COLR5 <= "00001000";COLR4 <= "00001000";COLR3 <= "00001000";COLR2 <= "00001000";COLR1 <= "00001000";COLR0 <= "00001000";WHEN 0 => COUNT <= 6;STATE <= 1;END CASE;WHEN 1 =>IF TIMEL = 9 THEN --数码管计时TIMEL <= 0;IF TIMEH = 5 THENTIMEH <= 0;IF CY /= 7 THENSTATE <= 3;ELSESTATE <= 2;END IF;ELSETIMEH <= TIMEH + 1;END IF;ELSETIMEL <= TIMEL + 1;END IF;COLG7 <= "00001110"; --初始化赛道COLG6 <= "00000000";COLG5 <= "00000000";COLG4 <= "00000000";COLG3 <= "00000000";COLG2 <= "00000000";COLG1 <= "00000000";COLG0 <= "00000000";COLR7 <= "00011111";COLR6 <= "00010001";COLR5 <= "00010001";COLR4 <= "00100010";COLR3 <= "01000100";COLR2 <= "10001000";COLR1 <= "10001000";COLR0 <= "10001000";CASE CY IS --赛车坐标WHEN 0 => COLG0(7-CX) <= '1';WHEN 1 => COLG1(7-CX) <= '1';WHEN 2 => COLG2(7-CX) <= '1';WHEN 3 => COLG3(7-CX) <= '1';WHEN 4 => COLG4(7-CX) <= '1';WHEN 5 => COLG5(7-CX) <= '1';WHEN 6 => COLG6(7-CX) <= '1';WHEN 7 => COLG7(7-CX) <= '1';END CASE;CASE CONTROL IS --按键控制赛车WHEN "100" => CX <= CX - 1;WHEN "010" => CY <= CY + 1;WHEN "001" => CX <= CX + 1;WHEN OTHERS => NULL;END CASE;CASE CY IS --判断移动后是否撞墙WHEN 0 => IF COLR0(7-CX) = '1' THEN STATE <= 3; ELSE COLG0(7-CX) <= '1'; END IF;WHEN 1 => IF COLR1(7-CX) = '1' THEN STATE <= 3; ELSE COLG1(7-CX) <= '1'; END IF;WHEN 2 => IF COLR2(7-CX) = '1' THEN STATE <= 3; ELSE COLG2(7-CX) <= '1'; END IF;WHEN 3 => IF COLR3(7-CX) = '1' THEN STATE <= 3; ELSE COLG3(7-CX) <= '1'; END IF;WHEN 4 => IF COLR4(7-CX) = '1' THEN STATE <= 3; ELSE COLG4(7-CX) <= '1'; END IF;WHEN 5 => IF COLR5(7-CX) = '1' THEN STATE <= 3; ELSE COLG5(7-CX) <= '1'; END IF;WHEN 6 => IF COLR6(7-CX) = '1' THEN STATE <= 3; ELSE COLG6(7-CX) <= '1'; END IF;WHEN 7 => STATE <= 2;END CASE;IF CY = 7 THEN STATE <= 2; END IF; --判断移动后是否到达终点WHEN 2 =>COLR7 <= "00000000"; --到达终点后显示“V”COLR6 <= "00000000";COLR5 <= "00000000";COLR4 <= "00000000";COLR3 <= "00000000";COLR2 <= "00000000";COLR1 <= "00000000";COLR0 <= "00000000";COLG7 <= "00000000";COLG6 <= "00000001";COLG5 <= "10000010";COLG4 <= "01000100";COLG3 <= "00101000";COLG2 <= "00010000";COLG1 <= "00000000";COLG0 <= "00000000";WHEN 3 =>COLG7 <= "00000000"; --撞墙后显示“X”COLG6 <= "00000000";COLG5 <= "00000000";COLG4 <= "00000000";COLG3 <= "00000000";COLG2 <= "00000000";COLG1 <= "00000000";COLG0 <= "00000000";COLR7 <= "00000000";COLR6 <= "01000010";COLR5 <= "00100100";COLR4 <= "00011000";COLR3 <= "00011000";COLR2 <= "00100100";COLR1 <= "01000010";COLR0 <= "00000000";END CASE;END IF;END PROCESS;LSTSHOW:PROCESS(CLK1K) --在点阵上显示倒计时、赛道、和赛车BEGINIF CLK1K'EVENT AND CLK1K = '1' THENCASE ROWS ISWHEN "11111110" => COLR <= COLR0; COLG <= COLG0; ROW <= ROWS; ROWS <= "11111101";WHEN "11111101" => COLR <= COLR1; COLG <= COLG1; ROW <= ROWS; ROWS <= "11111011";WHEN "11111011" => COLR <= COLR2; COLG <= COLG2; ROW <= ROWS; ROWS <= "11110111";WHEN "11110111" => COLR <= COLR3; COLG <= COLG3; ROW <= ROWS; ROWS <= "11101111";WHEN "11101111" => COLR <= COLR4; COLG <= COLG4; ROW <= ROWS; ROWS <= "11011111";WHEN "11011111" => COLR <= COLR5; COLG <= COLG5; ROW <= ROWS; ROWS <= "10111111";WHEN "10111111" => COLR <= COLR6; COLG <= COLG6; ROW <= ROWS; ROWS <= "01111111";WHEN "01111111" => COLR <= COLR7; COLG <= COLG7; ROW <= ROWS; ROWS <= "11111110";WHEN OTHERS => ROWS <= "11111110";END CASE;END IF;END PROCESS;SHOWT:PROCESS(CLK1K,TIMEH,TIMEL) --将计时译码至数码管上BEGINCASE TIMEH ISWHEN 5=>LIGHTH<="1011011";WHEN 4=>LIGHTH<="0110011";WHEN 3=>LIGHTH<="1111001";WHEN 2=>LIGHTH<="1101101";WHEN 1=>LIGHTH<="0110000";WHEN 0=>LIGHTH<="1111110";WHEN OTHERS=>LIGHTH<="0000000";END CASE;CASE TIMEL ISWHEN 9=>LIGHTL<="1111011";WHEN 8=>LIGHTL<="1111111";WHEN 7=>LIGHTL<="1110000";WHEN 6=>LIGHTL<="1011111";WHEN 5=>LIGHTL<="1011011";WHEN 4=>LIGHTL<="0110011";WHEN 3=>LIGHTL<="1111001";WHEN 2=>LIGHTL<="1101101";WHEN 1=>LIGHTL<="0110000";WHEN 0=>LIGHTL<="1111110";WHEN OTHERS=>LIGHTL<="0000000";END CASE;IF CLK1K'EVENT AND CLK1K='1' THEN --利用视觉暂留显示计时CASE P_STATE ISWHEN L => P_STATE <= H;CAT <= "111110";DISPLAY <= LIGHTL;WHEN H => P_STATE <= L;CAT <= "111101";DISPLAY <= LIGHTH;END CASE;END IF;END PROCESS;END behave;五、功能说明:1、复位:当按下BTN0时,赛道,计时等控制模块初始化,游戏重启2、方向控制:BTN1,BTN2,BTN3分别控制赛车向右,上,左运动3、当赛车撞墙或障碍物时,游戏失败,显示“X”4、当赛车到达终点时,游戏成功,显示“V”六、元器件清单及资源利用情况:1、元器件系统时钟CLK点阵行显示ROW[0]—ROW[7]红点阵列显示COLR[0]—COLR[7],绿点阵列显示COLG[0]—COLG[7] 数码管控制选通CAT0—CAT6数码管显示DISPLAY[0]-DISPLAY[6]拨码开关 BTN1,BTN2,BTN3,BTN42、资源利用情况七、实验中遇到的问题1、刚开始接触这个程序时不知道该如何下手,因此前期的流程图和状态转移图就不知道从何做起,后来经过和同组的同学的讨论后大概有了思路,在经自己独立思考后整理出了初期的那些框图,后来经老师指点发现了很多错误,再经过自己的整理后成了现在的那些框图。