基于AT89S52的足球篮球双用计时计分器毕业论文.doc

上传人:h**** 文档编号:126332 上传时间:2018-07-09 格式:DOC 页数:69 大小:6.90MB
下载 相关 举报
基于AT89S52的足球篮球双用计时计分器毕业论文.doc_第1页
第1页 / 共69页
基于AT89S52的足球篮球双用计时计分器毕业论文.doc_第2页
第2页 / 共69页
基于AT89S52的足球篮球双用计时计分器毕业论文.doc_第3页
第3页 / 共69页
基于AT89S52的足球篮球双用计时计分器毕业论文.doc_第4页
第4页 / 共69页
基于AT89S52的足球篮球双用计时计分器毕业论文.doc_第5页
第5页 / 共69页
点击查看更多>>
资源描述

1、1 深圳大学考试答题纸 (以论文、报告等形式考核专用 ) 二一四二一五学年度第 一 学期 课程编号 1303100001 课程名称 单片机应用与设计 主讲教师 王百鸣 评分 学 号 2012130035 姓名 黄志宇 专业年级 集成电路设计与集成系统 大三 教师评语: 题目 : 基于 AT89S52的篮球足球比赛计时计分器仿真及实物制作 答题: 2 一、 设计任务概述: 采用 AT89S52 单片机为核心设计的一个用于赛场的篮球足球比赛的计时计分器并制作出实物。本设计分为三个模块:显示模块,计时模块和按键模块。计时模块采用定时器 T0 中断计时,并通过 P3 口的外部中断 0 和外部中断 1

2、实现比赛时间的修改。显示模块分为计时和计分两部分,采用一个四位共 阴七段数码管和两个共阴七段数码管显示,采用动态扫描方式显示,段选采用 P0 口实现,位选通过 P2 口实现。按键模块通过 P1 口输入数据。总体实现功能如下: ( 1)能为比赛提供计时功能,并能任意修改所要计量的时间,以此来满足足球篮球比赛的不同赛制。 ( 2)能为比赛提供记录比分功能,随时刷新甲、乙两队在整个比赛过程中的比分,出现错误也能重新修改比分。 ( 3)比赛结束时,能发出报警声,并能随时关闭报警声。 ( 4)比赛期间可随时接受暂停请求,计时停止 。 二、 系统硬件模块设计: ( 1) 设计框图及原理图 3 ( 2) 单

3、片机芯片 AT89S52 模块 AT89S52 的主要特性如下: 与 AT89C51, C52, STC89RC52 兼容 8K 字节可编程闪烁存储器 128*8 位内部 RAM 32 可编程 I/O 线 三个 16 位定时器 /计数器 6 个中断源 可编程串行通道 片内振荡器和时钟电路 ( 3) 时钟模块 采用 12MHZ 的晶振,另有两个 30pF 的瓷片电容 ( 4) 复位电路 5 ( 5) 报警电路 采用蜂鸣器加 100的限流电阻接 P1 口 ( 6) 按键控制模块 4 共有 9 个设置按键, P1 口有 7 个: add1、 add2 是加分键( add1 按一次加一分 ,add2

4、按一次加二分),minus1 是减分键(按一下减一分), bstop 是关蜂鸣器键, start 是开始计时键, stopagain 是时间暂停键, turn是切换键(用于加分方的切换), P3口有 2个中断: timeadd1是时间计时加 1分钟, timeadd10是时间计时加 10 分钟。 ( 7) 时间显示模块 采用一个四位共阴七段数码管显示分秒。段选口接 P0 口, P0 口接一个 1k的排阻,起上拉电平作用。 位选口接 P2,采用动态扫描。 ( 8) 比分显示模块 采用两个两位共阴七段数码管显示甲队乙队分数。段选口接 P0 口, P0 口接一个 1k的排阻,起上拉电平作用。位选口接

5、 P2,采用动态扫描。 三、系统软件模块设计 5 ( 1) C语言程序流程图 N N N ( 2) 源程序代码: #include #include 开始 初始化显示 中断函数按否 修改计时时间 start 按否 计时函数 按键函数 时间是否为0 显示函数 报警函数 复位函数 6 #define uint unsigned int #define uchar unsigned char uchar code table1= 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef; uchar code table= 0x3f,0x06,0x5b,

6、0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f; uchar disbuffer8=0; uchar minute=0,second=0; uchar Ascore=0,Bscore=0,temp=0; uchar flage1=0; uchar flage=0; uint count,z; sbit bizz=P17; /定义按键对应的端口 sbit add1=P10; sbit add2=P11; sbit minus1=P12; sbit bstop=P14; sbit start=P15; sbit stopagain=P16; sbit turn=P13;

7、sbit timeadd1=P32; sbit timeadd10=P33; void ininterrupt() interrupt 1 /定时器 T0计时函数 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; if(second=0 else if(second=0 minute-; else if(second!=0 ) second-; void delay( ) /显示延 时函数 7 uint x,y; for(x=10;x0;x-) for(y=10;y0;y-); void de

8、lay1( ) /延时消抖函数 16ms uint x,y; for(x=10;x0;x-) for(y=360;y0;y-) ; void display1() uchar i,j; uchar temp; disbuffer3=second%10; disbuffer2=second/10; disbuffer1=minute%10; disbuffer0=minute/10; disbuffer5=Ascore%10; disbuffer4=Ascore/10; disbuffer7=Bscore%10; disbuffer6=Bscore/10; temp=0xfe; /采用动态扫描

9、P2=temp; for(i=0;i8;i+) j=disbufferi; P0=table1j; delay(); temp=_crol_(temp,1); /temp 的最低位 0左移,依次选通各个数码管 P2=temp; void display() /显示函数 uchar i,j; uchar temp; disbuffer3=second%10; disbuffer2=second/10; disbuffer1=minute%10; disbuffer0=minute/10; disbuffer5=Ascore%10; disbuffer4=Ascore/10; disbuffer7

10、=Bscore%10; disbuffer6=Bscore/10; temp=0xfe; 8 P2=temp; for(i=0;i8;i+) j=disbufferi; P0=tablej; delay(); temp=_crol_(temp,1); P2=temp; void bizzer() /报警函数 while(minute=0 delay1(); display1(); if(!bstop=1) delay1(); if(!bstop=1) while(!bstop=1); while(1) bizz=1; display(); void exinterrupt() interrup

11、t 0 /外部中断 0,增加 1分钟计时 delay1(); if(!timeadd1) while(!timeadd1); minute+; void exinterrupt1() interrupt 2 /外部中断 1,增加 10分钟计时 delay1(); if(!timeadd10) 9 while(!timeadd10); minute+=10; void button() /按键控制函数 if(!turn) delay1(); if(!turn) while(!turn); flage+=1; if(flage%2=0) if(!add1) /分数加 1分 delay1(); if

12、(!add1) while(!add1); Ascore+=1; if(!add2) /分数加 2分 delay1(); if(!add2) while(!add2); Ascore+=2; if(!minus1) /减分 delay1(); if(!minus1) while(!minus1); Ascore-=1; else 10 if(!add1) delay1(); if(!add1) while(!add1); Bscore+=1; if(!add2) delay1(); if(!add2) while(!add2); Bscore+=2; if(!minus1) delay1(); if(!minus1) while(!minus1); Bscore-=1; if(!stopagain) /时间暂停 delay1(); if(!stopagain) while(!stopagain); flage1+=1; if(flage1%2=1) TR0=0; else TR0=1; if(!bstop=1) delay1(); if(!bstop=1)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。