EDA技术按键控制LED实验

合集下载

eda流水灯实验报告

eda流水灯实验报告

1. 实验目的1.通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VHDL的编程方法,熟悉以Herilong HDL文件为顶层模块的设计。

2.学习和体会分支条件语句casc的使用方法及FPGA I/O口的输出控制。

2. 实验内容SmartSOPC实验箱上有8个按键KEY1~KEY8和8个发光二极管LED1~LED8。

在SmartSOPC实验箱上KEY1~KEY8通过跳线JP6的LED1~LED8分别于芯片的121~124、143、141、158、和156引脚相连。

本实验的内容是要求在SmartSOPC实验箱上完成对8个键盘KEY1~KEY8进行监控,一旦有键输入判断其键值,并点亮相应的发光二极管,如若KEY3按下,则点亮LED1~LED3发光管并且在放开时也能保持亮的状态。

3. 实验原理FPGA的所有I/O控制块允许每个I/O引脚单独置为输入口,不过这种配置是系统自动完成的,一旦该I/O口被设置为输入口使用时,该I/O控制模块将直接使三态缓冲区的控制端接地,使得该I/O引脚对外呈高阻态,这样改I/O引脚即可用作专用输入引脚。

只要正确分配并锁定引脚后,一旦在KEY1~KEY8中有键输入,在检测到键盘输入的情况下,继续判断其键盘值并作出相应的处理。

最后拿出跳线短接帽跳接到JP6的LED1~LED7、KEY1~KEY8使LED1~LED8和KEY1~KEY8和芯片对应的引脚相连。

拿出Altera ByteBlasterⅡ下载电缆,并将此电缆的两端分别接到PC机的打印机并口和QuickSOPC核芯板上的JTAG下载口上,打开电源,执行下载命令,把程序下载到FPGA器件中,按下KEY1~KEY8的任意键,观察LED1~LED8的状态。

4. 实验步骤1.启动QuartusⅡ建立一个空白工程,然后命名为keyboard 。

2.源程序文件命名为keyboard ,并选择器件为Altera公司Cyclone系列的EPIC12Q240C8芯片,如图1—1图1—13.新建Veriog HDL源程序文件,输入程序代码并保存。

单片机独立按键控制led灯实验原理

单片机独立按键控制led灯实验原理

主题:单片机独立按键控制LED灯实验原理目录1. 概述2. 单片机独立按键控制LED灯实验原理3. 实验步骤4. 结语1. 概述单片机在现代电子设备中起着至关重要的作用,它可以通过编程实现各种功能。

其中,控制LED灯是单片机实验中常见的任务之一。

本文将介绍单片机独立按键控制LED灯的实验原理及实验步骤,希望对初学者有所帮助。

2. 单片机独立按键控制LED灯实验原理单片机独立按键控制LED灯的实验原理主要涉及到单片机的输入输出端口及按键和LED的连接方式。

在单片机实验中,按键与单片机的输入端口相连,LED与单片机的输出端口相连。

通过按键的按下和松开来改变单片机输出端口电平,从而控制LED的亮灭。

3. 实验步骤为了完成单片机独立按键控制LED灯的实验,需要按照以下步骤进行操作:步骤一:准备材料- 单片机板- 按键- LED灯- 连线- 电源步骤二:搭建电路- 将按键与单片机的输入端口相连- 将LED与单片机的输出端口相连- 连接电源步骤三:编写程序- 使用相应的单片机开发软件编写程序- 程序中需要包括按键状态检测和LED控制的部分步骤四:烧录程序- 将编写好的程序烧录到单片机中步骤五:运行实验- 按下按键,观察LED的亮灭情况- 确保按键可以正确控制LED的亮灭4. 结语通过上述实验步骤,我们可以实现单片机独立按键控制LED灯的功能。

这个实验不仅可以帮助学习者了解单片机的输入输出端口控制,还可以培养动手能力和程序设计能力。

希望本文对单片机实验初学者有所帮助,谢谢阅读!实验步骤在进行单片机独立按键控制LED灯实验时,需要按照一定的步骤进行操作,以确保实验能够顺利进行并取得预期的效果。

下面将详细介绍实验步骤,帮助读者更好地理解和掌握这一实验过程。

1. 准备材料在进行单片机独立按键控制LED灯实验前,首先需要准备相应的材料。

这些材料包括单片机板、按键、LED灯、连线和电源。

在选择单片机板时,需要根据具体的实验需求来确定,常见的有51单片机、Arduino等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。

按键显示电路实验报告(3篇)

按键显示电路实验报告(3篇)

第1篇一、实验目的1. 熟悉按键电路的基本原理和设计方法。

2. 掌握按键电路的搭建和调试方法。

3. 了解按键电路在实际应用中的重要性。

4. 提高动手实践能力和电路分析能力。

二、实验原理按键显示电路是一种将按键输入转换为数字信号,并通过显示设备进行显示的电路。

本实验主要涉及以下原理:1. 按键原理:按键通过机械触点实现电路的通断,当按键被按下时,电路接通,产生一个低电平信号;当按键释放时,电路断开,产生一个高电平信号。

2. 译码电路:将按键输入的信号转换为相应的数字信号,以便后续处理。

3. 显示电路:将数字信号转换为可视化的信息,如LED灯、数码管等。

三、实验器材1. 电路板2. 按键3. 电阻4. LED灯5. 数码管6. 电源7. 基本工具四、实验步骤1. 按键电路搭建(1)根据电路原理图,在电路板上焊接按键、电阻、LED灯等元器件。

(2)连接电源,确保电路板供电正常。

2. 译码电路搭建(1)根据电路原理图,在电路板上焊接译码电路所需的元器件。

(2)连接译码电路与按键电路,确保信号传输正常。

3. 显示电路搭建(1)根据电路原理图,在电路板上焊接显示电路所需的元器件。

(2)连接显示电路与译码电路,确保信号传输正常。

4. 电路调试(1)检查电路连接是否正确,确保无短路、断路等问题。

(2)按下按键,观察LED灯或数码管显示是否正常。

(3)根据需要调整电路参数,如电阻阻值、电源电压等,以达到最佳显示效果。

五、实验结果与分析1. 实验结果通过实验,成功搭建了一个按键显示电路,按下按键后,LED灯或数码管能够正确显示数字信号。

2. 结果分析(1)按键电路能够正常工作,实现电路通断。

(2)译码电路能够将按键输入转换为相应的数字信号。

(3)显示电路能够将数字信号转换为可视化的信息。

六、实验总结1. 通过本次实验,掌握了按键电路的基本原理和设计方法。

2. 提高了动手实践能力和电路分析能力。

3. 了解了按键电路在实际应用中的重要性。

EDA实验流水灯控制

EDA实验流水灯控制

彩灯控制器一、设计内容及要求:设计一个彩灯控制器,要求:1.四路彩灯从左向右逐次渐亮,间隔为1秒。

2.四路彩灯从右向左逐次渐灭,间隔为1秒。

3.四路彩灯同时点亮,时间间隔为1秒,然后同时变暗,时间为1秒,反复4次。

二、总体框图图(1)总体框图根据设计要求,电路设计大体思路如下:由脉冲发生器发出频率脉冲信号,利用计数器加法计数功能输出0000~1111的脉冲信号,经过数据选择器分别在0000~0011,0100~0111,1000~1111三个时段输出不同的高低电平,控制移位寄存器实现右移→左移→置数功能,从而控制彩灯按照设计要求实现亮灭。

三、选择器件本次课程设计所用器件如表一:表一本次课程设计所用器件1.同步二进制计数器74LS163表二7-3 74LS163功能表根据逻辑图、波形图、功能表分析,74LS163具有如下功能:管脚图逻辑符号1)1是同步4位二进制加法计数器,M=16,CP上升沿触发2)2既可同步清除,也可异步清除。

同步清除时,清除信号的低电平将在下一个CP上升沿配合下把四个触发器的输出置为低电平。

异步清除时,直接用清除信号的低电平把四个触发器的输出置为低电平。

3)3同步预置方式:当LD = 0时,在CP作用下,计数器可并行打入预置数据.当LD = 1时,使能输入PT同时为高电平,在CP作用下,进行正常计数。

4)PT任一为低时,计数器处于保持状态。

5) 5 CO为进位输出,可用来级联成n位同步计数器。

2.四位双向移位寄存器74LS19474LS194内部原理图74LS194四位双向移位寄存器具有左移、右移、并行数据输入、保持、清除功能。

1)从图1中74LS194的图形符号和引脚图分析。

SRG4是4位移位寄存器符号,D0~D3并行数据输入端、D SL左移串行数据输入端、D SR右移串行数据输入端、S A(M0)和S B (M1)(即9脚和10脚)工作方式控制端分别接电平开关,置1或置0,CP 时钟输入端接正向单次脉冲,清零端接负向单次脉冲,Q0~Q3输出端。

单个按键控制4个LED 实验报告(带程序)

单个按键控制4个LED 实验报告(带程序)

单个按键控制4个LED(入门级实验)实验介绍:通过单个按键控制4个LED灯的亮灭状态。

正常情况下,一个按键控制1个灯。

在本次实验中,要求使用1个按键,控制4个LED灯。

通过按键按下的次数,控制LED的亮灭状态。

按下1次,1个LED灯点亮,按下2次,2个LED 灯点亮,按下3次,3个LED灯点亮,按下4次,4个LED灯点亮,按下5次,所有LED灯都熄灭,如此循环。

如此就可以通过单个按键控制4个LED灯的亮灭。

在照明场所,控制LED灯的点亮个数,就可以控制亮度。

实验目的:在使用单片机等控制器控制周边元件的时候,经常会遇到I/O口不够用的情况。

因此在使用的时候,尽量省着用。

本次实验通过单个按键控制4个LED灯的亮灭状态,正常情况下需要4个按键,因而达到了节省单片机I/O口的目的。

通过此次实验室,学习单片机按键的编程控制方法,学习LED灯输出的控制方法。

学习最简单的输入设备(按键)控制最简单的输出设备(LED灯)的控制方法。

仿真原理图:在仿真软件Proteus中绘制仿真原理图如上图所示。

(注意事项:在进行实物制作时,发光二极管串联的电阻可以省略,因为单片机引脚灌电流的能力有限,限制了通过发光二极管电流的大小。

在仿真过程中,电阻R2~R9的大小要合适,太大LED将无法点亮。

)编程思路:当单片机上电后,所有的I/O口默认高电平,因而四个发光二极管在单片机上电后,都为熄灭状态。

此时,我们按下按键后,就可以调节各个发光二极管的亮灭状态。

当按一次按钮,将P2口的状态进行左移一位,同时将P2的最低位清零,就可以达到按一次按钮后,LED灯多亮一个。

如,当前只有P2口控制的最低位连接的LED点亮,当我们按一次按键,单片机首先将P2的状态循环左移一位,则刚才的最低位变为次低位,也就是倒数第二位点亮,同时将P2口的最低位清零,也就是倒数第一位连接的LED灯点亮,即按一次按钮后,倒数第一位和倒数第二位灯点亮。

其他状态与上述过程类似,这里不再赘述。

EDA实验LED

EDA实验LED

EDA 实验:LCD菜单字符显示班级:姓名:学号:为了使学生有效加深数字系统的分析和设计方法,熟练用EDA工具完成对数字系统的设计及仿真过程;安排本“设计性实验”。

自己拟定实用电路、实验步骤,学会系统设计、调试、仿真及故障诊断、排除方法。

二、实验题目:流动字符显示电路设计要求:(1)利用实验箱中的LCD2004字符型液晶,与MC8051 IP软核,编写两页以上LCD菜单。

(2)键盘分配为,功能键1位,增加键1位,确认键1位。

(3) 第一页显示年级学号姓名第二页显示seta 1(可变)第三页显示setb 1(可变)HS2004液晶显示模块可以和单片机AT89C51直接接口,电路如图1所示三、实验设备及器材:1、GH48EDA/SOPC+PK2实验系统 四、实验程序 测试忙检测 bit lcd_bz() { bit result; LCD_RS=0; LCD_RW=1; LCD_EP=1; delay(1); result=(bit)(P1&0X80); LCD_EP=0; return result; }//*********************************** ////写入指令到LCD 中//**************************************lcd_wcmd(uchar cmd){ while (lcd_bz()); LCD_RS=0; LCD_RW=0; LCD_EP=0; _nop_(); _nop_(); P2=cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP=1; _nop_(); _nop_(); _nop_();_nop_();AT89C51 HS200-4 液晶模块LCD_EP=0;}////设置显示位置lcd_pos(uchar POS){lcd_wcmd(POS|0x80);}lcd_wdat(uchar dat){while(lcd_bz());LCD_RS=1;LCD_RW=0;LCD_EP=0;P2=dat;_nop_();_nop_();_nop_();_nop_();LCD_EP=1;_nop_();_nop_();_nop_();_nop_();LCD_EP=0;}lcd_init(){lcd_wcmd(0x38);//功能设置,8位2行5x7点阵delay(12);lcd_wcmd(0x0c);//显示开/关控制delay(12);lcd_wcmd(0x06);//设置输入模式delay(12);lcd_wcmd(0x01);//清屏delay(12);}#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit LCD_RS=P0^0;sbit LCD_RW=P0^1; sbit LCD_EP=P0^2;sbit KEY_SET=P1^3;sbit KEY_UP=P1^4;sbit KEY_ENTER=P1^5;uchar m=0; //全局变量uchar flag=0;uchar set=0; /*功能键值*/uchar code dis1[ ]={" 2008 xuehao_xx "};uchar code dis2[ ]={"name xxxxxx"}; uchar code dis3[ ] = {" SETA "};uchar code dis4[ ] = {" SETB "};//主函数//************************************ **void main(){uchar i;lcd_init();delay(120);P0=0xFF; //置P0 口P2=0xFF; //置P2 口lcd_wcmd(0x01);//清屏fun_1();while(1){set_value();switch(set) /*根据Set标志散转*/{case 0:fun_1();break; /*第一页*/ case 1:fun_2();break; /*第二页*/ case 2:fun_3();break; /*第三页*/ default:break;}}}/************************************ ******//*设置服务子函数*/void set_value(){if (KEY_SET==0){delay(10);if(KEY_SET==0)set++;flag=0; //功能键值递增if(set>=3)set=0; //键值的范围0~2 again:if(KEY_SET==0)goto again;//若按键未释放,则等待}if(KEY_SET==1)flag=1;}void adj_value(){ m=0;while(flag==1){if (KEY_UP==0){delay(10);if(KEY_UP==0)m++; //键值递增if(m>=10)m=0; //键值的范围0~9 again:if(KEY_UP==0)goto again;//若按键未释放,则等待}lcd_pos(0x4a);lcd_wdat(0x30+m);if(KEY_ENTER==1){delay(10);if(KEY_EN TER==1)flag=0;again1:if(KEY_ENTER==1)goto again1;} }}/*第一页函数*/void fun_1(){uchar i;delay(12);lcd_pos(0);i=0;while(dis1[i]!='\0'){lcd_wdat(dis1[i]);i++; }lcd_pos(0x40); i=0;while(dis2[i]!='\0') {lcd_wdat(dis2[i]);i++;}}/*第二页函数*/void fun_2(){uchar i;lcd_wcmd(0x01);//清屏delay(12);lcd_pos(0x40);i=0;while(dis3[i]!='\0') {lcd_wdat(dis3[i]);i++;}adj_value();}/*第三页函数*/void fun_3(){uchar i;lcd_wcmd(0x01);//清屏delay(12);lcd_pos(0x40);i=0;while(dis4[i]!='\0') {lcd_wdat(dis4[i]);i++;}adj_value();}附加程序:显示字符的程序RS EQU P2.4 RW EQU P2.5EN EQU P2.6 ;LCD控制ORG 0000HJMP STARTSTART: CALL LCD_SETMOV DPTR,#MENU1MOV A,#0CALL PRT_MENU ;页面1MOV DPTR,#MENU2MOV A,#1CALL PRT_MENU ;页面2;*****************************LCD初始化**********************LCD_SET: CLR RSCLR RWMOV P0 ,#30HCALL EN1MOV A,#38H ;4位传输,单列双列CALL WCOMMOV A,#0FH ;光标出现,闪烁,显示屏开启CALL WCOMMOV A,#10H ;光标左移CALL WCOMMOV A,#01H ;清除屏幕RET;************************************ ************WCOM: MOV P0 ,A ;写8位指令CLR RSCALL EN1RET;************************************ **************EN1: SETB ENCALL DELAY1CLR ENCALL DELAY1RET;************************************ ******************DELAY1: MOV R7 ,#5;短暂延时DJNZ R7 ,$RET;*********************显示页面********************PRT_MENU:CJNE A,#0,LINE2LINE1: MOV A,#80HCALL WCOMJMP FILLLINE2: MOV A,#0C0HCALL WCOMFILL: CLR AMOVC A,@A+DPTRCJNE A,#0,L1RET;********************************L1: CALL WDATAINC DPTRJMP FILL;************************************ *************WDATA: MOV P0 ,A;写8位数据SETB RSCALL EN1RET;************************************ **********MENU1: DB 'K1:ST K2:SA K3:A',0 MENU2: DB 'TIME',0调试结果:在2004液晶屏显示:'K1:ST K2:SA K3:A',0MENU2:五、体会这次实验因为之前没有预习,导致程序流程不熟悉,对于LCD的一些内在基本呢理论没有搞懂,对于操作也相对比较慢,没有很好的完成,但最后我经过多天研究别人的程序,将本实验的程序有所搞懂。

按键驱动LED的实验课设资料

按键驱动LED的实验课设资料

设计一:按键驱动LED的实验一、设计目的学会用Verilog语言编写所需要的程序,会对自己编写的程序进行编译和仿真,懂得根据仿真软件提示的错误进行修改,也需要对通过仿真改正功能的错误。

并学会检测按键和控制LED的输出。

本实验是通过FPGA检测I/O口上的按键信号,通过时序控制两个LED灯以流水灯的方式各亮灭六次。

最后灯保持灭的状态。

二、设计原理该实验的主要问题是FPGA如何捕获到按键是否按下。

当按键按下时,输入电平会由高变低,按键松开后,输入电平会由低变高,这就有一个上升沿和一个下降沿。

捕获到这两个沿。

就可以确认按键按下。

检测到按键按下时,开始实现设计的功能。

由于两个LED灯亮灭有时间控制。

所以需要分频。

由于FPGA的内部频率是66兆赫兹,则需要分频65999999次能达到一秒。

最后编写主要的功能程序,首先让两个LED灯都置于高电平,当检测到按键按下时,时间过了一秒之后,led1开始亮,又过了一秒,LED2和LED1对LED1取反,实现了一亮一灭的功能。

这样循环六次后,分别将两灯置于高电平,即灭的状态。

在此过程中,若复位键置于高电平,则亮灯都暗。

三、设计成果1、模块划分(或者状态机)(1)键盘的检测(2)分频(3)实现流水灯的模块2、模块设计计数模块用来计数的。

低电平和计数器满时,复位。

否则计数器不断的计数加一,直到计数满时再复位。

always@(posedge clk or negedge reset_n)beginif(!reset_n) cnt1<=20'd0;else cnt1<=cnt1+1'b1;endalways@(negedge reset_n or posedge clk) beginif(reset_n==1'b0)begincnt<=28'd0;endelsebeginif(cnt==28'd0*******)begincnt<=28'd0;endelsecnt<=cnt+1;endendreg yimiao;always@(negedge reset_n or posedge clk) beginif(reset_n==1'b0)beginyimiao<=1'b0;endelsebeginif(cnt==28'd0*******)yimiao<=1'b1;else if(yimiao)yimiao<=1'b0;endend键盘的检测模块always@(negedge reset_n or posedge clk)begin if(reset_n==1'b0)key1_dly<=1'b0;elsekey1_dly<= key1;endalways@(negedge reset_n or posedge clk)beginif(reset_n==1'b0)key1_dly1<=1'b0;else key1_dly1<= key1_dly;endalways@(negedge reset_n or posedge clk)beginif(reset_n==1'b0)key1_nege_flag<=1'b0;else if(key1_dly==1'b0&&key1_dly1==1'b1)key1_nege_flag <=1'b1;else if(key1_valid==1'b1)key1_nege_flag <=1'b0;endalways@(negedge reset_n or posedge clk)begin if(reset_n==1'b0)key1_pose_flag<=1'b0;else if(key1_nege_flag==1'b1)begin if(key1_dly==1'b1&&key1_dly1==1'b0)key1_pose_flag <=1'b1;else if(key1_valid==1'b1)key1_pose_flag <=1'b0;endendalways@(negedge reset_n or posedge clk)beginif(reset_n==1'b0)key1_valid<=1'b0;elseif(key1_nege_flag==1'b1&&key1_pose_flag==1'b1)key1_valid <=1'b1;elsekey1_valid <=1'b0;endalways@(negedge reset_n or posedge clk)begin if(reset_n==1'b0)beginkey_ok1<=1'b0;endelse if(key1_valid==1'b1)key_ok1<=1'b1;endLED灯的驱动模块always@(negedge reset_n or posedge clk)begin if(reset_n==1'b0)begincount<=0;led1<=1'b1;led2<=1'b1;endelse if(yimiao)begin if(key_ok1==1'b1)beginif(count==12)led2<=1;if(count<12)beginled1<=~led1;led2<=led1;count<=count+1;endendendendmodule四、仿真结果分析(功能仿真和时序仿真)仿真程序`timescale 1ns/1psmodule textbench();reg clk;reg reset_n;reg key1;wire led1;wire led2;key x_key(.clk (clk),.reset_n (reset_n),.key1 (key1),.led1 (led1),.led2 (led2));alwaysbegin#10;clk<=1'b0;#10;clk<=1'b1;endinitialbeginreset_n =1'b0;# 300;reset_n =1'b1; key1=1'b1; # 200;key1=1'b0;# 300;key1=1'b1;#10000; $finish;end Endmodule功能仿真时序仿真将五.下载到板上仿真仿真好的verilog程序,通过JTAG下载到开发板上。

基于EDA的流水灯实验

基于EDA的流水灯实验

万年历的设计一、实验目标1. 巩固对基本的开发流程的掌握2. 复习对QUARTUS II软件的使用3. 复习NIOS II软件的使用4.在训练掌握相关软件使用的基础上,完成课题的设计二、设计要求用Nios II DE2开发楹的LCD(或8个七段数码管)显示电子钏的日期和时间。

LCD 分两行显示,第1行显示年、月和日(例如显示:20080101);第2行显示时、分和秒(例如显示:00152545)。

用输入按钮BUTTON[0]来控制LCD行修改,同时让Nios II DE2开发板上的绿色发光二极管LDG3的亮与灭来表示这个选择。

当BUTTON[0]按下一次后,LDG3亮,可以修改年、月和日的数字;再按一次BUTTON[0]后,LDG3灭,可以修改时、分和秒的数字。

另外和输入按钮BUTTON[3]来控制日期和时间的修改,当处于日期修改方式时,每按动一次BUTTON[3]按钮,依次更换“年”、“月”和“日”的修改。

当处于时间修改方式时,每按动一次BUTTON[3]按钮,依次更换“时”、“分”和“秒”的修改。

修改对象被选中后,按动BUTTON[2]输入按钮可以增加显示的数字;按动BUTTON[1]输入按钮可以减少显示的数字。

三、实验原理与步骤⑴在QUARTUS II 中建立工程⑵用SOPC BUILDER建立NIOS系统模块⑶在QUARTUS II 中的图形编辑界面中进行管脚连接、锁定工作⑷编译工程后下载到FPGA中⑸在NIOS II IDE中根据硬件建立软件工程⑹编译后,经过简单设置下载到FPGA中进行调试、验证下面根据以上的步骤进行进行一次全程开发:第一步:硬件部分设计1. 在自己的文件目录下建立一个hello_led文件夹,注意目录中不能有空格或中文;2. 打开QUARTUS II,点击FILE菜单下的New Project Wizard…会弹出如图2-1所示的对话框:图2-1 建立工程3. 然后输入工程存放目录,或点击工程路径右面的按钮设置工程存放目录,在第二栏中输入工程名称,我们这里输入为led;之后点击Finish,对话框消失,此时已经建立好了LED工程文件;4. 点击Assignment菜单中的Device,选择芯片为Cyclone II系列的EP2C35F672C6,如下图2-2所示:图2-2 选择器件5. 确认后。

EDA作业2-LED彩灯

EDA作业2-LED彩灯

EDA作业二--LED彩灯一、实验任务让8个LED实现彩灯的功能,并进行波形仿真。

通过这个实验,进一步掌握采用计数与判断的方式来实现分频的VHDL的编程方法以及移位运算符的使用。

二、实验环境软件实验环境为Quartus II 8.1开发软件。

三、实验原理彩灯,就是让LED以一定的规律显示不同的亮灭的组合。

本彩灯的设计采用了4种的亮灭方式。

每来一个时钟脉冲CLK,计数器就加1。

每当判断计数器中的数值达到25000000时,就会按一定方式点亮8个led。

FPGA输出数据就应该首先是10000000,隔1秒钟变成11000000……一直变化到111111,这样,依次点亮所有的灯,就形成了流水灯。

而当8个灯都点亮时,要一个操作使得所有的灯恢复为初始状态,即:灯都不亮。

然后,再一次流水即可。

如果是右移位,就出现向右流水的现象;反之,向左流水。

同流水灯原理:00方式为流水灯依次亮灭方式,01方式为两边向中间点亮方式。

10方式为连续两个灯同时按照流水灯亮灭,11方式为中间向两边点亮方式。

本实验程序定义了彩灯的端口部分,结构部分(控制部分),进程部分。

(分频部分本实验未使用到,所以在注释部分给出)四、实验步骤1、建立新工程项目:打开Quartus II软件,进入集成开发环境,点击File→New project wizard 建立一个工程项目caideng。

2、建立文本编辑文件:点击File→New在该项目下新建VHDL源程序文件caideng.v,输入试验程序中的源程序代码保存后选择工具栏中的按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。

3、编译工程项目:在Quartus II主页面下,选择Processing—Start Compilation或点击工具栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击OK 即可。

4、波形仿真:建立波形文件caideng.vwf 选择相应节点,进行功能仿真,仿真图如下。

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现
(k1=0)
图为k1=0时的输出状态s1,输出恒为011110。即亮灯为R1,y2。保持时间1S。
(k2=0)
上图为k2=0时的输出状态s2,输出恒为101011。即亮灯为G1,R2。保持时间2S。
(k3=0)
上图为k3=0时的输出状态s3,输出恒为110011。即亮灯为R1,G2。保持时间1S。
四、小结及心得体会
else
if counter<5 then
next_state<=s3;
else
next_state<=s0;
end if;
end if;
end if;
end if;
end if;
end case;
end process;
ouput:process(current_state)
begin ——显示程序
begin
u1: jiaotongdeng port map(
clk=>clki,
k0=>k0,
k1=>k1,
k2=>k2,
k3=>k3,
r1=>r1,r2=>r2,g1=>g1,g2=>g2,y1=>y1,y2=>y2
);
u2: div port map(clk=>clk1,clk_out=>clki);
end if;
end if;
end if;
when s3=>
if k0='0' then
next_state<=s0;
else
if k1='0' then
next_state<=s1;

实验五 独立按键和LED发光管实验(1)

实验五 独立按键和LED发光管实验(1)

4、外部中断的应用 (1)外部中断 1 在标准的51 单片机中有两个外部中断源 在标准的 51单片机中有两个外部中断源 , 分 51 单片机中有两个外部中断源, 别为INT INT0 INT1 别为INT0(P3.2)和INT1(P3.3)它的激活有两 种方式,电平触发和边沿触发。 TCON寄存器的低 种方式,电平触发和边沿触发。 TCON寄存器的低 四位与外部中断有关,IE1 IE0为外部中断0 四位与外部中断有关 , IE1 、 IE0 为外部中断 0 , 1 请求标志位,当外部中断0 请求标志位,当外部中断0,1依据触发方式产生中 断请求时,硬件置位IE /IE0 IE1 CPU响应中断 断请求时,硬件置位IE1/IE0=1,当CPU响应中断 由硬件清零IE1/IE0=0。IT0、IT1外部中断 外部中断0, 时,由硬件清零IE1/IE0=0。IT0、IT1外部中断0, 1触发方式选择位,由软件设置,1为下降沿触发, 触发方式选择位, 为下降沿触发, 触发方式选择位 由软件设置, 为下降沿触发 即由高到低的负跳变引起中断, 为电平触发 即由高到低的负跳变引起中断 , 0为电平触发 , INT0和INT1引脚的低电平引起中断。 引脚的低电平引起中断。 和 引脚的低电平引起中断
2、工作原理及特点
独立式按键是直接用I/O 口线构成的单个按键电路, 独立式按键是直接用 I/O 口线构成的单个按键电路 , 其 I/O口线构成的单个按键电路 特点是每个按键单独占用一根I/O 口线, I/O口线 特点是每个按键单独占用一根 I/O 口线 , 每个按键的工 作不会影响其它I/O口线的状态。 I/O口线的状态 作不会影响其它 I/O 口线的状态 。 即 每个按键的电路是 独立的,都有单独一根数据线输出键的通断状态。 独立的,都有单独一根数据线输出键的通断状态。 通过 检测输入线的电平状态就可以很容易的判断按键是否被 按下了 。 独立式按键电路配置灵活,软件结构简单, 独立式按键电路配置灵活,软件结构简单,但每个按键 必须占用一根I/O口线,因此,在按键较多时,I/O口线 I/O口线 必须占用一根I/O口线,因此,在按键较多时,I/O口线 浪费较大,不宜采用。 浪费较大,不宜采用。

键盘、LED发光实验报告

键盘、LED发光实验报告

EDA设计课程实验报告实验题目:键盘、LED发光实验学院名称:专业:班级:姓名:高胜学号小组成员:指导教师:一、实验目的通过实验让同学们进一步了解、熟悉和掌握FPGA开发软件的使用方法及Verilog HDL 的编程方法,并熟悉以Verilog HDL文件为顶层模块的设计;学会和体会分支条件语句case 的使用方法及FPGA I/O口的输出控制。

二、设计任务及要求smartSOPC试验箱上有八个按键KEY1~KEY8和八个发光二极管LED1~LED8。

在smartSOPC试验箱上有KEY1~KEY8通过跳线JP6的KEY1~KEY8分别与芯片的121~124、143、141、158、和156引脚相连(QuickSOPC芯片板上的KEY1~KEY4与SmartSOPC试验箱上KEY1~KEY4是并接的)。

本试验的内容是要求在SmartSOPC试验箱上完成对8个键盘KEY1~KEY8进行监控,一旦有键输入则判断其键值,并点亮相应个发光二极管。

三、系统设计1、整体设计方案FPGA的所有I/O控制块允许每个I/O引脚单独配置为输入口,不过这种配置是系统自动完成的。

当这种I/O口被设置为输入口使用时(如定义key0为输入引脚:input key0;),该I/O控制模块将直接使三态缓冲区的控制端接地,使得该I/O引脚对外呈高阻态,这样该I/O引脚可作为专用输入引脚。

正确分配并锁定引脚后,一旦在KEY1~KEY8中有键输入,即可判断其键值并作出相应的处理。

2、功能模块电路设计(1)输入输出模块框图(见图1)图1(键盘led发光模块图)(2)模块逻辑表达(见表1)表1(按键led发光真值表)(3)算法流程图(见图2)(4)Verilog源代码module ledkey(key,led); //模块名ledkeyinput [7:0]key; //输入按键状态output [7:0]led; //输出led发光状态reg [7:0]k; //定义8位按键状态寄存器k reg [7:0]l; //定义8位led状态寄存器lassign led=l; //输出led发光状态选择always @(key) //定义按键信号变化触发begink=key; //按键状态选择case (k)8'b11111110:l=8'b11111110; //亮一盏led8'b11111101:l=8'b11111100; //亮二盏led8'b11111011:l=8'b11111000; //亮三盏led8'b11110111:l=8'b11110000; //亮四盏led8'b11101111:l=8'b11100000; //亮五盏led8'b11011111:l=8'b11000000; //亮六盏led8'b10111111:l=8'b10000000; //亮七盏led8'b01111111:l=8'b00000000; //亮八盏leddefault:l=8'b11111111; //不亮endcaseendendmodule四、系统调试1、仿真调试(1)仿真代码`timescale 1ns/1nsmodule ledkey_tp;reg [7:0]key;wire [7:0]led;ledkey u1(key,led);initialbegin#100 key=8'b11111110;#100 key=8'b11111101;#100 key=8'b11111011;#100 key=8'b11110111;#100 key=8'b11101111;#100 key=8'b11011111;#100 key=8'b10111111;#100 key=8'b01111111;#100 key=8'b00111111;#100 $finish;endinitial $monitor($time,,,"%b,%b",key,led);endmodulemodule ledkey(key,led);input [7:0]key;output [7:0]led;reg [7:0]k;reg [7:0]l;assign led=l;always @(key)begink=key;case (k)8'b11111110:l=8'b11111110;8'b11111101:l=8'b11111100;8'b11111011:l=8'b11111000;8'b11110111:l=8'b11110000;8'b11101111:l=8'b11100000;8'b11011111:l=8'b11000000;8'b10111111:l=8'b10000000;8'b01111111:l=8'b00000000;default:l=8'b11111111;endcaseendendmodule(2)仿真波形图(见图3)图3(3)波形分析# 0 xxxxxxxx,xxxxxxxx # 100 11111110,11111110 # 200 11111101,11111100# 300 11111011,11111000 # 400 11110111,11110000 # 500 11101111,11100000 # 600 11011111,11000000 # 700 10111111,10000000 # 800 01111111,00000000 # 900 00111111,11111111 (4)引脚图表2-1 引脚锁定方法五、实验感想。

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)—数字时钟LED数码管显示二、实验内容和实验目的1.6个数码管动态扫描显示驱动2.按键模式选择(时\分\秒)与闹钟(时\分)调整控制,3.用硬件描述语言(或混合原理图)设计时、分、秒计数器模块、闹钟模块、按键控制状态机模块、动态扫描显示驱动模块、顶层模块。

要求使用实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒;要求模式按键和调整按键信号都取自经过防抖处理后的按键跳线插孔。

实验目的:1)学会看硬件原理图,2)掌握FPGA硬件开发的基本技能3)培养EDA综合分析、综合设计的能力三、实验步骤、实现方法(或设计思想)及实验结果主要设备: 1)PC机,2)硬件实验箱,3)Quartus II软件开发平台。

1.打开Quartus II ,连接实验箱上的相关硬件资源,如下图1所示。

2.建立新文件,选择文本类型或原理图类型。

3.编写程序。

4.编译5.仿真,加载程序到芯片,观察硬件输出结果(数码管显示)6.结果正确则完成。

若结果不正确,则修改程序,再编译,直到正确。

模24计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count24 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count24;ARCHITECTURE arc OF count24 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,en)BEGINhh<=a;hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0010" AND b="0011") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;IF(a="0010" AND b="0010") THENcout<='1';ELSE cout<='0';END IF;END IF;END IF;END PROCESS;END arc;模60计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count60 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count60;ARCHITECTURE arc OF count60 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL sout:STD_LOGIC;BEGINPROCESS(clk)BEGINhh<=a; hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0101" AND b="1001") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;END IF;END IF;END PROCESS;sout<='1' WHEN a="0101" AND b="1001" ELSE '0';cout<=sout AND en;END arc;4-7显示译码模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY segment4to7 ISPORT(s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g:OUT STD_LOGIC);END segment4to7;ARCHITECTURE arc OF segment4to7 IS SIGNAL y:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINa<= y(6);b<= y(5);c<= y(4);d<= y(3);e<= y(2); f<= y(1);g<= y(0);PROCESS(s)BEGINCASE s ISWHEN "0000"=>y<="1111110"; WHEN "0001"=>y<="0110000"; WHEN "0010"=>y<="1101101"; WHEN "0011"=>y<="1111001"; WHEN "0100"=>y<="0110011"; WHEN "0101"=>y<="1011011"; WHEN "0110"=>y<="1011111"; WHEN "0111"=>y<="1110000"; WHEN "1000"=>y<="1111111"; WHEN "1001"=>y<="1111011"; WHEN OTHERS=>y<="0000000"; END CASE;END PROCESS;END arc;带闹钟控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mode_adjust_with_alarm ISPORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END mode_adjust_with_alarm;ARCHITECTURE arc OF mode_adjust_with_alarm ISTYPE mystate IS (s0,s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS (c_state)BEGINCASE c_state ISWHEN s0=> next_state <= s1; clkh<=clk1hz; clkm<=clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="000";WHEN s1=> next_state <= s2; clkh<=adjust; clkm<= '0'; clks<='0';enh<='1'; enm<='0';enha<='0'; clkh_a<= '0';clkm_a<= '0'; mode_ss <="001";WHEN s2=> next_state <= s3; clkh<= '0'; clkm<=adjust; clks <= '0';enh<='0';enm<='1';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="010";WHEN s3=> next_state <= s4; clkh<= '0'; clkm<= '0'; clks<=adjust;enh<='0'; enm<='0';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="011";WHEN s4=> next_state <= s5; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0';enm<='0';enha<='1'; clkh_a<=adjust; clkm_a<= '0'; mode_ss <="100";WHEN s5=> next_state <= s0; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<=adjust; mode_ss <="101";END CASE;END PROCESS;PROCESS (mode)BEGINIF (mode'EVENT AND mode='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;扫描模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END scan;ARCHITECTURE arc OF scan ISTYPE mystate IS (s0, s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS ( c_state )BEGINCASE c_state ISWHEN s0=> next_state <=s1; ss<="010";WHEN s1=> next_state <=s2; ss<="011";WHEN s2=> next_state <=s3; ss<="100";WHEN s3=> next_state <=s4; ss<="101";WHEN s4=> next_state <=s5; ss<="110";WHEN s5=> next_state <=s0; ss<="111";END CASE;END PROCESS;PROCESS (clk256hz)BEGINIF (clk256hz'EVENT AND clk256hz='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;复用模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END mux;ARCHITECTURE arc OF mux ISSIGNAL a,hhtmp,hltmp,mhtmp,mltmp,shtmp,sltmp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(mode_ss)BEGINCASE mode_ss ISWHEN "000"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "001"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "010"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "011"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "100"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN "101"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN OTHERS=>hhtmp<="0000";hltmp<="0000";mhtmp<="0000";mltmp<="0000";shtmp<="0000";sltmp<="0000"; END CASE;END PROCESS;PROCESS(ss)BEGINCASE ss ISWHEN "010"=> a <=hhtmp;WHEN "011"=> a <=hltmp;WHEN "100"=> a <=mhtmp;WHEN "101"=> a <=mltmp;WHEN "110"=> a <=shtmp;WHEN "111"=> a <=sltmp;WHEN OTHERS => a <="0000";END CASE;y<=a;END PROCESS;alarm<='1' WHEN ((hh=hha)AND(hl=hla)AND(mh=mha)AND(ml=mla)) ELSE '0';END arc;闪烁模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY blink_control ISPORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END blink_control;ARCHITECTURE arc OF blink_control ISBEGINPROCESS (ss,mode_ss)BEGINIF(ss="010" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="110" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="111" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="010" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="101") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="101") THEN blink_en<='1';ELSE blink_en<='0';END IF;END PROCESS;END arc;Top文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY design3 ISPORT (mode,adjust,clk1hz,clk2hz,clk256hz,clk1khz:IN STD_LOGIC;alarm,a,b,c,d,e,f,g:OUT STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END design3;ARCHITECTURE arc OF design3 ISCOMPONENT mode_adjust_with_alarm PORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT scan PORT (clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT segment4to7 PORT (s: IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g: OUT STD_LOGIC);END COMPONENT;COMPONENT mux PORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END COMPONENT;COMPONENT blink_control PORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END COMPONENT;COMPONENT count24 PORT (clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT count60 PORT (clk ,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNALclkh,enh,clkm,enm,clks,clkh_a,clkm_a,coutm,couts,coutm_en,couts_en,cout,vcc,coutma_en,coutma,alarm1,bli nk_en,blink_tmp,enha: STD_LOGIC;SIGNAL mode_ss,ss1:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,y,i:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINvcc<='1';coutm_en <= enh OR coutm;couts_en <= enm OR couts;coutma_en<= enha OR coutma;blink_tmp<=blink_en and clk2hz;i(3)<=y(3) OR blink_tmp;i(2)<=y(2) OR blink_tmp;i(1)<=y(1) OR blink_tmp;i(0)<=y(0) OR blink_tmp;ss<=ss1;alarm<=alarm1 AND clk1khz;u1:mode_adjust_with_alarmPORT MAP( adjust,mode,clk1hz,clkh,enh,clkm,enm,clks,enha,clkh_a,clkm_a,mode_ss);u2:count24 PORT MAP(clkh,coutm_en,cout,hh,hl);u3:count60 PORT MAP(clkm,couts_en,coutm,mh,ml);u4:count60 PORT MAP(clks,vcc,couts,sh,sl);u5:count24 PORT MAP(clkh_a,coutma_en,cout,hha,hla);u6:count60 PORT MAP(clkm_a,vcc,coutma,mha,mla);u7:mux PORT MAP(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,ss1,mode_ss,y,alarm1);u8:scan PORT MAP(clk256hz,ss1);u9:blink_control PORT MAP(ss1,mode_ss,blink_en);u10:segment4to7 PORT MAP(i,a,b,c,d,e,f,g);END arc;实验结果:数字钟包括正常的时分秒计时,实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒。

EDA技术实验10-彩灯控制器设计与实现

EDA技术实验10-彩灯控制器设计与实现

ENTITY counter_4 IS
PORT
(
clk,rst
: IN
std_logic;
count_out
: OUT integer range 0 to 3 );
std_logic
END xzq4_1; ARCHITECTURE a OF xzq4_1 IS
BEGIN PROCESS (rst,inp) BEGIN
if(rst='1') then output<='0';
else
case inp is
when 0=>output<=in1;
when 1=>output<=in2;
count_out<=temp;
END PROCESS;
17
END a;
-------------------------------------------4进制计数器模块----------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
if clk'event and clk='1'then
if b>=5 then
b:=0;
clk_6<='1';
else
b:=b+1;
clk_6<='0';
end if;
end if;
end if;
end process p2;
p3:process(clk,rst)
variable c:integer range 0 to 20;

EDA技术及应用实验报告参考答案

EDA技术及应用实验报告参考答案

《EDA技术及应用》实验报告系部:电子通信工程系指导教师:学号:班级:姓名:实验一点亮LED设计一、实验目的通过此试验可以让大家逐步了解,熟悉和掌握FPGA开发软件Quartus II的使用方法及VerilogHDL的编程方法。

二、实验内容本实验是一个简单的点亮LED灯的实验,具体包括:1)使用Quartus II建立一个工程;2)Quartus II工程设计;3)设置编译选项并编译硬件系统;4)下载硬件设计到目标FPGA;5)观察LED的状态;三、实验原理和单片机一样,向片子里写进数据,输出高电平(对于共阴极的),或者输出低电平(对于共阳极)。

根据Cyclone片子已经分配好的针脚设置好针脚。

四、实验步骤建立一个工程—输入程序—软件编译—生成下载文件—下载—调试五、实验程序module led1(led); //模块名led1output[7:0] led; //定义输出端口reg[7:0] led; //定义寄存器always //过程1beginled = 8'b10101010; //输出0xAAendendmodule六、思考题(1)写出使用QuartusII软件开发工程的完整的流程。

建立一个工程—输入程序—软件编译综合—生成下载文件—下载—硬件调试实验二流水灯实验一、实验目的通过此试验让大家进一步了解熟悉和掌握FPGA开发软件的使用方法及软件编程方法。

学习简单的时序电路的设计和硬件测试。

二、实验内容本实验的内容是建立用于控制LED流水灯的简单硬件电路,要求在SmartSOPC上实现LED1-LED8发光二极管流水灯的显示。

三、实验原理这里的显示用分频模块(int_div)得到的较低的始终作为信号,在此时钟下,对输入数据进行移位,就得到了流水灯的效果。

四、实验步骤建立工程—输入源程序—调用模块—生成符号—调用符号—连成电路图—编译—下载—调试五、实验程序原理图:六、思考题1.本实验顶层采用了图形输入的方式,若采用文本输入方式,如何编写顶层文件?写出相应程序。

按键功能实验报告总结(3篇)

按键功能实验报告总结(3篇)

第1篇一、实验背景按键作为电子设备中常见的输入装置,其功能丰富,应用广泛。

本实验旨在通过设计和实现一系列按键功能,加深对按键工作原理的理解,并提高电子设计实践能力。

二、实验目的1. 掌握按键的基本原理和电路设计方法。

2. 熟悉按键在不同应用场景下的功能实现。

3. 培养电子设计实践能力,提高问题解决能力。

三、实验内容1. 实验器材:51单片机最小核心电路、按键、LED灯、电阻、电容、面包板等。

2. 实验内容:(1)单按键控制LED灯闪烁(2)按键控制LED灯点亮与熄灭(3)按键控制LED灯亮度调节(4)按键实现数字时钟调整(5)按键实现多功能计数器(6)按键实现密码输入与验证四、实验步骤1. 根据实验要求,设计电路图,并选择合适的元器件。

2. 使用面包板搭建实验电路,包括单片机、按键、LED灯、电阻、电容等。

3. 编写程序,实现按键功能。

4. 对程序进行调试,确保按键功能正常。

5. 实验完成后,撰写实验报告。

五、实验结果与分析1. 单按键控制LED灯闪烁实验结果:按下按键,LED灯闪烁;松开按键,LED灯停止闪烁。

分析:本实验通过单片机定时器实现LED灯的闪烁。

当按键按下时,定时器开始计时;当定时器达到设定时间后,LED灯点亮;定时器继续计时,当达到设定时间后,LED灯熄灭。

如此循环,实现LED灯的闪烁。

2. 按键控制LED灯点亮与熄灭实验结果:按下按键,LED灯点亮;再次按下按键,LED灯熄灭。

分析:本实验通过单片机的I/O口控制LED灯的点亮与熄灭。

当按键按下时,单片机将I/O口置为高电平,LED灯点亮;当按键再次按下时,单片机将I/O口置为低电平,LED灯熄灭。

3. 按键控制LED灯亮度调节实验结果:按下按键,LED灯亮度逐渐增加;松开按键,LED灯亮度保持不变。

分析:本实验通过单片机的PWM(脉宽调制)功能实现LED灯亮度的调节。

当按键按下时,单片机调整PWM占空比,使LED灯亮度逐渐增加;松开按键后,PWM占空比保持不变,LED灯亮度保持不变。

按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告实验名称:按键控制数码管和流水灯设计报告一、实验目的本实验旨在通过使用按键来控制数码管和流水灯的显示,加深对数码管和流水灯工作原理的理解,并掌握按键的基本输入输出原理。

二、实验器材1. Arduino开发板2.数码管模块3.面包板4.面包板连接线5.按键模块6.跳线三、实验原理数码管是一种将数字和一些常用符号通过数码电路显示在特定位置的显示器件,由多个LED组成,可显示0-9及一些小于9的字母和符号。

流水灯是一种LED灯的组合,通过不同的时序控制,实现灯光依次点亮或熄灭的效果。

本实验通过使用按键控制器将数码管和流水灯的状态控制与显示,按下不同的按键可以使数码管切换显示不同的数字,同时控制流水灯的点亮或熄灭。

四、实验步骤1. 将数码管模块连接到Arduino开发板的数字I/O口,连接方式可参考数码管模块的接口定义和Arduino开发板的编号。

2. 将按键模块连接到Arduino开发板的数字I/O口,连接方式可参考按键模块的接口定义和Arduino开发板的编号。

3. 按键模块和数码管模块都需要使用面包板连接线和跳线连接到Arduino开发板的相应引脚上。

4.根据按键的读取状态,通过编程控制数码管显示相应的数字,利用流水灯实现通过按键的控制点亮或熄灭。

五、实验结果经过编程和调试,实验中数码管能够正确显示按键输入的数字,同时根据按键输入状态控制流水灯的点亮或熄灭。

按不同的按键可以切换数码管的数字显示,实现了按键对数码管和流水灯的控制。

六、实验总结本实验通过按键来控制数码管和流水灯的显示,加深了对数码管和流水灯的工作原理的理解。

同时,掌握了按键的基本输入输出原理,并通过编程控制实现了按键对数码管和流水灯的控制。

本实验还有一些可以改进的地方,例如可以增加多个按键,实现更多的控制功能;还可以通过增加延时函数控制流水灯的点亮或熄灭速度。

通过不断改进和练习,可以提高对Arduino开发板的理解和掌握。

按键控制LED实验

按键控制LED实验

按键控制LED实验
I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED 小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O 的作用。

按键
按键开关
红色M5
220
10K
面包板
数字I/O 接口为
应保持
语句,这里我们使用if 语句,Arduino 的程序便写语句是基于C 语言的,所以C 的条件判断语句自然也适用于Arduino,像while、swich 等等。

这里根据个人喜好我们习惯
于使用简单易于理解的if 语句给大家做演示例程。

我们分析电路可知当按键按下时,数字7 接口可读出为高电平,这时我们使数字11 口输出高电平可使小灯亮起,程序中我们判断数字7 口是否为低电平,要为低电平使数字11 口输出也为低电平小灯不亮,原理同上。

参考源程序:
int ledpin=11;//定义数字11 接口
{
}
{
else
{ digitalWrite(ledpin,HIGH);}
}
下载完程序我们本次的小灯配合按键的实验就完成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的
手机当按下任一按键时背光灯就会亮起,这就是典型应用了,下面一个实验就是一个最简单的生活中应用实例------抢答器。

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

E D A技术按键控制
L E D实验
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]
昆明理工大学信息工程与自动化学院学生实验报告
( 201 —201 学年第学期)
一、实验目的
1、熟悉FPGA开发完整流程
2、熟悉管脚分配,熟悉编程
二、实验设备
1、带有quartusII 软件的PC 机一台。

2、 FPGA 实验箱以及电源线下载线。

三、实验要求
实现8 个SW 按键控制8 个led 灯亮灭。

四、实验原理
1、按键控制led 灯原理:
本实验是通过按键的电平控制led灯。

其示意图如图。

图按键控制led 示意图
8 个SW 按键控制相对的8 个led 灯,当SW1 在上方,其余按键在下方时,此时SW1 为高电平,这时SW1 对应的led 被点亮。

2、模块符号:
图为按键控制led模块符号。

图按键控制led 模块符号
3、源码:
module key1(key,led);
input[7:0] key;
output[7:0] led;
reg[7:0] led;
always@(key)
begin
case(key)
8'b00000001:led<=8'b00000001;
8'b00000010:led<=8'b00000010;
8'b00000100:led<=8'b00000100;
8'b00001000:led<=8'b00001000;
8'b00010000:led<=8'b00010000;
8'b00100000:led<=8'b00100000;
8'b01000000:led<=8'b01000000;
8'b00000000:led<=8'b00000000;
endcase
end
endmodule
五、实验步骤
1、打开quartusII 开发环境,建立工程、添加相应源文件(选目标芯片时,应采用EP2C35F672C8芯片)。

2、分配管脚
1)修改tcl 文件:
➢要在FPGA硬件芯片上运行程序,通过管脚分配才能实现我们的程序与硬件的连接,所以,管脚分配是很重要的一步,若是分配不对,就不能实现预期效果。

➢其实,管脚分配也是很简单的。

有一个文件,以.tcl为后缀名,这个文件不会编译自动生成,需针对相应的芯片编写。

本实验不需自己编写此文件(已针对实验系统编写好),以后每次自己建立工程,只要把这个文件复制到自己的工程文件夹里就可以了,下面是这个文件的一部分内容。

#clk
set_location_assignment PIN_P1 -to clk
#rst
set_location_assignment PIN_R4 -to rst
#led
set_location_assignment PIN_H23 -to led\[0\]
set_location_assignment PIN_G26 -to led\[1\]
set_location_assignment PIN_G25 -to led\[2\]
set_location_assignment PIN_K22 -to led\[3\]
set_location_assignment PIN_G24 -to led\[4\]
set_location_assignment PIN_G23 -to led\[5\]
set_location_assignment PIN_P18 -to led\[6\]
set_location_assignment PIN_N18 -to led\[7\]
➢#号后的是注释,不是实质内容,这个文件里的内容格式都是这样的,包含了本实验的模块,包括clk,rst,led 等的管脚分配,其中用红色标注的部分是FPGA 芯片的引脚名,在做开发板时,FPGA 芯片和各个模块(led,key等)都连接好了,所以这些引脚也就和各个模块连着了。

➢用蓝色标注的部分是我们程序中的引脚名。

这个文件就是把程序中的clk,led 和开发板上的真的clk,led 连起来,这样程序才能在开发板上运行。

我们只要保证程序中的引脚名和蓝色部分一样就好了,无论修改哪里,这个过程就是管脚分配,所以不管我们编辑什么程序,只要将蓝色部分改成我们编写程序的输入输出引脚名就行。

2) Run tcl 文件:
➢分配好管脚后,保存,我们还要run一下这个文件,来到quartus界面,看下图
图 Tools菜单栏
➢选择菜单tools,点击,在下拉菜单中选择tcl scripts,出现下图。

图 tcl scripts
➢选中图中蓝色部分,然后run,分配成功后,会出现下图。

图引脚分配成功
➢分配成功后,如果是原理图输入的模块中clk 端会出现这样的标志,如果没分配成功,回去查看.tcl 文件是否有错。

3、配置:
➢编译前要进行一项设置,如下图。

图配置目标芯片属性
➢在在图中蓝色部分右键,选择device,弹出界面如下图。

图配置目标芯片属性
➢点击图标,弹出界面如下图。

图配置目标芯片属性
➢点击图标,弹出界面如下图。

图配置目标芯片属性
➢这里选择EPCS16,这是用来固化程序时用的,我们下载程序分两种方式,一种是下载到SDRAM 中,掉电程序丢失;另一种下载到flash 中,掉电不丢失。

这项设置就是为了使程序正确下载到flash 中。

设置好后确定。

4、编译
Run 后就可以编译了,不成功检查程序或引脚分配。

5、下载
1) 下载(掉电丢失):
➢本实验不需要波形图仿真,编译成功后就开始在开发板上运行,我们先用掉电丢失的下载方式。

首先给实验板供上电,接上jtag接口。

然后点击图标,打开下载器,把我们的程序下载到开发板上,如下图。

图下载界面
➢下载器驱动装好后,如果上边第二个红框是no hardware,则点击hardware setup添加硬件,把生成的sof文件导入进来后,开始点start,下载成功后,如下图。

图 jtag 模式下载完成
➢下载成功后,就在开发板上看到我们程序效果了,实现了跑马灯功能。

2) 下载(掉电不丢失):
➢接下来我们试着用掉电不丢失的下载方式,这里这样设置,如下图。

➢导入pof 文件后,Start 开始下载,然后也能实现和jtag 下载一样的功能了,而且掉电也不会丢失,除非在烧进新的程序时,会自动擦出旧程序。

实验截图:
心得体会:经过这次实验,我对按键控制LED有了进一步的了解,对如何通过编程利用按键控制LED的亮灭,怎样调整LED 的闪烁频率有了进一步的经验。

六、思考练习
实现按键控制跑马灯,按1 键从左向右,按2 键从右到左,选目标芯片,本实验箱核心板采用EP2C35F672C8芯片.
module led_water(clk,led,key);
input clk;
input[1:0]key;
output[7:0] led;
reg[7:0] led;
reg[50:0] cnt;
reg[3:0] cntm;
always@(posedge clk)
begin
If(key==2’b00)//当第一个按键按下时,灯从左向右亮,否则就从右向左亮
begin
//判断是否延时到了规定时间
begin
cntm<=cntm+1; //cntm加1,灯向右移一个
cnt<=0; //计时清零
end
else
begin
cnt<=cnt+1; 计时加1
end
if(cntm>=8) //如果cntm大于等于8,就清零
begin
cntm<=0;
end
end
else
begin
cntm<=cntm-1; //cnmt减1,灯向左移一个
cnt<=0;
end
else
begin
cnt<=cnt+1;
end
if(cntm<=0) //如果灯移到最左边,就给cnmt赋值8,让流水灯从最左 //边开始亮
begin
cntm<=8;
end
end
always@(posedge clk)
begin
case(cntm)
1:led<=8'b01000000;//1
2:led<=8'b00100000;//2
3:led<=8'b00010000;//3
4:led<=8'b00001000;//4
5:led<=8'b00000100;//5
6:led<=8'b00000010;//6
7:led<=8'b00000001;//7
default:led<=7'b00000000;
endcase
end
endmodule。

相关文档
最新文档