篮球记分牌verilog设计

合集下载

篮球计分器FPGA附程序

篮球计分器FPGA附程序

单片机接口实验篮球计分器的设计**: ***班级: 14级12班学号: ********** **: ***专业: 控制科学与工程成绩评定学生:苗茂宇学号:**********学生:苗茂宇学号:1408202007 目录摘要 (1)Abstract (1)1. FPGA及系统设计概述 (2)1.1. EDA简介 (2)1.1.1. EDA定义 (2)1.1.2. EDA发展概述 (2)1.1.3. HDL概述 (2)1.1.4. 总结 (3)1.2. FPGA简介 (3)1.2.1. FPGA概述 (3)1.2.2. FPGA原理 (4)1.3. LCD1602 (4)1.4. 产品现状及发展 (5)1.5. 总体设计要求 (5)1.5.1. 设计流程 (5)1.5.2. 设计要求 (5)1.6. 本章小结 (6)2. 实验方案设计 (6)2.1. 分频模块 (6)2.2. 计时模块 (7)2.3. 24秒计时模块 (9)2.4. 计分模块 (10)2.5. lcd驱动模块 (11)2.6. 本章小结 (17)3. 实验结论 (17)4. 结束语 (18)参考文献 (19)附录 1 (20)摘要FPGA(现场可编程逻辑器件)以其体积小、功耗低、稳定性高等优点被广泛应用于各类电子产品的设计中。

FPGA是基于硬件可编程的器件,设计者需要掌握硬件描述语言,Verilog HDL就是一种硬件描述语言。

Verilog HDL语言是在C 语言的基础上发展而来的,语法结构上与C语言有很多相似之处,继承了C语言的语法结构,但是其与C语言有着本质上的区别。

本设计是基于FPGA的篮球计时计分系统的设计,结合篮球比赛的实际过程,对系统进行了模块化设计,最终组合调试。

硬件实验表明本系统计时计分准确,实时性好,能够很好的反应比赛进度,此次设计达到了设计预期。

关键词:FPGA;Verilog HDL;计时计分;模块化AbstractFPGA (field programmable logic device) with its small size, low power consumption, high stability has been widely used in various types of electronic products design. FPGA is a programmable device based on hardware, designers need to master the hardware description language, Verilog HDL is a hardware description language. Verilog HDL language is developed on the basis of C language, grammar structure and C language have many similarities, inherited the grammar structure of C language and C language, but there's a difference between. This design is the designof FPGA basketball timing and scoring system based on the actual process, combined with the game of basketball, the system of modular design, the final assembly debugging. Hardware experiments show that the system timing accuracy, goodreal-time performance, can very good response competition schedule, the design achieves the expected design.Keywords: FPGA;Verilog HDL ; timing and scoring; modular1.FPGA及系统设计概述1.1.E DA简介1.1.1.EDA定义EDA是电子设计自动化(Electronic Design Automation)的缩写。

篮球计分器的课程设计fpga

篮球计分器的课程设计fpga

篮球计分器的课程设计fpga一、教学目标本课程的目标是让学生了解和掌握篮球计分器的设计与实现,通过学习FPGA 的相关知识,培养学生运用数字电路设计实际应用系统的能力。

具体的教学目标包括:1.知识目标:使学生了解FPGA的基本结构和工作原理,掌握VHDL或Verilog硬件描述语言,了解数字电路设计的基本方法。

2.技能目标:培养学生能够运用FPGA设计简单的数字电路系统,如篮球计分器,并能进行相关的编程和调试。

3.情感态度价值观目标:培养学生对新技术的敏感性和好奇心,增强学生运用科学知识解决实际问题的能力,提高学生团队合作和沟通的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.FPGA基础知识:介绍FPGA的基本结构、工作原理和编程方法。

2.数字电路设计:介绍数字电路的基本设计方法,包括组合逻辑电路、时序逻辑电路等。

3.硬件描述语言:介绍VHDL和Verilog硬件描述语言的基本语法和使用方法。

4.篮球计分器设计:通过设计一个简单的篮球计分器,使学生能够综合运用所学知识解决实际问题。

三、教学方法为了达到上述教学目标,我们将采用以下教学方法:1.讲授法:用于讲解FPGA的基础知识、数字电路设计和硬件描述语言的相关概念。

2.案例分析法:通过分析具体的篮球计分器设计案例,使学生能够将理论知识应用到实际问题中。

3.实验法:安排实验室实践环节,让学生亲自动手进行篮球计分器的设计和调试,增强学生的实践能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选择合适的FPGA教材,用于引导学生学习相关知识。

2.多媒体资料:制作课件和教学视频,帮助学生更直观地理解教学内容。

3.实验设备:提供FPGA开发板和相关的实验设备,让学生能够在实验室进行实际操作。

五、教学评估本课程的评估方式包括平时表现、作业、考试等多个方面,以全面、客观、公正地评价学生的学习成果。

具体评估方式如下:1.平时表现:通过课堂参与、提问、小组讨论等形式的评估,考察学生的学习态度和积极性。

单片机篮球记分牌

单片机篮球记分牌

注:实际产品需要增加时钟、复位电路。

#include "reg51.h" //51头文件#define KEY_IO P0 //键盘接口#define Lcd_Port P2 //定义数据端口sbit Lcd_RS = P3^5; //定义和LCD的连接端口,写数据指令端口sbit Lcd_RW = P3^6; //读写端口sbit Lcd_E = P3^7; //使能端口sbit Lcd_Busy = P2^7; //读忙端口char aa[10]={'0','1','2','3','4','5','6','7','8','9'};int score_a=0,score_b=0; //用于存储双方比分char dis_buff[4]={'0','0','0','0'}; //用于存放两队比分的十位、个位int temp,keytemp1,keytemp2; //临时变量//延时函数void delay(int t){int i,j; //延时变量for(i=0;i<t;i++) //t表示循环次数for(j=0;j<100;j++);}// 读忙信号判断void Read_Busy(void){int k=255;Lcd_Port=0xff;Lcd_RS = 0;Lcd_RW = 1;Lcd_E = 1;while((k--)&&(Lcd_Busy));Lcd_E = 0;}// 写指令函数void Write_Comm(int lcdcomm){Read_Busy( ); //先读忙Lcd_RS = 0; //端口定义为写指令Lcd_RW = 0; //端口写入使能Lcd_E = 1; //端口输入总使能Lcd_Port=lcdcomm; //数据端送指令Lcd_E = 0; //端口输入总禁止}//写数据函数void Write_Chr(int lcddata){Read_Busy( ); //先读忙Lcd_RS = 1; //端口写数据使能Lcd_RW = 0; //端口写入使能Lcd_E = 1; //端口总输入使能Lcd_Port = lcddata; //数据端口送数据Lcd_E = 0; //端口总输入禁止}//初始化LCDvoid Init_LCD(void){delay(2); //稍微延时,等待LCD进入工作状态 Write_Comm(0x38); //8位2行5*8Write_Comm(0x0c); //显示开/关,光标开闪烁开Write_Comm(0x01); //清显示Write_Comm(0x06); //文字不动,光标右移Write_Comm(0x02); //光标归位}//LED显示动态扫描函数void display(){dis_buff[0]=score_a/10; //送score_a的十位到显示数组里面dis_buff[1]=score_a%10; //送score_a的个位到显示数组里面dis_buff[2]=score_b/10; //送score_b的十位到显示数组里面dis_buff[3]=score_b%10; //送score_b的个位到显示数组里面Write_Comm(0x83); //确定显示位置,第1行第3列Write_Chr('T');Write_Chr('e');Write_Chr('a');Write_Chr('m');Write_Chr(' ');Write_Chr('A');Write_Chr(':');Write_Chr(' ');Write_Chr(aa[dis_buff[0]]); //送显A队比分十位Write_Chr(aa[dis_buff[1]]); //送显A队比分个位Write_Comm(0xC3); //确定显示位置,第2行第3列Write_Chr('T');Write_Chr('e');Write_Chr('a');Write_Chr('m');Write_Chr(' ');Write_Chr('B');Write_Chr(':');Write_Chr(' ');Write_Chr(aa[dis_buff[2]]); //送显B队比分十位Write_Chr(aa[dis_buff[3]]); //送显B队比分个位}//外部中断0中断服务子函数void ext0(void) interrupt 0 using 0 //通过与门触发中断来扫描按键{EX0=0; //关闭外部中断KEY_IO=0x03; //反转法第一步,置键盘接口0000 0011 keytemp1=(~KEY_IO)&0x03; //临时存储按键行状态到keytemp1低4位 delay(1);KEY_IO=0xF0; //反转法第二步,置键盘接口1111 0000 keytemp2=(~KEY_IO)&0xF0; //临时存储按键列状态到keytemp2高4位 temp= keytemp1|keytemp2; //将按键行列号存入tempswitch(temp) //根据按键行列号判断{case 0x11: //按键在第1行第1列score_a++; //A队比分加1if(score_a==100)score_a=99;break;case 0x21: //按键在第1行第2列score_a+=2; //A队比分加2if(score_a>=100)score_a=99;break;case 0x41: //按键在第1行第3列score_a+=3; //A队比分加3if(score_a>=100)score_a=99;break;case 0x81: //按键在第1行第4列if(score_a!=0)score_a--; //A队比分减1break;case 0x12: //按键在第2行第1列score_b++; //B队比分加1if(score_b==100)score_b=99;break;case 0x22: //按键在第2行第2列score_b+=2; //B队比分加2if(score_b>=100)score_b=99;break;case 0x42: //按键在第2行第3列score_b+=3; //B队比分加3if(score_b>=100)score_b=99;break;case 0x82: //按键在第2行第4列if(score_b!=0)score_b--; //B队比分减1break;}do //等待按键释放,防止按键抖动{KEY_IO=0x03;temp=(~KEY_IO)&0x03;}while(temp!=0);}//主函数void main(){Init_LCD( );EA=1; //开全局中断EX0=1; //开外部中断0IT0=0; //外部中断0低电平触发while(1){KEY_IO=0x03; //赋初值0000 0011display(); //送显EX0=1; //开外部中断0,即可以按键扫描 }}。

【篮球记分牌】篮球记分牌课程设计实验报告

【篮球记分牌】篮球记分牌课程设计实验报告

【篮球记分牌】篮球记分牌课程设计实验报告《【篮球记分牌】篮球记分牌课程设计实验报告》篮球记分牌课程设计实验报告XX学校电子技术课程设计报告题目学院自动化与电气工程学院专业班级学号学生姓名指导教师完成日期201X年 XX月XX日篮球记分牌摘要围绕设计要求对篮球记分牌进行设计。

首先根据功能要求提出单片机STC89S52RC为控制核心的设计方案;其次进行硬件系统和软件系统的设计,并且根据本次设计所用的V3.72开发板原理图进行设计,然后根据所设计的电路图级程序用Proteus和Keil 进行了仿真,验证了设计方案的正确性,最后,把程序烧进开发板中来完成篮球记分牌的硬件电路。

调试和测试结果表明基本上都能满足此次课程设计的要求。

本次课程设计,有效加深和巩固了单片机的基础知识,提高了我们的实际动手能力,具有及其深远的意义。

关键词:单片机独立按键蜂鸣器 at24c02 数码管一、设计要求1.比赛开始,比分能够全部清零,数码管前2位,末二位做记分用,当中2位做24秒倒计时用。

2.24秒倒计时时间到,蜂鸣器响、指示灯亮,重新开始倒计时(按下开始键),蜂鸣器停止鸣叫、指示灯灭。

3.比分进行增加后,倒计时从24秒重新开始倒计时。

任意时刻24秒可以重新开始倒计时。

必要时候能够关闭倒计时。

4.利用AT24C02或者单片机内部资源保存比分,支持复位保存,掉电保存功能。

二、系统设计及仿真2.1、系统总体设计图2-1系统结构图思想汇报专题本系统采用单片机STC89S52RC为控制核心,系统主要包括显示模块、按键控制模块、蜂鸣器报警模块等。

下面对各模块的设计进行论证。

1) 显示模块单片机系统中,往往需要多位显示。

动态显示是一种最常见的多位显示方法,应用非常广泛。

所有数码管段选都连接在一起的时候,怎么让数码管显示不一样的数字呢?动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。

首先我们来看一下显示模块电路原理图:图2-2 74ls138结构图图2-3 数码管段选图本实验使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选2) 按键控制模块方案一:采用矩阵键盘。

【免费】-》基于FPGA的篮球计时计分器的设计与实现

【免费】-》基于FPGA的篮球计时计分器的设计与实现

收稿日期:2010209210通讯作者:唐庭龙(1979-),男,讲师,硕士,主要研究方向为信号与信息处理.E 2mail :tangtinglong @基于FPGA 的篮球计时计分器的设计与实现唐庭龙1 陆 酉2(1.三峡大学计算机与信息学院,湖北宜昌 443002;2.武汉供电公司,武汉 430064)摘要:提出了基于FP GA (Field Programmable Gate Array )的篮球计时计分器的设计方案,并使用Quart us II 软件和V HDL 语言(Very High Speed Integrated Circuit Hardware Description Lan 2guage )实现了相关设计.采用计数的方法设计了计时器模块、计分器模块,结合7段数码管动态显示原理及1602液晶控制方法设计了显示模块.经过仿真及下载验证得到以下结果:计时器完成了篮球比赛4节12min 的倒计时,一次进攻时间24s 的计时;计分器实现了甲乙两队加分,分数调整的功能;显示部分完成了时间、比分的显示等.以上结果符合设计要求.关键词:篮球计时计分器; FP GA ; V HDL 中图分类号:TP391 文献标识码:A 文章编号:16722948X (2010)0620080204Design and R ealization of B asketball Timing and Scoring Device B ased on FPGATang Tinglong 1 L u Y ou 2(1.College of Comp uter &Information Technology ,China Three G orges Univ.,Yichang 443002,China ;2.Wuhan Elect ric Power Company ,Wuhan 430064,China )Abstract Based o n FP GA (Field Programmable Gate Array ),a scheme of scoring and timing device used in basket ball games is designed .The system is written by V HDL (Very High Speed Integrated Circuit Hardware Description Language )and accomplished by Quart us II.Three part s are included ,as well as t he timing mod 2ule and t he scoring module are based on met hod of counter ,t he display module is based on 72segment numeric L ED (Light Emitting Diode )and 1602L CD (Liquid Crystal Display ).The result s show t hat t he timing module can countdown f rom t he 12t h minute in t he four quarters of t he game and 24seconds of each round ,and t he scoring module can record point s of bot h teams and adjust t he result ;t he display module can show t he time and t he game scores.The design result s indicated t he scheme is feasible and correct.K eyw ords basket ball timing and scoring device ; FP GA ; V HDL 篮球比赛中,计时计分系统主要完成对比赛过程中出现的时间,比分等数据进行快速采集记录,加工处理以及显示,其对实时性、准确性以及现场效果具有一定的要求.随着FP GA 技术的发展与价格的降低,其运算速度快,管脚资源丰富,便于实现复杂的逻辑功能等优势在电子系统设计中逐渐显现.文章基于FP GA 设计并实现了满足NBA 规则基本要求的一种篮球计时计分器,具有数据处理稳定,速度快,实时性强,电路简单,便于二次开发与扩展等特点.1 总体设计该篮球计时计分系统总体上分为5个模块,功能框图如图1所示:其中,系统时钟提供其它主要模块所需的各种时钟信号;按键去抖模块处理按键的抖动;计时模块包括每节比赛的12min ,以及每次进攻的24s 计时;计分(比分)模块实现双方得分的统计,以及每次得分后,24s 计数器的清零;显示模块包括18第32卷 第6期 唐庭龙等 基于FP GA的篮球计时计分器的设计与实现28三峡大学学报(自然科学版) 2010年12月图15 按键电平抖动示意图为保证按键识别的准确性,在按键电压信号抖动的情况下不能进行状态输入,为此必须进行去抖动处理,消除抖动部分的信号,一般有硬件和软件两种方法.这里用状态机的方法设计一个去抖电路.状态机实现去抖动电路原理是:按键去抖动关键在于提取稳定的低电平状态(按键按下时为低电平),滤除前沿、后沿抖动毛刺.对于一个按键信号,可以用一个脉冲对它进行取样,如果连续3次取样为低电平,则可以认为信号已经处于稳定状态,这时输出一个低电平的按键信号.继续取样的过程中,如果不能满足连续3次取样为低,则认为键稳定状态结束,这时输出变为高电平.设计的状态转换图如图16所示,reset 信号有效时,电路进入复位态S0,这时认为取样没有检测到低电平,在输入取样的过程中,每次检测到一个低电平,发生一次向下的状态转换,直到连续检测到3个连续的低电平时,进入S3状态,这时输出置低(按键信号稳定态);在中间状态S1,S2时,一旦检测到高电平,仅进入S0状态,重新检测[2].图16 状态转换图 该部分的模块元件符号如图17所示.其中clk为检测的时钟,它与10k Hz 频率相连.cr 为复位信号,低电平有效.din[4..0]为按键信号,它有5位,表示有5个按键需要去抖动,低电平有效.dout [4..0]表示加了去抖动后的按键信号.图17 加去抖动的按键模块3 结 论设计经过编译后下载到基于Altera 公司的EP2C35F484C8芯片的开发板,能正确地实现篮球计时计分器的功能,完成比赛过程中的计时如每节12min 、每次进攻24s 、1至4节的节次自动显示;完成1分、2分、3分的得分加分、比分错误时的调整等.设计采用模块化设计,各模块通用性强,方便剪裁,在其它需要计数器、数码管、1602L CD 以及按键去抖动等模块的设计中可作参考甚至可直接使用;在需要添加其它硬件设备如大屏幕L ED ,V GA 接口设备等时能很方便扩展.设计在时间的调整,进攻时间实时转换以及遥控方式控制等功能上还可以进一步完善.参考文献:[1] 张洪润.FP GA/CPLD 应用设计200例[M ].北京:北京航空航天大学出版社,2009.[2] 刘延飞.基于Altera FP GA/CPLD 的电子系统设计及工程实践[M ].北京:人民邮电出版社,2009.[责任编辑 张 莉]38第32卷 第6期 唐庭龙等 基于FP GA 的篮球计时计分器的设计与实现。

verilog语言设计篮球计分 -回复

verilog语言设计篮球计分 -回复

verilog语言设计篮球计分-回复以下是使用Verilog语言设计篮球计分的代码示例:module BasketballScore(input clk, 时钟信号input reset, 复位信号input team1_shot, 队伍1进球信号input team2_shot, 队伍2进球信号output reg [3:0] team1_score, 队伍1得分output reg [3:0] team2_score 队伍2得分);初始得分为0initial beginteam1_score = 4'b0000;team2_score = 4'b0000;end当复位信号为1时重置得分为0always @(posedge clk, posedge reset)if (reset) beginteam1_score <= 4'b0000;team2_score <= 4'b0000;end如果队伍1进球,增加1分always @(posedge clk)if (team1_shot) beginteam1_score <= team1_score + 1;end如果队伍2进球,增加1分always @(posedge clk)if (team2_shot) beginteam2_score <= team2_score + 1;endendmodule在这个示例中,我们定义了一个名为BasketballScore的模块,它有以下输入和输出:- 输入时钟信号clk和复位信号reset,以及代表队伍1和队伍2进球信号team1_shot和team2_shot。

- 输出队伍1和队伍2的得分team1_score和team2_score。

我们使用reg类型来声明输出信号,并在initial块中将其初始值设为0。

另外,我们使用always块来更新计分器,如果进球则将对应队伍的得分加1。

篮球比赛数字记分牌的设计方案

篮球比赛数字记分牌的设计方案

目录1 课程设计题目`内容与要求………………………1.1 设计内容1.2 具体要求2系统设计…………………………2.1 设计思路2.2 系统原理3 系统实现……………………………………………4 系统仿真……………………………………………5硬件验证(操作)说明………………………………6 总结…………………………………………………7参考书目……………………………………………一、课程设计题目、内容与要求1.1课程设计的题目:篮球比赛记分牌1.2课程设计内容:1、根据比赛实际情况记录两队得分,罚球进的1分,进球的2分;2、记分牌要具有纠错功能,能减1分、2分功能;3、利用3个译码显示管输出比赛的分;二、系统设计2.1设计思路:篮球比赛记分牌是记录两队比赛的得分情况,并能够进行纠错功能;根据系统设计的要求,篮球记分牌的电路原理框图如下:2.2 系统原理与设计说明系统各个模块的功能如下:1、D触发器电路模块实现翻转功能当出错时,输出为1,使电路回到上一个正确的状态。

2、4为二进制全加器电路模块实现加法计数功能。

3、移位寄存器电路模块保存比赛两队得分情况的4个相邻状态,出错时将调用上一个正确状态。

4、二选一数据选择器电路模块用来控制移位寄存器5、LED数码管驱动电路模块三、系统实现各模块电路的源程序如下:1、D触发器电路模块及程序:set输入(Q=1),清零应该可以用复位键reset吧(Q=0)。

library ieee;use ieee.std_logic_1164.all;entity sync_rsdff isport(d,clk : in std_logic;set : in std_logic;reset: in std_logic;q,qb : out std_logic);end sync_rsdff;architecture rtl_arc of sync_rsdff isbeginprocess(clk)beginif (clk'event and clk='1') thenif(set='0' and reset='1') thenq<='1';qb<='0';elsif (set='1' and reset='0') thenq<='0';qb<='1';elseq<=d;qb<=not d;end if;end if;end process;end rtl_arc;2、移位寄存器模块电路及程序:library IEEE;use IEEE.std_logic_1164.all;entity shft_reg isport (DIR : in std_logic;CLK : in std_logic;CLR : in std_logic;SET : in std_logic;CE : in std_logic;LOAD : in std_logic;SI : in std_logic;DATA : in std_logic_vector(3 downto 0);data_out : out std_logic_vector(3 downto 0) );end shft_reg;architecture shft_reg_arch of shft_reg issignal TEMP_data_out : std_logic_vector(3 downto 0);beginprocess(CLK)beginif rising_edge(CLK) thenif CE = '1' thenif CLR = '1' thenTEMP_data_out <= "0000";elsif SET = '1' thenTEMP_data_out <= "1111";elsif LOAD = '1' thenTEMP_data_out <= DATA;elseif DIR = '1' thenTEMP_data_out <= SI & TEMP_data_out(3 downto 1);elseTEMP_data_out <= TEMP_data_out(2 downto 0) & SI;end if;end if;end if;end if;end process;data_out <= TEMP_data_out;end architecture;3、二选一数据选择器电路模块及程序:entity mux isport(do,d1:in bit;sel:in bit;q:out bit);end mux;architecture a of mux isbeginq<=(do and sel)or(not sel and d1);end a;4、加法计数器的电路模块及程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY add4 ISPORT(a1,a2,a3,a4:IN STD_LOGIC;b1,b2,b3,b4:IN STD_LOGIC;sum1,sum2,sum3,sum4:OUT STD_LOGIC;cout4:OUT STD_LOGIC);END add4;ARCHITECTURE add_arc OF add4 ISSIGNAL cout1,cout2,cout3:STD_LOGIC;COMPONENT halfaddPORT(a,b:IN STD_LOGIC;sum,hcarry:OUT STD_LOGIC);END COMPONENT;COMPONENT fulladdPORT(in1,in2,cin:STD_LOGIC;fsum,fcarry:OUT STD_LOGIC);END COMPONENT;BEGINu1:halfadd PORT MAP(a=>a1,b=>b1,sum=>sum1,hcarry=>cout1);u2:fulladd PORT MAP(in1=>a2,in2=>b2,cin=>cout1,fsum=>sum2,fcarry=>cout2);u3:fulladd PORT MAP(in1=>a3,in2=>b3,cin=>cout2,fsum=>sum3,fcarry=>cout3);u4:fulladd PORT MAP(in1=>a4,in2=>b4,cin=>cout3,fsum=>sum4,fcarry=>cout4);END add_arc;5、七段译码电路及程序:library ieee;use ieee.std_logic_1164.all;entity deled isport(datain:in std_logic_vector(3 downto 0);qout:out std_logic_vector(6 downto 0));end deled;architecture func of deled isbeginprocess(datain)beginif datain= "0000" then qout<="1111110";elsif datain= "0001" then qout<="0110000";elsif datain= "0010" then qout<="1101101";elsif datain= "0011" then qout<="1111001";elsif datain= "0100" then qout<="0110011";elsif datain= "0101" then qout<="1011011";elsif datain= "0110" then qout<="1011111";elsif datain= "0111" then qout<="1110000";elsif datain= "1000" then qout<="1111111";elsif datain= "1001" then qout<="1111011";else null;end if;end process;end func;四、系统仿真1、D触发器电路模块仿真波形:2、移位寄存器模块电路仿真波形:3、二选一数据选择器电路模块仿真波形:4、加法计数器的电路模块仿真波形:5、七段译码电路仿真波形:五﹑硬件验证说明这次设计采用的硬件电路有芯片EP1K10TC100-3,实验板上标准时钟电路、LED 显示等,六、总结此课题说明了使用VHDL语言设计数字电路的方法以及VHDL语言在数字电路设计仿真中的重要作用,仿真结果表明VHDL 语言应用于数字电路仿真是切实可行的,该语言在电子设计领域受到了广泛的接受。

基于51单片机数码管显示篮球记分牌设计

基于51单片机数码管显示篮球记分牌设计

基于51单片机数码管显示篮球记分牌设计#include<reg51.h>unsigned char a1,b1,c1,a2,b2,c2,d1,d2,e3,f3,g3,h3,i,j,flag10,flag11,flag12;unsigned char af,bf,time=24,cnt1,cnt2;signed int time1=720;sbit aj=P1^0;sbit bj=P1^1;sbit cn=P1^2;sbit bn=P1^3;sbit en=P3^2;sbit fn=P3^3;sbit hn=P3^0;sbit gn=P3^4;sbit set=P1^4;sbit tj=P1^5;sbit tz=P1^6;sbit ot=P1^7;bit flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6,flag7,flag8,flag9;unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(unsigned char i);void display();void sw();void abbfen();void esnny();void esnne();void esnns();void esfzw();void hfwz();void ot1();void setj ();void timej ();void timez ();void main(){TMOD=0x11;TH0=0x3c;TL0=0xb0;TH1=0x3c;TL1=0xb0;ET0=1;ET1=1;while(1){display();abbfen();sw();esnny();esnne();esnns();esnne();esfzw();hfwz();timej ();timez ();setj ();ot1();}}void delay(unsigned char i ) {unsigned char j,k;for (k=0;k<i;k++)for (j=0;j<10;j++);}void display(){a1=af/100;b1=af%100/10;c1=af%100%10;P2=0x00;P0=s[a1];delay(2);P2=0x01;P0=s[b1];delay(2);P2=0x02;P0=s[c1];delay(2);P0=s[10];delay(2);a2=bf/100;b2=bf%100/10;c2=bf%100%10;P2=0x04;P0=s[10];delay(2);P2=0x05;P0=s[a2];delay(2);P2=0x06;P0=s[b2];delay(2);P2=0x07;P0=s[c2];delay(2);e3=time1/60/10;f3=time1/60%10; g3=time1%60/10; h3=time1%60%10;P2=0x08;P0=s[e3];delay(2);P2=0x09;P0=s[f3];delay(2);P2=0x0a;P0=s[g3];delay(2);P2=0x0b;P0=s[h3];delay(2);d1=time/10;d2=time%10;P2=0x0c;delay(2);P2=0x0d;P0=s[d2];delay(2);}void abbfen(){if(aj==0){delay(10);}if(aj==0){flag1=1;}if(flag1==1&&aj==1) {flag1=0;af++;}}void sw(){if(bj==0){delay(10);}if(bj==0){flag2=1;}if(flag2==1&&bj==1) {flag2=0;bf++;}}void esnny(){if(cn==0){delay(10);}if(cn==0){flag3=1;}if(flag3==1&&cn==1) {flag3=0;TR0=1;}}void esnne(){if(bn==0){delay(10);}{flag4=1;}if(flag4==1&&bn==1) {flag4=0;TR0=0;}}void esfzw(){if(en==0){delay (10);}if(en==0){flag5=1;}if(flag5==1&&en==1) {flag5=0;TR1=1;}}void esnns(){if (fn==0){delay (10);}if(fn==0){flag6=1;}if(flag6==1&&en==1) {flag6=0;TR1=0;}}void hfwz(){if (gn==0){delay (10);}if(gn==0){flag7=1;}if(flag7==1&&gn==1) {flag7=0;time=24;}}void setj (){if (set==0){delay (10);}if(set==0){flag10=1;}if(flag10==1&&set==1){ flag10=0;j++;if (j==3) j=0;}}void ot1(){if (ot==0){delay (10);}if(ot==0){flag12=1;}if(flag12==1&&ot==1){flag12=0;time1=300;}}void timej (){if (tj==0){delay (10);}if(tj==0){flag8=1;}if(flag8==1&&tj==1){flag8=0;switch(j){case 0x00:break;case 0x01:time1--; break;case 0x02:time1=time1-60;break; default:break;}}}void timez (){if (tz==0){delay (10);}if(tz==0){flag9=1;}if(flag9==1&&tz==1){flag9=0;switch(j){case 0x00:break;case 0x01:time1++; break;case 0x02:time1=time1+60;break; default:break;}}}void int1()interrupt 1{TH0=0x3c;TL0=0xb0;cnt1++;if(cnt1==21){cnt1=0;time1--;}if(time1==-1){time1=720;}}void int3()interrupt 3{TH1=0x3c;TL1=0xb0;cnt2++;if(cnt2==21){cnt2=0;time--;if(time==-1){time=24;hn=0;hn=1;}}}。

基于FPGA的篮球 记分器设计

基于FPGA的篮球 记分器设计

第1章前言1.1 产品现状与发展作为每场篮球赛的必备品,比赛的记分器的质量显得尤为重要。

目前使用的记分器大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。

在实际应用中,由于程序不稳定,系统的可靠性能比较差。

基于现场可编程逻辑门阵列FPGA器件的记分器,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。

由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA 工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率以及使用成本。

1.2 FPGA简介FPGA设计流程包括系统设计和设计实现,系统方案完成之后即进入设计实现阶段的工作,他以系统方案为输入,进行RTL级描述、功能仿真(RTL级仿真)、逻辑综合、布线前门级仿真、适配(布局布线)、时序仿真(布线后门级仿真)、时序分析、器件编程、系统验证一系列流程的处理才能完成FPGA芯片的设计,其设计流程。

需要说明的是,如果仿真验证不对或者某一步有错,就要返回修改。

有必要检查和修改的地方有RTL级描述、系统方案、约束和测试激励等。

一般情况下,对RTL级的描述即原理图或者HDL设计代码的修改最多也最有效。

修改后要重新走一遍流程。

有时要反复修改,经过多次这样的修改才能完成最后的设计。

FPGA的设计流程和相关概念说明如下:库:指FPGA器件厂家提供的工艺库和EDA工具提供的标准通用库(如IEEE 库等)。

工艺库中有各种宏功能模块和基本功能单元,含有他们的行为级模型、门级模型、布线模型等信息。

需要说明的是,系统行为仿真和RTL级功能仿真有时要用到某种功能模块,例如RAM模型。

对于RAM模型的控制信号,不同的厂家其规定不一定相同,如写使能信号,有的厂家规定高电平有效,有的厂家规定低电平有效。

其实,在厂家提供的工艺库中,RAM模型有行为级模型、门级模型、版图级模型等。

篮球记分牌verilog设计说明

篮球记分牌verilog设计说明

数字逻辑设计及应用课程设计报告姓名:学号:选课号:79设计题号:23一.设计题目篮球比赛数字计分牌二.设计要求1.分别记录两队得分情况;2.进球得分加2分,罚球进球得分加1分;3.纠正错判得分减2分或1分;4.分别用三个数码管显示器记录两队的得分情况。

三.设计过程(一)设计方案1.模块设计题目中要用三个数码管来记录两队的得分情况,本文采用输出为8421bcd码,外接译码器和数码管的方式来实现。

先设计一个带有进位(co)和借位(ci)输出的模块pad,输出端(num)输出4位8421bcd码外接译码器和数码管,pad模块还带有加一输入端(a1),加二输入端(a2),减一输入端(d1),减二输入端(d2)。

输入端与开关相接,操作者按下开关即给该端口一个脉冲信号,各输入端口由上升沿触发。

如果操作者同时按下多个端口,输出端口将保持原来的信号不变。

pad模块功能图见图1-1。

图1-1 pad模块输入输出端口及功能然后将三个相同的pad模块进行级联,构造为新的模块numberpad,从而得到带有三个数码管的篮球记分牌。

甲乙两队都将分别使用这个记分牌。

级联图见图1-2。

图1-2 pad模块级联图2.模块部的算法流程每个模块有四个输入端口a1,a2,d1,d2来进行触发,触发事件太多,因此构造rem=a1|a2|d1|d2作为新的触发信号。

因此,只要a1,a2,d1,d2中任意一个按键被按下,将会发出一个脉冲,rem也就会产生一个脉冲。

但是可能出现多个按键同时按下的情况,这样会产生冲突。

所以在always语句块中,进行判断,看是否a1,a2,d1,d2中只有一个处于高电平,若同时处于高电平,则输出维持原来的值不变。

判断完端口a1,a2,d1,d2中哪一个输入了以后,就要进行加1,加2,减1,减2的操作。

加1分为以下情况:(1)若num已经计数到9即1001,再加1则num应变为0000,进位端co输出1;(2)若num不为9,则直接加1,co输出0。

篮球记分牌

篮球记分牌

桂林电子科技大学信息科技学院单片机原理及应用实训报告题目篮球记分牌学号姓名指导老师2010 年12 月14 日1.系统设计1.1设计要求设计一个基于单片机的篮球计分牌,实现两队的计分功能与24秒计时功能。

1.2设计原理2、模块电路的设计2.1 基本加分模块源程序代码为:#include<reg52.h>sbit a1=P3^0;sbit a2=P3^1;sbit a3=P3^2;sbit b1=P3^3;sbit b2=P3^4;sbit b3=P3^5;//sbit a2=P1^6;sbit d1=P3^7;unsigned char num,ge,shi,temp;unsigned int zz,z=0;unsigned char code tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};void yanshi(unsigned int zz);void xianshifenshu();void jiafen();void main(){while(1){ //if()xianshifenshu();jiafen();}}void xianshifenshu(){ P2 = 0Xfe; P0 = tab[z/1000]; yanshi(10);P2 = 0Xfd; P0 = tab[z%1000/100]; yanshi(10);P2 = 0XFb; P0 = tab[z%1000%100/10]; yanshi(10);P2 = 0X07; P0 = tab[z%10]; yanshi(10);}void yanshi(unsigned int zz){ unsigned int x,y;for(x=zz;x>0;x--)for(y=110;y>0;y--);}void jiafen(){if(a1==0){ yanshi(5);if(a1==0)z++;while(!a1);yanshi(5);while(!a1);}if(a2==0){yanshi(5);if(a2==0)z=z+2;while(!a2);yanshi(5);while(!a2);}if(a3==0){yanshi(5);if(a3==0)z=z+3;while(!a3);yanshi(5);while(!a3);}}2.2 24秒倒计时源程序代码为:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,num=24,vv,cc;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; sbit fmq=P1^6;sbit d1=P3^0;sbit d2=P3^1;void delay(uint z);void main(){aa=0;TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1;temp=0xfe;P1=temp;while(1){ if(d2==0) num=24;if(num==0) {fmq=1;delay(10);fmq=0; TR0=0;if(d1==0) break;}//delay(1000);//temp=_crol_(temp,1);// P1=temp;cc=num/10;vv=num%10;P2=0x0e;P0=table[cc];delay(10);P2=0x0d;P0=table[vv];delay(10);if(aa==20){aa=0; num--;if(num==-1) num=24;}} }void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}2.3加分选择模块源程序代码为:#include<reg52.h> sbit m1=P3^0;sbit m2=P3^1;sbit m3=P3^2;sbit j1=P3^3;sbit j2=P3^4;sbit j3=P3^5;sbit d1=P1^0;sbit d2=P1^1;sbit d3=P1^2;sbit d4=P1^3;sbit d5=P1^4;sbit d6=P1^5;//sbit a2=P1^6;//sbit d1=P3^7;unsigned char num,ge,shi,temp;unsigned int zz,z=0,d=0;unsigned char code tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};void yanshi(unsigned int zz);void xianshifenshujia();void xianshifenshuyi();void jiafenjia();void jiafenyi();void main(){while(1){ if(m1==0){ while(1){d1=0;d2=1;d3=1;xianshifenshujia();jiafenjia();if(m2==0||m3==0) break;}}if(m2==0){while(1){ d1=1;d2=0;d3=1;xianshifenshuyi();jiafenyi();if(m1==0||m3==0) break;}}if(m3==0) { while(1){ P2=0X0F;d1=1;d2=1;d3=0;if(m1==0||m2==0) break;}}}}void xianshifenshujia(){ P2 = 0Xfe; P0 = tab[z/1000]; yanshi(10);P2 = 0Xfd; P0 = tab[z%1000/100]; yanshi(10);P2 = 0XFb; P0 = tab[z%1000%100/10]; yanshi(10);P2 = 0X07; P0 = tab[z%10]; yanshi(10);}void xianshifenshuyi(){ P2 = 0Xfe; P0 = tab[d/1000]; yanshi(10);P2 = 0Xfd; P0 = tab[d%1000/100]; yanshi(10);P2 = 0XFb; P0 = tab[d%1000%100/10]; yanshi(10);P2 = 0X07; P0 = tab[d%10]; yanshi(10);}void yanshi(unsigned int zz){ unsigned int x,y;for(x=zz;x>0;x--)for(y=110;y>0;y--);}void jiafenjia(){if(j1==0){ yanshi(5);if(j1==0)z++;while(!j1);yanshi(5);while(!j1);}if(j2==0){yanshi(5);if(j2==0)z=z+2;while(!j2);yanshi(5);while(!j2);}if(j3==0){yanshi(5);if(j3==0)z=z+3;while(!j3);yanshi(5);while(!j3);}}void jiafenyi(){if(j1==0){ yanshi(5);if(j1==0)d++;while(!j1);yanshi(5);while(!j1);}if(j2==0){yanshi(5);if(j2==0)d=d+2;while(!j2);yanshi(5);while(!j2);}if(j3==0){yanshi(5);if(j3==0)d=d+3;while(!j3);yanshi(5);while(!j3);}}2.4模块选择指示灯选择模块sbit m3=P3^2;sbit j1=P3^3;sbit j2=P3^4;sbit j3=P3^5;sbit d1=P1^0;sbit d2=P1^1;sbit d3=P1^2;sbit d4=P1^3;sbit d5=P1^4;sbit d6=P1^5;//sbit a2=P1^6;//sbit d1=P3^7;unsigned char num,ge,shi,temp;unsigned int zz,z=0,d=0;unsigned char code tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};void yanshi(unsigned int zz);void xianshifenshujia();void xianshifenshuyi();void anjianxuanze();void main(){ // d1=0;d2=0;d3=0;//while(1){anjianxuanze();}}void xianshifenshujia(){ P2 = 0Xfe; P0 = tab[z/1000]; yanshi(10);P2 = 0Xfd; P0 = tab[z%1000/100]; yanshi(10);P2 = 0XFb; P0 = tab[z%1000%100/10]; yanshi(10);P2 = 0X07; P0 = tab[z%10]; yanshi(10);}void xianshifenshuyi(){ P2 = 0Xfe; P0 = tab[d/1000]; yanshi(10);P2 = 0Xfd; P0 = tab[d%1000/100]; yanshi(10);P2 = 0XFb; P0 = tab[d%1000%100/10]; yanshi(10);P2 = 0X07; P0 = tab[d%10]; yanshi(10);}void yanshi(unsigned int zz){ unsigned int x,y;for(x=zz;x>0;x--)for(y=110;y>0;y--);}void anjianxuanze(){if(m1==0){ d1=0;d2=1;d3=1;yanshi(5);if(m1==0)while(!m1);yanshi(5);while(!m1);}if(m2==0){ d1=1;d2=0;d3=1;yanshi(5);if(m2==0)while(!m2);yanshi(5);while(!m2);}if(m3==0){ d1=1;d2=1;d3=0;yanshi(5);if(m3==0)while(!m3);yanshi(5);while(!m3);}}2.5扩展模块2.5.1犯规模块原程序为void fangui(){if(j1==0) {d1=0;d2=1;d3=1;d4=1;d5=1;yanshi(5);if(j1==0){}if(jian==1) zj++;else zj--;}while(!j1);yanshi(5);while(!j1);if(j2==0) { d1=1;d2=0;d3=1;d4=1;d5=1;yanshi(5);if(j2==0){if(jian==1) dy++;else dy--;}while(!j2);yanshi(5);while(!j2);}}2.5.2加减分模块使用到的部分代码为:{if(jian==1) z++;else z--;3、开发软件及编程语言简介3.1 Keil C编程软件3.2 使用C语言编程,通过高级语言编程实现单片机控制,取代汇编低级语言繁琐编程。

篮球比赛电子记分牌设计

篮球比赛电子记分牌设计

课题名称篮球比赛电子记分牌设计设计内容及要求设计一个篮球比赛记分牌,使用4位数码管显示倒计时的分钟、秒钟值;2位数码管显示A方得分;2位数码管显示B方得分;使用LED灯作为上、下半场的标志;单次加分值包括1分、2分和3分。

系统提供50MHZ频率的时钟源。

完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。

设计工作量1、VHDL语言程序设计;2、波形仿真;3、在实验装置上进行硬件测试,并进行演示;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。

进度安排起止日期(或时间量)设计内容(或预期目标)备注第1天课题介绍,答疑,收集材料第2天设计方案论证第3天进一步讨论方案, 对设计方案进行必要的修正,方案确定后开始进行VHDL语言程序设计第4天设计VHDL语言程序第5天在实验装置上进行硬件测试,编写设计说明书编写设计说明书教研室意见年月日系(部)主管领导意见年月日目录一、概述................................................................ - 3 -1、EDA的介绍........................................................ - 3 -2、篮球比赛电子记分牌的介绍.......................................... - 3 -二、设计目的............................................................ - 4 -三、设计内容及要求...................................................... - 4 -四、设计思路............................................................ - 4 -五、单元模块设计........................................................ - 5 -1、分频模块.......................................................... - 5 -2、计时模块.......................................................... - 6 -3、计分模块.......................................................... - 7 -4、显示模块.......................................................... - 9 -5、消抖模块........................................................ - 10 -六、仿真结果及分析..................................................... - 14 -1、引脚分配图....................................................... - 14 -2、设计仿真图....................................................... - 15 -3、硬件测试........................................................ - 15 -4、仿真结果分析..................................................... - 15 -七、设计总结与心得..................................................... - 16 -八、参考文献........................................................... - 17 -一、概述1、EDA的介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

篮球比赛电子记分牌设计

篮球比赛电子记分牌设计

一设计思路分析篮球比赛计时记分系统程序多而且复杂,所以用图形设计方法来设计。

先把每一模块的程序写好,然后生成图形文件,最后新建一个顶层图形文件,把各模块联结起来。

包括的模块有分频模块、计时模块、记分模块、脉冲产生模块、滤波模块、选择模块、声光显示模块,显示模块及消抖模块等。

程序总体框图为:二单元电路设计2.112进制减法计数器这个计数器用来表示每一节比赛的分钟位,它的时钟脉冲应由前一个60进制计数器的CO提供。

具备复位功能。

可以将12进制改为任意进制的减法计数器。

当计数结束后,计数器不再计数。

当CO有效时进行减法计数,当计数器减到0之,SO输出一个高电平。

EN等于1时计数器复位,当C05等于1时实现比赛加时操作。

生成元件图:仿真波形图:2.260进制减法计数器这个计数器用来表示每一节比赛的秒钟位。

要求在完成12个60进制的计数后,计数器不再计数。

具备清零、暂停以及复位的功能。

当CLK有效时进行减法计数,CLR等于1时整个计数器清零,EN等于1时计数器复位,PAUSE等于1时计数器暂停计数,。

当计数器减到0之,CO输出一个高电平。

生成元件图:仿真波形图:2.3 99进制可逆计数器这个计数器用来表示比赛球队分别的得分。

当S 出现上升沿时开始记分,CLR 等于1时整个计数器清零。

生成元件图:仿真波形如下:是 是 是2.61对2数据选择器由于比赛两方的比分不尽相同,所以用一个数据选择器来正确的给某一方加分。

当按下P4时,给A队加分,A的输出为CO;当再次按下P4时,给B队加分,B的输出为CO。

程序流程图:生成元件图:仿真波形如下:2.7脉冲产生器由于比赛的得分分别为1分,2分,3分。

所以对应的,当得分为1时,应当产生1个脉冲,当得分为2时,产生2个脉冲,以此类推。

在输入信号CLK存在的情况下,当P1为高电平,则CO产生1个脉冲信号。

P2为高电平,产生2个脉冲信号。

P3为高电平,产生3个脉冲信号。

生成元件图仿真波形如下:2.8滤波模块从脉冲产生器仿真的波形图看出,输出脉冲会有毛刺,所以加一个滤波模块,用以消除毛刺。

FPGA实验报告9__篮球30秒计时器

FPGA实验报告9__篮球30秒计时器

Lab 9 篮球30秒计时器设计集成1101班1.实验目的掌握用Verilog HDL 语言描述篮球30秒计时器。

熟悉使用DE0开发板七段数码管的使用。

掌握Verilog HDL 语言模块间的调用。

2.实验内容a)使用Verilog HDL 语言描述篮球30秒计时器。

b)使用Quartus9.1软件得到仿真波形。

c)使用DE0开发板下载。

3.代码分析主模块实现输入输出控制和调用分频模块和显示模块。

//Basketball.vmodule basketball (LED0,LED1,Alarm,nRST,nPAUSE,_50MHZ);input nRST,nPAUSE,_50MHZ;output [6:0] LED0,LED1;output Alarm;wire [6:0] LED0,LED1;wire CP;reg [3:0] TimerH,TimerL;assign Alarm= ({TimerH,TimerL}==8'h00)&(nRST==1'b1);Divided_Frequency F0 (CP,nRST,_50MHZ);LED_display L0 (LED0,TimerL);LED_display L1 (LED1,TimerH);always @(posedge CP or negedge nRST or negedge nPAUSE)beginif(~nRST){TimerH,TimerL} <=8'h30;else if(~nPAUSE){TimerH,TimerL}<= {TimerH,TimerL};else if({TimerH,TimerL}== 8'h00)begin {TimerH,TimerL}<= {TimerH,TimerL}; endelse if(TimerL== 4'h0)begin TimerH<= TimerH- 1'b1;TimerL<= 4'h9; endelsebegin TimerH<= TimerH;TimerL<= TimerL- 1'b1; endendendmodule分频模块:将50MHZ信号分成1HZ信号,作为时钟信号。

【篮球记分牌】篮球记分牌课程设计实验报告

【篮球记分牌】篮球记分牌课程设计实验报告

【篮球记分牌】篮球记分牌课程设计实验报告xx学校电子技术课程设计报告题目学院自动化与电气工程学院专业班级学号学生姓名指导教师完成日期201X年xx月xx日篮球记分牌摘要围绕设计要求对篮球记分牌进行设计。

首先根据功能要求提出单片机STC89S52RC为控制核心的设计方案;其次进行硬件系统和软件系统的设计,并且根据本次设计所用的V3.72开发板原理图进行设计,然后根据所设计的电路图级程序用Proteus和Keil进行了仿真,验证了设计方案的正确性,最后,把程序烧进开发板中来完成篮球记分牌的硬件电路。

调试和测试结果表明基本上都能满足此次课程设计的要求。

本次课程设计,有效加深和巩固了单片机的基础知识,提高了我们的实际动手能力,具有及其深远的意义。

关键词:单片机独立按键蜂鸣器at24c02数码管一、设计要求1.比赛开始,比分能够全部清零,数码管前2位,末二位做记分用,当中2位做24秒倒计时用。

2.24秒倒计时时间到,蜂鸣器响、指示灯亮,重新开始倒计时(按下开始键),蜂鸣器停止鸣叫、指示灯灭。

3.比分进行增加后,倒计时从24秒重新开始倒计时。

任意时刻24秒可以重新开始倒计时。

必要时候能够关闭倒计时。

4.利用AT24C02或者单片机内部资源保存比分,支持复位保存,掉电保存功能。

二、系统设计及仿真2.1、系统总体设计图2-1系统结构图思想汇报专题本系统采用单片机STC89S52RC为控制核心,系统主要包括显示模块、按键控制模块、蜂鸣器报警模块等。

下面对各模块的设计进行论证。

1)显示模块单片机系统中,往往需要多位显示。

动态显示是一种最常见的多位显示方法,应用非常广泛。

所有数码管段选都连接在一起的时候,怎么让数码管显示不一样的数字呢?动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。

首先我们来看一下显示模块电路原理图:图2-274ls138结构图图2-3数码管段选图本实验使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选2)按键控制模块方案一:采用矩阵键盘。

fpga篮球计分器课程设计

fpga篮球计分器课程设计

fpga篮球计分器课程设计一、课程目标知识目标:1. 学生理解FPGA的基本原理和功能,掌握利用FPGA设计简单数字系统的能力。

2. 学生掌握篮球计分器的基本功能要求,能够运用所学知识设计出满足需求的计分器系统。

3. 学生了解数字电路中计数器、寄存器等基础模块的工作原理,并能够运用这些模块进行系统设计。

技能目标:1. 学生能够运用硬件描述语言(如VHDL/Verilog)对FPGA进行编程,完成篮球计分器的功能设计。

2. 学生通过课程实践,提升问题分析能力,能够根据实际需求设计出合理的数字电路系统。

3. 学生能够使用相关软件(如ModelSim、Quartus)进行电路仿真、调试和验证。

情感态度价值观目标:1. 学生培养对电子信息技术和创新的兴趣,激发学习主动性和创造性思维。

2. 学生在团队协作中提高沟通与协作能力,培养集体荣誉感和责任心。

3. 学生通过篮球计分器的设计,体会科技与日常生活的紧密联系,增强学以致用的意识。

课程性质分析:本课程为电子信息类课程的实践环节,强调理论与实践相结合,注重培养学生的实际操作能力和创新精神。

学生特点分析:学生为高年级中学生,具备一定的电子技术和编程基础,具有较强的逻辑思维能力和问题解决能力。

教学要求:教师需引导学生主动探索,鼓励创新,关注学生在设计过程中的个体差异,提供有针对性的指导,确保学生能够达成课程目标。

通过课程目标的实现,学生能够将所学知识综合应用于实际问题,为未来的学习和职业发展打下坚实基础。

二、教学内容本课程教学内容主要包括以下几部分:1. FPGA基础知识:介绍FPGA的原理、结构和应用,使学生了解FPGA的基本概念,为后续设计打下基础。

教材章节:第三章“可编程逻辑器件及其应用”2. 硬件描述语言编程:讲解VHDL/Verilog基本语法和编程技巧,使学生能够使用硬件描述语言对FPGA进行编程。

教材章节:第四章“硬件描述语言及其编程”3. 数字电路基础:介绍计数器、寄存器等基础模块的工作原理,为篮球计分器设计提供必要的电路知识。

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

数字逻辑设计及应用课程设计报告
姓名:
学号:
选课号: 79
设计题号: 23
一.设计题目
篮球比赛数字计分牌
二.设计要求
1.分别记录两队得分情况;
2.进球得分加2分,罚球进球得分加1分;
3.纠正错判得分减2分或1分;
4.分别用三个数码管显示器记录两队的得分情况。

三.设计过程
(一)设计方案
1.模块设计
题目中要用三个数码管来记录两队的得分情况,本文采用输出为8421bcd码,外接译码器和数码管的方式来实现。

先设计一个带有进位(co)和借位(ci)输出的模块pad,输出端(num)输出4位8421bcd码外接译码器和数码管,pad模块还带有加一输入端(a1),加二输入端(a2),减一输入端(d1),减二输入端(d2)。

输入端与开关相接,操作者按下开关即给该端口一个脉冲信号,各输入端口由上升沿触发。

如果操作者同时按下多个端口,输出端口将保持原来的信号不变。

pad模块功能图见图1-1。

图 1-1 pad模块输入输出端口及功能
然后将三个相同的pad模块进行级联,构造为新的模块numberpad,从而得到带有三个数码管的篮球记分牌。

甲乙两队都将分别使用这个记分牌。

级联图见图1-2。

图 1-2 pad模块级联图
2.模块内部的算法流程
每个模块有四个输入端口a1,a2,d1,d2来进行触发,触发事件太多,因此构造rem=a1|a2|d1|d2作为新的触发信号。

因此,只要a1,a2,d1,d2中任意一个按键被按下,将会发出一个脉冲,rem也就会产生一个脉冲。

但是可能出现多个按键同时按下的情况,这样会产生冲突。

所以在always语句块中,进行判断,看是否a1,a2,d1,d2中只有一个处于高电平,若同时处于高电平,则输出维持原来的值不变。

判断完端口a1,a2,d1,d2中哪一个输入了以后,就要进行加1,加2,减1,减2的操作。

加1分为以下情况:(1)若num已经计数到9即1001,再加1则num应变为0000,进位端co输出1;(2)若num不为9,则直接加1,co输出0。

加2分为以下情况:(1)若num已经计数到8即1000,再加2则num应变为0000,进位端co输出1;(2)num已经计数到9即1001。

再加2则num应变为0001,进位端co输出1;(3)若num不为8或9,则直接加2,co输出0/。

减1分为以下情况:(1)若num此时为0,再减1则num应变为9即1001,借位端ci 输出1;(2)若num不为0,则直接减1,ci输出0。

减2分为以下情况:(1)若num此时为0,再减2则num应变为8即1000,借位端ci 输出1;(2)若num此时为1,再减2则num应变为9即1001,借位端ci输出1;(3)若num不为0或1,则直接减2,ci输出0
算法流程图见图1-3
图1-3 算法流程图
(二)Verilog程序
(注:在quatus2中不能编写中文注释,这里的注释为后期编写)
//将pad级联成新的模块numberpad,其中num1,num2,num3分别输出个十百位的8421bcd码
module numberpad(a1,a2,d1,d2,num1,num2,num3);
output [3:0] num1,num2,num3;
input a1,a2,d1,d2; //a1为加1端口,a2为加2端口,d1为减1端口,d2为减2端口
wire co1,co2,co3,ci1,ci2,ci3;
pad(a1,a2,d1,d2,num1,co1,ci1); //将三个pad级联
pad(co1,0,ci1,0,num2,co2,ci2);
pad(co2,0,ci2,0,num3,co3,ci3);
endmodule
//pad模块,输出为4为8421bcd码,由a1,a2,d1,d2来实现加减1、2,有进位和借位端口module pad(a1,a2,d1,d2,num,co,ci);
output reg [3:0] num; //输出4位8421bcd码
output reg co,ci; //co 进位信号, ci is 借位信号
input a1,a2,d1,d2; ///a1为加1端口,a2为加2端口,d1为减1端口,d2为减2端口
wire rem;
initial
num<=4'b0000;
assign rem=a1|a2|d1|d2;
always @(posedge rem)
begin
if(a1&&!a2&&!d1&&!d2) //仅a1输入脉冲时加1,必要时进位
begin
if(num==4'b1001)
begin
num<=4'b0000;
co<=1'b1;
end
else
begin
num<=num+4'b0001;
co<=1'b0;
end
end
else if(a2&&!a1&&!d1&&!d2) //仅a2输入脉冲时加2,必要时进位
begin
if(num==4'b1000)
begin
num<=4'b0000;
co<=1'b1;
end
else if(num==4'b1001)
begin
num<=4'b0001;
co<=1'b1;
end
else
begin
num<=num+4'b0010;
co<=1'b0;
end
end
else if(d1&&!a1&&!a2&&!d2) //仅d1输入脉冲时减1,必要时借位
begin
if(num==4'b0000)
begin
num<=4'b1001;
ci<=1'b1;
end
else
begin
num<=num-4'b0001;
ci<=1'b0;
end
end
else if(d2&&!a1&&!a2&&!d1) //仅d2输入脉冲时减2,必要时借位
begin
if(num==4'b0001)
begin
num<=4'b1001;
ci<=1'b1;
end
else if(num==4'b0000)
begin
num<=4'b1000;
ci<=1'b1;
end
else
begin
num<=num-4'b0010;
ci<=1'b0;
end
end
else //多个端口同时输入,输出保持原来的值
begin
num<=num;
co<=1'b0;
ci<=1'b0;
end
end
endmodule
(三)仿真结果
1.验证加1、加2、减1、减2端口正常,个位到十位进位正常
当输入端分别输入加1、加2、减1、减2信号时,输出了相应的结果。

18ns时,执行加1操作,个位num1由1001(即9)变成了0,同时向十位进位,十位num2变成了0001。

31ns时又有一进位,十位num2变成了0010(即2)。

(见图3-1)
图3-1 仿真图像一
2.验证十位向百位进位正常
由图3-2可得,213ns时已计数到199,即个位num1为1001,十位num2为1001,百位num3为0001。

此时输入了加2的信号,输出变成了201,即个位num1变为0001,十位num2变为0000,百位num3变为0010。

由此验证了十位向百位进位正常。

图3-2 仿真图像二
3.验证多个端口同时输入时,保持原值不变
从219ns开始到230秒都有多个端口同时输入,由图3-3可以观察到,输出端口的值并未发生改变。

图3-3 仿真图像三
四、设计结论
(一)设计结果分析
由以上的仿真图像可知,各端口工作正常,通过给a1、a2、d1、d2端口输入脉冲,可以使输出分别进行加1、加2、减1、减2的操作,且个位到十位、十位到百位进位正常,输出为8421bcd码。

当多个端口同时输入时,输出将保持原值,避免了冲突。

(二)设计中遇到的问题
由于a1、a2、d1、d2端口相互独立,刚开始设计时将它们都作为触发端口放在always@后面,发现调试总是有冲突。

后来引入了一个wire型变量rem,将其值赋为a1|a2|d1|d2,从而仅将rem作为触发的事件,然后通过if语句解决了冲突。

(三)设计心得和体会
1.设计程序时首先应该画出流程图,理清逻辑关系,做到条理清晰。

2.当程序调不出来时,不要烦躁和懊恼,更不能放弃,应该仔细阅读程序,一步一步分析、理解,看看哪里出了问题,并寻找解决的办法。

2010年6月20日。

相关文档
最新文档