基于AT89S52的篮球足球比赛计时计分器仿真与实物制作
- 格式:doc
- 大小:6.50 MB
- 文档页数:16
基于单片机的篮球计时计分器设计设计篮球计时计分器是一种用于篮球比赛计时和计分的设备。
基于单片机的篮球计时计分器设计可以实现自动计时、计分、显示比分等功能,使得篮球比赛更加准确和便捷。
本文将介绍基于单片机的篮球计时计分器的设计和实现。
设计思路:基于单片机的篮球计时计分器主要由显示模块、计时模块、计分模块、控制模块等组成。
其中,显示模块用于实时显示比赛时间和比分情况;计时模块用于计时并显示剩余时间;计分模块用于记录比赛双方的得分情况;控制模块用于整合各个模块的功能和控制比赛的进行。
首先,我们需要选择一款适合的单片机来实现篮球计时计分器。
一般情况下,AT89S52是比较常用的单片机,它具有较强的计算和控制能力,可以满足篮球计时计分器的需求。
接下来,我们需要确定显示模块的类型。
一种常见的显示模块是七段数码管,用于显示比赛时间和比分情况。
七段数码管可以通过单片机的IO口进行控制,显示时间和比分的变化。
计时模块可以通过在单片机中设置定时器来实现。
定时器可以定期产生一个中断信号,通过处理中断信号来实现计时功能。
可以设置定时器的初值和中断次数来实现精确的计时。
计分模块可以通过增加加减分按钮和设置相关的IO口来实现。
当按下加分按钮时,计分模块将调用相应的函数来增加得分;当按下减分按钮时,计分模块将调用相应的函数来减少得分。
计分模块还可以实现显示当前比分的功能。
控制模块是整个篮球计时计分器的核心模块。
通过对各个模块的控制和操作,实现比赛的正常进行。
控制模块还可以增加暂停和继续比赛的功能,通过设置相应的标志位来实现。
接下来,我们需要根据设计思路进行硬件电路的连接和单片机程序的编写。
硬件电路的连接包括七段数码管的连接、计时器连接、按钮连接等。
单片机程序的编写需要包括显示模块的控制程序、计时模块的中断处理程序、计分模块的加减分函数等。
最后,我们需要进行测试和优化。
测试可以通过模拟篮球比赛的环境,模拟时间和比分的变化,检查计时计分器的功能是否正常。
1.1设计的内容与要求设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求:(1)能记录整个赛程的比赛时间,并能暂停。
(2)能随时刷新甲、乙两队在整个比赛过程中的比分。
(4)比赛结束时,能发出报警声。
在篮球比赛过程中需要对参赛双方的比分进行快速的采集记录和加工处理,需要一个快捷方便的计分系统。
该计分系统是一种得分类型的系统,即根据不同球队的不同得分,进行相应的处理,并且能够实时的显示出来。
又因为篮球比赛是分节进行的,所以还需要有倒计时功能的计时器,以便于观众实时了解赛况。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,功耗低,价格便宜,可靠性高和使用方便等独特的优点,目前已经成为测量控制应用系统中的优选元器件。
篮球计时计分器就是以单片机为核心的计时计分系统,有计时器、计分器、直流电源、时钟电路、按键等组成,完全能够实现上述的功能。
1.2设计的目的及意义随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,因此掌握单片机的一些基本功能就显的十分重要。
本次设计是采用AT89S52来编程控制LED七段数码管,使其能够显示篮球比赛的时间和计分,该系统具有赛程时间实时显示、时间暂停以及刷新A/B球队的成绩等功能。
通过本次设计可以了解、熟悉有关单片机的开发设计过程,并更进一步加深对单片机的了解和应用,掌握单片机与外围接口的一些方法与技巧,以及AT89S52单片机的最小应用系统的构成。
还可以了解LED数码管的结构、工作原理、编程方法以及相关的接口实例与具体连接。
通过本次设计可以很好的把课本的理论知识和实践有机的联系起来,是我们对理论知识有更深一步的掌握,为以后的学习打下坚实的基础。
2.1任务分析充分了解本设计要求,明确设计的全部功能、要求及技术指标;熟悉AT89S52单片机与控制对象的各种参数、关系和特点。
按题目要求能记录整个赛程的比赛时间,并能暂停,则需要暂停按键和7段共阴极LED数码管,其中时间显示按每节10分钟倒计时显示分和秒;能随时刷新A/B两队在整个比赛过程中的比分,加分有误时可通过按键实现减分调整,则需要有加减分按键、切换按键等。
基于AT89S52数字钟的设计与制作作者:王少炯来源:《山东工业技术》2015年第16期摘要:采用纯数字集成电路设计制作数字钟电路较复杂,而单片机数字钟只用了较简单的硬件,通过编写C程序可实现完善的功能。
关键词:数字钟;AT89S52;C程序、0 前言在以前很多杂志上都介绍了数字钟的制作,其电路或者较为复杂,或者所选的单片机很多编程器不支持,不便于初学者自制。
本文设计的数字钟具有电路简单、成本低(全部元件近30元)、元件易购、功能全、走时精度高的特点,很适合万能实验板自制。
1 硬件系统设计:(1)元件清单:(2)电路原理图如图1。
本数字数字钟采用ATMEL公司的AT89S52为主芯片。
AT89S52为40脚双列直插封装的单片机,与MCS-51单片机产品兼容,8K字节在系统可编程Flash存储器,1000次擦写周期,32个可编程I/O口线,三个16位定时器/计数器,八个中断源,支持ISP,是单片机初学者首选芯片。
为了简化电路安装,数码管分别采用1位(显示星期,也可以采用2位代替),2位(显示时、分、月、日),4位(显示年)共阳极数码管,引脚功能见图,需要注意的是,不同厂家的数码管的引脚可能不同,可用万用表或电池进行测试。
驱动三极管采用1N5401,也可采用2SC1015等小功率PNP型三极管,但要注意脚位。
功能按钮采用微动开关,S1为位选择,接于P3.2口, S2为增1,接于P3.3口,S3为减1,接于P3.4口。
按一次S1按钮,分位闪烁,再按一次,依次为时、星期、日、月、年位闪烁,此时,按S2,或S3按钮,选定位加一或减一,达到调整时钟的目的。
在年位闪烁时,再按一次S1,返回正常计时状态。
由于P3口内有上拉电阻,所以外部无需上拉电阻。
复位电路,只要求持续2个机器周期,R*C>2us,即可对单片机进行复位。
S4为复位按钮,可对数字钟进行初始化复位。
AT89S52 40脚接+5V,20脚接地,31脚为EA/VPP,访问外部程序存储器控制信号。
设计任务:1、显示内容,队名用英文名,3个大写字母20分队名1-A:队名2-B =xxx:xxx第x节剩余时间:XX分XX秒2、串口控制20分A+1% A队加1分,%为结束符A+2% A队加2分,%为结束符A+3% A队加3分,%为结束符B+1% B队加1分,%为结束符以此类推3、串口控制交换场地5分A-B% AB队交换4、20 分PAUSE% 计时暂停按键1-定义为PAUSE按键用ZLG7290RESTART%重新计时按键2-定义为RESTARTRESET%重新比赛按键3-定义为RESET5、存储近5场的成绩到AT24C02 格式:1-队名1队名2=90:100类推20分RECALL1% 提取存储的第1场成绩,在数码管上显示,只显示比分,串口传回队名+比分&整场结束,提示是否保存成绩,按键4-存储键按键5-放弃键15分源代码:接线说明:PSB-VCC RS-P1.0 RW-P1.1 P1.3-E INT-P3.2 TXD-P3.1 RXD-P3.0 SDA-P1.6 SCL-P1.7 I2C 总线的ABC》别接键盘的ABCD以程序为准凭记忆写出来的)主程序#include<reg51.h>#include<intrins.h>#include<string.h>#include<I2C.h>#include <ZLG7290.h>#define unchar unsigned char #define unit unsigned int #define Lcd_Bus P0#define unchar unsigned char unsigned char KeyValue,FlagINT; int ney;// 纪录第及场比赛sbit RS=P1A0;//LCD 显示屏sbit RW=P1A1;sbit E=P1A3;unchar code lcddata[]={"0123456789:"};unchar code duiming[]={'1','H','O','U',':','2','C','H','I','='};unchar bifen[7];unchar fen1;unchar fen2;unchar jie;unchar min;unchar sec;unchar control;unchar table[10];************** 延时函数***********************void delay(unsigned int t) { unsigned int i,j;for(i=0;i<t;i++) for(j=0;j<10;j++)/* ------------ 写命令到LCD ---------------------- */void write_com(unsigned char cmdcode) {//chk_busy();RS = 0; // 置零RW = 0;E = 1;Lcd_Bus = cmdcode;delay(10); // 在数据写入的时候加入适当的延时 E = 0;}/* ------------ 写数据到LCD ---------------------- */void write_data(unsigned char Dispdata){//chk_busy();RS = 1; // 写数据RW = 0;E = 1;Lcd_Bus = Dispdata;delay(10); // 在数据写入的时候加入适当的延时 E = 0;/******* 函数名称:Write_Char* 功能描述:写字符******/ void write_char(unsigned int num){// chk_busy();RS = 1;RW = 0;E = 1;Lcd_Bus = lcddata[num];E = 0;}/* ------------ 显示字符串----------------- */void hzkdis(unsigned char code *s){ while(*s>0){ write_data(*s);// 选择基本指令集 (30H )// 点设定,游标右移// 开显示控制 (无游标、不反白 )// 清除显示,并且设定地址指针为 00H //unchar duiming[]= "1-HOU:2-CHI";// 队名数组//unchar bifen[7];// 比分数组unchar k;// 记录第几场比赛void timer0init(void) {TMOD=0X21;TH0=0X31;TL0=0XB0;ET0=1;EA=1;TR0=1;//IT0=1;// EX0=1;}/***** 用作串口通信 ****/ void timer1init(void){TH1=0xf3;TL1=0XF3;SCON=0X50;EA=1;ES=1;TR1=1;}/**** 保存成绩 */void save(int ney){ s++;/* ------------ 初始化 LCD 屏 ----------------- */ /*** 用作计时***/void lcdreset() { write_com(0x30);delay(16); write_com(0x04);delay(16);write_com(0x0f); delay(16);write_com(0x01);delay(16);}(同时地址归为 )int i;unchar buff[7];// ney++;ZLG7290_Download(i,0,0,0X0A); bifen[2]=fen2/100;bifen[1]=(fen2%100-fen2%10)/10;bifen[0]=fen2%10;bifen[3]=0X1F;bifen[6]=fen1/100;bifen[5]=(fen1%100-fen1%10)/10;bifen[4]=fen1%10;for(i=0;i<7;i++){x24c02_write(i+7*ney,bifen[i]);}for(i=0;i<7;i++){buff[i]=x24c02_read(i+7*ney); delay(12);}for(i=0;i<7;i++){ZLG7290_Download(i,0,0,buff[i]);}/********** 将存储在at24c02 的数据通过串口通信发还给电脑**/ void fahuan(unsigned char k){unchar buff[7],i;for(i=0;i<10;i++){SBUF=duiming[i];while(!TI){;}TI=0;}for(i=0;i<7;i++){buff[i]=x24c02_read(i+7*k);delay(12);}for(i=0;i<7;i++){ZLG7290_Download(i,0,0,buff[i]);}for(i=6;i>3;i--){SBUF=buff[i]+48;while(!TI){;}TI=0;}SBUF=':';while(!TI){;}TI=0;SBUF=buff[2]+48;while(!TI){;}TI=0;SBUF=buff[1]+48; while(!TI){;} TI=0;SBUF=buff[0]+48; while(!TI){;} TI=0;P2=0xf0;}/**** 定时器中断用作计时**/ void timer0(void) interrupt 1 using 1 {static unchar count=0; unchar i;TH0=0X3C;TL0=0XB0; count++;if(count==20){count=0;sec--;if(sec==-1){sec=59; min--; if(min==-1) {if(jie<=3) {write_com(0x01); jie++;min=1; } else { // TR0=0;control=0; //save();}}}}/**** 主要用作显示比分**/void show_fen1(void){ write_com(0x80); hzkdis("2-CHI:1-HOU=");write_com(0x90); delay(16);write_char(fen2/ 100); delay(16);write_char((fen2%100-fen2% 10)/10); delay(16);write_char(fen2% 10); delay(16);write_char( 10 ); delay(16) ;write_char(fen1/ 100); delay(16);write_char((fen1%100-fen1% 10)/10); delay(16);write_char(fen1% 10); delay(16);}/**** 显示比分队名顺序相反**/void show_fen0(void){write_com(0x80);hzkdis("1-HOU:2-CHI=");write_com(0x90); delay(16);write_char(fen1/ 100); delay(16);write_char((fen1%100-fen1% 10)/10); delay(16);write_char(fen1% 10);write_char( 10 ); delay(16) ;write_char(fen2/ 100); delay(16); write_char((fen2%100-fen2%10)/10); delay(16);write_char(fen2% 10); delay(16);}/*** 显示时间**/void show_time(void){write_com(0x88);if(jie%10==1)hzkdis("第 1 节”);if(jie%10==2)hzkdis("第 2 节");if(jie%10==3)hzkdis("第 3 节");if(jie%10==4)hzkdis("第 4 节");write_com(0x8c);hzkdis("剩余时间");write_com(0x9a);delay(16);write_char( min / 10 );delay(16);write_char( min % 10 );delay(16);write_char( 10 );delay(16);write_char( sec / 10 );delay(16);write_char( sec % 10 );}void show(){write_com(0x80);hzkdis("是否保存成绩?”);write_com(0x90);hzkdis("y press butter 4"); write_com(0x88);hzkdis("n press butter 5 "); write_com(0x98);hzkdis(" ");}/***** 串口中断处理来自串口助手的命令*/ void chuanko() interrupt 4 {unchar i=0;unchar buff[]="wrong";while(1){ while(!RI);RI=0; if(SBUF=='%') break; table[i]=SBUF;i++;} if(table[0]=='A'&&table[1]=='+'&&table[2]=='1') fen1++;else if(table[0]=='A'&&table[1]=='+'&&table[2]=='2') {fen1++;fen1++;}else if(table[0]=='A'&&table[1]=='+'&&table[2]=='3') {fen1++;fen1++;fen1++;}else if(table[0]=='B'&&table[1]=='+'&&table[2]=='1')fen2++;else if(table[0]=='B'&&table[1]=='+'&&table[2]=='2'){fen2++;fen2++;}else if(table[0]=='B'&&table[1]=='+'&&table[2]=='3'){fen2++;fen2++;fen2++;}else if(table[0]=='A'&&table[1]=='-'&&table[2]=='B'){control=2;// 交换场地}elseif(table[0]=='P'&&table[1]=='A'&&table[2]=='U'&&table[3]=='S'&&table[4]=='E'){TRO=(~TRO);〃暂停}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='S'&&table[3]=='T'&&table[4]=='A'&&table[5]==' R'& &table[6]=='T'){TR0=0;min=11;sec=59;TR0=1;〃重新计时}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='S'&&table[3]=='E'&&table[4]=='T'){ timer0init();// TR0=0;min=11;sec=59;jie=1;fen1=0;fen2=0;TR0=1;〃重新开始write_com(0x01);control=1;}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='1'){ ZLG7290_Download(i,0,0,0X0E);fahuan(0);//shuma(1);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]=='L'& &table[6]=='2'){ fahuan(1);//shuma(2);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='3'){ fahuan(2);//shuma(3);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='4'){ fahuan(3);//shuma(4);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='5'){ fahuan(4);//shuma(5);}else{ for(i=0;i<6;i++) {SBUF=buff[i]; while(!TI); TI=0;/**** 外部中断初始化响应按键中断**/void SystemInit(){I2C_Init();EA = 0;IT0 = 1; // 负边沿触发中断EX0 = 1; // 允许外部中断EA = 1; // 等待ZLG7290 复位完毕}/***** 外部中断函数响应各个按键**/void INT0_SVC() interrupt 0 {unchar i; ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);// 显示键值DispValue(0,KeyValue); if(KeyValue==0x09) {TRO=(~TRO);//暂停} if(KeyValue==0x0a){TR0=0;min=11;sec=59;TR0=1;//重新计时} if(KeyValue==0x0b)timer0init(); write_com(0x01);TR0=0;min=11;sec=59;jie=1;fen1=0;fen2=0;control=1;TR0=1;〃重新开始} if(KeyValue==0x0c) { save(ney);ney++;timer0init();// 响应完中断记得重新初始化不然可能会出错timer1init();SystemInit();}main(){min=11;sec=59;fen1=0;fen2=0;jie=1;control=1;ney=0;timer0init();timer1init();lcdreset();SystemInit();//系统初始化while(1){if(control==1){show_fen0(); show_time();}if(control==0){show();// 比赛结束提示}if(control==2){show_fen1();// 交换场地show_time();}I2C.C标准80C51单片机模拟I2C总线的主机程序Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved.本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#i nclude "I2C.h"//定义延时变量,用于宏l2C_Delay()un sig ned char data I2C_Delay_t;/*宏定义:I2C_Delay()功能:延时,模拟I2C总线专用*/#defi ne I2C_Delay()\{\I2C_Delay_t = (I2C_DELAY_VALUE);\ while ( --I2C_Delay_t != 0 );\/*函数:I2C_I nit()功能:I2C总线初始化,使总线处于空闲状态说明:在main()函数的开始处,通常应当要执行一次本函数*/void I2C_I nit(){I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();/*函数:I2C_Start()功能:产生I2C 总线的起始状态说明:SCL处于高电平期间,当SDA出现下降沿时启动I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生起始状态本函数也可以用来产生重复起始状态本函数执行后,I2C总线处于忙状态*/void I2C_Start(){I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 0;I2C_Delay();I2C_SCL = 0;I2C_Delay();} /* 函数:I2C_Write()功能:向I2C总线写1个字节的数据参数:dat:要写到总线上的数据*/ void I2C_Write(char dat){unsigned char t = 8;do{I2C_SDA = (bit)(dat & 0x80);dat <<= 1;I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();} while ( --t != 0 );/*函数:I2C_Read() 功能:从从机读取 1 个字节的数据返回:读取的一个字节数据*/char I2C_Read(){char dat;unsigned char t = 8;I2C_SDA = 1; //在读取数据之前,要把SDA拉高do {I2C_SCL = 1;I2C_Delay();dat <<= 1;if ( I2C_SDA ) dat |= 0x01;I2C_SCL = 0;I2C_Delay();} while ( --t != 0 ); return dat;}/*函数:I2C_GetAck() 功能:读取从机应答位返回:0:从机应答1 :从机非应答说明:从机在收到每个字节的数据后,要产生应答位从机在收到最后 1 个字节的数据后,一般要产生非应答位*/bit I2C_GetAck(){bit ack;I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();ack = I2C_SDA; I2C_SCL = 0;I2C_Delay();return ack;/*函数:I2C_PutAck() 功能:主机产生应答位或非应答位参数:ack=O:主机产生应答位ack=1 :主机产生非应答位说明:主机在接收完每一个字节的数据后,都应当产生应答位主机在接收完最后一个字节的数据后,应当产生非应答位*/void I2C_PutAck(bit ack){I2C_SDA = ack;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();}/*函数:I2C_Stop()功能:产生I2C 总线的停止状态说明:SCL处于高电平期间,当SDA出现上升沿时停止I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生停止状态本函数执行后,I2C总线处于空闲状态*/void I2C_Stop(){unsigned int t = I2C_STOP_WAIT_VALUE;I2C_SDA = 0;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();while ( --t != 0 ); // 在下一次产生Start 之前,要加一定的延时} /*函数:I2C_Puts()功能:I2C总线综合发送函数,向从机发送多个字节的数据参数:SlaveAddr:从机地址(7位纯地址,不含读写位)SubAddr:从机的子地址SubMod:子地址模式,0—无子地址,1 —单字节子地址,2—双字节子地址*dat :要发送的数据Size:数据的字节数返回:0:发送成功1 :在发送过程中出现异常说明:本函数能够很好地适应所有常见的I2C 器件,不论其是否有子地址当从机没有子地址时,参数SubAddr 任意,而SubMod 应当为0*/bit I2C_Puts(unsigned char SlaveAddr, unsigned int SubAddr, unsigned char SubMod, char *dat, unsigned int Size){// 定义临时变量unsigned char i;char a[3];// 检查长度if ( Size == 0 ) return 0;// 准备从机地址a[0] = (SlaveAddr << 1);// 检查子地址模式if ( SubMod > 2 ) SubMod = 2;// 确定子地址switch ( SubMod ){case 0: break;case 1:a[1] = (char)(SubAddr);break;case 2:a[1] = (char)(SubAddr >> 8);a[2] = (char)(SubAddr);break;default: break;}// 发送从机地址,接着发送子地址(如果有子地址的话) SubMod++;I2C_Start();for ( i=0; i<SubMod; i++ ){I2C_Write(a[i]);if ( I2C_GetAck() ){I2C_Stop(); return 1;}}// 发送数据do{I2C_Write(*dat++);if ( I2C_GetAck() ) break;} while ( --Size != 0 );//发送完毕,停止I2C总线,并返回结果I2C_Stop();if ( Size == 0 ){return 0;}else{return 1;}}/*函数:I2C_Gets()功能:I2C总线综合接收函数,从从机接收多个字节的数据参数:SlaveAddr:从机地址(7位纯地址,不含读写位)SubAddr:从机的子地址SubMod:子地址模式,0—无子地址,1 —单字节子地址, *dat :2—双字节子地址保存接收到的数据Size:数据的字节数返回:0:接收成功1 :在接收过程中出现异常说明:本函数能够很好地适应所有常见的I2C 器件,不论其是否有子地址当从机没有子地址时,参数SubAddr 任意,而SubMod 应当为0 */bit I2C_Gets(unsigned char SlaveAddr, unsigned int SubAddr, unsigned char SubMod, char *dat, unsigned int Size){// 定义临时变量unsigned char i; char a[3];// 检查长度if ( Size == 0 ) return 0;// 准备从机地址a[0] = (SlaveAddr << 1);// 检查子地址模式if ( SubMod > 2 ) SubMod = 2;// 如果是有子地址的从机,则要先发送从机地址和子地址if ( SubMod != 0 ){//确定子地址if ( SubMod == 1 ){a[1] = (char)(SubAddr);}else{a[1] = (char)(SubAddr >> 8); a[2] = (char)(SubAddr);} //发送从机地址,接着发送子地址SubMod++;I2C_Start();for ( i=0; i<SubMod; i++ ){ I2C_Write(a[i]); if ( I2C_GetAck() ) {I2C_Stop();return 1;}}//这里的l2C_Start()对于有子地址的从机是重复起始状态//对于无子地址的从机则是正常的起始状态l2C_Start();// 发送从机地址l2C_Write(a[0]+1);if ( l2C_GetAck() ){l2C_Stop();return 1;}//接收数据for (;;){*dat++ = l2C_Read();if ( --Size == 0 ){ l2C_PutAck(1); break;} l2C_PutAck(0);}//接收完毕,停止I2C总线,并返回结果l2C_Stop();return 0;}/*ZLG7290.c数码管显示与键盘管理芯片ZLG7290的标准80C51驱动程序C文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved.本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/ #include "I2C.h"#include "ZLG7290.h" /*函数:ZLG7290_WriteReg()功能:向ZLG7290的某个内部寄存器写入数据参数:RegAddr:ZLG7290的内部寄存器地址dat :要写入的数据返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_WriteReg(unsigned char RegAddr, char dat){bit b;b = I2C_Puts(ZLG7290_I2C_ADDR,RegAddr,1,&dat,1); return b;}/*函数:ZLG7290_ReadReg()功能:从ZLG7290的某个内部寄存器读出数据参数:RegAddr:ZLG7290的内部寄存器地址*dat :保存读出的数据返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat){bit b;b = I2C_Gets(ZLG7290_I2C_ADDR,RegAddr,1,dat,1); return b;}/*函数:ZLG7290_cmd()功能:向ZLG7290发送控制命令参数:cmdO :写入CmdBufO寄存器的命令字(第1字节) cmdl :写入CmdBufl寄存器的命令字(第2字节) 返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_cmd(char cmd0, char cmd1){bit b;char buf[2];buf[0] = cmd0;buf[1] = cmd1;b = I2C_Puts(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,1,buf,2); return b; }/* 函数:ZLG7290_SegOnOff()功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段参数:seg:取值0〜63,表示数码管(或LED)的段号b:0 表示熄灭, 1 表示点亮返回:0:正常1:访问ZLG7290时出现异常说明:在每一位数码管中,段号顺序按照“ a,b,c,d,e,f,g,dp ”进行*/bit ZLG7290_SegOnOff(char seg, bit b){char cmd;cmd = seg & 0x3F;if ( b ) cmd |= 0x80;return ZLG7290_cmd(0x01,cmd);}/*函数:ZLG7290_Download() 功能:下载数据并译码参数:addr :取值0〜7,显示缓存DpRamO〜DpRam7的编号dp:是否点亮该位的小数点,0 —熄灭,1—点亮flash:控制该位是否闪烁,0—不闪烁,1—闪烁dat :取值0〜31,表示要显示的数据返回:0:正常1:访问ZLG7290时出现异常说明:显示数据具体的译码方式请参见ZLG7290的数据手册*/bit ZLG7290_Download(char addr, bit dp, bit flash, char dat){char cmd0;char cmd1;cmd0 = addr & 0x0F;cmd0 |= 0x60;cmd1 = dat & 0x1F;if ( dp ) cmd1 |= 0x80;if ( flash ) cmd1 |= 0x40;return ZLG7290_cmd(cmd0,cmd1);} /*I2C.h标准80C51单片机模拟I2C总线的主机程序头文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#ifndef _I2C_H_ #define _I2C_H_#include <reg51.h>//模拟I2C总线的引脚定义sbit I2C_SCL = P1A6;sbit I2C_SDA = P"7;//定义I2C总线时钟的延时值,要根据实际情况修改,取值1〜255//SCL信号周期约为(I2C_DELAY_VALUE*4+15个机器周期#define I2C_DELAY_VALUE 12//定义I2C总线停止后在下一次开始之前的等待时间,取值1〜65535〃等待时间约为(I2C_STOP_WAIT_VALUE*8个机器周期//对于多数器件取值为 1 即可;但对于某些器件来说,较长的延时是必须的#defineI2C_STOP_WAIT_VALUE 120//I2C 总线初始化,使总线处于空闲状态void I2C_Init();void x24c02_write(unsigned char address,unsigned char info); unsigned charx24c02_read(unsigned char address); //unsigned char x24c02_read(unsigned char address);//I2C 总线综合发送函数,向从机发送多个字节的数据bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod, char *dat, unsigned int Size);//I2C 总线综合接收函数,从从机接收多个字节的数据bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod, char *dat, unsigned int Size);#endif //_I2C_H_/*ZLG7290.h数码管显示与键盘管理芯片ZLG7290的标准80C51驱动程序头文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#ifndef _ZLG7290_H_#define _ZLG7290_H_#include <reg51.h> //ZLG7290 中断请求信号的引脚定义sbit ZLG7290_pi nINT = P3A2;II定义ZLG7290在I2C总线协议中的从机地址// 这是7 位纯地址,不含读写位#define ZLG7290_I2C_ADDR 0x38II定义ZLG7290内部寄存器地址(子地址)#define ZLG7290_SystemReg 0x00 II系统寄存器#define ZLG7290_Key 0x01 II 键值寄存器II#define ZLG7290_RepeatCnt 0x02 II 连击次数寄存器II#define ZLG7290_FunctionKey 0x03 II 功能键寄存器#define ZLG7290_CmdBuf 0x07 II 命令缓冲区起始地址#define ZLG7290_CmdBuf0 0x07 II 命令缓冲区0#define ZLG7290_CmdBuf1 0x08 //命令缓冲区 1//#define ZLG7290_FlashOnOff 0x0C //闪烁控制寄存器#define ZLG7290_ScanNum 0x0D //扫描位数寄存器#define ZLG7290_DpRam 0x10 // 显示缓存起始地址#define ZLG7290_DpRam0 0x10 //显示缓存0/#define ZLG7290_DpRam10x11 //显示缓存 1#define ZLG7290_DpRam2 0x12 //显示缓存 2#define ZLG7290_DpRam3 0x13 //显示缓存 3#define ZLG7290_DpRam5 0x15 //显示缓存 5#define ZLG7290_DpRam6 0x16 //显示缓存 6#define ZLG7290_DpRam7 0x17 //显示缓存7//向ZLG7290的某个内部寄存器写入数据bit ZLG7290_WriteReg(unsigned char RegAddr, char dat);//从ZLG7290的某个内部寄存器读出数据bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat);//向ZLG7290发送控制命令bit ZLG7290_cmd(char cmd0, char cmd1);//段寻址,单独点亮或熄灭数码管(或LED)中的某一段bit ZLG7290_SegOnOff(char seg, bit b);//下载数据并译码bit ZLG7290_Download(char addr, bit dp, bit flash, char dat);〃闪烁控制指令(Fn应当是字节型)//Fn 的8 个位分别控制数码管的8 个位是否闪烁,0-不闪烁,1-闪烁#define ZLG7290_Flash(Fn) ZLG7290_cmd(0x70,(Fn))#endif //_ZLG7290_H_#include <reg51.h>#include <intrins.h>#include <I2C.h>//sbit dula=P2A6;//sbit wela=P2A7; unsigned char j,c;void de(unsigned char i) // 延时程序{for(j=i;j>0;j--)for(c=125;c>0;c--);}/*24C02 读写驱动程序*/void flash()// 短时间的延时,几微秒左右{ ; ;}void init() //24c02 初始化子程序{I2C_SCL=1;flash();I2C_SDA=1;flash();}void start() // 启动I2C 总线{I2C_SDA=1;flash();I2C_SCL=1;flash();I2C_SDA=0;flash();// scl=0;// flash();}void stop() // 停止I2C 总线{I2C_SDA=0;flash();I2C_SCL=1;flash();I2C_SDA=1;flash();}void writex(unsigned char j) // 写一个字节{ unsigned char i,temp;temp=j;for (i=0;i<8;i++){ temp=temp<<1; I2C_SCL=0; flash(); I2C_SDA=CY; flash(); I2C_SCL=1; flash();}I2C_SCL=0;flash();I2C_SDA=1;flash();} unsigned char readx() // 读一个字节{unsigned char i,z;I2C_SCL=0;flash();I2C_SDA=1;for (i=0;i<8;i++){ flash(); I2C_SCL=1; flash();if (I2C_SDA==1) j=1; else j=0;z=(z<<1)|j;// 先左移,然后在最低位读入值I2C_SCL=0;}flash();return(z);}void clock() //I2C 总线时钟响应{unsigned char i=0;I2C_SCL=1;flash();while ((I2C_SDA==1)&&(i<255))i++;I2C_SCL=0;flash();//////// 从24c02 的地址address 中读取一个字节数据///// unsigned charx24c02_read(unsigned char address) {unsigned char i; start();writex(0xa8);//A1 A2 A3 全部低电平// clock();writex(address);clock();start(); writex(0xa9);clock(); i=readx();stop(); de(10);return(i); }////// 向24c02 的address 地址中写入一字节数据info///// void x24c02_write(unsigned char address,unsigned char info) {EA=0;start(); writex(0xa8);clock(); writex(address);clock(); writex(info);clock();stop();de(50);。
单片机proteus仿真篮球比赛计时计分课程设计设计一个基于单片机的篮球比赛计时计分系统是一个涉及硬件和软件协同工作的项目。
在Proteus仿真环境中实现这个系统,你可以进行前期的设计和测试,以便在实际硬件上实现之前找出并修复潜在的问题。
下面是一个基本的步骤指南,用于在Proteus中设计一个篮球比赛计时计分系统。
1. 确定系统需求首先,明确你的系统需要完成的任务。
通常,篮球比赛计时计分系统需要:开始/停止计时显示当前比赛时间(分钟、秒)显示当前得分实现上下限时间的设定(例如,每节比赛时间)可能的附加功能,如犯规/罚球计数、球员技术统计等2. 选择单片机和外设选择一个适合你需求的单片机。
例如,常用的单片机有51系列、STM32等。
根据需求选择适当的显示器、按钮和可能的扩展外设。
3. 设计硬件电路在Proteus中创建电路图。
将所选的单片机、显示器、按钮等外设添加到电路图中,并按照你的设计意图进行连接。
这通常包括单片机的电源、地线以及与外设通信的端口。
4. 编写和测试软件代码为所选的单片机编写代码。
这通常涉及初始化外设、设置计时函数、处理输入按钮事件等。
使用Proteus的调试功能,在仿真环境中测试代码以确保其功能正常。
5. 配置定时器和中断为了实现计时功能,你需要配置单片机的定时器。
这决定了计时的精度(例如,每秒更新一次时间)。
根据需要设置定时器的中断,以便在时间到达预设值时触发特定的事件(如停止计时、增加/减少得分等)。
6. 显示和用户界面编写代码以驱动显示器,根据当前的时间和得分更新显示内容。
考虑使用动态显示技术,如扫描显示,以节省单片机的I/O端口。
同时,编写处理用户输入的代码,如开始/停止计时、重置计分等。
7. 测试和调试在Proteus中全面测试你的系统。
模拟不同的比赛场景,如时间是否正确更新、计分是否正确增加等。
通过调试找出并修复代码中的错误或问题。
8. 优化和改进根据测试结果优化代码和硬件设计。
前言体育比赛计时计分系统是对体育比赛过程中所产生的时间,比分等数据进行快速采集记录,加工处理,传递利用的信息系统。
根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类,评分类,命中类,制胜类得分类等多种类型。
随着单片机载各个领域的广泛应用,许多用单片机作控制的球赛计时计分器系统也应运产生,如用单片机控制LCD液晶显示器计时计分器,用单片机控制LED 七段显示器计时计分器等。
本文介绍一种由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。
本系统具有赛程定时设置、赛程时间暂停、及时刷新甲、乙队双方的成绩以及赛后成绩暂存等功能。
它具有价格低廉、性能稳定、操作方便且易携带等特点。
广泛适合各类学校和小团体作为赛程计时计分。
利用7段共阴LED作为显示器件。
在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。
采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。
1. 总体设计方案1.1 控制原理篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块,通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。
这四个模块的相互连接如图1所示:图1 球赛计时计分器系统图本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。
可编辑修改精选全文完整版基于单片机的篮球赛计时计分器的设计一系统设计方案1.1 设计题目篮球计时计分器1.2 系统功能要求本系统可实现功能如下:(1)主控部分:选择单片机为核心元件构成系统。
(2)计时部分:能记录整个赛程的比赛时间,并能修改时间、暂停时间。
(3)计分部分:能随时刷新甲、乙两队在整个赛程中的比分。
(4)中场交换比赛场地时,能交换甲、乙两队比分的位置。
(5)比赛时间结束时,能发出报警指令。
1.3 系统总体方案设计本设计由AT89C51编程控制LED七段数码管作球赛计时计分系统具有赛程定时设置、赛程时间暂停、性能稳定、操作方便且易携带等特点。
1.3.1系统设计方案论证本设计是基于89C52单片机的键盘控制及显示电路设计,从系统的设计功能上看,系统可分为两大部分,即键盘输入控制部分和显示部分,对于每一个部分都有不同的设计方案,起初我拟订了下面两种方案:第一种方案:键盘控制采用矩阵扫描键盘,可以用普通按键构成4×4矩阵键盘,直接接到89C51单片机的P0口,高四位作为行,低四位作为列,通过软件完成键盘的扫描和定位。
显示部分采用动态显示,采用移位寄存器74LS164和译码器74LS138通过显示驱动程序驱动七段数码管显示。
此方案成本低,所用到的两个外围芯片价格都很低廉,而且单片机的I/O口占用较少,可以节约单片机接口资源。
第二种方案:键盘控制采用独立是式键盘,每个按键的"接零端"均接地,每个按键的"测试端"各接一条输入线,通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单。
这种方法比较适合按键较少或操作速度较高的场合。
显示部分采用静态显示方法,所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的接口用于笔划段字形代码。
这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU 的开销小。
长沙学院《单片机原理及应用》课程设计说明书题目篮球比分计分牌系(部) 电子与通信工程系专业(班级) 光电信息工程二班姓名龙敏学号2010041213指导教师刘辉、王新辉起止日期2012/12/10-2012/12/21《单片机原理及应用》课程设计任务书9系(部):电信系专业:2010级光电信息工程指导教师:王新辉、刘辉长沙学院课程设计鉴定表目录1. 课程设计任务书 (6)2. 系统总体方案选择与说明 (6)3. 系统结构框图与工作原理 (7)4. 各单元硬件设计说明及计算方法 (7)(1) 12864显示器 (7)(2)八位独立按键模块 (8)(3)51单片机定时器及初值计算方法 (8)5. 软件设计与说明(包括流程图) (8)6. 调试结果与必要的调试说明 (9)(1)实物图 (9)7. 使用说明 (10)8. 程序清单 (10)(1)比分倒计时子程序 (10)(2)加减分子程序 (11)9. 课程设计体会 (12)10. 参考文献。
(13)1. 课程设计任务书设计一个基于AT89S52单片机的篮球比赛记分牌,用12864液晶屏显示信息。
课题要求: (1)、启动时12864液晶屏第一行显示的内容是:比赛双方的队名。
第二行显示的内容是:比分为000:000。
第三行显示的内容是:本节剩余时间、进攻24秒倒计时。
第四行显示的内容是:设计者的姓名、班级和学号。
(2)设置如下按功能键,实现相应控制功能2. 系统总体方案选择与说明采用单片机和12864液晶显示电路实现该方案以单片机为核心,作为控制模块,并以12864液晶为显示模块,由单片机自带的时钟电路和定时器来实现计时,由于篮球比赛的规则较多,故以独立按键来输入需要控制的对象,由单片机的P1口来接键盘,液晶的数据线接在P0口相应的口线上。
如图2—1。
单片机实现系统框图2—13.系统模块层次结构图3—1 4. 各单元硬件设计说明及计算方法 (1) 12864显示器12864液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM (GDRAM )。
课程设计任务书篮球比赛计分器设计摘要:篮球比赛计分器的设计是为了解决篮球比赛时计分与计时准确方便和灵活适用的问题而提出的,我组设计的篮球比赛计分器硬件部分主要利用AT89S52单片机完成了计分与计时的功能,并通过两个四位七段数码管分别用来显示比赛时间和甲、乙比赛双方的分数,软件部分利用Keil C51软件来进行编译,通过Proteus软件进行仿真,最后将生成的HEX文件烧入到单片机芯片中。
采用该系统可根据实际情况进行时间的准确显示和比分修改,具有低功耗、可靠性强、安全性高以及低成本等特点,主要不足之处在于计时显示部分有时会出现显示不稳定的情况,基本满足了本次设计要求。
关键词:单片机;篮球赛计分;篮球赛计时;数码管;按键;下载线目录1设计背景 (1)2方案论证 (2)2.1共阳极数码管静态显示 (2)2.2共阳极数码管动态显示 (2)2.3两种方案的对比 (3)3方案实施 (4)3.1系统总体方案设计 (4)3.2硬件电路设计 (4)3.2.1系统控制中心单片机 AT89S52 (4)3.2.2系统电源模块 (6)3.2.3按键控制键盘模块 (7)3.2.4晶振模块 (8)3.2.5复位电路模块 (8)3.2.6报警电路模块 (9)3.2.7 LED显示模块 (9)3.3系统软件设计 (11)3.3.1软件设计环境介绍 (11)3.3.2软件设计方案 (11)3.4系统调试 (14)3.4.1软件调试及仿真 (14)3.4.2硬件调试 (14)4结果与结论 (15)5收获与致谢 (16)6参考文献 (17)7附件 (18)7.1元器件清单 (18)7.2硬件总电路图 (19)7.3实物图 (19)7.4源程序代码 (20)1. 设计背景体育比赛计时计分系统是对体育比赛过程中所产生的时间、比分等数据进行快速采集记录,加工处理,传递数据的信息系统。
根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类、评分类、命中类、制胜类得分类等多种类型。
单片机课程设计报告篮球比赛计时计分器设计2009年6月18日摘要本设计是采用AT89C52单片机为核心设计的一个用于赛场的篮球计时计分器。
本设计采用定时器T0中断计时,显示部分分为计时和计分显示两部分,均采用共阴极LED显示。
计时部分计时范围宽,而且可定时设定与小时、分钟调整;计分部分调整灵活,显示范围宽,足以满足各种规模赛程需要。
两个显示模块均采用动态扫描方式显示。
在本设计中P3口(P3.0——P3.3)是计时计分显示共用的扫描口,P0口是计时数据输出口,P2口是计分数据输出口,计时计分均设有显示缓冲区(40H ——43H计分显示缓冲区,30H——33H计时显示缓冲区)。
本设计共有K1——K5六个设置按键,K1是甲加分建(按一次加一分),K2是乙加分键(按一次加一分),K3是定时切换键(定时设置与计时调时切换),K4是分钟调整键(计时与定时分钟调整),K5是分数位置交换键(交换甲、乙两队比分的位置)。
按键与P1口相接,低电平输入有效.。
报警部分由扬声器组成,当计时时间到时,输出低电平有效,由P1.3口输出脉冲信号驱动扬声器发出声音。
计时定时的原理与定时闹钟相同,为定时设置定时分钟计数单元,通过比较定时与计时的分计数单元判断比赛是否结束是否报警,定时与计时共用一个显示缓冲去,通过K3(定时切换键)进行显示切换,本设计可通过定时显示的秒位判断定时是否有效,如果秒位显示00说明无效(上次用过的定时),显示11说明有效(本次定时)。
定时时间到,扬声器报警,比赛结束,按K3键可停止报警(否则一直报警)。
关键词:单片机篮球计时计分器数码管按键报警器目录1 概述 (3)1.1单片机简介 (3)1.2课程设计的意义 (4)1.3任务与要求 (4)2 系统总体方案与硬件设计 (5)2.1、系统总体方案设计 (5)2.2、硬件系统设计 (5)2.2.1单片机的选择 (5)2.2.2、时钟电路模块 (6)2.2.3、复位电路模块 (7)2.2.4、按键控制模块 (8)2.2.5、数码管显示原理 (8)2.2.6、定时报警模块 (9)3、软件设计 (10)3.1、程序流程图 (10)3.2、程序分析 (11)4 PROTEUS软件仿真 (12)4.1、简介 (12)4.2、仿真过程 (12)5、调试分析 (15)6、课程设计心得体会 (16)参考文献: (16)附1、源程序代码 (17)附2、系统原理图 (24)1 概述1.1单片机简介单片机是指一个集成在一块芯片上的完整计算机系统。
重庆信息技术职业学院毕业设计题目基于单片机89C51篮球比赛记分牌选题性质: 设计□报告□其他院系电子工程学院专业电子信息工程技术班级 11 级(2)班学号学生姓名指导教师教务处制2013年月日2014 届电子工程学院毕业设计选题审批单年级 2011 专业电子信息工程技术班级 2班学生姓名古银学号1120090250 选题单片机篮球比赛记分牌选题性质 设计□报告□其他选题论证:通过此次基于单片机设计的篮球计时记分系统,我们可以更清楚详细的了解单片机程序设计的基本指令功能、编程步骤和技巧来讲述单片机编程,并对MCS-51单片机的结构和原理进行讲述,以及基于单片机开发应用的相关芯片的工作原理,并且可以在将来的工作和学习中加以应用。
指导教师初审意见:签名:年月日毕业设计工作领导小组审批意见:签名:年月日2014 届电子工程学院毕业设计开题报告及进度要求年级 2011 班级 2班学生姓名胖哥91 学号1120090250指导教师选题性质 设计□报告□其他选题基于单片机89C51篮球比赛记分牌选题的目的和意义:单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习、应用,以AT89C51芯片为核心,辅以必要的电路,设计了一个电子显示比赛记分牌,它由5.0V直流电源供电,通过数码管能够准确显示出比赛的分数,从而到达学习、设计、开发软、硬件的能力。
单片机的应用是具有高度现实意义的。
单片机极高的可靠性,微型性和智能性(我们只要编写不同的程序后就能够完成不同的控制工作),单片机已成为工业控制领域中普遍采用的智能化控制工具,已经深深地渗入到我们的日常生活当中。
篮球比赛计时器设计本文主要介绍:篮球比赛计时器。
本文首先介绍单片机的相关知识,对单片机进行相应的研究,并将其与74HC595串行显示电路配合使用。
本电路主要核心是AT89S51,利用软件和硬件的结合实现开机自动置节计数器为第一节,节计时器为12分00秒,24秒违例为24秒。
用数字显示篮球比赛当时节数,每节时间及24秒的倒计时,采用单片机串行显示。
最后,本文会详细叙述此电路的安装与调试,并对调试过程中出现的问题做简要说明。
1第1章绪论1.1 课题背景在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。
如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。
单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。
单片机的诞生标志着计算机正式形成了通过计算机系统和嵌入式计算机系统两个分支。
目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
在我们身边,由单片机作为主控制器的全自动洗衣机、高档电风扇、电子厨具、变频空调、遥控彩电、录像机、VCD/DVD机、组合音响、电子琴等。
单片机已在广阔的计算机应用领域中表现得淋漓尽致,出尽了风头。
从家用消费类电器到复印机、打印机、扫描仪、传真机等办公自动化产品;从智能仪表、工业测控装置到CT、MRI、γ刀等医疗设备;从数码相机、摄录一体机到航天技术、导航设备、现代军事装备;从形形色色的电子货币如电话卡、水电气卡到身份识别卡、门禁控制卡、档案管理卡及相关读/写卡机等等都有单片机在里面扮演重要角色。
因此,单片机已成为电子类工作者必须掌握的专业技术之一。
单片机就是一个微型中央处理器,通过编程即能完成很多智能化的工作,因此它的出现给电子技术智能化和微型化起到了很大的推动作用。
基于STC89C51单片机的篮球计时计分器的设计摘要随着科技的日益发展进步,单片机技术已经被广泛应用在科研、工作等重要领域内,目前也已经普及到我们的日常生活中,扮演着十分重要的角色。
本次设计是基于单片机的篮球计分器,以基本篮球规则为依据,设计结构简单且方便操作,对篮球比赛实现实时控制。
此次设计的计分器总共包括四个模块,他们是24秒显示、计时器、记分器、计节器。
实现的功能是:24秒显示能按键控制24秒计时器,当控球时间超过24秒时,可发出报警信号。
计时器可按键调节,可以随时暂停计时,暂停比赛,在每节结束和全场结束时报警。
记分器记录两队的积累分数,可通过按键分别加1、2、3分。
设计分为硬件设计和软件设计。
硬件设计的主要包括的是:LED数码管显示、按键控制系统设计以及辅助功能的设计。
软件设计包括:功能选择、倒计时的实现。
本文主要介绍了用单片机设计实现篮球计分器的整个流程,采用C语言编写程序。
设计引用MAX7219专用LED驱动芯片,解决了多位LED数码管同时显示的问题。
其中时间显示和比分显示部分由两组共阴极LED数码管显示。
时间显示部分可以以分为单位进行计时调整。
比分显示部分可以实现在半场结束后手动换场,两个显示模块均采用动态扫描方式进行显示。
按键控制部分采用独立按键,共设八个按键,实现调整分数、调整时间、比赛的开始/暂停、复位键和交换场地键等功能。
报警部分由蜂鸣器加三级管驱动,实现了发出按键声音和结束报警的功能。
采用单片机控制使这个系统按键操作使用简单,安装方便。
解决了篮球比赛计数器的安装问题,节约了线材,适合在各种规模的体育场馆使用,完全可以代替传统的用钟表进行计时的方法,当然稍加改动也可以用于其他球类比赛,是体育器材向智能化发展的一个实例。
关键词:STC89C51单片机;温度控制;恒温箱;DS18B20AbstractWith the increasing development of advances in technology, chip technology has be en widely applied in the important areas of research, work, etc., now also has spread int o our daily lives, it has developed into a more mature technology, the design will focus on SCM medical incubator temperature control system to do in-depth research. Smart th ermostat not only have a number of functions, which are extremely versatile. It can not only make the upper limit for the precise control of temperature control, but when the te mperature is not set within the range of time, but also through the relay to drive the co rresponding load of work, and at the same time the buzzer and warning lights will issue a warning signal, a very intelligent.Most of microcontroller-based incubator temperature control system is in use in lab oratory, industrial, pharmaceutical, agriculture. In the laboratory especially biological labor atories, we have to get more accurate experimental data, for constant temperature test en vironment demanding. So for the laboratory, the role of the incubator is very important. In the industrial production process, we incubator for relatively more stringent requiremen ts, such as heat, cold treatment products, etc., directly affect the quality of the product. I n medicine medical incubator is mainly used for storing drugs and reagents, transport, vaccines, Refrigerated blood, warmed dialysate, saline warming the like. From the above we can clearly see the important role of the incubator. In agriculture greenhouse, the te mperature control system is essential for the growth of crops for agriculture, so that all aspects of life in the temperature control system is always in a very important position.Keywords: MCU—80C51; Incubator; Temperature control目录摘要..................................... 错误!未定义书签。
单片机技术课程设计报告-足球计分器————————————————————————————————作者:————————————————————————————————日期:课设报告福建工程学院软件学院题目: 计分器班级:姓名:学号:指导老师:日期:年月日目录1摘要 (3)2 设计要求 (3)2。
1 功能需求 (3)2.2 设计要求 (3)3 硬件设计及描述 (3)3。
1 总体描述 (3)3。
2 系统总体框图 (4)3.3 Proteus电路图 (4)3.4 各部分硬件介绍 (5)3.41输入模块 (5)3。
42输出模块 (5)4 软件设计流程及描述 (7)4。
1 程序流程图 (7)4.2 函数模块及功能 (7)4。
2.1单片机主控制模块 (7)4.2。
2 按键模块 (8)5 功能实现 (9)液晶显示 (9)6 心得体会 (11)7源程序 (12)1摘要本设计以AT89S51单片机作为核心,综合应用单片机定时器、中断、LM044液晶显示等知识,设计一款单片机和简单外设控制的足球计分器应用,同时显示当前的上下半场比赛剩余时间,日期,比赛队伍,比分状况.按键控制比赛时间的暂停,上下半场,比分的统计。
制作该装置的材料需要有软硬件的支持,硬件方面AT89C51单片机,晶振,电源,LM044液晶、按键。
2 设计要求2。
1 功能需求1、使用LM044液晶显示当前比赛,诸如上下半场比赛剩余时间,比分统计,两支球队等.2、按键控制比分的统计,比赛的暂停,分时段有上下半场。
2。
2 设计要求1.能够显示比赛时间和甲队和乙队的得分,时间递减、有加分功能。
2.可暂停比赛、比赛时间复位等,足球比赛仅有一次进球加1分的功能,可进行时间的加减操作等等。
3 硬件设计及描述3.1 总体描述在实验开发板上,根据功能需求,设定了控制模块由AT89S51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作,选用12MHZ的晶振,使得单片机有合理的运行速度;输入模块由按键控制,选定比赛的节次,加分,比赛的暂停,;输出模块由LM044液晶屏显示,当前的比赛剩余时间,两队的比分,以及比赛日期等。
大学考试答题纸
(以论文、报告等形式考核专用)
二○一四~二○一五学年度第一学期
课程编号13031000
01
课程名称单片机应用与设计主讲教师王百鸣评分
学号20121300
35 黄志宇专业年级集成电路设计与集成系统大三
题目:
基于AT89S52的篮球足球比赛计时计分器仿真及实物制作
答题:
一、设计任务概述:
采用AT89S52单片机为核心设计的一个用于赛场的篮球足球比赛的计时计分器并制作出实物。
本设计分为三个模块:显示模块,计时模块和按键模块。
计时模块采用定时器T0中断计时,并通过P3口的外部中断0和外部中断1实现比赛时间的修改。
显示模块分为计时和计分两部分,采用一个四位共阴七段数码管和两个共阴七段数码管显示,采用动态扫描方式显示,段选采用P0口实现,位选通过P2口实现。
按键模块通过P1口输入数据。
总体实现功能如下:
(1)能为比赛提供计时功能,并能任意修改所要计量的时间,以此来满足足球篮球比赛的不同赛制。
(2)能为比赛提供记录比分功能,随时刷新甲、乙两队在整个比赛过程中的比分,出现错误也能重新修改比分。
(3)比赛结束时,能发出报警声,并能随时关闭报警声。
(4)比赛期间可随时接受暂停请求,计时停止。
二、系统硬件模块设计:
(1)设计框图及原理图
(2)单片机芯片AT89S52模块
AT89S52的主要特性如下:
·与AT89C51,C52,STC89RC52兼容
·8K字节可编程闪烁存储器
·128*8位部RAM
·32可编程I/O线
·三个16位定时器/计数器
·6个中断源
·可编程串行通道
·片振荡器和时钟电路
(3)时钟模块
采用12MHZ的晶振,另有两个30pF的瓷片电容
(4)复位电路
5
(5)报警电路
采用蜂鸣器加100Ω的限流电阻接P1口
四、设计的仿真(1)初始化显示
(2)比赛中显示
五、设计layout
六、实物制作
(1)打印底层布线
(2)用图纸敷在感光板(10*15cm)下,放到实验室的曝光机下曝光320秒。
(3)将曝光好的感光板放至显影剂中显影,摇晃3分钟左右,电路连线出现。
(4)将显影后的感光板放至腐蚀液(三氯化铁溶液),刻蚀两小时左右后形成所要的电路板。
(5)打孔,焊元器件
(6)完成实物
七、实物测试(1)初始化显示
(2)比赛中显示。