16位抢答器
- 格式:doc
- 大小:107.00 KB
- 文档页数:8
目录第一章绪论 (1)1.1单片机的应用技术 (1)1.2 抢答器的意义 (1)第二章单片机的选择及其任务要求 (2)2.1 单片机的选择 (2)2.1.1 89C52的主要性能: (2)2.1.2 STC89C52型号功能介绍: (3)2.2 设计任务及目的 (5)2.2.1 设计任务 (5)2.2.2 设计目的 (5)第三章硬件电路的设计 (6)3.1 总体设计 (6)3.2各功能模块 (6)3.2.1 选手按键输入信号及主持人开始和复位模块 (6)3.2.2点阵显示模块 (8)3.2.3液晶屏显示模块 (8)3.2.4 蜂鸣器模块 (9)第四章软件的设计 (9)4.1 抢答流程图 (9)4.2 主程序的设计 (11)展望 (28)参考文献: (28)第一章绪论1.1单片机的应用技术单片机由硬件系统与软件系统组成。
硬件系统是指构成微机系统的实体与装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
其中运算器和控制器一般做在一个集成芯片上,统称中央处理单元(Central Processing Unit),简称CPU,是微机的核心部件。
CPU配上存放程序和数据的存储器、输入/输出(Input/Output,简称I/O)接口电路以及外部设备即构成单片机的硬件系统。
软件系统是微机系统所使用的各种程序的总称,人们通过它对微机进行控制并与微机系统进行信息交换,使微机按照人的意图完成预定的任务。
软件系统与硬件系统共同构成完整的单片微型计算机系统,两者相辅相成,缺一不可。
1.2 抢答器的意义本系统采用单片机作为整个控制核心。
该系统通过开关电路16个按键输入抢答信号;利用一个液晶屏来完成显示功能;用按键来让选手进行抢答,在液晶屏上显示哪一组先答题的,从而实现整个抢答过程。
在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。
武汉轻工大学电子技术课程设计设计题目:十六路智力竞赛抢答器指导教师:卢老师专业班级:电气信息类1108姓名:郭超学号:110408809时间:2013.06.17——2013.06.27目录一 16路抢答器的设计方案1.1 设计要求1.2 设计原理1.3 工作过程二抢答器的系统电路设计2.1 抢答电路设计2.2 计时模块设计2.3 报警电路三总结一 16路抢答的设计要求及设计方案1.1设计要求设计基本要求:(1)设计一个竞赛抢答器,可同时供十六名选手或代表队参加比赛;(2)给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始;(3)抢答器具有数据锁存和显示功能,当某一路抢答成功时,放光二极管立即点亮,并在数码管上显示该路的号数,直到主持人按复位开关为止,其他人再抢答无效;设计附加功能:(1)抢答器具有定时抢答的功能,且一次抢答时间可以由主持人设定(如60s)。
当节目按下“开始”按钮后,要求定时器立即倒计时,并在显示器上显示,同时“滴”的声响(2)参赛选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止;(3)如果定时器的时间已到,却没有选手回答,则本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时抢答,时间显示器上显示001.2 设计原理设计思路(抢答器总体框图):1.3. 多路抢答器的工作过程接通电源,当节目主持人按下“复位”按钮时可以设置抢答时间(如60s),此时抢答器处于禁止工作状态,显示选手编号的显示器灭灯,当主持人宣布抢答题目并宣布抢答开始,同时主持人按下“开始抢答”按钮,倒计时开始显示延时时间,报警电路扬声器给出提示音响,抢答器处于工作延时状态,当规定的抢答时间到,却没有选手抢答时,系统给出报警提示,并封锁优先编码器,禁止选手超时抢答。
当选手在规定的时间内按下抢答按钮时,抢答器完成如下工作:①优先编码器立即分辨出抢答者编号,然后译码及显示电路显示选手编号;②报警电路扬声器发出声响,提醒节目主持人;③由锁存器经延时电路发出控制信号,对显示选手编号的显示器进行锁存,避免其它选手再次抢答;④可预置计数器停止计数,显示剩余时间,并保持到主持人将系统清零为止,当选手将问题回答完毕,主持人操作控制开关,使系统处于禁止工作状态,以便进行下一轮的抢答。
设计一个16路智力抢答器要求:具有定时功能,有倒计时10秒报警,有防作弊处理。
其电路图如下图所示:附带程序如下:程序如下:Qdqi.c#include<reg52.h>#include"keyboard.h"#include"1602xs.h"#include"fmq.h" //蜂鸣器#include"delay.h"#define unint unsigned int#define unchar unsigned charsbitks=P1^0;sbitkz=P1^1;unint Flag=1,k;unint a=10,b=0,c=60,d=0;unchar key board;/************************************************定时器初始化子程序*************************************************/void Init_Timer(){TMOD |= 0x11; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0=(65535-50000)/256; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出TL0=(65535-50000)%256;TH1=(65535-50000)/256; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出TL1=(65535-50000)%256;EA=1; //总中断打开ET0=1;ET1=1; //定时器中断打开// TR0=1; //定时器开关打开}/******************************************************************//* 主函数*//******************************************************************/void main(){init();Init_Timer();while(1){keyboard=getkey();if(ks) //开始抢题之前防抢答{if(key scan()==0xff){writechar(0x80+2,"waiting!!!");}//防作弊if(key scan()!=0xff){k=getkey();display2(0x80+0x40+4,k);fmq1();while(1);}}if(!ks) //开始抢题{TR0=1; //定时器中断打开// Flag=0;write_com(0x01);writechar(0x80+2,"Countdown:");while(key scan()==0xff) //没有人抢答{display2(0x80+0x40+5,a);if(a==0){TR0=0;display2(0x80+0x40+5,a);fmq();while(1);}}while(key scan()!=0xff){TR1=1;k=getkey();Flag=0;write_com(0x01);writechar(0x80+2,"Num: time:");while(!Flag){display2(0x80+0x40+4,k);display2(0x80+0x40+12,c);if(c==0){fmq1();while(1);}if(!kz){TR1=0;}}}// jianpan();}}}void Timer0_isr(void) interrupt 1 using 1{TH0=(65535-50000)/256; //重新赋值TL0=(65535-50000)%256;b++;if(b==20){b=0;a--;}}void Timer1_isr(void) interrupt 3 using 1{TH1=(65535-50000)/256; //重新赋值TL1=(65535-50000)%256;d++;if(d==20){d=0;c--;}}Keyboard.c/*-----------------------------------------------矩阵键盘实验程序通过反转法循环扫描矩阵键盘------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include"keyboard.h"#include"delay.h"unsigned char const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-Fuchargetkey(){ucharkey,k;key=key scan(); //调用键盘扫描,switch(key){case 0xee:k=0;break;//0按下相应的键显示相对应的码值case 0xde:k=1;break;//1 按下相应的键显示相对应的码值case 0xbe:k=2;break;//2case 0x7e:k=3;break;//3case 0xed:k=4;break;//4case 0xdd:k=5;break;//5case 0xbd:k=6;break;//6case 0x7d:k=7;break;//7case 0xeb:k=8;break;//8case 0xdb:k=9;break;//9case 0xbb:k=10;break;//acase 0x7b:k=11;break;//bcase 0xe7:k=12;break;//ccase 0xd7:k=13;break;//dcase 0xb7:k=14;break;//ecase 0x77:k=15;break;//fcase 0xff:k=16;break;//g}return k;}/*------------------------------------------------键盘扫描程序------------------------------------------------*/ucharkeyscan(void) //键盘扫描函数,使用行列反转扫描法{ucharcord_h,cord_l;//行列值中间变量P3=0x0f; //行线输出全为0cord_h=P3&0x0f; //读入列线值if(cord_h!=0x0f) //先检测有无按键按下{delay(100); //去抖if(cord_h!=0x0f){cord_h=P3&0x0f; //读入列线值P3=cord_h|0xf0; //输出当前列线值cord_l=P3&0xf0; //读入行线值return(cord_h+cord_l);//键盘最后组合码值}}return(0xff); //返回该值}1602xs.c#include"reg52.h"#include"delay.h"#include"1602xs.h"sbitlcden=P2^6;sbitlcdrs=P2^4;sbitlcdwr=P2^5;void write_com(uchar com) //写指令{lcdwr=0;lcdrs=0;P0=com;delay_mS(1);lcden=1;delay_mS(1);lcden=0;}void write_data(uchar date) //写数据{lcdrs=1;P0=date;delay_mS(1);lcden=1;delay_mS(1);lcden=0;}/********************************0x80+add 第二行地址0~150x80+0x40+add 第一行地址0~15数字:0x30+字母:需查表*********************************/void init() //初始化{lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01); //清屏指令}/*writechar("Please input ps");*/void writechar(ucharadd,uchar *s) //写入一个字符串{write_com(add);while(*s){write_data(*s);delay_mS(1);*s++;}}void writechar1(ucharadd,uchar a1,uchar a2,uchar a3,uchar a4) //写入一个字符串{write_com(add);write_data(a1);write_data(a2);write_data(a3);write_data(a4);}void display1(ucharadd,uint date) //显示字符及位置{//ucharbai,shi,ge;//bai=date/100;//shi=date%100/10;//ge=date%10;write_com(add);write_data(0x30+date);//write_data(0x30+shi);//write_data(0x30+ge);write_data(0x6d);write_data(0x41);}void display2(ucharadd,uchar date) //显示字符及位置{ucharshi,ge;shi=date/10;ge=date%10;write_com(add);// write_data(date);write_data(0x30+shi);write_data(0x30+ge);//write_data(0x25);}Delay.c#include"delay.h"void delay(unsigned intcnt){while(--cnt);}/******1mS y anshi*******/void delay_mS(unsigned int z){uintx,y;for(x=z;x>0;x--)for(y=125;y>0;y--);}Fmq.c//在实际电路中我没有按蜂鸣器#include<reg52.h>#include"fmq.h"#include"delay.h"/*************端口定义*********/sbit SPK=P1^2; //定义喇叭端口//unsigned int k1=1,k2=1;void fmq(){unsigned inti;for(i=0;i<150;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短{delay(600); //参数决定发声的频率,估算值,可以自行更改参数并SPK=!SPK;}// SPK=1; //喇叭停止工作,间歇的时间,可更改// delay(50000);}void fmq1(){unsigned inti,j;for(j=0;j<5;j++){for(i=0;i<200;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短{delay(300); //参数决定发声的频率,估算值,可以自行更改参数并SPK=!SPK;}SPK=1; //喇叭停止工作,间歇的时间,可更改delay(90000);}}。
目录1引言 (1)2 功能概述 (1)2.1抢答器工作原理 (1)2.2设计目的与要求 (1)2.3设计任务 (1)2.4运行环境及工具 (2)3 系统硬件设计 (2)3.1芯片的选择 ................................................................................. 错误!未定义书签。
3.2原理及电路总框图 (2)3.3晶振复位及开始抢答电路 (7)3.4选手抢答键 (7)3.5显示与显示驱动电路 (4)3.6蜂鸣器音频输出电路 (4)4系统软件设计 (5)4.1系统主程序设计 (5)4.2系统流程图 (6)4.3程序清单 (7)5系统仿真结果 (14)5.1开始抢答仿真 (14)5.2抢答犯规仿真 (15)5.3抢答成功仿真 (16)6课程设计的总结与体会 (17)参考文献资料 (17)1 引言当今的社会竞争日益激烈,选拔人才,评选优胜,知识竞赛之类的活动愈加频繁,那么也就必然离不开抢答器。
而现在的抢答器有着数字化,智能化的方向发展,这就必然提高了抢答器的成本。
鉴于现在小规模的知识竞赛越来越多,操作简单,经济实用的小型抢答器必将大有市场。
本抢答器与其他抢答器电路相比较有分辨时间极短、结构清晰,成本低、制作方便等优点,并且还有防作弊功能。
因此,我们制作了这款简易多路(十六路)数字抢答器摒弃了成本高、体积大、操作复杂。
我们采用了数字显示器直接指示,自动锁存显示结果,因而本抢答器具有显示直观,操作简单的特点。
而且在显示时抢答器会发出蜂鸣声使效果更为生动。
工厂、学校和电视台等单位常举办各种智力竞赛, 抢答记分器是必要设备。
2 功能概述2.1抢答器工作原理抢答器的工作原理是采用单片机最小系统,用查询式键盘进行抢答。
采用动态显示组号。
主持人按下开始抢答键才可以抢答。
主持人没有按下开始抢答按纽(P3.2),有人抢答则抢答违规,报警并显示组号,主持人按下开始抢答开关重新抢答。
16抢答器原理16抢答器,也被称为16路抢答器,是一种电子设备,用于在多人参与的抢答环节中准确快速地判断参与者按下按钮的先后顺序。
它常被广泛应用于各类竞赛、比赛、游戏等需要抢答的场景。
16抢答器的原理是基于数字电路和微处理器技术。
整个系统由按键模块、显示模块、控制模块和电源模块四部分构成。
首先,按键模块是16抢答器的输入设备,通常由16个按键组成,分别对应于16位参与者。
每个按键都连接到一个独立的信号线,当参与者按下按键时,相应的信号线会产生一个高电平信号。
接下来,这些高电平信号进入控制模块,通过一系列的解码器进行解码。
解码器根据输入信号的不同激活相应的输出信号。
这样,控制模块就能准确地判断到每个参与者按下按钮的先后顺序。
然后,控制模块将判断结果传送给显示模块进行显示。
显示模块通常由LED数码管组成,每个数码管对应一个参与者的编号。
根据控制模块的判断结果,相应的数码管会显示一个亮灯提示,表示该参与者的抢答顺序。
最后,电源模块为整个16抢答器提供电源供应。
这样,整个抢答器就能稳定运行,准确地判断每个参与者的抢答顺序,并通过显示模块清晰地展示出来。
16抢答器的原理可以更详细地解释如下:当参与者按下按钮,相应的按键会闭合,使得对应的信号线产生一个高电平信号。
这个高电平信号通过连接到解码器的输入端,经过解码器进行解码处理。
解码器通常采用优先级编码的方式,即按照按键的先后顺序进行优先级排序。
解码器将优先级最高的输入信号转换为对应的输出信号。
解码器的输出信号会被传送到显示模块进行显示。
显示模块通常由诸多灯泡或LED数码管组成,每个灯泡或数码管对应一个参与者的编号。
控制模块将判断结果传送给显示模块后,相应的灯泡或数码管会显示一个亮灯提示。
这样,参与者可以清楚地看到自己的抢答顺序。
总结起来,16抢答器通过按键模块接收参与者的输入,控制模块解码和判断按键的先后顺序,显示模块将判断结果进行展示,完成了对抢答顺序的准确判断和显示。
十六路智能抢答器的研究作者:徐金秀等来源:《科技经济市场》2015年第11期摘要:在各种知识竞赛的过程中,尤其是抢答环节,为知道哪位选手最先抢答,必须要设计一个系统来判断谁最先按下了抢答键。
为此,目前市场上也相应出现了四路和八路的抢答器,但受单片机接口及其固有特性的影响,超过八路的抢答器几乎没有,大大限制了参赛选手的人数。
本文设计了一款十六路智能抢答器,该抢答器电路连接简单,工作性能可靠,抗干扰能力与使用功能均优于传统抢答器,并能够解决目前市场上最多只有八路抢答器的问题,提高了参赛选手的竞争力。
关键词:抢答器;单片机;智能0 引言抢答器是一种比较实用的工具,广泛应用于各种知识与智力竞赛场合。
但是如今所使用的抢答器要么电路非常复杂,制作困难,要么可靠性低,功能很难实现;有的采用专用的集成芯片,但是购买困难,而且也很难实现十六路控制。
为了适应多路参赛选手抢答活动的需求,本文研究了一款十六路智能抢答器,这种十六路抢答器具有电路简单,元件普通,易于购买等优点,很好地解决了制作者制作困难和难于购买的问题。
本系统除了具备传统的抢答选手灯亮的电路,还增加了选手号的数字显示电路,采用STC89C52单片机为核心,实现更多参赛选手参加比赛的需求,提高了参赛选手的竞争力。
1 系统概述及工作原理本系统采用51系列单片机及一些外围芯片完成抢答功能,同时利用51系列单片机的定时器/计数器,实现定时和计数的功能,将软硬件有效的结合在一起,实现抢答器能够精准的完成计时,同时采用数码管正确显示时间与选手的号码,能正确的点亮选手的显示灯。
用电子按钮做键盘输出,电子蜂鸣器提示发声。
本系统完成的主要功能为:在抢答中,只有主持人控制开始后进行抢答方为有效,如果在开始抢答之前抢答均为无效;抢答的限定时间以及回答问题时间均能在1到60秒之间随意设定;能够显示是哪位选手有效的抢答,正确按键后会发出声音提示;抢答的时间以及回答的问题时间倒记时均可显示,时间完后抢答器自动复位。
16路竞赛抢答器设计用Protel对16路竞赛枪答器进行设计, 16路竞赛抢答器主要由锁存器、优先编码器、同步可逆计数器、加法器、比较器、555定时器、数码管等主要元件构成。
结果表明,该方法效果真实、准确,设计出的16路竞赛抢答器具有实用性强,操作简单,成本低廉的特点。
竞赛抢答器系统是工厂、学校和电视台等单位举办各种智力竞赛等娱乐活动中经常使用的重要基础设备之一。
目前设计抢答器的方法很多,采用EDA可以更加快速、灵活地设计出符合各种要求的抢答器。
其中,16路智力竞赛抢答器设计方案中有些显示器是从0~15显示选手的编号,这不符合实际竞赛使用时对选手从1~16进行编号的习惯,不利于实际推广使用。
以文献为基础,对其核心电路进行了改进,并基于Protel软件平台设计开发了16路竞赛抢答器系统,使得显示器上能从1~16正确显示选手的编号。
此外,还设计了抢答倒计时最后5 s报警提示电路和计分器,计分器用于各参赛选手的加分和减分。
这种设计思路清晰,电路功能齐全,可满足抢答器的实际使用要求。
1.Protel简介Protel是Altium公司在80年代末推出的EDA软件,在电子行业的CAD软件中,它当之无愧地排在众多EDA软件的前面,是电子设计者的首选软件,它较早就在国内开始使用,在国内的普及率也最高,有些高校的电子专业还专门开设了课程来学习它,几乎所有的电子公司都要用到它,许多大公司在招聘电子设计人才时在其条件栏上常会写着要求会使用Protel。
2 总体设计思路2.1 16路抢答器的功能要求(1)同时供16名选手参加比赛。
选手的编号为1~16,各用一个抢答按钮,按钮的编号分别用16个按钮S1~S16表示,与选手的编号相对应。
(2)给主持人设置一个控制开关,用来控制系统的清零和抢答的开始。
(3)抢答器具有锁存与显示功能。
在主持人将系统复位发出抢答指令后,若参赛者按抢答按钮,则组别显示电路显示出抢答者的组别,同时蜂鸣器发出“嘀”的报警音响。
五、设计代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity answer isport(KEY_IN: in std_logic_vector(16 downto 1);CLEAR,SCANCLK,CLK1S: in std_logic;LED_OUT: out std_logic_vector(6 downto 0);SCAN_OUT: out std_logic_vector(1 downto 0);SOUND_OUT: out std_logic );end answer;architecture rtl of answer issignal KEY_CODE: integer range 0 to 16;signal KEY_CODE_REG: integer range 0 to 16;signal KEY_EN: std_logic;signal NUM1: integer range 0 to 9;signal NUM2: integer range 0 to 9;signal KEY_EN1,KEY_EN2: std_logic;signal KEY_IN1,KEY_IN2,KEY_INS: std_logic_vector(16 downto 1);signal HEX: integer range 0 to 9;signal TIME_CNT: std_logic_vector(3 downto 0);beginprocess(KEY_EN,KEY_IN,SCANCLK,CLEAR)beginif CLEAR = '0' thenKEY_CODE_REG<=0;elsif SCANCLK'event and SCANCLK = '1' thenif KEY_CODE_REG = 0 thenKEY_CODE_REG<=KEY_CODE;end if;end if;end process;process(SCANCLK,CLEAR,KEY_IN)beginif SCANCLK'event and SCANCLK = '1' thenKEY_IN2 <= KEY_IN1;KEY_IN1 <= KEY_IN;end if;KEY_INS<=not KEY_IN2 or KEY_IN1;KEY_CODE<=0 when KEY_EN = '0' else1 when KEY_INS(1)='0' else2 when KEY_INS(2)='0' else3 when KEY_INS(3)='0' else4 when KEY_INS(4)='0' else5 when KEY_INS(5)='0' else6 when KEY_INS(6)='0' else7 when KEY_INS(7)='0' else8 when KEY_INS(8)='0' else9 when KEY_INS(9)='0' else10 when KEY_INS(10)='0' else11 when KEY_INS(11)='0' else12 when KEY_INS(12)='0' else13 when KEY_INS(13)='0' else14 when KEY_INS(14)='0' else15 when KEY_INS(15)='0' else16when KEY_INS(16)='0' else0 ;process(CLK1S,CLEAR,KEY_EN)beginif CLEAR = '0' thenTIME_CNT <= "0000";elsif CLK1S'event and CLK1S = '1' thenif KEY_EN='1' thenTIME_CNT<=TIME_CNT + 1;end if;end if;end process;KEY_EN<='1' when KEY_CODE_REG = 0 and TIME_CNT<=9 else '0';process(CLK1S,CLEAR,KEY_EN)beginif CLEAR = '0' thenKEY_EN1 <= '1';KEY_EN2 <= '1';elsif CLK1S'event and CLK1S = '1' thenKEY_EN2 <= KEY_EN1;KEY_EN1 <= KEY_EN;end if;SOUND_OUT<=SCANCLK when KEY_EN1='0' and KEY_EN2='1' else '0';with HEX selectLED_OUT<="0000110" when 1,"1011011" when 2,"1001111" when 3,"1100110" when 4,"1101101" when 5,"1111101" when 6,"0000111" when 7,"1111111" when 8,"1101111" when 9,"0111111" when OTHERS;HEX<= NUM1 when SCANCLK='0' else NUM2;NUM2<=1 when KEY_CODE_REG>9 ELSE 0;NUM1<=KEY_CODE_REG when KEY_CODE_REG<=9 ELSE KEY_CODE_REG-10; with SCANCLK selectSCAN_OUT <= "01" when '0',"10" when others;end rtl;元件设计:仿真代码:LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY answer_tb ISEND answer_tb;ARCHITECTURE behavior OF answer_tb ISCOMPONENT answerPORT(KEY_IN : IN std_logic_vector(16 downto 1);CLEAR : IN std_logic;SCANCLK : IN std_logic;CLK1S : IN std_logic;LED_OUT : OUT std_logic_vector(6 downto 0);SCAN_OUT: out std_logic_vector(1 downto 0);SOUND_OUT : OUT std_logic);END COMPONENT;--Inputssignal KEY_IN : std_logic_vector(16 downto 1) := (others => '0');signal CLEAR : std_logic := '0';signal SCANCLK : std_logic := '0';signal CLK1S : std_logic := '0';--Outputssignal LED_OUT : std_logic_vector(6 downto 0);signal SCAN_OUT: std_logic_vector(1 downto 0);signal SOUND_OUT : std_logic;BEGIN-- Instantiate the Unit Under Test (UUT)uut: answer PORT MAP (KEY_IN => KEY_IN,CLEAR => CLEAR,SCANCLK => SCANCLK,CLK1S => CLK1S,LED_OUT => LED_OUT,SCAN_OUT => SCAN_OUT,SOUND_OUT => SOUND_OUT);SCANCLK<=not SCANCLK after 5 ns;CLK1S<=not CLK1S after 10 ns;CLEAR<='1' after 50 ns;KEY_IN<="1111111111111101"after 110 ns,"1111111111011111"after 210 ns,"0111111111111111"after 310 ns;END;仿真波形:Ucf文件:NET "ledout[0]" LOC = B4;NET "ledout[1]" LOC = A4;NET "ledout[2]" LOC = D5;NET "ledout[3]" LOC = C5;NET "ledout[4]" LOC = A6;NET "ledout[5]" LOC = B6;NET "ledout[6]" LOC = E7;NET "scan_out[0]" LOC = E8;NET "scan_out[1]" LOC = F7;NET "scanclk" LOC = D9;NET "clk1s" LOC = E10;NET "clear" LOC = D7;NET "key_in(1)" LOC = D14;NET "key_in(2)" LOC = A16;NET "key_in(3)" LOC = B16;NET "key_in(4)" LOC = E13;NET "key_in(5)" LOC = C4;NET "key_in(6)" LOC = B11;NET "key_in(7)" LOC =A11;NET "key_in(8)" LOC = A8;NET "key_in(9)" LOC = G9;NET "key_in(10)" LOC = D12;NET "key_in(11)" LOC = C12;NET "key_in(12)" LOC = A15;NET "key_in(13)" LOC = B15;NET "key_in(14)" LOC = C3;NET "key_in(15)" LOC = C15;NET "key_in(16)" LOC = C7;NET "sound_out" LOC = B14;NET "scanclk" CLOCK_DEDICA TED_ROUTE = FALSE;NET "clk1s" CLOCK_DEDICA TED_ROUTE = FALSE;表1:可编程器件与拨码开关和数码管段码的连接情况VHDL中端口名称EPGA引脚号拨码开关led_out(0) B4 SAled_out(1) A4 SBled_out(2) D5 SCled_out(3) C5 SDled_out(4) A6 SEled_out(5) B6 SFled_out(6) E7 SGscan_out(0) E8 位选-个位scan_out(1) F7 位选-十位scanclk D9 J102-9 ckl1s E10 J104-1 clear D7 SW_d key_in(1) D14 SW1key_in(2) A16 SW2key_in(3) B16 SW3key_in(4) E13 SW4key_in(5) C4 SW5key_in(6) B11 SW6key_in(7) A11 SW7key_in(8) A8 SW8key_in(9) G9 SW9key_in(10) D12 SW10 key_in(11) C12 SW11 key_in(12) A15 SW12 key_in(13) B15 SW13 key_in(14) C3 SW14 key_in(15) C15 SW15 key_in(16) C7 Sw16 sound_out B14 蜂鸣器。