篮球计分器程序
单片机课程设计(篮球计分器)

检查电源:确保电源正常,电压稳定 检查连接:确保所有硬件连接正确,无松动或损坏 检查硬件功能:确保所有硬件功能正常,如LED灯、按键等 检查程序运行:确保程序运行正常,无错误或异常 检查数据传输:确保数据传输正常,无丢失或错误 检查稳定性:确保硬件在长时间运行下仍能保持稳定工作
软件调试的目的:发现并修复软件中的错误 软件调试的方法:使用调试工具,如断点、单步执行等 软件调试的步骤:设置断点、执行程序、查看变量值、分析错误原因 软件调试的技巧:使用日志记录、使用单元测试等
提高解决问题的能力和创新能力
添加标题
添加标题
添加标题
添加标题
学会使用单片机进行硬件设计和软 件开发
培养团队合作精神和沟通能力
Байду номын сангаас
功能要求:实现篮 球计分功能,包括 得分、犯规、暂停 等
硬件要求:使用单 片机、LED显示屏、 按键等硬件设备
软件要求:编写 程序,实现篮球 计分器的功能
设计要求:设计 简洁、易于操作, 满足实际需求
结束程序:关闭计时器、计分器等设备,退出程序
程序功能:检测按键是否被 按下
程序流程:初始化、循环扫 描、判断按键状态、执行相 应操作
初始化:设置按键引脚为输 入模式,并初始化为高电平
循环扫描:不断循环检测按 键状态,直到按键被按下或 松开
判断按键状态:根据按键引 脚的电平变化判断按键是否 被按下或松开
软件设计:优化代码结构, 提高运行效率
硬件设计:考虑成本和性能, 选择更合适的元器件
用户体验:增加用户友好的 界面和操作方式
功能扩展:增加更多的功能, 如数据统计、比赛记录等
技术发展趋势:智能化、网络化、 小型化
技术挑战:提高稳定性、降低功耗、 提高准确性
毕业设计:篮球赛计时计分器设计

篮球赛计时计分器摘要单片机自20世纪70年代问世以来,以极为高的性价比受到人们的重视和关注,因此应用很广,进展专门快。
由于单片机的集成度高,功能强,通用性好,专门是它具有体积小、重量轻、能耗低、价钱廉价、靠得住性高、抗干扰能力强和利用方便等独特的优势,使单片机迅速取得了推行应用。
目前已经成为测量操纵应用系统中的优选机种和新电子产品的关键部位,许多用单片机做操纵的球赛计时计分系统也应运而生,如:用单片机操纵液晶显示(LCD)计时计分器,用单片机操纵LED七段显示器计时计分器等。
篮球计时计分器以单片机为核心,由计时器、计分器、综合操纵器等组成。
系统采纳模块化设计,主体分为计时显示模块、计分显示模块、按时报警、按键操纵键盘模块。
每一个模块的程序结构简单、任务明确,易于编写、调试和修改。
程序可读性好,对程序的修改可局部进行,其他部份可维持不变。
编程后利用Keil C51软件来进行编译,再将生成的HEX文件装入芯片中,采纳Proteus软件仿真,查验功能是不是能够正常实现,随后可用Protel99画出硬件电路图。
本设计中系统硬件电路要紧由以下几个部份组成:单片机AT89C51、计时电路、计分电路、报警电路和按键开关。
本次设计用由AT89C51编程操纵LED七段数码管作显示的球赛计时计分系统。
该系统具有赛程按时设置、赛程时刻暂停、及时刷新甲乙两边的成绩和赛后成绩暂存等功能。
它具有价钱低廉、性能稳固、操作方便而且易于携带等特点,普遍适合各类学校或小型集体作为赛程计时计分。
关键词:单片机,计时,计分,显示器,接口TIME BASKETBALL SCORING DEVICEABSTRACTSince the inception the 20th century 70 years, single-chip microcomputer (SCM) causes people’s attention and concern because of extremely cost-effective, so its application is very broad and rapid developing. SCM has many advantages, such as small size, light weight, anti-interference ability, less demanding on the environment, low cost, high reliability, good flexibility, developing more easily and so on. Now, it has become the preferred model in measurement control system and a key component of new electronic products. Many time scoring matches using SCM has also come into being, such as the timer with liquid crystal display (LCD), the timer with LED seven-segment display ,etc. Time basketball scoring device as the core of SCM includes the timer, scoring devices, integrated controller and other components.This system is used of the modular design, in which the main display module is divided into time display module, scoring display module, timing alarm module, and key control keyboard module. Program structure of each module is simple and clear. So it is easy to write, debug and modify. Because the program is readable, part of program can be modified and other parts may remain unchanged. After programming, firstly we can use Keil C51 software to compile and then generate the HEX file into the chip. Secondly we use the Proteus software simulation to test whether the normal function to achieve. Finally we draw the hardware circuit diagram with Protel99. The design of hardware circuit mainly consists of the five components, including AT89C51, timing circuit, scoring circuit, alarm circuit and key switch circuit.The design uses AT89C51 to program and to control LED digital tube for seven-segment display of match time scoring. The system has many features, such as setting the schedule time, scheduling time to pause, refreshing result ofboth parties timely, storing temporarily results after the match and so on. Because this system has low price, stable performance, and easy to operate and carry, it is widely suitable for all types of schools and small groups as the calendar time points.KEY WORDS:Microcontroller, Timing, Scoring, Display, Interface前言 (1)第1章系统方案说明 (1)方案选择 (2)篮球赛计时计分器设计的现状 (2)系统整体设计方案 (2)系统大体功能介绍 (3)第2章系统硬件电路设计 (6)篮球赛计时计分电路原理图 (6)篮球赛计时计分器电路工作进程 (6)系统硬件电路组成 (6)计时电路 (6)计分电路 (13)器件选择及介绍 (17)§2.4.1 AT89C51 (18)§2.4.2 CD4511芯片介绍 (21)§2.4.3 CD4094芯片的介绍 (22)§2.4.4 74LS21芯片介绍 (23)第3章软件编程及调试 (24)整体程序设计 (24)初始化程序设计 (25)计时系统程序设计 (26)计分系统程序设计 (27)系统调试 (28)软件调试 (28)仿真调试 (29)结论 (29)参考文献 (31)致谢 (32)附录 (33)随着单片机在各个领域的普遍应用,许多用单片机做操纵的球赛计时计分系统也应运而生,如用单片机操纵LCD液晶显示器[1]计时计分器,用单片机操纵LED七段显示器计时计分器等。
篮球计时计分器程序

#include <reg51.h>#include "intrins.h" //_nop_();延时函数用#define uchar unsigned char#define uint unsigned int#define Lcd_Port P3 //定义数据端口#define KEY_IO P0 //键盘接口sbit RS = P2^1; //定义和LCM的连接端口sbit RW = P2^2;sbit E = P2^5;sbit Busy = P3^7;uchar data keytemp,key;uchar L=0;uchar k=0;uchar c =0;uchar b=0;uchar j=0;uchar e=1;uchar d =0;uchar hour1=24;uchar min = 11;uchar sec = 59; //赋初值uchar data flag=0x00;bit flag_key=0;uchar code Lcddata[] = {"0123456789:"};uchar h1='A';uchar h2='B';uchar sub,abj;/****************************************************************************** ************* 函数名称:Timer0Init* 功能描述:定时器0初始化******************************************************************************* ***********/void Timer0Init(void){TMOD=0x11;TH0 = 0x3c;TL0 = 0xb0; //50ms定时初值TH1=0x3c;TL1=0xb0; //10MS定时初值(T1计时用)ET0=1;ET1=1;TR0=1;TR1=1;EA=1;}/****************************************************************************** ************* 函数名称:IsrTimer0* 功能描述:T0 50mS中断程序******************************************************************************* ***********/void IsrTimer0(void) interrupt 1 using 1 //T0 50mS中断程序{ static uchar count = 0;uchar i=0,b=0;TH0 = 0x3c;TL0 = 0xb0;count++;if(count ==20) //定时1s时间到{count = 0;sec--;if(sec == 0) //1分钟时间到{if(min == 0) //12分钟时间到{min = 11;sec = 59;TR0=0;for(i=1000;i<=0;i--) //延时5秒{for(b=1000;b<=0;b--){_nop_();_nop_();_nop_();_nop_();_nop_();}}}else{sec = 59;min--;}}}}/****************************************************************************** ************* 函数名称:Delay* 功能描述:延时子程序,延时(1MS*t) S******************************************************************************* ***********/void Delay(uchar t){uchar a;while(t-- != 0){for(a = 0; a < 125; a++);}}/****************************************************************************** ************* 函数名称:Read_Busy* 功能描述:读忙信号判断******************************************************************************* ***********/void Read_Busy(void){uchar i=50;Lcd_Port=0xff;RS = 0;RW = 1;E = 1;while((i--)&&Busy);E=0;}/****************************************************************************** ************* 函数名称:Write_Comm* 功能描述:写指令函数ok******************************************************************************* ***********/void Write_Comm(uchar lcdcomm){Read_Busy();RS = 0;RW = 0;E = 1;Lcd_Port=lcdcomm;E = 0;}/****************************************************************************** ************* 函数名称:Write_Char* 功能描述:写字符函数ok******************************************************************************* ***********/void Write_Char(uint num)//写字符函数{Read_Busy();RS = 1;RW = 0;E = 1;Lcd_Port = Lcddata[num];E = 0;}/****************************************************************************** ************* 函数名称:Write_Data* 功能描述:写数据函数ok******************************************************************************* ***********/void Write_Data(uchar lcddata){Read_Busy();RS = 1;RW = 0;E = 1;Lcd_Port = lcddata;E = 0;}/****************************************************************************** ************* 函数名称:Init_LCD* 功能描述:初始化LCD******************************************************************************* ***********/void Init_LCD(void){Delay(400); //稍微延时,等待LCM进入工作状态Write_Comm(0x38); //8位2行5*8Write_Comm(0x0c); //显示开/关,光标开闪烁开Write_Comm(0x01); //清显示Write_Comm(0x06); //文字不动,光标右移Write_Comm(0x02); //光标归位}/****************************************************************************** ************* 函数名称:Show_Time* 功能描述:LCD上显示当前时间******************************************************************************* ***********/void Show_Time(void){Lcd_Port = 0xa0;Write_Comm(0x80+0x08); //显示首地址Write_Char( hour1 / 10 );//显示分Write_Char( hour1 % 10 );Write_Comm(0x80+0x4b);Write_Char( min / 10 ); //显示倒计时分钟Write_Char( min % 10 );Write_Char( 10 ); //显示“:”Write_Char( sec / 10 ); //显示倒计时秒Write_Char( sec % 10 );Write_Comm(0x80+0x0d);Write_Char(e%10);Write_Data('S');Write_Data('t');Write_Comm(0x80+0x43);Write_Char( c /10 );Write_Char( c % 10 );Write_Comm(0x83);Write_Char(d /10 );Write_Char(d % 10 );}//***************按键扫描函数/*************void keyscan(){uchar i,t=0xef; //1110 1111KEY_IO=0x0f;keytemp=(~KEY_IO)&0x0e;if(keytemp!=0) //0000 0000 ;0000 1000; 0000 0100; 0000 0010; 0000 0001;{Delay(20);for(i=0;i<4;i++){KEY_IO=t;keytemp=(~KEY_IO)&0x0e;if(keytemp!=0&flag_key==0){flag_key=1;switch(keytemp){case 0x08:key=0*4+i;break;case 0x04:key=1*4+i;break;case 0x02:key=2*4+i;break;case 0x01:key=3*4+i;break;default:break;}switch(key){case0:{d++;j=1;if(d>=99){ Write_Comm(0x84);Write_Data('1');d=0;}b=0;}break;case1:{d++;d++;j=1;if(d>=99){ Write_Comm(0x84);Write_Data('1');d=0;}b=0;}break;case2:{d++;d++;d++;if(d>=99){ Write_Comm(0x84);Write_Data('1');d=0;} j=1;b=0;}break;case 3:{d--;if(d==0)d=0;}break;case4:{c++;if(c>=99){ Write_Comm(0x80+0x44);Write_Data('1');c=0;};b=1;j=0;}break;case5:{c++;c++;if(c>=99){ Write_Comm(0x80+0x44);Write_Data('1');c=0;}b=1;j=0;}break;case6:{c++;c++;c++;if(c>=99){ Write_Comm(0x80+0x44);Write_Data('1');c=0;}b=1;j=0;}break;case 7: {c--;if(c==0)c=0;}break;case 8:TR0=~TR0;TR1=~TR1;L=0;k=0;break;case 9:e++;if (e==5)e=1;Write_Comm(0x80+0x0d);Write_Char(e%10); break;case 0x0a: hour1=24;b=1;break;case 0x0b: abj=h1;h1=h2;h2=abj;RS=0;RW=0;P3=0x80+0x43;Delay(5);E=1;E=0;RS=1;RW=0;P3=h1;Delay(5);E=1;E=0;RS=0;RW=0;P3=0x83;Delay(5);E=1;E=0;RS=1;RW=0;P3=h2;Delay(5);E=1; E=0;sub=c;c=d;d=sub;b=1;break;//case 0x0c:TR0=1;TR1=1;break;default:break;}}t=(t<<1)|0x01;}}else flag_key=0;}void IsrTimer1(void) interrupt 3 using 3//T1 50mS中断程序{uchar i=0,m=0,a=0;static uchar ta20ms= 24;TH1=0x3c;TL1=0xb0;ta20ms--;if(ta20ms==0){ta20ms=24;hour1--;if(hour1==0)hour1=24 ;}k=1;L=1;}/****************************************************************************** ************* 函数名称:main* 功能描述:主函数******************************************************************************* ***********/void main(void){Init_LCD(); //初始化LCMTimer0Init(); //初始化定时器TR0=0;TR1=0;while(1){Show_Time(); //显示时间keyscan();Write_Comm(0x80);Write_Data(h1);Write_Data(':');Write_Comm(0x80+0x40);Write_Data(h2);Write_Data(':');}}。
单片机c51篮球计时计分器课程设计

单片机微机原理及应用课目:篮球记分牌的设计学院:电气工程学院班级:自动化08-2姓名:库万古丽(20082102427)麦地楠木(20082102426)指导教师:帕子来提完成时间:2011年12月11日篮球赛计时计分器一设计目的设计并制作一个用于赛场的篮球赛计时计分器,实现如下基本功能:(1)能记录整个赛程的比赛时间,并能修改比赛时间,暂停比赛时间。
(2)能随时刷新甲,乙两队在整个赛程中的比分。
(3)中场交换场地时,能交换甲,乙两队比分的位置。
(4)比赛时间结束时,能发出报警指令。
二设计意义通过篮球计分计时器的制作,可以使我熟悉,了解单片机开发设计实例的过程,并能使读者加深对单片机的理解和运用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下的一些方面:(1)篮球计分计时器包含了8051系列单片机的最小应用系统的构成,同时在此基础上扩展了一些实用性强的外围接口。
(2)掌握键盘接口原理,能正确地把键盘使用到单片机系统中,可以了解到LED显示器的结构,工作原理以及这种显示器的接口实例。
(3)学会调试电路,分析电路故障,积累电路调试经验。
三具体设计内容1 系统框图构成基于单片机系统的篮球计分计时器的系统构成框图如下所示:2硬件电路改进:由于原来的电路比较复杂,用了很多芯片,浪费成本,而且给后期调试的调试会带来较多麻烦,故对原来的硬件电路进行了改动。
改动方面主要关于数码管显示的驱动和位选的,前期的电路设计采用了大量的CD4511和CD4094来进行数码管显示的驱动和位选,而这次的电路设计只用了8个三极管就实现了这项功能。
下面前期电路设计的计时部分的原理图,还有更为复杂的计分原理图未给出a b c d e f gLEDa b c d e f gLEDa b c d e f gLEDa b c d e f gLEDCD4511a b c d e f gVCCAB C D LELTGNDBICD4511a b c d e f gVCCAB C D LELTGNDBICD4511a b c d e f gVCCAB C D LELTGNDBICD4511a b c d e f gVCCAB C D LELTGNDBI123a1a2a32526271641234a4a1a2a3a4a1a2a3a412349181920RESET X TAL2X TAL1GNDP2.4P2.5P2.6P3.6VCC8765b1b2b3b4b1b2b3b45678EAb3P1.0P1.1P1.2P1.3P2.0P2.1P2.2P2.3b4403171234212223248GNDK5K6K7调时启动\暂停\交换C130pF C230pFU112MHZ C322uF R11k¦¸GNDVDD5VVDD5V调时VSS5V蜂鸣器GND后期改进的整体原理图:(3)软件调试及组装软件的编程调试首先要抓住计分和计时两大模块,在这两大模块成功的基础上再进行其他细小模块的组装和完善。
篮球计分器 单片机 程序

TH0=(65536-50000)/256; //初值重装
TL0=(65536-50000)%256;
count1++; // 计数加一,实现时间的计算
delayms(5) ;
}
void displayfen1(fen1) //显示时间分的个位
{ P2=0xfb ;
P0=table[fen1] ;
delayms(5) ;
}
void displaymiao10(miao10) // 显示时间秒 的十位
miao++;
if(miao==60) //计时一分时,分加一,秒重新开始
{ miao=0;
fen++;
displayfen(fen); //显示分的更新
sbit fm=P1^7 ; //蜂鸣器控制口
//定义全局变量
uchar count1,count2,miao10,miao1,fen10,fen1,adui10;
uchar adui1,bdui10,bdui1,fen,adui,bdui,x,a,b;
count2++; //count2加一,实现计时一秒 (20个中断 为时间一秒)
if(count2==20)
{
count2=0; //到一秒时,count2重新开始,时间秒加一
char miao;
char code table[]={
0x40,0x5B,0x22,0x0a, //数码管编码表
0x19,0x0c,0x04,0x5a,
篮球计分器程序

/******************** //版权和版本声明* 文件标识:* 摘要:* 当前版本:* 作者:输入作者(或修改者)名字* 完成日期:2013年3月25日**********************************/#include <> //头文件unsigned char code Tab[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x08,0x03}; //段码表unsigned char dat[6]={0,0,0,0,0,0};sbit key1=P1^0; //位定义sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit key5=P1^4;sbit key6=P1^5;sbit key7=P1^6;sbit key8=P1^7;sbit key9=P3^0;sbit key10=P3^2;/***************************** 函数名称:延时函数* 函数功能:* 输入/输出参数:* 返回值:***************************************/void delay(unsigned int xms){ unsigned int i,j;for(i=0;i<xms;i++){ for(j=0;j<115;j++){;}}}/***************************** 函数名称:显示函数* 函数功能:* 输入/输出参数:* 返回值:***************************************/unsigned int h,h1,j,j1,m,k,k1;void fenli(){ //一队分离dat[0]=k/100; // 取百位dat[1]=k%100/10; // 取十位dat[2]=k%100%10; // 取个位//二队分离dat[3]=k1/100; // 取百位dat[4]=k1%100/10; // 取十位dat[5]=k1%100%10; // 取个位/**********************显示**************************************/ if(key10==1) // 两队中场切换{h=0x01; //A队队名P2=Tab[10];P0=h;delay(1);P2=0xff;h1=0x02;for(m=0;m<3;m++){P2=Tab[dat[m]]; //送段码P0=h1; //送位码delay(1); //延时P2=0xff; //关断h1=h1<<1; //左移}j=0x10; // b队队名P2=Tab[11];P0=j;delay(1);P2=0xff;j1=0x20;for(m=3;m<6;m++){P2=Tab[dat[m]];P0=j1;delay(1);P2=0xff;j1=j1<<1;}}/****************************切换**************************************************/else{h=0x01; // 队名P2=Tab[11];P0=h;delay(1);P2=0xff;h1=0x02;for(m=3;m<6;m++){P2=Tab[dat[m]];//送段码P0=h1; //送位码delay(1); //延时P2=0xff; //关断h1=h1<<1; //左移}j=0x10; // 队名P2=Tab[10];P0=j;delay(1);P2=0xff;j1=0x20; //送初值for(m=0;m<3;m++){P2=Tab[dat[m]];// 送段码P0=j1; //送位码delay(1); // 延时P2=0xff; // 关断j1=j1<<1; // 左移}}}/***************************** 函数名称:指示灯函数* 函数功能:* 输入/输出参数:* 返回值:***************************************/ void lingsheng(){P3_7=0X00;delay(200);P3_7=0x01;}/***************************** 函数名称:按键输入函数* 函数功能:* 输入/输出参数:* 返回值:***************************************/ void anjian(){if (key1==0) //减一{delay(40);if (key1==0){k--;if(k>835){k=0;}lingsheng();}}if (key2==0) //加一{delay(40);if (key2==0){k++;lingsheng();}}if (key3==0) //加二delay (40);if (key3==0){k=k+2;lingsheng();}}if (key4==0) //加三{delay(40);if (key4==0){k=k+3;lingsheng();}}if (key5==0) //减一{delay(40);if (key5==0){k1--;if(k1>835){k1=0;}lingsheng();}}if (key6==0) //加一{delay (40);if (key6==0){k1++;lingsheng();}}if (key7==0) //加二{delay(40);if (key7==0)k1=k1+2;lingsheng();}}if (key8==0) //加三{delay(40);if (key8==0){k1=k1+3;lingsheng();}}/**************清零*******************/if (key9==0){delay(40);if (key9==0){k1=0; k=0;lingsheng();}}}/***************************** 函数名称:主函数* 函数功能:* 输入/输出参数:* 返回值:***************************************/void main(){while (1){fenli();anjian();}}/************************** ***********************/。
篮球计时计分器

3.12 篮球计时计分器设计(8学时)一、设计原理该篮球计时计分器,由九个功能模块组成: 时钟产生模块、按键输入模块、系统的计时模块、24秒计时模块、数码管输出模块、led输出模块、计分模块、lcd输出模块、比分交换模块实现的主要功能:S1、S2分别用于两队比分的减1,S3、S4分别用于两队比分的加1,S5用于控制比赛的开始和暂停,S6用于24秒的重新置位,和进入下一节的显示切换,S7用于系统的复位,S8用于对比赛总时间减一分(调试时用,实际中不需要这个按键)。
液晶屏显示比分,数码管显示一节时间和24秒倒计时;当按下S7时,系统复位,液晶屏显示000:000 1st,数码管显示12 00 24;当按下S5时系统开始计时,若再按下S5则处于暂停状态;当24秒倒计时剩余时间小于一秒时,则显示为秒表计时方式;当24秒时间到了,则8个led灯全亮,比赛暂停,此时先按下S5再按S6则重新从24秒开始倒计时;当一节比赛结束时,8个led灯全亮,比赛暂停,此时先按下S5再按S6则进入下一节;当比赛进行到第三节时,则比分交换显示。
二、设计1、顶层图:2、各子模块及对应程序:(1)数码管输出模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity shumaguan isport( clk : in std_logic;ledag : out std_logic_vector(7 downto 0);del : out std_logic_vector(2 downto 0);m10 : in std_logic_vector(3 downto 0);m : in std_logic_vector(3 downto 0);s10 : in std_logic_vector(3 downto 0);s : in std_logic_vector(3 downto 0);s24_10 : in std_logic_vector(3 downto 0);s24 : in std_logic_vector(3 downto 0)); end shumaguan;architecture rtl of shumaguan issignal cq: std_logic_vector(3 downto 0);signal dount : std_logic_vector(2 downto 0);beginprocess(clk) --数码管动态扫描beginif(clk'event and clk='1' )thendount<=dount+1;end if;del<=dount;end process;process(dount,s24,s24_10,s,s10,m,m10)beginif(dount=0)thencq<=m10;elsif(dount=1)thencq<=m;elsif(dount=2)thencq<=s10;elsif(dount=3)thencq<=s;elsif(dount=4)thencq<="1111";elsif(dount=5)thencq<="1111";elsif(dount=6)thencq<=s24_10;elsif(dount=7)thencq<=s24;end if;end process;process(cq)--数码管显示begincase cq iswhen "0000" => ledag <="11000000";when "0001" => ledag <="11111001";when "0010" => ledag <="10100100";when "0011" => ledag <="10110000";when "0100" => ledag <="10011001";when "0101" => ledag <="10010010";when "0110" => ledag <="10000010";when "0111" => ledag <="11111000";when "1000" => ledag <="10000000";when "1001" => ledag <="10010000";when "1010" => ledag <="11111111";when "1011" => ledag <="11111111";when "1100" => ledag <="11111111";when "1101" => ledag <="11111111";when "1110" => ledag <="11111111";when "1111" => ledag <="11111111";when others => null;end case;end process;end rtl;(2)时钟产生模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity shizhong isport(clk:in std_logic;beep:out bit;clk_25hz,clk_100hz,clk_1khz:out std_logic); end shizhong;architecture rtl of shizhong issignal clk_100hz_s:std_logic;beginprocess(clk_100hz_s)variable q2:integer range 0 to 9;beginif(clk_100hz_s='1'and clk_100hz_s'event)then if(q2=3)thenclk_25hz<='1';q2:=q2+1;elsif(q2=4)thenclk_25hz<='0';q2:=0;else clk_25hz<='0';q2:=q2+1;end if;end if;end process;process(clk)variable q3:integer range 0 to 499999; beginif(clk='1'and clk'event)thenif(q3=499999)thenq3:=0;elseif(q3<250000)thenclk_100hz<='0';clk_100hz_s<='0';else clk_100hz<='1';clk_100hz_s<='1';end if;q3:=q3+1;end if;end if;end process;process(clk)variable q4:integer range 0 to 49999;beginif(clk='1'and clk'event)thenif(q4=49999)thenq4:=0;elseif(q4<25000)thenclk_1khz<='0';else clk_1khz<='1';end if;q4:=q4+1;end if;end if;end process;beep<='1';end rtl;(3)led输出模块library ieee;use ieee.std_logic_1164.all;entity led isport(ledin:in std_logic;ledout:out std_logic_vector(7 downto 0));end led;architecture rtl of led isbeginprocess(ledin)beginif(ledin='0')thenledout<="00000000";else ledout<="11111111";end if;end process;end rtl;(4)lcd输出模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity lcd isPort ( Clk : in std_logic; --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间Aout_100,Aout_10,Aout,Bout_100,Bout_10,Bout: in std_logic_vector(3 downto 0);period:in std_logic_vector(2 downto 0);LCD_RS : out std_logic; --寄存器选择信号LCD_RW : out std_logic; --液晶读写信号LCD_EN : out std_logic; --液晶时钟信号LCD_Data : out std_logic_vector(7 downto 0)); --液晶数据信号end lcd;architecture Behav of lcd istype STATE_TYPE is (START,write_C,write_D,WRITE_BYTE_C,WRITE_BYTE_D,wait_3m1,wait_3m2,wa it_5m1,wait_5m2,wait_100m); --12个状态,START:初始化各信号量,write_C(write_D):判断初始化指令(显示数据)是否输出完毕,WRITE_BYTE_C (WRITE_BYTE_D):输出一个指令(数据),wait_3m1,wait_3m2,wait_5m1,wait_5m2,wait_100m:延时type MY_ARRAY_C is array(0 to 4) of std_logic_vector(7 downto 0); --初始化的数据(控制指令)type MY_ARRAY_D is array(0 to 11) of std_logic_vector(7 downto 0);constant c_d: MY_ARRAY_C:=(x"38",x"0c",x"06",x"01",x"C3");signal d_d: MY_ARRAY_D;signal STATE: STATE_TYPE:=START;signal w_c_flag : integer range 0 to 2:=0; --写指令时用到的标志 signal w_d_flag : integer range 0 to 2:=0; --写数据时用到的标志signal write_c_cnt : integer range 0 to 5:=0; --指令的指针signal write_d_cnt : integer range 0 to 12:=0; --数据的指针signal cnt : integer range 0 to 100:=0; --延时用到的计数器beginLCD_RW <= '0' ; --写数据d_d(0)<="0000"&Aout_100+x"30";d_d(1)<="0000"&Aout_10+x"30";d_d(2)<="0000"&Aout+x"30";d_d(3)<="00111010";d_d(4)<="0000"&Bout_100+x"30";d_d(5)<="0000"&Bout_10+x"30";d_d(6)<="0000"&Bout+x"30";d_d(7)<="00100000";d_d(8)<="00100000";d_d(9)<="00000"&period+x"31";d_d(10)<="01110011";d_d(11)<="01110100";process(Clk,STATE) --液晶驱动控制器beginif rising_edge(Clk) thencase STATE iswhen START=>LCD_EN<='0';w_c_flag<=0;w_d_flag<=0;write_c_cnt<=0;write_d_cnt<=0;STATE<=WRITE_C; --下一个状态(即要执行的)是WRITE_C(相当于跳转)when WRITE_C=>case write_c_cnt iswhen 0 to 4=> --小于5,五个初始化指令未输出完,则要输出STATE<=WRITE_BYTE_C;when 5=>write_c_cnt<=0; --等于5,五个初始化指令已输出完,转入数据输出STATE<=WRITE_D; --转入数据输出end case;when WRITE_BYTE_C=>if(w_c_flag=0) then --w_c_flag=0,通道选择,数据输出LCD_RS<='0';LCD_Data<=c_d(write_c_cnt);w_c_flag<=1;STATE<=wait_3m1; --延时elsif(w_c_flag=1) then --w_c_flag=1,使能en='1' LCD_EN<='1';w_c_flag<=2;STATE<=wait_5m1; --延时elsif(w_c_flag=2) then --w_c_flag=2,使能en='0' LCD_EN<='0';w_c_flag<=0;write_c_cnt<=write_c_cnt+1; --当前数据已输出完,write_c_cnt加一指向下一个数据,并转入下一个数据输出WRITE_CSTATE<=WRITE_C;end if;when WRITE_D=>case write_d_cnt iswhen 0 to 11=>STATE<=WRITE_BYTE_D;when 12=>write_d_cnt<=0;STATE<=wait_100m; --所有数据输出完毕 end case;when WRITE_BYTE_D=>if(w_d_flag=0) thenLCD_RS<='1';LCD_Data<=d_d(write_d_cnt);w_d_flag<=1;STATE<=wait_3m2;elsif(w_d_flag=1) thenLCD_EN<='1';w_d_flag<=2;STATE<=wait_5m2;elsif(w_d_flag=2) thenLCD_EN<='0';w_d_flag<=0;write_d_cnt<=write_d_cnt+1;STATE<=WRITE_D;end if;when wait_3m1=>if (cnt>=3) thenSTATE<=WRITE_BYTE_C;cnt<=0;elsecnt<=cnt+1;STATE<=wait_3m1;end if;when wait_5m1=>if (cnt>=5) thenSTATE<=WRITE_BYTE_C;cnt<=0;elsecnt<=cnt+1;STATE<=wait_5m1;end if;when wait_3m2=>if (cnt>=3) thenSTATE<=WRITE_BYTE_D;cnt<=0;elsecnt<=cnt+1;STATE<=wait_3m2;end if;when wait_5m2=>if (cnt>=5) thenSTATE<=WRITE_BYTE_D;cnt<=0;elsecnt<=cnt+1;STATE<=wait_5m2;end if;when wait_100m=>if (cnt>=100) thenSTATE<=START; --该轮次的所有数据(指令,显示)都已输出,回到START,开始新一轮的输出cnt<=0;elsecnt<=cnt+1;STATE<=wait_100m;end if;end case;end if;end process;end Behav;(5)24秒计时模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY jishi24_cnt10 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END jishi24_cnt10;ARCHITECTURE rtl OF jishi24_cnt10 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 9;BEGINIF(res='1')THENq:=0;borrow<='0';ELSIF(reset='1'AND en='0')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=9;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt1_10 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt1_10;ARCHITECTURE rtl OF cnt1_10 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 9;BEGINIF(res='1')THENq:=4;borrow<='0';ELSIF(reset='1'AND en='0')THENq:=4;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=9;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt_2 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt_2;ARCHITECTURE rtl OF cnt_2 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 2;BEGINIF(res='1')THENq:=2;borrow<='0';ELSIF(reset='1'AND en='0')THENq:=2;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=2;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux1 isport(s1_10,s1,sec1_10,sec1,s10,s,sec10,sec:in std_logic_vector(3 downto 0);s10_out:out std_logic_vector(3 downto 0);s_out:out std_logic_vector(3 downto 0);ctrl_1,ctrl_2:in std_logic;pause:out std_logic;res:in std_logic);end mux1;architecture rtl of mux1 isbeginprocess(s1_10,s1,sec1_10,sec1,s10,s,sec10,sec,ctrl_1,ctrl_2)beginif(ctrl_1='1')thenif((s1_10<s10)or(s1_10=s10 and s1<=s))thens10_out<=s1_10;s_out<=s1;elses10_out<=s10;s_out<=s;end if;elsif(ctrl_2='1') thens10_out<=sec10;s_out<=sec;elseif(s1_10=0 and s1=0)thens10_out<=sec1_10;s_out<=sec1;elses10_out<=s1_10;s_out<=s1;end if;end if;end process;process(s1_10,s1,sec1_10,sec1,s10,s,sec10,sec,ctrl_1,ctrl_2)beginif(res='1')thenpause<='1';elsif((s1_10=0 and s1=0 and sec1_10=0 and sec1=0)or((ctrl_1='1'orctrl_2='1')and s10=0 and s=0 and sec10=0 and sec=0))then pause<='0';else pause<='1';end if;end process;end rtl;(6)计分模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jifen_cnt10 isport(res,decA,decB,incA,incB:in std_logic;Aout,Bout:buffer std_logic_vector(3 downto 0);b_decA,b_incA,b_incB,b_decB:out std_logic);end jifen_cnt10;architecture rtl of jifen_cnt10 issignal alter_A,alter_B:std_logic;beginalter_A<=decA or incA;alter_B<=decB or incB;process(res,decA,incA)beginif(res='1')thenAout<="0000";b_decA<='0';elsif(alter_A='1'and alter_A'event)thenif(decA='1')thenif(Aout="0000")thenAout<="1001";b_decA<='1';elseAout<=Aout-1;b_decA<='0';end if;elsif(incA='1')thenif(Aout="1001")thenAout<="0000";b_incA<='1';elseAout<=Aout+1;b_incA<='0';end if;end if;end if;end process;process(res,decB,incB)beginif(res='1')thenBout<="0000";b_decB<='0';elsif(alter_B='1'and alter_B'event)thenif(decB='1')thenif(Bout="0000")thenBout<="1001";b_decB<='1';elseBout<=Bout-1;b_decB<='0';end if;elsif(incB='1')thenif(Bout="1001")thenBout<="0000";b_incB<='1';elseBout<=Bout+1;b_incB<='0';end if;end if;end if;end process;end rtl;(7)系统计时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dectect isport(datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0); datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_sec10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_sec:IN STD_LOGIC_VECTOR(3 DOWNTO 0);discon:out std_logic;resetin:in std_logic;res:in std_logic;resetout:out std_logic;extra:out std_logic);end dectect;architecture rtl of dectect isbeginprocess(datain_m10,datain_m,datain_s10,datain_s,datain_sec10,datain_s ec,resetin)beginif(res='1')thenresetout<='0';elsif(datain_m10="0000" and datain_m="0000" and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")then resetout<=resetin;else resetout<='0';end if;end process;process(datain_m10,datain_m,datain_s10,datain_s,datain_sec10,datain_s ec,resetin)beginif(res='1')thenextra<='0';elsif(datain_m10="0000" and datain_m="0000" and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")then if(resetin='1'and resetin'event)thenextra<='1';end if;end if;end process;process(datain_m10,datain_m,datain_s10,datain_s,datain_sec10,datain_s ec,resetin)beginif(res='1')thendiscon<='0';elsif(((datain_m10="0010" ANDdatain_m="0100")or(datain_m10="0011" AND datain_m="0110")or(datain_m10="0001" AND datain_m="0010")) and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")thenif(resetin='1' and resetin'event)thendiscon<='1';end if;elsif(((datain_m10="0010" AND datain_m="0011")or(datain_m10="0011" AND datain_m="0101")or(datain_m10="0001" AND datain_m="0001")) and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")thendiscon<='0';end if;end process;end rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt4 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END cnt4;ARCHITECTURE rtl OF cnt4 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 4;BEGINIF(res='1')THENq:=4;borrow<='0';ELSIF(reset='1')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=4;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt6 ISPORT(res,en,clk: IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt6;ARCHITECTURE rtl OF cnt6 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 5;BEGINIF(res='1')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=5;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt10 ISPORT(res,en,clk: IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt10;ARCHITECTURE rtl OF cnt10 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 9;BEGINIF(res='1')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=9;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY conv ISPORT( discon:IN STD_LOGIC;datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);dataout_m10:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);dataout_m:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);extra:IN STD_LOGIC);END conv;ARCHITECTURE rtl OF conv ISBEGINPROCESS(datain_m10,datain_m)BEGINIF(extra='1')THENdataout_m10<=datain_m10;dataout_m<=datain_m;ELSIF((datain_m10="0001" AND datain_m<2)OR(datain_m10="0000")OR(datain_m10="0001" AND datain_m=2 AND discon='1'))THENdataout_m10<=datain_m10;dataout_m<=datain_m;ELSIF((datain_m10="0010" AND datain_m<4 AND datain_m>=2)OR(datain_m10="0001" AND datain_m>=2)OR(datain_m10="0010" AND datain_m=4 AND discon='1'))THENdataout_m10<=datain_m10-1;dataout_m<=datain_m-2;ELSIF(datain_m10="0010" AND datain_m<2)THENdataout_m10<="0000";dataout_m<=10+datain_m-2;ELSIF((datain_m10="0011" AND datain_m<6 AND datain_m>=4)OR(datain_m10="0010" AND datain_m>=4)OR(datain_m10="0011" AND datain_m=6 AND discon='1'))THENdataout_m10<=datain_m10-2;dataout_m<=datain_m-4;ELSIF(datain_m10="0011" AND datain_m<4)THENdataout_m10<="0000";dataout_m<=10+datain_m-4;ELSIF((datain_m10="0100" AND datain_m<=8 AND datain_m>=6)OR(datain_m10="0011" AND datain_m>=6))THENdataout_m10<=datain_m10-3;dataout_m<=datain_m-6;ELSIF(datain_m10="0100" AND datain_m<6)THENdataout_m10<="0000";dataout_m<=10+datain_m-6;END IF;END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ctrl ISPORT(res:IN STD_LOGIC;datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ctrl_1:OUT STD_LOGIC;ctrl_2:OUT STD_LOGIC);END ctrl;ARCHITECTURE rtl OF ctrl ISBEGINPROCESS(res,datain_m10,datain_m,datain_s10,datain_s)BEGINIF(res='1')THENctrl_1<='0';ctrl_2<='0';ELSIF((datain_m10="0000" AND datain_m="0000" )AND ((datain_s10="0010" AND datain_s<=4)OR(datain_s10="0001")OR(datain_s10="0000" AND datain_s>=1)))THENctrl_1<='1';ctrl_2<='0';ELSIF((datain_m10="0000" AND datain_m="0000" )AND (datain_s10="0000" AND datain_s="0000"))THENctrl_1<='0';ctrl_2<='1';ELSEctrl_1<='0';ctrl_2<='0';END IF;END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY period ISPORT(res:IN STD_LOGIC;reset:IN STD_LOGIC;discon:IN STD_LOGIC;datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);period:out std_logic_vector(2 downto 0);extra:IN STD_LOGIC);END period;ARCHITECTURE rtl OF period ISSIGNAL period_s:STD_LOGIC_VECTOR(2 downto 0);BEGINPROCESS(res,datain_m10,datain_m,extra,discon,RESET)BEGINIF(res='1')THENperiod_s<="000";ELSIF(extra='0')THENIF((datain_m10=1 AND datain_m<2)OR(datain_m10=0)OR(datain_m10=1 AND datain_m=2 AND discon='1'))THENperiod_s<="011";ELSIF((datain_m10=2 AND datain_m<4)OR(datain_m10=1 AND datain_m>=2)OR(datain_m10=2 AND datain_m=4 AND discon='1'))THENperiod_s<="010";ELSIF((datain_m10=3 AND datain_m<6)OR(datain_m10=2 AND datain_m>=4)OR(datain_m10=3 AND datain_m=6 AND discon='1'))THENperiod_s<="001";ELSIF((datain_m10=4 AND datain_m<=8)OR(datain_m10=3 AND datain_m>=6))THENperiod_s<="000";END IF;ELSIF(reset='0'AND reset'EVENT)THENperiod_s<=period_s+1;END IF;period<=period_s;END PROCESS;END rtl;(8)交换模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity jiaohuan isport(Ain_100:in std_logic_vector(3 downto 0); Ain_10:in std_logic_vector(3 downto 0);Ain:in std_logic_vector(3 downto 0);Bin_100:in std_logic_vector(3 downto 0); Bin_10:in std_logic_vector(3 downto 0);Bin:in std_logic_vector(3 downto 0);period:in std_logic_vector(2 downto 0);Aout_100:out std_logic_vector(3 downto 0); Aout_10:out std_logic_vector(3 downto 0); Aout:out std_logic_vector(3 downto 0);Bout_100:out std_logic_vector(3 downto 0); Bout_10:out std_logic_vector(3 downto 0); Bout:out std_logic_vector(3 downto 0));end jiaohuan;architecture behav of jiaohuan isbeginprocess(Ain_100,Ain_10,Ain,Bin_100,Bin_10,Bin,period)beginif(period<=1)thenAout_100<=Ain_100;Aout_10<=Ain_10;Aout<=Ain;Bout_100<=Bin_100;Bout_10<=Bin_10;Bout<=Bin;elseAout_100<=Bin_100;Aout_10<=Bin_10;Aout<=Bin;Bout_100<=Ain_100;Bout_10<=Ain_10;Bout<=Ain;end if;end process;end behav;(9)按键输入模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY anjian ISPORT(S1,S2,S3,S4,S5,S6,S7,S8,clk2: IN STD_LOGIC;dec,pause,res,reset,decA,decB,incA,incB: OUT STD_LOGIC); END anjian;ARCHITECTURE behav OF anjian ISSIGNALres2,res1,re,incA2,incA1,incB2,incB1,decA2,decA1,decB2,decB1,pause2,p ause1,pause_s,pause_s1,reset2,reset1,dec1,dec2:STD_LOGIC;BEGINPROCESS(S7,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENres2<=res1;res1<=S7;END IF;re<=res1 AND (NOT res2) AND clk2;END PROCESS;PROCESS(S1,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENincA2<=incA1;incA1<=S1;END IF;incA<=incA1 AND (NOT incA2) AND clk2; END PROCESS;PROCESS(S2,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENincB2<=incB1;incB1<=S2;END IF;incB<=incB1 AND (NOT incB2) AND clk2; END PROCESS;PROCESS(S3,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENdecA2<=decA1;decA1<=S3;END IF;decA<=decA1 AND (NOT decA2) AND clk2; END PROCESS;PROCESS(S4,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENdecB2<=decB1;decB1<=S4;END IF;decB<=decB1 AND (NOT decB2) AND clk2; END PROCESS;PROCESS(S5,clk2)BEGINIF(clk2='0' AND clk2'EVENT) THENpause2<=pause1;pause1<=S5;pause_s<=pause1 AND (NOT pause2) AND clk2; END PROCESS;PROCESS(pause_s)BEGINIF(re='1')THENpause_s1<='0';ELSIF(pause_s='1'AND pause_s'EVENT) THEN pause_s1<=NOT pause_s1;END IF;pause<=pause_s1;END PROCESS;PROCESS(S6,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENreset2<=reset1;reset1<=S6;END IF;reset<=reset1 AND (NOT reset2) AND clk2; END PROCESS;PROCESS(S8,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENdec2<=dec1;dec1<=S8;END IF;dec<=dec1 AND (NOT dec2) AND clk2;END PROCESS;END behav;三、引脚分配表四、设计结果当按下S7时,系统复位,液晶屏显示000:000 1st,数码管显示12 00 24当24秒时间到了,则16个led灯全亮,比赛暂停:。
篮球计分器毕业设计

毕业设计设计题目:单片机篮球计分器设计要求:1.本次设计的篮球计时计分器,电路简单,而且易懂,使操作利用者利用超级方便,本钱较低,灵敏靠得住,记录准确,程序简单,具有超级高的有效价值。
2.竞赛时加减分,加分按键有1分、2分、三分。
在加错的情形下要求能够减分,按键一次减1分。
3.设计内容包括计分器、,能够使参加竞赛的成员、裁判和观众一目了然的看到所有参加者的成绩,以最快的速度评出结果,该篮球计时计分还鞥普遍应用于各类只是竞赛。
设计进度要求:第一周:选定论文题目第二周:查找相关资料第三周:整理资料第周围:把握单片机硬件、软件的组成和应用第五周:完成论文,编程调试第六周:经教师检查后进行修改毕业论文第七周:打印论文,完成毕业论文第八周:答辩目录1概述 (4)2系统设计方案 (5)大体功能介绍 (5)系统组成框图 (5)3系统硬件设计 (6)3.1 A T89C51简介 (6)3.2 单片机的工作条件 (9)3.2.1 时钟电路 (10)3.2.2 复位电路 (12)4软件设计 (14)软件的设计 (14)总的程序设计代码 (17)致谢 (19)参考文献 (21)总结 (22)附录1 硬件原理图 (23)1概述单片机把咱们带入了智能化的电子领域,许多繁琐的系统假设由单片机进行设计,便能收到电路更简单、功能更齐全的良好成效。
假设把更经典的点子系统看成一个僵死的点子系统,那么智能化的现代电子系统那么是一个具有"生命"的电子系统。
而随着技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成一种趋势。
单片机具有体积笑、功能强、应用面广等优势,目前正以前所未见的速度取代着传统电子线路组成的经典系统,蚕食着传统数字电路与模拟电路固有的领域。
同时,一个学习与应用单片机的新高潮正在大规模地兴起。
可是,单片机并非像传统数字电路或模拟电路那样直观,缘故是除“硬件”之外,还存在一个“软件”的因素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[]=".. Play ball! ....";uchar code table1[]="Welcome to here!" ;sbit key_ST=P1^5; //功能键(开始/暂停)sbit key_A1=P1^0; //功能键(A队分数加1)sbit key_A2=P1^3; //功能键(A队分数加2)sbit key_1A=P1^6; //功能键(A队分数减1)sbit key_B1=P1^1; //功能键(B队分数加1)sbit key_B2=P1^4; //功能键(B队分数加2)sbit key_1B=P1^7; //功能键(B队分数减1)sbit key_EX=P1^2; //功能键(交换场地,A/B两队分数交换)sbit key_JS=P3^0; //功能键(比赛节数加1)sbit FMQ=P3^3; //蜂鸣器sbit lcdrs=P3^5; //LCD显示的数据/命令选择端sbit lcden=P3^4; //LCD显示的使能信号uchar flag,ms,mg,ss,sg,ags,agg,bgs,bgg,num,num1,num2,js=1,C,D,t,min=0,time_fmq;int sec=12;void delayms(uint xms) //定义延时函数{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void write_data(uchar date) //定义为数据模式{lcdrs=1;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;}void write_com(uchar com) //定义为命令模式{lcdrs=0;P0=com;delayms(5);lcden=1;delayms(5);lcden=0;}void lcd_init() //LCD显示屏的初始化{lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}void init() //LCD显示屏的初始化2(即输出“T-”、“Q-”、“A:”、“B:”){lcden=0;write_com(0x82);write_data('T');write_data('-');write_com(0x8a);write_data('Q');write_data('-');write_com(0x80+0x43);write_data('A');write_data(':');write_com(0x80+0x49);write_data('B');write_data(':');}void init_start() //LCD显示屏的初始化2(即输出“T-”、“Q-”、“A:”、“B:”){lcden=0;write_com(0x80+0x10);for(num2=0;num2<16;num2++){write_data(table1[num2]);delayms(5);}write_com(0x80+0x50);for(num2=0;num2<17;num2++){write_data(table[num2]);delayms(5);}for(num2=0;num2<16;num2++){write_com(0x18);delayms(400);}}void display(uchar min,int sec,uchar C,uchar D,uchar js) //显示函数{ss=sec/10;sg=sec%10;ms=min/10;mg=min%10;ags=C/10;agg=C%10;bgs=D/10;bgg=D%10;write_com(0x84);write_data(0x30+ms);write_data(0x30+mg);write_data(':');write_data(0x30+ss);write_data(0x30+sg);write_com(0x8d-1);write_data(0x30+js);write_com(0x80+0x45);write_data(0x30+ags);write_data(0x30+agg);write_com(0x80+0x4b);write_data(0x30+bgs);write_data(0x30+bgg);}void main(){TMOD=0x11;//定义定时器0的工作方式为0001TH0=(65536-45872)/256; //装初值TL0=(65536-45872)%256;TH1=(65536-45872)/256; //装初值TL1=(65536-45872)%256;EA=1;//打开总中断ET0=1;//打开定时器0的中断TR0=0;ET1=1;TR1=0;lcd_init();init_start();while(1){TR1=0;if(key_ST==0){delayms(5);if(key_ST==0){FMQ=0;if(flag==0){lcd_init();init();}flag=1;TR0=~TR0;}while(!key_ST)display(min,sec,C,D,js);FMQ=1;}if(key_A1==0){delayms(5);if(key_A1==0){FMQ=0;C++;}while(!key_A1)display(min,sec,C,D,js);FMQ=1;}if(key_A2==0){delayms(5);if(key_A2==0){FMQ=0;C+=2;}while(!key_A2)display(min,sec,C,D,js);FMQ=1;}if(key_1A==0){delayms(5);if(key_1A==0){FMQ=0;C--;}while(!key_1A)display(min,sec,C,D,js);FMQ=1;}if(key_B1==0){delayms(5);if(key_B1==0){FMQ=0;D++;}while(!key_B1)display(min,sec,C,D,js);FMQ=1;}if(key_B2==0){delayms(5);if(key_B2==0){FMQ=0;D+=2;}while(!key_B2)display(min,sec,C,D,js);FMQ=1;}if(key_1B==0){delayms(5);if(key_1B==0){FMQ=0;D--;}while(!key_1B)display(min,sec,C,D,js);FMQ=1;}while(min==0&&sec==0){TR0=0;TR1=1;if(key_ST==0){if(key_ST==0){FMQ=0;min=11;sec=60;TR0=~TR0;}while(!key_ST)display(min,sec,C,D,js);FMQ=1;}if((key_EX==0)&&(js==2)){delayms(10);if((key_EX==0)&&(js=2)){FMQ=0;write_com(0x80+0x43);write_data('B');write_com(0x80+0x49);write_data('A');t=C;C=D;D=t;}while(!key_EX)display(min,sec,C,D,js);FMQ=1;}if(key_JS==0){delayms(10);if(key_JS==0){FMQ=0;js++;}while(!key_JS)display(min,sec,C,D,js);FMQ=1;}}display(min,sec,C,D,js);}}void T0_time()interrupt 1 //中断0控制晶码管显示时间{TH0=(65536-45872)/256; // 重装初值TL0=(65536-45872)%256;num++;if(num==20){num=0;sec--;if(sec<0){sec=59;min--;}}}void T1_time()interrupt 3 //中断0控制晶码管显示时间{TH1=(65536-45872)/256; // 重装初值TL1=(65536-45872)%256;num1++;if(num1==20){num1=0;time_fmq++;if(time_fmq>=4)FMQ=1;elseFMQ=0;}}。