EDA技术按键控制LED实验
实验2 键控LED灯的设计

实验2 键控LED灯的设计一、实验目的1.进一步了解软件使用方法;2.熟悉顶层文件的设计方法;3.掌握体会分支语句的使用方法二、实验内容1.通过正确的设置将开发板上的按键与芯片引脚相连,判断按键状态,并点亮响应的led等;三、实验要求1.根据参考内容,用Verilog HDL语言设计键控LED灯的设计。
2.用Quartus II或Modelsim 对其进行功能或时序进行波形仿真验证;3.下载到FPGA开发板验证;四、实验环境Quartus prime五、实验原理根据图1可知,若检测到端口为高电平,按键未被按下;当检测到端口为低电平时,则按键被按下。
图1 独立按键电路图根据图2可知,四个LED灯低电平有效。
图2 LED灯电路图六、实验步骤1.打开Quartus prime软件,进入系统页面后点击“New Project Wizard”新建一个工程;2.创建工程后,在工程中再新建一个文件。
在这个文件中编写实验程序,其步骤是选择菜单File-New-Verilog HDL file3. 编译前对整个工程进行参数设置。
首先在工程名称上右键,单击“Settings”,选择“Simulation”,进行一系列的参数设置。
4. 对工程进行编译、仿真、验证。
七、实验程序(或者电路图)module key_led(key,led,clk);input clk;input[3:0]key;output[3:0]led;reg[3:0]led_r;reg[3:0]buffer;always@(posedge clk)beginbuffer=key;case(buffer)4'b0000:led_r=4'b0000;4'b0001:led_r=4'b0001;4'b0010:led_r=4'b0010;4'b0011:led_r=4'b0011;4'b0100:led_r=4'b0100;4'b0101:led_r=4'b0101;4'b0110:led_r=4'b0110;4'b0111:led_r=4'b0111;//如果按下的是key4,那么点亮LED44'b1000:led_r=4'b1000;4'b1001:led_r=4'b1001;4'b1010:led_r=4'b1010;4'b1011:led_r=4'b1011;//如果按下的是key3,那么点亮LED34'b1100:led_r=4'b1100;4'b1101:led_r=4'b1101;//如果按下的是key2,那么点亮LED24'b1110:led_r=4'b1110;//如果按下的是key1,那么点亮LED1default:led_r=4'b1111;endcaseendassign led=led_r;endmodule八、实验结果图1 RTL门级建模仿真图2 波形图仿真九、实验结果讨论如果按下的是key1,那么点亮LED1,如果按下的是key2,那么点亮LED2,以此类推,如果按键全部按下,那么4个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等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。
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灯的亮灭状态。
正常情况下,一个按键控制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 实验: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灯教学设计1. 引言按钮控制LED灯是一种基本的电子电路设计,本文将介绍如何使用按钮控制LED灯的原理和步骤,以便初学者能够快速掌握这一基础知识。
2. 设备清单在开始设计之前,我们需要准备以下设备:- Arduino开发板- 面包板- LED灯- 跳线3. 原理介绍按钮控制LED灯的原理很简单,当按钮按下时,电流会经过按钮,然后流入LED灯,从而点亮LED灯。
当按钮松开时,电流断开,LED灯熄灭。
在这个过程中,Arduino开发板起到控制电流流动方向的作用。
4. 连接步骤接下来,我们将详细介绍按钮和LED灯的连接步骤:步骤1:将Arduino开发板连接到面包板上,确保线路连接正确并稳定。
步骤2:将一个跳线连接到Arduino开发板的数字引脚2上,并将另一端连接到面包板的一侧。
这将是我们的按钮引脚。
步骤3:将另一个跳线连接到面包板的相邻位置上,并将其另一端连接到LED的正极。
这将是我们的LED正极引脚。
步骤4:将第三个跳线连接到面包板的另一侧,并将其另一端连接到LED的负极。
这将是我们的LED负极引脚。
5. 代码编写在连接完成后,我们需要编写一段简单的Arduino代码来控制按钮控制LED灯的开关。
```int buttonPin = 2; //将按钮连接到数字引脚2int ledPin = 13; //将LED连接到数字引脚13void setup() {pinMode(ledPin, OUTPUT); //设置LED引脚为输出pinMode(buttonPin, INPUT); //设置按钮引脚为输入}void loop() {int buttonState = digitalRead(buttonPin); //读取按钮状态if (buttonState == HIGH) { //如果按钮按下digitalWrite(ledPin, HIGH); //点亮LED灯} else {digitalWrite(ledPin, LOW); //熄灭LED灯}}```6. 实验结果当我们上传了上述代码到Arduino开发板后,即可通过按钮控制LED灯的开关状态。
基于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技术及应用》实验指导书

实验一组合逻辑器件设计一、实验目的1、通过一个简单的3-8译码器的设计,掌握组合逻辑电路的设计方法。
2、掌握组合逻辑电路的静态测试方法。
3、初步了解QUARTUS II原理图输入设计的全过程。
二、实验主要仪器与设备1、输入:DIP拨码开关3位。
2、输出:LED灯。
3、主芯片:EP1K10TC100-3。
三、实验内容及原理三-八译码器即三输入,八输出。
输出与输入之间的对应关系如表1-1-1所示。
表1-1 三-八译码器真值表四、预习要求做实验前必须认真复习数字电路中组合逻辑电路设计的相关内容(编码器、译码器)。
五、实验步骤1、利用原理图设计输入法画图1-1-1。
2、选择芯片ACEX1K EP1K10TC100-3。
3、编译。
4、时序仿真。
5、管脚分配,并再次编译。
6、实验连线。
7、编程下载,观察实验结果。
图1-1 三-八译码器原理图六、实验连线用拨码开关的低三位代表译码器的输入(A,B,C),将之与EP1K10TC100-3的管脚相连;用LED灯来表示译码器的输出(D0~D7),将之与EP1K10TC100-3芯片的管脚相连。
拨动拨档开关,可以观察发光二极管与输入状态的对应关系同真值表中所描述的情况是一致的。
七、实验结果八、思考题在输入端加入使能端后应如何设计?附:用硬件描述语言完成译码器的设计::LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY T2 ISPORT(A: IN STD_LOGIC_VECTOR(2 DOWNTO 0);Y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END T2;ARCHITECTURE A OF T2 ISBEGINWITH A SELECTY <= "00000001" WHEN "000","00000010" WHEN "001","00000100" WHEN "010","00001000" WHEN "011","00010000" WHEN "100","00100000" WHEN "101","01000000" WHEN "110","10000000" WHEN OTHERS;END A;实验二组合电路设计一、实验目的1、掌握组合逻辑电路的设计方法。
(完整版)EDALED动态扫描控制器的设计

《EDA技术》课程实验报告学生姓名:所在班级:指导教师:记分及评价:一、实验名称实验7:LED动态扫描控制器的设计二、任务及要求【基本部分】1、新建原理图文件,调用以前的电子钟模块、LED显示译码器模块及其他计数器模块、译码器模块等,实现电子钟时、分、秒的结果在实验箱数码管上以动态扫描的方式显示出来。
2、设计完成后生成一个元件,以供更高层次的设计调用。
3、实验箱上进行验证。
【提示】数码管为共阴极,低电平选中,电子钟等模块的使能、清零信号等直接接电源或地(正常工作)。
位选信位段数据,接个数码管公组4位二进制数据三、实验程序PIN_T4VCCclk2INPUT PIN_U1VCCclk1INPUT P IN_U14VCCrco1INPUT P IN_U15VCCrco2INPUT P IN_T19VCCenINPUT P IN_T20VCCclrINPUT P IN_M21P IN_M22P IN_M19P IN_M20P IN_M16P IN_N21P IN_N22out[6..0]OUTPUT P IN_J19P IN_J18P IN_J20P IN_K21P IN_K22P IN_K19P IN_K18P IN_L21y y [7..0]OUTPUTs[2..0]a[3..0]b[3..0]c[3..0]d[3..0]e[3..0]f [3..0]y [3..0]sixselectoneinst5s[2..0]y [7..0]seqsinst4clken clr coqh[2..0]sixinst8X[3..0]Y[6..0]sel[7..0]ledinst1rco1rco2e cr ckmg[3..0]tg[3..0]xg[3..0]ms[3..0]ts[3..0]xs[3..0]clockinst6mg[3..0]y [3..0]y [3..0]xs[3..0]xg[3..0]ts[3..0]tg[3..0]ms[3..0]sel[7..0]qh[2..0]mg[3..0]tg[3..0]xg[3..0]ms[3..0]ts[3..0]xs[3..0]coqh[2..0]qh[2..0]图7-1 LED 动态扫描控制器原理图四、仿真及结果分析图7-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)_数字时钟程序模块(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实验报告:基于VHDL语言的交通灯控制系统设计与实现

图为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;
EDA实验实验报告2

EDA实验实验报告学号:姓名:彭文勇院系:微电子技术系专业:嵌入式教师:李海2010年12月实验一一位全加器的设计实验地点:第二实验楼405同组人员:孙腾坤一、实验目的通过次实验我们逐步了解、熟悉和掌握FPGA开发软件Quartus II 的使用及Verilog HDL的编程方法。
学习用Verilog HDL语言以不同的方式来描述1位全加器及电路的设计仿真和硬件测试。
二、实验原理和内容本实验的内容是建立一个1位全加器。
具体内容包括:(1)使用Quartus II建立工程、编写程序;(2)进行波形仿真验证;(3)进行硬件测试。
通过SmartSOPC试验箱上的按键KEY1~KEY3输入信号,分别为A、B和cin,并通过LED1~LED3指示相应的状态。
输出Sum和cout通过LED7和LED8指示(灯亮表示输入或输出为“1”)。
三、实验步骤(1)启动Quartus II建立一个空白工程,然后命名为full_add。
(2)新建Verilog HDL源文件full_add.v,输入程序代码并保存,然后进行综合编译。
若在编译过程中发现错误,则找出并更正错误,直至编译成功为止,并生成图形符号文件full_add.bdf。
(3)波形仿真验证。
(4)新建图形设计文件命名为full_add.bdf并保存。
微电子技术系(5)选择目标器件并对相应的引脚进行锁定,我们选Altera公司Cyclone系列的EP1C6Q240C8芯片,引脚锁定方法参考实验书后面的附录A引脚分配。
将为使用的引脚设置为三态输入(一定要设置否则可能损坏芯片)。
(6)将full_add.bdf设置为顶层实体。
对该工程文件进行全程便已处理。
若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
(7)将跳线短接帽调解到JP6的KEY1~KEY3、LED0~LED2、LED6和LED7,使KEY1~KEY3、LED1~LED3、LED7、LED8与芯片对应的引脚相连。
键盘、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技术实验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;
按键功能实验报告总结(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灯亮度保持不变。
按键控制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);}
}
下载完程序我们本次的小灯配合按键的实验就完成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的
手机当按下任一按键时背光灯就会亮起,这就是典型应用了,下面一个实验就是一个最简单的生活中应用实例------抢答器。
南昌大学EDA实验报告完整版

EDA实验报告姓名:曾维鋆学号:6102213863老师:杨鼎成班级:通信工程132班目录实验一半加器及全加器的设计 (3)实验二模可变计数器的设计 (6)实验三序列信号检测器的设计 (11)实验四交通灯控制器设计 (15)实验五多功能数字钟设计 (22)实验六出租车计费器的设计 (34)实验七16*16 点阵显示实验 (40)南昌大学实验报告学生姓名:曾维鋆学号:61002213863 专业班级:通信132班实验类型:□验证□综合█设计□创新实验日期:2015.10.19 实验成绩:实验一半加器及全加器的设计(一)实验目的1、熟悉实验装置和QuartusⅡ软件的使用;2、熟悉和掌握EDA设计流程;3、学习简单组合、时序电路的EDA设计;4、熟悉例化语句的应用。
(二)实验内容设计一个一位全加器。
先设计一个半加器h_adder.v作为预存文件。
然后设计顶层文件对h_adder.v文件进行调用,实现全加器的功能。
(三)实验原理由3个逻辑模块组成,其中两个为半加器,一个是或门。
真值表(四)实验步骤1.建立工作库文件夹,输入半加器和全加器的Verilog HDL代码并分别存盘。
a.半加器module h_adder(A,B,SO,CO);input A,B;3output SO,CO;assign SO=A^B;assign CO=A&B;endmoduleb.全加器module f_adder(ain,bin,cin,cout,sum);output cout,sum;input ain,bin,cin;wire net1,net2,net3;h_adder U1(ain,bin,net1,net2);h_adder U2(.A(net1),.SO(sum),.B(cin),.CO(net3));or U3(cout,net2,net3);endmodule2.选目标器件CycloneII中的EP2C35F672C8并编译。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
昆明理工大学信息工程与自动化学院学生实验报告
( 201 —201 学年第学期)
课程名称:EDA技术开课实验室:年月日
一、实验目的
1、熟悉FPGA开发完整流程
2、熟悉管脚分配,熟悉编程
二、实验设备
1、带有quartusII 软件的PC 机一台。
2、 FPGA 实验箱以及电源线下载线。
三、实验要求
实现8 个SW 按键控制8 个led 灯亮灭。
四、实验原理
1、按键控制led 灯原理:
本实验是通过按键的电平控制led灯。
其示意图如图 2.1。
图 2.1按键控制led 示意图
8 个SW 按键控制相对的8 个led 灯,当SW1 在上方,其余按键在下方时,此时SW1 为高电平,这时SW1 对应的led 被点亮。
2、模块符号:
图 2.2为按键控制led模块符号。
图 2.2 按键控制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为后缀名,这个文件不会编译自动生成,需针对相应的芯片编写。
本实验不需自己编写此文件(已针对实验系统编写好setup_35.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界面,看下图2.3
图2.3 Tools菜单栏
➢选择菜单tools,点击,在下拉菜单中选择tcl scripts,出现下图 2.4。
图 2.4 tcl scripts
➢选中图中蓝色部分,然后run,分配成功后,会出现下图 2.5。
图 2.5 引脚分配成功
➢分配成功后,如果是原理图输入的模块中clk 端会出现这样的标志,如果没分配成功,回去查看.tcl 文件是否有错。
3、配置:
➢编译前要进行一项设置,如下图 2.6。
图 2.6 配置目标芯片属性
➢在在图中蓝色部分右键,选择device,弹出界面如下图 2.7。
图 2.7 配置目标芯片属性
➢点击图标,弹出界面如下图 2.8。
图 2.8 配置目标芯片属性
➢点击图标,弹出界面如下图 2.9。
图 2.9 配置目标芯片属性
➢这里选择EPCS16,这是用来固化程序时用的,我们下载程序分两种方式,一种是下载到SDRAM 中,掉电程序丢失;另一种下载到flash 中,掉电不丢失。
这项设置就是为了使程序正确下载到flash 中。
设置好后确定。
4、编译
Run 后就可以编译了,不成功检查程序或引脚分配。
5、下载
1) 下载(掉电丢失):
➢本实验不需要波形图仿真,编译成功后就开始在开发板上运行,我们先用掉电丢
失的下载方式。
首先给实验板供上电,接上jtag接口。
然后点击图标,打开下载器,把我们的程序下载到开发板上,如下图 2.10。
图 2.10 下载界面
➢下载器驱动装好后,如果上边第二个红框是no hardware,则点击hardware setup 添加硬件,把生成的sof文件导入进来后,开始点start,下载成功后,如下图2.11。
图 2.11 jtag 模式下载完成
➢下载成功后,就在开发板上看到我们程序效果了,实现了跑马灯功能。
2) 下载(掉电不丢失):
➢接下来我们试着用掉电不丢失的下载方式,这里这样设置,如下图 2.12。
➢导入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。