AVR单片机Atmega48程序设计报告——比赛计时计分器

合集下载

篮球比赛计分器单片机课程设计报告

篮球比赛计分器单片机课程设计报告

1.1设计的内容与要求设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求:(1)能记录整个赛程的比赛时间,并能暂停。

(2)能随时刷新甲、乙两队在整个比赛过程中的比分。

(4)比赛结束时,能发出报警声。

在篮球比赛过程中需要对参赛双方的比分进行快速的采集记录和加工处理,需要一个快捷方便的计分系统。

该计分系统是一种得分类型的系统,即根据不同球队的不同得分,进行相应的处理,并且能够实时的显示出来。

又因为篮球比赛是分节进行的,所以还需要有倒计时功能的计时器,以便于观众实时了解赛况。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,功耗低,价格便宜,可靠性高和使用方便等独特的优点,目前已经成为测量控制应用系统中的优选元器件。

篮球计时计分器就是以单片机为核心的计时计分系统,有计时器、计分器、直流电源、时钟电路、按键等组成,完全能够实现上述的功能。

1.2设计的目的及意义随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,因此掌握单片机的一些基本功能就显的十分重要。

本次设计是采用AT89S52来编程控制LED七段数码管,使其能够显示篮球比赛的时间和计分,该系统具有赛程时间实时显示、时间暂停以及刷新A/B球队的成绩等功能。

通过本次设计可以了解、熟悉有关单片机的开发设计过程,并更进一步加深对单片机的了解和应用,掌握单片机与外围接口的一些方法与技巧,以及AT89S52单片机的最小应用系统的构成。

还可以了解LED数码管的结构、工作原理、编程方法以及相关的接口实例与具体连接。

通过本次设计可以很好的把课本的理论知识和实践有机的联系起来,是我们对理论知识有更深一步的掌握,为以后的学习打下坚实的基础。

2.1任务分析充分了解本设计要求,明确设计的全部功能、要求及技术指标;熟悉AT89S52单片机与控制对象的各种参数、关系和特点。

按题目要求能记录整个赛程的比赛时间,并能暂停,则需要暂停按键和7段共阴极LED数码管,其中时间显示按每节10分钟倒计时显示分和秒;能随时刷新A/B两队在整个比赛过程中的比分,加分有误时可通过按键实现减分调整,则需要有加减分按键、切换按键等。

AVR单片机ATMEGA48的C程序举例

AVR单片机ATMEGA48的C程序举例

AVR单片机ATMEGA48的EEPROM操作例子/***************************************************** CodeWizardAVR Panxiaoyi快速PWM,也可以叫单斜率PWM*****************************************************/#include <mega48.h>unsigned char eeprom i=0; //把变量放保存在EEPROM上/赋值与否并不影响i的值void main(void){TCCR0A=0b10000011; //比较匹配时OC0A=0,计数到比较值时OC0A=1,TOP固定等于255TCCR0B=0b00000001; //时钟=1分频DDRD.6=1; //PD6必须设置为输出时OC0A 输出的PWM才有效DDRD.2=0;PORTD.2=1; //PD2接按键输入/上拉电阻使能while(1){if(PIND.2==0) //如果按键按下/简单的按键防抖动{while(PIND.2==0); //等待按键松开i+=10; //更新EEPROM的数据i/重新来电后数据不变}OCR0A = i ; //刷新比较值,PWM占空比随之改变}}ATMEGA48的USART串口与PC通讯例子/***************************************************** CodeWizardAVRChip type : ATmega48VClock frequency : 7.372800 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 128波特率9600/8个数据位 /1个停止位 /无校验M8V20实验板硬件设置1: J5的2个跳线帽短接,使用外部晶振7.3728MHz2: J6与J7的4个跳线帽短接,使用MAX232,其他跳线开路3: DB9接口连接到电脑请配合串口调试软件SSCOM32或者comdebug进行调试*/#include <mega48.h>#include <stdio.h>#include <delay.h>void main(void){UCSR0B=0x18; //下面是3条语句是串口初始化语句UCSR0C=0x06;UBRR0L=0x2F;while(1) //循环{unsigned char data; //定义一个局部变量data=getchar(); //等待,直到接收到一个数据putchar(data); //将接收到的数据发送出去}} //endATMEGA48的T/C2与精确时钟例子/*****************************************************CodeWizardAVR V1.25.6 ProfessionalChip type : ATmega48Clock frequency : 7.372800 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 128计算: 1秒= 时钟/ ( 分频* 计数)假设时钟= 7372800 Hz 那么: 1秒= 7372800 / ( 分频* 计数)得: 计数=7372800/分频由于分频只有1/8/32/64/128/256/1024 供我们选择,而计数最高只有8位(255)为了不占用资源,中断次数尽量少一点比较好,并且中断时间越短越好所以我们可以选择计数= 时钟7372800 / 分频1024 / 30次中断= 240这个240就是T/C2的计数上限TOP*****************************************************/#include <mega48.h>unsigned char TC2A=0;interrupt [TIM2_COMPA] void timer2_compa_isr(void){TC2A++;if(TC2A>=30) TC2A=0;if(TC2A>25) PORTD.3=1; else PORTD.3=0;}void main(void){TCCR2A|=2; //工作于CTC模式(比较匹配时计算器清零)OCR2A=240; //设置TOP的值(计算器的上限值)TCCR2B|=7; //取系统时钟1024分频作为T/C2时钟TIMSK2=2; //使能计数器的值达到TOP 时产生中断DDRD.3=1; //使用PD3每秒驱动蜂鸣器"嘀"一次#asm("sei") //插入汇编语句,打开全局中断while (1){#asm("nop") //空操作的汇编代码,等待中断发生};}/****************************************************假设程序还有一个3位数码管动态扫描任务,这时我们就可以这样计算1:数码管的扫描频率在75-85Hz比较合适,太低会闪烁,太高占用资源2:每扫描一次就必须分3次显示,分别是个位/十位/百位3:这时我们可以计数出显示频率是225-255Hz(中断频率),在这里假设=240Hz 4:这时我们就可以顺便使用这个T/C2定数中断来保证扫描的可靠运行了5:计算: 计数= 时钟7372800 / 分频128 / 240次中断= 240 ***/ATMEGA48外部电平变化中断PCINT例子/***************************************************** CodeWizardAVRChip type : ATmega48VClock frequency : 1.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 128外部PCINT0-PCINT7共享一个中断源PCINT0外部PCINT8-PCINT14共享一个中断源PCINT1外部PCINT16-PCINT23共享一个中断源PCINT2没有使用延时/通信语句,所以使用内部/外部时钟都可以每按动INT0按键一次,PD3的电平就翻转一次本例子没有考虑太多的按键防抖动功能*******************/#include <mega48.h>//外部PCINT16-PCINT23共享一个中断源PCINT2//请参考M48数据手册的48页/75页interrupt [PCINT2] void PCINT2_isr(void){PORTB.0=~PORTB.0; //电平取反PCIFR|=4; //清除PCINT2中断触发标记,防止按键抖动}void main(void){PORTD=255;DDRD=0; //设置PCINT16-PCINT23端口为输入,上拉电阻有效PORTB.0=0;DDRB.0 =1; //设置PB0输出低电平,准备驱动蜂鸣器PCICR|=4; //使能PCINT16-PCINT23外部电平变化中断PCMSK2|=4; //使能PCINT18有效#asm("sei") //插入汇编语句,打开全局中断while (1) //循环,等待中断{#asm("nop") //空操作的汇编代码,等待中断发生};}ATMEGA48外部中断INT0例子/***************************************************** CodeWizardAVRChip type : ATmega48VClock frequency : 1.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 128INT0最好接一个4.7K的上拉电阻,按键对地有效没有使用延时/通信语句,所以使用内部/外部时钟都可以每按动INT0按键一次,PD3的电平就翻转一次本例子没有考虑太多的按键防抖动功能*******************/#include <mega48.h>interrupt [2] void INT0_isr(void) //INT0的中断向量是2,请参考M48数据手册的48页{PORTD.3=~PORTD.3; //电平取反EIFR|=1; //清除INT0中断触发标记,防止按键抖动}void main(void){PORTD.2=1;DDRD.2=0; //设置INT0端口为输入,上拉电阻有效PORTD.3=0;DDRD.3 =1; //设置PD3输出低电平,准备驱动蜂鸣器EIMSK|=1; //打开INT0中断EICRA|=3; //INT0上升沿触发#asm("sei") //插入汇编语句,打开全局中断while (1) //循环,等待中断{#asm("nop") //空操作的汇编代码,等待中断发生};}ATMEGA48的ADC模数转换例子////ADC结果由串口输出到电脑显示#include <mega48.h>#include <stdio.h>#include <delay.h>void main(void){//外部时钟 7.3728MHz (请取消时钟8分频)//串口初始化,波特率9600Hz,8个数据位,1个停止位,无奇偶校验,无中断使能UCSR0B=8;UCSR0C=6;UBRR0L=47;//**************************************************************** *ADMUX=96; //设置参考电压为AVCC,结构左对齐(就是8位精度)ADCSRA|=135; //使能ADC,ADC时钟=系统时钟128分频while (1){unsigned char adc;ADMUX=ADMUX&240|2; //清除已选择的ADC通道,选择新的ADC通道(0-7)ADCSRA|=64; //启动单次ADC转换while((ADCSRA&16)==0); //等待ADC转换结束adc=ADCH; //结果左对齐只需读取高8位数据ADCSRA|=16; //清除ADC转换结束标记putchar(adc/100+48); //从串口输出ADC的百位数putchar(adc/10%10+48); //从串口输出ADC的十位数putchar(adc%10+48); //从串口输出ADC的个位数delay_ms(500); //延时putchar(13); //回车putchar(10); //换行}}ATMEGA8/ATMEGA16多机通讯例子下面是一个M16的多机通讯例子,也适合M8,只需要修改头文件就可以了,本例子在3台机上测试并稳定通过主机代码/* AVR单片机DIY网潘小艺 CVAVR1.25.9通讯规则:01:时钟7.3728 MHz/波特率9600/9个数据位/奇校验/1个停止位/硬件多机通讯功能/02:通讯连接采用硬件MAX485,双向单工03:MAX485的RE/DE并联接到单片机的PD2脚(高电平发送/低电平接收)04:所有MAX485的A脚并联/B脚并联/D脚接TXD/R脚接RXD05:每个上行/下行的数据包的字节个数都是一样的(通讯数据量)06:数据包格式: 地址_数据1_数据2_数据3_数据n_CRC8校验码07:所有单元的数据接收都是采用中断+查询的方式08:总是由主机向从机下发一个数据包,从机收到数据包并校验正确后向主机回复一个数据包09:不管是主机还是从机,如果收到的数据包有任何错误,都将丢弃该数据包,等效于没有接收10:通讯采用主机轮询方式,从机之间不能相互通讯,必须通过主机才能交换数据11:无效地址是0,主机地址是1,从机地址是11.12.13...广播地址是255 */#include <mega16.h>#include <delay.h>#include <usart.h>#include <crc8.h>#define amount 10//设定通讯数据量#define address1//请在这里设定本机地址#define max485_out PORTD.2=1#define max485_in PORTD.2=0#define max485_RW_ok DDRD.2=1unsignedchar send[amount];//发件箱unsigned charinbox[amount];//收件箱unsigned charn=0;//记忆接收中断的次数unsigned char x=0;//******************************************************************* *******************void usart_out(unsigned char *datas,unsigned char n){unsigned char i=0;max485_out;//使MAX485处于发送状态while(i<n)//一共发送n个数据{if(i==0) UCSRB|=1; else UCSRB&=254;UDR=*(datas+i);//装载数据开始发送while((UCSRA&64)==0);//等待发送结束UCSRA|=64;//清除发送结束标志i++;//发送次数统计}max485_in;//使MAX485处于接收状态}//******************************************************************* *******************interrupt[12]Rxd_isr(void)//接收中断{if( UCSRA&28 ){ n=UDR; n=0; UCSRA|=0x01; } else //接收出错就重新打开地址帧筛选功能{if( UCSRB&2 )n=0;//检测到地址信息时计数清零inbox[n]=UDR; n++;//把接收到的数据保存到收件箱if( inbox[0]==address ) UCSRA&=254; else UCSRA|=0x01; //地址筛选}}//******************************************************************* *******************void main(void){usart_init();max485_in;max485_RW_ok;DDRA=7;//通讯状态指示#asm("sei");while(1){x=~x;//测试用的变量PORTA.0=~PORTA.0;//观察单片机是否死机(供电一定要好)//************************************与从机11对话****************************************if(x) send[3]=0; elsesend[3]=255; //更新发件箱的数据(测试代码)send[0]=11;//指向从机地址send[amount-1]=crc8(send,amount-1);//计算发件箱数据的crc8校验码usart_out(send,amount);//将发件箱的数据send[]发送出去;n=0;//计数复位,准备接收新数据 delay_ms(15);//等待从机回复数据,这个时间要计算好if(n==amount && inbox[amount-1]==crc8(inbox,amount-1)) //接收正确处理与测试{PORTA.1=1; delay_ms(10); PORTA.1=0;}else//接收错误处理与测试 {PORTA.2=1; delay_ms(10); PORTA.2=0;}//************************************与从机12对话****************************************if(x) send[3]=50; elsesend[3]=200; //更新发件箱的数据(测试代码)send[0]=12;//指向从机地址send[amount-1]=crc8(send,amount-1);//计算发件箱数据的crc8校验码usart_out(send,amount);//将发件箱的数据send[]发送出去;n=0;//计数复位,准备接收新数据 delay_ms(15);//等待从机回复数据,这个时间要计算好if(n==amount && inbox[amount-1]==crc8(inbox,amount-1)) //接收正确处理与测试{PORTA.1=1; delay_ms(10); PORTA.1=0;}else//接收错误处理与测试 {PORTA.2=1; delay_ms(10); PORTA.2=0;}}} //end从机(需要增加多个从机时可以修改从机的地址就可以了)//从机11#include <mega16.h>#include <usart.h>#include <crc8.h>#define amount 10//设定通讯数据量#define address11//请在这里设定本机地址#define max485_out PORTD.2=1#define max485_in PORTD.2=0#define max485_RW_ok DDRD.2=1unsignedchar send[amount];//发件箱unsigned charinbox[amount];//收件箱unsigned charn=0;//记忆中断次数//******************************************************************* *******************void usart_out(unsigned char *datas,unsigned char n){unsigned char i=0;max485_out;//使MAX485处于发送状态while(i<n)//一共发送n个数据{if(i==0) UCSRB|=1; else UCSRB&=254;UDR=*(datas+i);//装载数据开始发送while((UCSRA&64)==0);//等待发送结束UCSRA|=64;//清除发送结束标志i++;//发送次数统计}max485_in;//使MAX485处于接收状态}//******************************************************************* *******************interrupt[12]Rxd_isr(void)//接收中断{if( UCSRA&28 ){ n=UDR; n=0; UCSRA|=0x01; } else //接收出错就重新打开地址帧筛选功能{if( UCSRB&2 )n=0;//检测到地址信息时计数清零inbox[n]=UDR; n++;//把接收到的数据保存到收件箱if( inbox[0]==address ) UCSRA&=254; else UCSRA|=0x01; //地址筛选if( n==amount )//如果接收到完整的数据包{if( inbox[amount-1]==crc8(inbox,amount-1) )//如果crc8校验正确就...{send[0]=1;//发件箱地址指向主机//send[1]=?//请更新发件箱的数据//send[n]=?send[amount-1]=crc8(send,amount-1);//产生发件箱的crc8校验码usart_out(send,amount);//发送发件箱的数据包/查询方式比较耗时OCR1A=inbox[3];//收件箱测试(控制T/C1的PWM驱动LED)}}}}//******************************************************************* *******************void main(void){usart_init();max485_in;max485_RW_ok;TCCR1A =0B10000001;//OCR1A/PD5/8位快速PWMTCCR1B =0B00001001;//时钟1分频DDRD |=0b00100000;//输出使能OCR1A =255;//初始化PWM输出100%占空比#asm("sei")while (1){};}USART.h文件内容//波特率9600/9个数据位/1个停止位/奇校验/收发开启/接收中断/地址过滤void usart_init(void){UCSRA=0x01;UCSRB=0x9C;UCSRC=0xB6;UBRRH=0x00;UBRRL=47;}CRC8.h文件内容unsigned char crc8(unsigned char *ptr, unsigned char len){unsigned char i;unsigned char crc=0;while(len--!=0){for(i=1; i!=0; i*=2){if((crc&1)!=0) {crc/=2; crc^=0x8C;}else crc/=2;if((*ptr&i)!=0) crc^=0x8C;}ptr++;}return(crc);}ATMEGA48多机通讯例子主机程序********************************************************************* ********************************/* AVR单片机DIY网潘小艺 CVAVR1.24.8d通讯规则:1:时钟7.3728 MHz/波特率9600/9个数据位/奇校验/1个停止位/硬件多机通讯功能/2:通讯连接采用硬件MAX485,双向单工3:每个上行/下行的数据包的字节个数都是一样的(通讯数据量)4:每个上行/下行的数据包都采用CRC8校验5:数据接收采用中断+查询的方式6:总是由主机向从机发送一个数据包,从机收到数据包后向主机回复一个数据包7:不管是主机还是从机,如果收到的数据包有任何错误,都将丢弃该数据包,等效于没有接收8:从机之间不能相互通讯,必须通过主机才能交换数据9:无效地址是0,主机地址是1,从机地址是2.3.4......广播地址是255*/#include <mega48.h>#include <delay.h>#define amount 10 //设定通讯数据量(包括1个地址帧,n个数据帧,1个校验帧)#include <usart.h>#include <1wire.h> //CRC校验函数就在这个文件里面unsigned char send[amount]; //发件箱unsigned char inbox[amount]; //收件箱unsigned char n=0; //记忆中断次数//--------------------------------------------------------------------interrupt[19] Rxd_isr(void) //接收中断{unsigned char ERROR=0;if( UCSR0A&4 || UCSR0A&16 ) ERROR=1; //奇偶效验错误或者帧错误就记录下来inbox[n]=UDR0; //保存到收件箱n++;//记忆中断次数if(ERROR) inbox[0]=0; //如果通讯有错,收件箱的地址帧就标记成无效地址0}//---------------------------------------------------------------------void main(void){USARTinit(); //串口初始化UCSR0A=0; //主机关闭地址筛选功能(多机通讯功能)#asm("sei") //打开全局中断while(1){//-------------与从机2对话,与其他从机对话与下面的程序类似-------------------n=0;//中断次数清0inbox[0]=0; //收件箱地址清0send[0]=2; //改变这个地址就可以实现与某个从机对话send[amount-1]=w1_dow_crc8(send,amount-1); //计算发件箱的crc8校验码TXD(send); //将发件箱的数据send[]发送出去;//等待,从机接收到数据后会回复数据的,如果是10个字节数据量,不能少于13ms//这个时间由人工计算,要考虑从机由于各种中断延长回复时间的可能 delay_ms(30);//如果收件箱已经收到amount个数据,并且crc8校验成功就...if(n==amount && inbox[amount-1]==w1_dow_crc8(inbox,amount-1)) {if(inbox[0]==1) //如果收件箱地址帧属于本机就运行下面的测试代码{DDRD.3=1;PORTD.3=1; delay_ms(50);PORTD.3=0; delay_ms(950);}if(inbox[0]==255){//请在这里添加收到广播数据的处理程序}}}} //end//******************************************************************* *******************************从机程序//******************************************************************* *******************************#include <mega48.h>#include <delay.h>#define amount 10 //设定通讯数据量(包括1个地址帧,n个数据帧,1个校验帧)#include <usart.h>#include <1wire.h>#define address 2 //请在这里设定本机地址unsigned char send[amount]; //发件箱unsigned char inbox[amount]; //收件箱unsigned char n=0; //记忆中断次数//--------------------------------------------------------------------interrupt[19] Rxd_isr(void) //接收中断{unsigned char ERROR=0;if( UCSR0A&4 || UCSR0A&16 ) ERROR=1; //记录奇偶效验错误或者帧错误inbox[n]=UDR0;//把接收到的数据保存到收件箱n++;//记忆接收的次数if(ERROR)//如果通讯有错....{n=0;//接收计数清0inbox[0]=0;//把地址改为无效地址0UCSR0A|=0x01;//重新打开接收器的地址帧筛选功能}//如果地址匹配本机或者是广播地址就关闭地址筛选(多机通讯)功能if(inbox[0]==address ||inbox[0]==255) UCSR0A&=254;if(n==amount)//接收到amount个数据以后...{n=0;//接收计数清0UCSR0A|=0x01;//重新打开接收器的地址帧筛选功能if(inbox[amount-1]==w1_dow_crc8(inbox,amount-1)) //如果crc8校验正确就...{if(inbox[0]==address) //如果地址匹配本机就回复数据{send[0]=1;//发件箱地址指向主机send[amount-1]=w1_dow_crc8(send,amount-1); //产生发件箱的crc8校验码TXD(send);//发送发件箱的数据包send[]//请在这里备份你的收件箱信息}if(inbox[0]==255) //如果是广播地址就...{//请在这里添加你的代码//收到广播数据请不要回复}}}}//---------------------------------------------------------------------void main(void){USARTinit();//串口初始化UCSR0A=0x01;//从机打开地址帧筛选功能(多机通讯模式)#asm("sei")//打开全局中断while(1){//请在这里添加你的代码}} //end//******************************************************************* **************************<usart.h> 头文件//******************************************************************* **************************//波特率9600/9个数据位/1个停止位/奇校验/收发开启/接收中断void USARTinit(void){UCSR0B=0x9C;UCSR0C=0x36;UBRR0L=0x2F;PORTD.4=0; //M AX485平时工作在接收状态DDRD.4=1;}//-----------------------------------------------------------//从数组datas[]的首地址开始发送amount个数据,其中第0个数据是地址帧,其他是数据帧void TXD(unsigned char *datas){unsigned char i=0;PORTD.4=1; //使MAX485处于发送状态while(i<amount) //一共发送amount个数据{if(i==0) UCSR0B|=1; else UCSR0B&=254;UDR0=*(datas+i); //装载数据开始发送while((UCSR0A&64)==0); //等待发送结束UCSR0A|=64; //清除发送结束标志i++;//发送次数统计}PORTD.4=0; //使MAX485处于接收状态}//******************************************************************* **************************ATMEGA48中T/C0的相位修正PWM与快速PWM例子/***************************************************** CodeWizardAVR V1.25.3 Professional相位修正PWM,也可以叫双斜率PWM*****************************************************/#include <mega48.h>void main(void){TCCR0A=0b10000001; //升序比较匹配时OC0A=0,降序时比较匹配时置OC0A=1,TOP固定等于255TCCR0B=0b00000101; //时钟=1024分频,一旦设定时钟,TCNT0就开始不断的计数OCR0A =123; //比较设定值,数字越大,PD6输出1的占空比越大DDRD.6=1; //端口方向设置为输出才有效while (1);}/***************************************************** CodeWizardAVR V1.25.3 Professional快速PWM,也可以叫单斜率PWM*****************************************************/#include <mega48.h>void main(void){TCCR0A=0b10000011; //比较匹配时OC0A=0,计数到比较值时OC0A=1,TOP 固定等于255TCCR0B=0b00000101; //时钟=1024分频OCR0A =123; //比较设定值,数字越大,PD6输出1的占空比越大DDRD.6=1; //端口方向设置为输出才有效while (1);}名词解释:TOP计数器(TCNT0)由0开始不断的作+1计数,计数到最大值时,计数器又返回到0开始作+1计数(单斜率),如此循环;计数器(TCNT0)由0开始不断的作+1计数,计数到最大值时就开始作-1计数,计数到0时又开始不断的作+1计数(双斜率),如此循环;这个最大值就是TOP(TOP可以为固定值255,也可以是OCR0A的值)由于 TCNT0 是一个计数器,一旦时钟设定,它就会不断的计数(倒数),这样TCNT0 和OCR0A(OCR0B)就会有相等的时候,相等时就是比较匹配。

单片机课设,篮球计时计分器

单片机课设,篮球计时计分器

单片机课程设计结题报告《篮球比赛计时计分器》团队成员分工情况:***:完成实验报告的总体撰写,焊接方案设计和电路图的绘制,程序编写改进*****:完成元器件采集,辅助电路焊接,电路图修整以及实验报告的完善***:完成程序编写烧录,电路焊接,以及PCB 版图的绘制其中设计方案的确立由团队成员一起讨论而目录1选题背景 (3)2方案设计 (4)2.1硬件电路设计 (5)2.1.1硬件系统各功能模块的电路 (5)2.1.2硬件系统的实现 (9)2.1.3硬件系统的调试 (10)2.2软件设计、编程及调试 (10)2.2.1系统软件的模块程序设 (10)2.2.2编程实现 (11)2.2.3软件系统的调试 (11)3系统联调及最终实现结果展示 (11)4总结 (12)5 收获与致谢 (13)6 参考文献 (14)7附件 (15)1 选题背景单片机,亦称单片微电脑或单片微型计算机。

它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。

计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。

微计算机(单片机)在这种情况下诞生了,它为我们改变了什么?纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。

世界各大电气厂家、测控技术企业、机电行业,竞相把单片机应用于产品更新,作为实现数字化、智能化的核心部件。

本设计由STC89C52编程控制LED七段数码管作球赛计时计分系统具有赛程定时设置、赛程时间暂停、性能稳定、操作方便且易携带等特点。

单片机课程设计报告-篮球计时计分器

单片机课程设计报告-篮球计时计分器

2010 ~ 2011 学年第 2 学期《单片机应用系统设计与制作》课程设计报告教学院(部)电气与电子信息工程学院教研室电气自动化指导教师课程设计时间 2011.5.30~2011.6.10 课程设计班级电气自动化技术2009(*)班学号 2009********姓名张 * *单片机应用系统设计与制作课程设计成绩评定表指导教师签字:2011 年 6 月20 日摘要篮球计时计分器以单片机为核心,由计时器、计分器、综合控制器等组成。

系统采用模块化设计,主体分为计时显示模块、计分显示模块、定时报警、按键控制键盘模块。

每个模块的程序结构简单、任务明确,易于编写、调试和修改。

编程后利用Keil软件来进行编译,再将生成的HEX文件装入芯片中,采用Proteus软件仿真,检验功能是否能够正常实现,本设计中系统硬件电路主要由以下几个部分组成:单片机AT89C52、计时电路、计分电路、报警电路和按键开关。

该系统具有赛程定时设置、赛程时间暂停、及时刷新甲乙双方的成绩以及赛后成绩暂存等功能。

关键词:单片机,计时,计分,显示器,接口ABSTRACTTime 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. After programming, firstly we can use Keil 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. The design of hardware circuit mainly consists of the five components, including AT89C52, timing circuit, scoring circuit, alarm circuit and key switch circuit.The system has many features,such as setting the schedule time, scheduling time to pause, refreshing result of both parties timely, storing temporarily results after the match and so on.KEY WORDS:Microcontroller, Timing, Scoring, Display, Interface目录一、设计目的及要求 (3)二、方案论证 (3)三、元件及其功能简介 (5)四、电路方案设计 (12)五、编程及仿真 (16)六、心得与总结 (20)附表一、程序清单 (21)参考文献 (34)课程设计报告一、设计目的及要求1、设计目的通过本次基于C51系列篮球计时计分器的设计,可以了解、熟悉有关单片机开发设计的过程,并加深对单片机的理解和应用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下一些方面:(1) 篮球赛计时计分系统包含了8051系列单片机的最小应用系统的构成,同时在此基础上扩展了一些使用性强的外围接口。

单片机课程设计篮球计时计分器正文精选全文完整版

单片机课程设计篮球计时计分器正文精选全文完整版

可编辑修改精选全文完整版基于单片机的篮球赛计时计分器的设计一系统设计方案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 的开销小。

单片机课程设计—篮球计时计分器

单片机课程设计—篮球计时计分器

单片机课程设计—篮球计时计分器篮球作为一项广受欢迎的运动,其比赛的公平性和准确性至关重要。

而在篮球比赛中,计时计分器是不可或缺的设备,它能够为比赛提供准确的时间和比分信息,保障比赛的顺利进行。

本次单片机课程设计的任务就是设计一款篮球计时计分器,通过运用单片机的知识和技能,实现篮球比赛计时和计分的功能。

一、设计要求1、能够实现比赛时间的计时功能,包括 24 秒进攻时间、每节 10分钟的比赛时间以及加时赛时间。

2、能够实时显示比分,包括主队和客队的得分。

3、具备暂停、复位等功能,以应对比赛中的各种情况。

4、能够通过按键进行操作,简单易用。

二、系统方案设计1、硬件设计单片机选型:选择一款性能稳定、资源丰富的单片机,如STC89C52 单片机。

显示模块:采用数码管显示时间和比分,数码管具有亮度高、显示清晰、成本低等优点。

按键模块:使用独立按键实现计时、计分、暂停、复位等操作。

时钟模块:采用外部时钟芯片,为系统提供准确的时钟信号。

2、软件设计编程语言:选择 C 语言进行编程,C 语言具有语法简洁、可移植性好等优点。

程序流程:主程序负责系统的初始化、按键扫描、时间和比分的更新以及显示。

中断服务程序负责处理时钟中断,实现计时功能。

三、硬件电路设计1、单片机最小系统包括单片机芯片、晶振电路和复位电路。

晶振电路为单片机提供时钟信号,复位电路用于系统的初始化。

2、显示电路采用共阳极数码管,通过三极管驱动数码管的段选和位选信号,实现时间和比分的显示。

3、按键电路独立按键分别连接到单片机的 I/O 口,通过检测按键的状态来执行相应的操作。

4、时钟电路采用 DS1302 时钟芯片,通过单片机的 I/O 口与时钟芯片进行通信,获取准确的时间信息。

四、软件程序设计1、主程序首先进行系统初始化,包括单片机端口设置、数码管显示初始化、时钟芯片初始化等。

然后进入主循环,不断扫描按键状态,根据按键执行相应的操作,同时更新时间和比分,并将其显示在数码管上。

基于AVR单片机的电子计时器软硬件设计

基于AVR单片机的电子计时器软硬件设计

三江学院本科生毕业设计(论文)题目基于AVR单片机的电子计时器软硬件设计电子信息学院院(系)电子通信工程专业学生姓名学号指导教师职称指导教师工作单位三江学院起讫日期 3月1日—6月3日摘要在电子计时器的系统中,AVR单片机最小系统以及少量的外围电路是最基本的电路系统,外围电路有比如显示模块。

此次的任务设计所用到的芯片主要是mega16芯片,是以其为核心而设计出来的。

通过AVR单片机的I/O口控制外围电路。

整个系统由复位模块、按键模块、数码管模块,蜂鸣器模块4个模块组成。

本设计从avr单片机IO口的使用方法为切入点,使用ATmega16的内部时钟分频电路,从而确定出内部的机器周期。

再通过对内部中断程序的设置来设计出定时程序,即设计出了电子计时器的核心。

然后在核心电路的基础上设计出了相应的外围电路,使本设计能更好的完成任务要求。

关键词:A VR单片机;数码管;蜂鸣器ABSTRACTElectronic timer with A VR minimum system microcontroller as the core to peripheral circuits designed in our day long life in a wide range of uses, such as our area, large construction installation in the alarm system and so on are widely used electronic timer example.In the system of the electronic timer, A VR minimum system of the MCU and peripheral circuit a circuit system is the most basic, peripheral circuits such as the display module. The use of task design the main chip is mega16 chip, its core is designed. Through the A VR microcontroller I/O port control circuit. The whole system consists of a reset module, a key module, digital control module, a buzzer module 4 modules.From the design method of using A VR microcontroller IO port as the breakthrough point, the internal clock frequency dividing circuit using ATmega16, so as to determine the internal machine cycle. Then the internal interrupt program to design timing program, which designed the core of the electronic timer. Then based on the core circuit is designed corresponding peripheral circuit, the design can better to complete the task requirements.Keywords: A VR microcontroller; digital tube; the buzzer目录第一章关于AVR单片机 (1)1.1 AVR单片机的发展 (1)1.2 ATmega16单片机的特点 (2)1.3 ATmega16单片机 (3)第二章方案设计与论证 (6)第三章系统总体结构框图 (7)第四章系统的硬件设计 (9)4.1 显示部分电路的设计 (9)4.1.1 LED数码显示管的基本原理 (9)4.1.2 数码管显示模块分析 (10)4.1.3 LED显示电路 (12)4.2 控制部分电路的设计 (14)4.2.1复位模块 (14)4.3蜂鸣器电路的设计 (16)4.3.1 无源蜂鸣器跟有源蜂鸣器的区别 (16)4.4 按键模块设计 (19)4.4.1按键模块原理图 (19)4.4.2 四角按键封装形式及参考尺寸 (19)第五章系统的软件设计 (21)5.1 总体系统的设计思路 (21)5.2 计时程序 (21)5.3 报警程序 (21)第六章系统电路的制作与调试 (22)6.1 电路硬件焊接制作 (22)6.2 调试的主要方法 (22)6.3 系统调试 (22)6.3.1 硬件调试 (22)6.3.2 软件调试 (23)6.3.3 联机调试 (23)6.3.4调试中遇到的问题及解决方法 (23)结束语 (25)致谢 (26)参考文献 (27)附录A 电子计时器原理图 (28)附录B 元器件清单 (29)第一章关于AVR单片机1.1 AVR单片机的发展A VR单片机是Atmel公司最近几年发布的一款在精简指令集指令架构的基础上设计出来的一款的具有很高性能指标,比较低的功耗的8位MCU。

基于单片机的篮球赛计时计分器单片机期末课程设计报告

基于单片机的篮球赛计时计分器单片机期末课程设计报告

.目录第1节引言 ..........................................................................................................................11.1本设计的任务和主要容 (1)第2节系统主要硬件电路设计 .............................................................................................22.1 单片机控制原理 (2)2.2 单片机主机系统电路 (3)2.2.1计时电路 4 ................................................................................................................................................2.2.2计分电路 6................................................................................................................................................第3节系统的软件设计 ......................................................................................................73.1 篮球赛计时计分器程序源代码 (7)3.2篮球赛计时计分器程序流程图 (17)结束语 ...................................................................................................................................... 81参考文献 . (19)文档Word.基于单片机的篮球计时计分器第1节引言随着单片机载各个领域的广泛应用,许多用单片机作控制的球赛计时计分器系统也应运产生,如用单片机控制LCD液晶显示器计时计分器,用单片机控制LED七段显示器计时计分器等。

单片机技术课程设计报告(篮球计时计分器)

单片机技术课程设计报告(篮球计时计分器)
变量:dat_str1[2],用于存取节次。
参数:无。
返回值:无。
调用函数:Display_Str_at_xy(),显示节次在指定位置。
5
1、计分器计时计分界面。
图5.1计分器计时计分界面
6
通过本次课程设计增加了我对单片机各模块功能的了解。实验过程让我更加了解并进一步掌握了中断,定时计数,键盘等程序编写。以及更加懂得了通过Proteus构造自己所需要的外围电路,进行仿真实验。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
单片机应用系统中,通常需要人机对话功能,能够随时发出各种控制命令和输入数据,报告应用系统的运行状态与结果。该系统设计能够很实用得简单模拟篮球计时计分效果具有较高的可用性。还可以通过修改程序,增加加时赛更好的完善该系统。
P3:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:
4.2
1、uchar Status_BIT_01(); //状态位STA1,STA0判断(读写指令和读写数据)

基于ATmega48单片机动态扫描多位数码管显示电路设计

基于ATmega48单片机动态扫描多位数码管显示电路设计
利用ATmega48单片机内部时钟作为时间基准进行时间间隔调整,通过软件编 程控制可编程器件ATmega48,实现各个数码管的接通时间间隔和显示控制,从而 动态扫描显示多个数码管(以实现动态扫描显示圆周率前6位3.14159说明)。整 个设计分硬件和软件两大部分:硬件部分采用ATmega48单片机作为可编程芯片, 6个LED数码管作为显示器件;软件部分在WINAVR开发程序集环境下,利用AVR Studio集成开发环境利用C语言作为设计语言,对ATmega48进行编程实现。 2、硬件电路设计
AVR系列的单片机不仅具有良好的集成性能。而且都具备在线编程接口,其中 的ATmega系列还具备JTAG仿真和下载功能,含有片内看门狗电路、片内程序nash、 同步串行接口SPI;多数AVR单片机还内嵌了A/D转换器、EEPROM、模拟比较器、 PWM定时计数器等多种功能。AVR单片机的I/0接口具有很强的驱动能力,电流可 直接驱动继电器、LED等元件。从而省去驱动电路,节约系统成本。
二、具体内容 1、整体设计思路
驱动多位数码管时,有动态显示和静态显示两种连接方式。采用静态显示方
1
《机电系统控制电路设计》论文
式时,每位数码管的公共端接+5V 电源或地(共阳或共阴),此时,只要显示内 容不变就不需要更改单片机的不同 I/O 端口,但是这样会消耗掉相当多的 I/O 端口用于数码管驱动(每个数码管需要 8 个端口)。所以,为了减少端口资源, 借鉴动画片的原理,使用动态显示方法,其方法是一位一位轮流点亮各个数码管, 在任何时刻只有一个数码管点亮,每个数码管每隔一定时间亮一次,当这个时间 间隔足够短时,由于人眼的视觉滞留(视觉暂留时间约为 0.05 至 0.2 秒),肉 眼不会感觉到数码管闪烁,而是看到所有数码管一起发亮,就像静止的一样。

基于单片机的篮球赛计时记分器设计

基于单片机的篮球赛计时记分器设计

篮球赛计时计分器设计院系自动化学院专业自动化班级学号姓名指导教师负责教师摘要体育比赛中的计时计分系统是对体育比赛过程中所产生的时间、比分等数据信息进行快速采集、加工处理、传递和利用的系统。

此系统能否清晰、稳定、精确的反应体育比赛中的客观数据,直接影响到比赛的公平性和公正性。

本文针对上述情况研制了篮球赛计时计分器。

该系统以单片机为核心,利用7段共阴LED作为显示器件。

为了调整比赛中的时间和比分,在本设计中设立了8个按键,分别用于记录甲、乙两队的分数,设置赛程时间,调整赛程时间,启动和暂停赛程时间等功能,本系统还设计了定时报警系统。

实践证明,该系统精度高、稳定性好、抗干扰性强,具有一定的应用前景。

关键词:计时器;计分器;单片机;LED显示AbstractThe system of time and score recorded in the sporting games is the one like this: the data about time and socres that generated in the process of the games can be collected rapidly, processed, transmited and be used. If the system can reflect the objective data in the games clearly, stably and accurately, it will affect the fairness and impartiality of the games. According to this, calculagraph and scores recorder of the basketball games are researched and designed in this paper. The core of the system is the MCU, using seven segments LED as the display. In order to adjusting the time and the scores of the game, eight keys are used in this paper. The functions of these keys are: recording the scores of the team A and B, setting up or adjusting the time of the game, and starting or suspending the time of the game. The timing alarm system is also designed in the system. Experiments has proved that the system has high precision, good stability, strong anti-interference and it have a application prospects.Key words: calculagraph;scores recorder; MCU; LED display目录第1章绪论 (1)1.1 课题背景 (1)1.1.1 篮球赛计时计分器发展过程 (2)1.1.2 篮球赛计时计分器研究目的与意义 (2)1.2 课题任务及要求 (3)1.3 课题内容及安排 (3)第2章篮球赛计时计分器的总体方案论证 (4)2.1 篮球赛计时计分器的硬件方案论证 (4)2.2 篮球赛计时计分器的软件方案论证 (5)2.3 篮球赛计时计分器部分器件方案论证 (6)2.3.1 硬件译码与软件译码的比较 (6)2.3.2 CD4511与MC14495的比较 (8)第3章篮球赛计时计分器的硬件设计 (11)3.1 球赛计时计分器的工作原理 (11)3.2 计时电路的设计 (11)3.2.1 计时电路的工作原理 (12)3.2.2 赛程时间设置 (13)3.2.3 赛程时间启/停设置 (14)3.3 计分电路的设计 (14)3.3.1 计分电路的工作原理 (14)3.3.2 比分交换控制的实现 (14)3.3.3 比分刷新控制器 (14)3.3.4 比分校正控制电路 (16)3.4 报警电路设计 (16)3.5 单片机的选择 (17)3.6 显示电路的设计 (18)3.7 复位电路的设计 (20)第4章篮球赛计时计分器的软件设计 (22)4.1 监控程序设计 (22)4.2 计时显示子程序设计 (23)4.3 计分显示子程序设计 (25)4.4 LED显示子程序设计 (27)第5章篮球赛计时计分器的整体调试 (29)5.1 调试分析 (29)5.2 故障调试及解决方式 (30)5.3 联调结果 (32)结论 (35)社会经济效益分析 (37)参考文献 (38)致谢 (40)附录Ⅰ篮球赛计时计分器的硬件原理图 (41)附录Ⅱ程序清单 (42)附录Ⅲ元器件清单 (565)第1章绪论在我们生活的大千世界上,人类已进入了科学技术空前发展的信息社会。

AVR单片机Atmega48程序设计报告——比赛计时计分器

AVR单片机Atmega48程序设计报告——比赛计时计分器

一、设计目的本设计是基于ATMEGA48单片机的比赛计时计分器,利用8路7段LED数码管作为显示器件,采用3乘3矩阵式键盘作为输入,主要用于各种体育比赛记录分数,在此设计中共接入了2个四位一体7段LED数码管显示器,第一个显示器为一个倒数计时,第二个显示器为两队得分。

本设计中的倒数计时器时间为40分钟,可以进行开始计时、暂停计时的操作,分别通过S3_1、S3_2按钮实现,并通过蜂鸣器表示是否操作成功,时间通过1个四位一体7段LED 数码管显示器显示,前两位为分钟数,后两位为秒数。

本设计中可以对两队得分进行加1分、加2分、加3分操作,分别通过S1_1、S1_2、S1_3、S2_1、S2_2、S2_3按钮实现,并通过蜂鸣器的不同工作方式表示是否操作成功与所加的分值。

得分通过1个四位一体7段LED数码管显示器显示,每队得分显示两位数,显示范围为0~99分。

本设计可以进行清零操作,清零后倒计时恢复40分钟,得分均为0,通过S3_3按钮实现,并通过蜂鸣器表示是否操作成功。

二、设计思路本设计中由AVR核心板、数码管、蜂鸣器、3乘3矩阵键盘四部分组成。

电路中PORT_B 端口连接数码管,显示八位,完成倒计时与记录每队得分,PORT_C与3乘3矩阵键盘相连,由按键控制完成初始化、开始与暂停计时以及加分的功能,PORT_D与蜂鸣器端口相连,根据所加得分的不同,开始与暂停计时,初始化,蜂鸣器有不同的应答方式。

本设计中的程序主要分为两个部分,即暂停计时时的显示与开始计时时的显示。

暂停计时时与开始计时时都可以对每队加分,初始化。

三、设计电路图图一接口模块电路图二蜂鸣器电路图三 8路7段LED数码管电路图四 3*3矩阵控制键盘电路四、设计过程1、关闭硬件实验平台电源。

2、将下载器与主控单片机的下载口P5相连。

3、使用3条2*5排线连接P10和P14端口、P11和P19端口、P13和P4端口,从电路图上分析,PB口与LED显示器相连,PC口与3*3矩阵按键相连,PD口与蜂鸣器相连。

利用AVR单片机设计一个高精度的数字计时器.

利用AVR单片机设计一个高精度的数字计时器.

利用AVR 单片机设计一个高精度的数字计时器。

赵林(广西交通技师学院,广西,南宁,530001)【摘要】AVR 单片机用高级语言编程,极容易地实现系统移植,并且加快了软件的开发过程。

本文以设计数字秒表为例阐述如何用AVR 单片机设计一个高精度的数字计时器。

以体现该单片机具有指令执行速度快,可在线编程技术,多软件支持,操作方便,性价比高等特点。

在教学中极具推广意义。

【关键字】AVR 单片机;计数器;模块一、现状数字秒表能连续、可靠、稳定地工作;同时还具有体积小,功耗低等特点,便于携带.使用方便。

数字秒表是采用数字电路实现对“分、秒、毫秒”数字显示的计时装置。

由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字秒表的精度远远超过老式钟表计时器。

AVR 单片机是由ATMEL 公司研发出的增强型内置Flash 的RISC(Reduced Instruction Set CPU 精简指令集高速8位单片机。

它可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域,一般分为ATtiny 系列、AT90S 系列、ATmega 系列,产品类型多。

与其他类型单片机相比,具有指令执行速度快,在线编程技术ISP ,并可对其反复擦写1万次以上等;与此同时,支持AVR 开发软件多,操作方便,性价比高,教学中有推广意义。

二、分析与设计2.1 存在问题与对策传统MCS51系列单片机的所有数据处理都基于一个累加器因此累加器与程序存储器、数据存储器之间的数据转换就成了单片机的瓶颈;在AVR 单片机中,寄存器由32个通用工作寄存器组成.并且任何一个寄存器都能充当累加器,从而有效避免累加器的瓶颈效应,提高系统性能。

AVR 系列的单片机不仅具有良好的集成性能,而且都具备在线编程接口,其中的Mega 系列还具备JTAG 仿真和下载功能;含有片内看门狗电路、片内程序Flash 、同步串行接口SPI ;多数AVR 单片机还内嵌了A /D 转换器、EEP —ROM 、模拟比较器、PWM 定时计数器等多种功能;AVR 单片机的I /O 接口具有很强的驱动能力,灌入电流可直接驱动继电器、LED 等元件,从而省去驱动电路,节约系统成本。

最新毕业设计(论文)-基于单片机的球类比赛计时计分系统设计可编辑文档下载

最新毕业设计(论文)-基于单片机的球类比赛计时计分系统设计可编辑文档下载

基于单片机的球类比赛计时计分系统设计姓名:xxx学号:200740620249指导老师:xxx摘要:单片机广泛应用在电子领域的各个方面,因此想到要把单片机应用在球类比赛当中去,球类比赛主要包括计时和计分两大块,这样就可以应用单片机来控制七段数码管LED来实现这种功能,达到预期的效果。

本此计时计分系统的设计主要是篮球比赛为例,然后可以拓展到其他球类比赛的各个方面,篮球比赛的计时计分系统主要是以AT89C51单片机为核心元件,利用它内部的计数器T0,通过软件编程来完成比赛的计时,硬件部分除了AT89C51之外,还有7段LED数码管和开关,通过程序控制后显示比分和时间。

报警部分采用蜂鸣器为音响器件。

该计时计分器具有以下功能:1、计时:赛程时间启/停设置、24s倒计时控制;2、计分:比分加减控制,调整两队的比分;3、报警。

且价格低廉、操作简单、携带方便,适合学校单位举办友谊比赛等赛事的计时计分辅助工具。

关键词:篮球 AT89C51 计时计分系统中图分类号:TNBased on SCM ball games timing scoring system designAbstract:widely used in the electronic field microcontroller, therefore all aspects of the thought of putting SCM in ball games, ball games among mainly includes timing and scoring two bulks, so it can be used a singleship controlling seven segment digital tube LED to implement this function, achieve the desired effect.The timing of the scoring system is designed as an example, then basketball game could expand to other ball games each aspect, the game of basketball timing scoring system is mainly by AT89C51 components, use it internal counter T0, through software programming to complete game timing, hardware part besides AT89C51 seven sections, but also LED digital tube and switch, through the program control time and that the score. Alarm part adopts for audio devices. Buzzer The timing JiFenQi has the following functions: 1, timing: schedule time rev/stop setting, 24s countdown control; 2, scoring: score to add and subtract control, adjustment two teams score; 3, call the police. And the price is cheap, simple operation, easy to carry, suitable for school held a sports event friendship match unit of auxiliary tool clock scoring.Keywords:basketball AT89C51 Timing scoring systemSubdivisision classified number:TN目录1.绪论 (3)1.1引言 (3)1.2选题的背景及意义 (3)2.设计的总体方案 (4)2.1系统构成框图 (4)2.2器件选择 (5)2.3基本功能介绍 (5)2.3.1 比赛时间设置 (5)2.3.2 赛程时间开始/暂停设置 (5)2.3.3比分手动控制刷新 (5)2.3.4 24s显示控制 (6)2.3.5 计时计分的显示方法 (6)2.3.6 计时结束后自动报警 (6)3.硬件部分设计 (6)3.1AT89C51单片机 (6)3.1.1 AT89C51功能特性 (6)3.2计时电路设计 (7)3.2.1 LED显示器 (7)3.2.2 报警电路 (9)3.2.3 计时电路 (9)3.3计分电路设计 (10)3.4计时计分系统的工作过程 (10)4.系统的软件设计 (11)4.1主程序 (12)4.1.1主程序的流程图 (12)4.1.2 主程序 (14)5.系统调试 (14)6.结束语 (15)致谢 (16)参考文献 (17)1.绪论1.1 引言球类比赛计时计分系统是辅助比赛的工具。

单片机篮球计时计分器报告参考模板

单片机篮球计时计分器报告参考模板

单片机课程设计结题报告《篮球比赛计时计分器》团队成员分工情况:XX:完成实验报告的总体撰写,焊接方案设计和电路图的绘制,程序编写改进XX:完成元器件采集,辅助电路焊接,电路图修整以及实验报告的完善XX:完成程序编写烧录,电路焊接,以及PCB 版图的绘制其中设计方案的确立由团队成员一起讨论而成目录1选题背景 (3)2方案设计 (4)2.1硬件电路设计 (5)2.1.1硬件系统各功能模块的电路 (5)2.1.2硬件系统的实现 (9)2.1.3硬件系统的调试 (10)2.2软件设计、编程及调试 (10)2. 2.1系统软件的模块程序设 (10)2.2.2编程实现 (11)2.2.3软件系统的调试 (11)3系统联调及最终实现结果展示 (11)4总结 (12)5 收获与致谢 (13)6 参考文献 (14)7附件 (15)1 选题背景单片机,亦称单片微电脑或单片微型计算机。

它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。

计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。

微计算机(单片机)在这种情况下诞生了,它为我们改变了什么?纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。

世界各大电气厂家、测控技术企业、机电行业,竞相把单片机应用于产品更新,作为实现数字化、智能化的核心部件。

本设计由STC89C52编程控制LED七段数码管作球赛计时计分系统具有赛程定时设置、赛程时间暂停、性能稳定、操作方便且易携带等特点。

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

一、设计目的本设计是基于ATMEGA48单片机的比赛计时计分器,利用8路7段LED数码管作为显示器件,采用3乘3矩阵式键盘作为输入,主要用于各种体育比赛记录分数,在此设计中共接入了2个四位一体7段LED数码管显示器,第一个显示器为一个倒数计时,第二个显示器为两队得分。

本设计中的倒数计时器时间为40分钟,可以进行开始计时、暂停计时的操作,分别通过S3_1、S3_2按钮实现,并通过蜂鸣器表示是否操作成功,时间通过1个四位一体7段LED 数码管显示器显示,前两位为分钟数,后两位为秒数。

本设计中可以对两队得分进行加1分、加2分、加3分操作,分别通过S1_1、S1_2、S1_3、S2_1、S2_2、S2_3按钮实现,并通过蜂鸣器的不同工作方式表示是否操作成功与所加的分值。

得分通过1个四位一体7段LED数码管显示器显示,每队得分显示两位数,显示范围为0~99分。

本设计可以进行清零操作,清零后倒计时恢复40分钟,得分均为0,通过S3_3按钮实现,并通过蜂鸣器表示是否操作成功。

二、设计思路本设计中由AVR核心板、数码管、蜂鸣器、3乘3矩阵键盘四部分组成。

电路中PORT_B 端口连接数码管,显示八位,完成倒计时与记录每队得分,PORT_C与3乘3矩阵键盘相连,由按键控制完成初始化、开始与暂停计时以及加分的功能,PORT_D与蜂鸣器端口相连,根据所加得分的不同,开始与暂停计时,初始化,蜂鸣器有不同的应答方式。

本设计中的程序主要分为两个部分,即暂停计时时的显示与开始计时时的显示。

暂停计时时与开始计时时都可以对每队加分,初始化。

三、设计电路图图一接口模块电路图二蜂鸣器电路图三 8路7段LED数码管电路图四 3*3矩阵控制键盘电路四、设计过程1、关闭硬件实验平台电源。

2、将下载器与主控单片机的下载口P5相连。

3、使用3条2*5排线连接P10和P14端口、P11和P19端口、P13和P4端口,从电路图上分析,PB口与LED显示器相连,PC口与3*3矩阵按键相连,PD口与蜂鸣器相连。

4、打开智能开发环境,新建一个新的工程项目。

5、在左边的树形结构窗内,选择“工程管理-基本操作-功能描述&开发日志”,进行项目功能的描述。

工作模式:端口选择:595片选择:595数据输出:时钟:HC595 PORTB BIT0 BIT2 BIT17、在左边的树形结构窗内,选择“工程管理-端口设置-端口B”,将引脚3-引脚5设置如下:使用情况功能选择输入输出名称置高置低引脚3 使用IO 输出A0 A0_SetHigh A0_SetLow 引脚4 使用IO 输出A1 A1_SetHigh A1_SetLow 引脚5 使用IO 输出A2 A2_SetHigh A2_SetLow8、增加全局函数SelectLED和DrawLED设置如下:返回类型函数参数参数类型SelectLED void Uint8 u8_Number void DrawLED void Uint8 u8_Number,Uint8 u8_Point void SelectLED函数实现:void SelectLED(uint8 u8_Number) {//HC595_165_Write595Byte(0xff); //Select595;//DeSelect595;DrawLED(255,0);switch (u8_Number){case 0:A2_SetLow;A1_SetLow;A0_SetLow;break;case 1:A2_SetLow;A1_SetLow;A0_SetHigh;break;case 2:A2_SetLow;A1_SetHigh;A0_SetLow;break;case 3:A2_SetLow;A1_SetHigh; A0_SetHigh; break;case 4:A2_SetHigh; A1_SetLow; A0_SetLow; break;case 5:A2_SetHigh; A1_SetLow; A0_SetHigh; break;case 6:A2_SetHigh; A1_SetHigh; A0_SetLow; break;case 7:A2_SetHigh; A1_SetHigh; A0_SetHigh; break;}}DrawLED函数实现:Void DrawLED(uint8 u8_Number,uint8 u8_Point) {uint8 u8_Char=0;switch (u8_Number){case 0:u8_Char=0xc0;break;case 1:u8_Char=0xf9;break;case 2:u8_Char=0xa4;break;case 3:u8_Char=0xb0;break;case 4:u8_Char=0x99;break; case 5:u8_Char=0x92;break;case 6:u8_Char=0x82;break;case 7:u8_Char=0xf8;break;case 8:u8_Char=0x80;break;case 9:u8_Char=0x90;break;case 11:u8_Char=0xff;break;case 255:u8_Char=0xFF;break;}if (u8_Point==1){CLRBIT(u8_Char,BIT7);}HC595_165_Write595Byte(u8_Char);Select595;DeSelect595;}9、在左边的树形结构窗内,选择“工程管理-端口设置-端口C”,将引脚0-引脚5设置如下:10、增加功能宏SelectS1、SelectS2、SelectS3设置如下:11、在左边的树形结构窗内,选择“工程管理-端口设置-端口D”,将引脚4设置如下:12、在左边的树形结构窗内,选择“工程管理-用户程序-Main_Logic.c”,在程序编写窗口内输入程序。

13、在左边的树形结构窗内,选择“工程管理-基本操作-生成下载”,点击“生成程序文件”按钮。

14、程序编译成功后,接通硬件实验平台电源,将目标文件下载到硬件实验平台。

四、设计程序void Main_Logic(void){/***********************定义局部变量***********************/uint8 a,b,c,d,e,f,g,h,k,i,j;/*************************** 初始化输入管脚***************************//********************************* 初始化项目中用到的其它硬件和变量******************************** */Loop5:for (i=0;i<10;i++){for (j=0;j<5;j++){SelectLED(0);DrawLED(i,0);delay_1ms();SelectLED(1);DrawLED(i,0);delay_1ms();SelectLED(2);DrawLED(i,0);delay_1ms();SelectLED(3);DrawLED(i,0);delay_1ms();SelectLED(4);DrawLED(i,0);delay_1ms();SelectLED(5);DrawLED(i,0);delay_1ms();SelectLED(6);DrawLED(i,0);delay_1ms();SelectLED(7);DrawLED(i,0);delay_1ms();Beep_Open;delay_10ms();Beep_Shut;}}a=0;b=11;c=0;d=11;e=0;f=0;g=0;h=4;/************************** 后台主循环**************************/while(1){/******************************在这里完成自己的项目逻辑******************************//*定时显示*/Loop8:for (k=0;k<1;){SelectLED(0);DrawLED(h,0);delay_1ms();SelectLED(1);DrawLED(g,0);delay_1ms();SelectLED(2);DrawLED(f,0);delay_1ms();SelectLED(3);DrawLED(e,0);delay_1ms();SelectLED(4);DrawLED(d,0);delay_1ms();SelectLED(5);DrawLED(c,0);delay_1ms();SelectLED(6);DrawLED(b,0);delay_1ms();SelectLED(7);DrawLED(a,0);delay_1ms();SelectS1;R1_Test{}else{delay_20ms();R1_Test{}else{Beep_Open;delay_300ms();Beep_Shut;c++;goto Loop6;}}R2_Test{}else{delay_20ms();R2_Test{}else{Beep_Open;delay_100ms();Beep_Shut;delay_100ms();Beep_Open;delay_100ms();Beep_Shut;c=c+2;goto Loop6;}}R3_Test{}else{delay_20ms();R3_Test{}else{Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;c=c+3;goto Loop6;}}SelectS2;R1_Test{}else{delay_20ms();R1_Test{}else{Beep_Open;delay_300ms();Beep_Shut;a++;goto Loop7;}}R2_Test{}else{delay_20ms();R2_Test{}else{Beep_Open;delay_100ms();Beep_Shut;delay_100ms();Beep_Open;delay_100ms();Beep_Shut;a=a+2;goto Loop7;}}R3_Test{}else{delay_20ms();R3_Test{}else{Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;a=a+3;goto Loop7;}}SelectS3;R1_Test{}else{delay_20ms();R1_Test{}else{Beep_Open;delay_200ms();Beep_Shut;goto Loop3;}}R3_Test{}else{delay_20ms();R3_Test{}else{goto Loop5;}}}/*A队定时得分累计*/for (b=0;b<10;b++){if(a>9) a=a-10;for (;a<10;){goto Loop8;Loop7:if(k<1) a=a;}if(b==11) b=0;}/*B定时队得分累计*/for (d=0;d<10;d++){if(c>9) c=c-10;for (;c<10;){goto Loop8;Loop6:if(k<1) c=c;}if(d==11) d=0;}/*A队计时得分累计*/for (b=0;b<10;b++){if(a>9) a=a-10;for (;a<10;){goto Loop4;Loop2:if(k<1) a=a;}if(b==11) b=0;}/*B队计时得分累计*/for (d=0;d<10;d++){if(c>9) c=c-10;for (;c<10;){goto Loop4;Loop1:if(k<1) c=c;}if(d==11) d=0;}/*倒数计时*/for (h=3;h<10;h--){for (g=9;g<10;g--){for (f=5;f<10;f--){for (e=9;e<10;){goto Loop3;Loop4:if(k<1)e=e;}}}}/*计时显示*/Loop3:for (k=0;k<1;){for (i=0;i<112;i++){SelectLED(0);DrawLED(h,0);delay_1ms();SelectLED(1);DrawLED(g,0);delay_1ms();SelectLED(2);DrawLED(f,0);delay_1ms();SelectLED(3);DrawLED(e,0);delay_1ms();SelectLED(4);DrawLED(d,0);delay_1ms();SelectLED(5);DrawLED(c,0);delay_1ms();SelectLED(6);DrawLED(b,0);delay_1ms();SelectLED(7);DrawLED(a,0);delay_1ms();SelectS1;R1_Test{}else{delay_20ms();R1_Test{}else{Beep_Open;delay_300ms();Beep_Shut;c++;e--;goto Loop1;}}R2_Test{}else{delay_20ms();R2_Test{}else{Beep_Open;delay_100ms();Beep_Shut;delay_100ms();Beep_Open;delay_100ms();Beep_Shut;c=c+2;e--;goto Loop1;}}R3_Test{}else{delay_20ms();R3_Test{}else{Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;c=c+3;e--;goto Loop1;}}SelectS2;R1_Test{}else{delay_20ms();R1_Test{}else{Beep_Open;delay_300ms();Beep_Shut;a++;e--;goto Loop2;}}R2_Test{}else{delay_20ms();R2_Test{}else{Beep_Open;delay_100ms();Beep_Shut;delay_100ms();Beep_Open;delay_100ms();Beep_Shut;a=a+2;e--;goto Loop2;}}R3_Test{} else{delay_20ms();R3_Test{}else{Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;delay_30ms();delay_30ms();Beep_Open;delay_30ms();delay_30ms();Beep_Shut;a=a+3;e--;goto Loop2;}}SelectS3;R2_Test{}else{delay_20ms();R2_Test{}else{Beep_Open;delay_200ms();Beep_Shut;goto Loop8;}}R3_Test{}else{delay_20ms();R3_Test{}else{goto Loop5;}}}delay_1ms();delay_1ms();delay_1ms();delay_1ms();delay_1ms();delay_1ms();e--;goto Loop4;}/***************************************** 以下语句为喂狗程序,大部分工程都不应删除**************************************** */#ifdef Per_WDTwdt_reset();#endif}}五、程序流程。

相关文档
最新文档