为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

篮球记分牌实训报告

2017-12-21 14页 doc 137KB 76阅读

用户头像

is_888153

暂无简介

举报
篮球记分牌实训报告篮球记分牌实训报告 篮球记分牌 指导老师:唐扬波 第五组成员:许健 ,翁福成 ,吴清发 班级:应用电子10-1 摘要:这次实训采用AT89C51单片机、9015NPN三极管、数码管、若干个电阻和电容、等器材来构成篮球记分牌。 关键词:单片机AT89C51、数码管显示、9015NPN三极管. 目录 一、基本设计方案 二、硬件系统设计 三、电路图设计 四、流程图 五、源程序 六、调试 七、作用 八、总结 一、基本设计方案 ,)利用AT89C51单片机结合数码管显示器设计的一个能用按键来控制开始计时...
篮球记分牌实训报告
篮球记分牌实训报告 篮球记分牌 指导老师:唐扬波 第五组成员:许健 ,翁福成 ,吴清发 班级:应用电子10-1 摘要:这次实训采用AT89C51单片机、9015NPN三极管、数码管、若干个电阻和电容、等器材来构成篮球记分牌。 关键词:单片机AT89C51、数码管显示、9015NPN三极管. 一、基本 二、硬件系统设计 三、电路图设计 四、流程图 五、源程序 六、调试 七、作用 八、总结 一、基本设计方案 ,)利用AT89C51单片机结合数码管显示器设计的一个能用按键来控制开始计时、暂停、、加分和减分的功能。 基本功能: ? 数码管显示; 1 ? 显示格式为“A队、B队、”; ? 能够通过按键控制比分的增减和倒数时间的开始、暂停和加时; ? ,)篮球记分牌以单片机AT89C51作为控制核心,该系统有如下方案组成: ?主控芯片---采用AT89C51单片机控制 ?显示模块---数码管(能显示A队跟B队比分,) ?控制模块---按键 二、硬件系统设计 1)本系统采用AT89C51芯片,有40个引脚 40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 1、电源: (1) VCC - 芯片电源,接+5V; (2) VSS - 接地端; 2、时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 3、 控制线: RST(Reset)功能:复位信号输入端。 4、I/O线 1)AT89C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。 2 2)数码管显示器接口及显示方式 由于所有八位段选线都由一个I/O口控制,因此,在每一瞬间,所有数码管显示块会显示相同的字符。要想每位显示不同的字符,就必须采用扫描轮流点亮每一位数码管显示块,也就是每一瞬间只点亮一位数码管显示块。此刻,段选控制I/O输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通信号(采用共阴数码管,送高电平点亮)。这样就可以保证各位数码管显示块显示相应的字符。 3)本系统采用12MHZ晶振,由P0口输出所要显示的字形段码,由P2.0-P2.6口输出字位信号,低电平有效选中相应的数码管。 三、电路图设计 3 四、流程图 4 五、源程序 ———————————————————————————————————— #include "reg51.h" //51头文件 #include "intrins.h" //_nop_( );延时#函数#用 #define uchar unsigned char //无符号字符型宏定义 #define uint unsigned int //无符号整型宏定义 #define SEG_OUT P2 //段码输出口 #define BIT_OUT P1 //扫描口 #define KEY_IO P0 //键盘接口 sbit dot=P2^7; //LED小数点控制 uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF }; /*共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */ uchar data score_a=0,score_b=0; //双方分数变量 uchar data dis_buff[4]={0,0,0,0}; //待显示单元数据,共4个数据,即显示数组 uchar data jian[4]={1,2,0,0}; uchar data keytemp,key=100,keysave=100; //键值存放 uchar data t10ms=0,ts=0,tmin=12; bit data flag=0; //按键处理标志位 //1毫秒延时函数 delay1ms(int t) { int i,j; //延时变量 for(i=0;i=100)score_a=100;break; //key=1时,score_a增2 case 2:score_a+=3;if(score_a>=100)score_a-=100;break; //key=2时,score_a增3 case 3:if(score_a!=0)score_a--;break; //key=3时,score_a减1 case 4:score_b++;if(score_b==100)score_b=0;break; //key=4时,score_b增1 case 5:score_b+=2;if(score_b>=100)score_b-=100;break; //key=5时,score_b增2 case 6:score_b+=3;if(score_b>=100)score_b-=100;break; //key=6时,score_b增3 case 7:if(score_b!=0)score_b--;break; //key=7时,score_b减1 default:break; //都不符合时跳出 循环 } } //按键扫描函数 void keyscan( ) { uchar i,t=0xef; //1110 1111 KEY_IO=0x03; // KEY_IO赋值为0000 0011 keytemp=(~KEY_IO)&0x03; //将按键端口取反再与上00000011赋值给 keytemp, //即当有按键按下时,keytemp不等于0 if(keytemp!=0) //当keytemp不等于0时 6 { for(i=0;i<4;i++) //分四次循环扫描4列 { KEY_IO=t; //先将第一条列线赋为0 keytemp=(~KEY_IO)&0x03; //读取按键端口状态 if(keytemp!=0) //当keytemp不为0时 { switch(keytemp) //判断keytemp状态 { case 0x01:key=0*4+i;break; //第一行按下时,keyemp为0x02,根据i判断第几列 case 0x02:key=1*4+i;break; //第二行按下时,keyemp为0x01,根据i判断第几列 default:break; } if(key>=0&key<=7&key==keysave) //当key为0到7,并且key= keysave时 { if(flag!=1) //当按键处理位不为1时 { keyproc( ); //调用按键处理函数 flag=1; //按键处理标志位为1,相当于有键按下 } break; //跳出,if循环 } else { keysave=key; //将key的值赋给keysave flag=0; //按键处理标志位为0,相当于没键按下 break; //跳出,if循环 } } t=(t<<1)|0x01; //t左移一位,高位补1,扫描下一列 } } } //外部中断0中段服务子函数 void ext0(void) interrupt 0 //通过一个与非门用中断来扫描按键 { 7 EX0=0; //关闭外部中断 keyscan( ); //按键扫描函数 } /***********LED显示动态扫描函数**********/ xu() { char k; char m=0xfe; jian[0]=tmin/10; jian[1]=tmin%10; jian[2]=ts/10; jian[3]=ts%10; for(k=0;k<4;k++) //6位LED扫描控制 { BIT_OUT=0xff; SEG_OUT=tab[jian[k]]; BIT_OUT=m; delay1ms(3); m=(m<<1)|0x01; } } /****************外部中断1中段服务子程序*/ void ext1(void) interrupt 2 { EX1=1; xu(); } /****************定时器0中断服务程序*****/ void init_timer0(void) interrupt 1 { TH0=-50000/256; TL0=-50000%256; //50MS定时初值(T0计时用) t10ms++; if(t10ms==20) { t10ms=0; if(ts==0) { ts=60; ts--; tmin--; if(tmin==0) { 8 tmin=12; } } else ts--; } } //主函数 main( ) { TMOD=0x11; //0001 0001 TH0=-50000/256; TL0=-50000%256; //10MS定时初值(T0计时用) ET0=1; TR0=1; EA=1; IT0=0; EX0=1; //开全局中断 EX1=1; //开外部中断0 //外部中断0下降沿触发 while(1) { KEY_IO=0x03; //赋初值0000 0011 display( ); //显示函数 EX0=1; //开外部中断0,即可以按键扫描 if(P3^2==1) //当P3.2中断口为1时 { keysave=100; flag=0; //按键处理标志位为0 } } } 六、调试 调试过程中, 我们利用 AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及89C51引脚结构的功能对其进行反复烧 9 写程序,让电子时钟可以实现显示“A队和B队比分”;编写好程序后,把电路图画好,在软件仿真后再焊接硬件。 再把程序烧写到AT89C51单片机,把它插入硬件接上电源调试。首先调试按键能否正常工作,再看数码管显示的速度是否正常,最后调试完成。 七、作用 篮球电子计分牌主要是利用电子技术将篮球比赛比分和时间电子化、数字化,拥有时钟精确、体积小、接口友好、可扩展性能强等特点,被广泛应用于生活和工作当中,而且篮球电子计分牌的制作成本低,适于生产和广泛使用。 10 八(总结 本次实训,我们更加了解单片机AT89C51的使用和编程;利用LED数码管显示参赛比分;此次作品具备加分、减分、每节倒计时、加时赛倒计时、我们更加熟悉了程序的基本概念, 虽然这次的作品完成了,但是还有很多地方是值得我们不断改进的,作品的功能有待加强,今后还要更加努力,。我们相信在以后的实训中能够更加积极主动,争取学到更多的知识,丰富自己的知识。加油~~~~~~ 11
/
本文档为【篮球记分牌实训报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索