- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于at89s52的篮球足球比赛计时计分器仿真及实物制作毕业设计
深圳大学考试答题纸
(以论文、报告等形式考核专用)二○一四~二○一五学年度第 一 学期
课程编号 1303100001 课程名称 单片机应用与设计
单片机芯片AT89S52模块
AT89S52的主要特性如下:
·与AT89C51,C52,STC89RC52兼容
·8K字节可编程闪烁存储器
·128*8位内部RAM
·32可编程I/O线
·三个16位定时器/计数器
·6个中断源
·可编程串行通道
·片内振荡器和时钟电路
时钟模块
采用12MHZ的晶振,另有两个30pF的瓷片电容
复位电路
5
报警电路
采用蜂鸣器加100Ω的限流电阻接P1口
按键控制模块
共有9个设置按键,P1口有7个:add1、add2是加分键(add1按一次加一分,add2按一次加二分),minus1是减分键(按一下减一分),,bstop是关蜂鸣器键,start是开始计时键,stopagain是时间暂停键,turn是切换键(用于加分方的切换),P3口有2个中断:timeadd1是时间计时加1分钟,timeadd10是时间计时加10分钟。
时间显示模块
采用一个四位共阴七段数码管显示分秒。段选口接P0口,P0口接一个1kΩ的排阻,起上拉电平作用。
位选口接P2,采用动态扫描。
比分显示模块
采用两个两位共阴七段数码管显示甲队乙队分数。段选口接P0口,P0口接一个1kΩ的排阻,起上拉电平作用。位选口接P2,采用动态扫描。
三、系统软件模块设计
(1)C语言程序流程图
N
N
N
源程序代码:
#includereg52.h
#include intrins.h
#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,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
uchar disbuffer[8]={0};
uchar minute=0,second=0;
uchar Ascore=0,Bscore=0,temp=0;
uchar flage1=0;
uchar flage=0;
uint count,z;
sbit bizz=P1^7; //定义按键对应的端口
sbit add1=P1^0;
sbit add2=P1^1;
sbit minus1=P1^2;
sbit bstop=P1^4;
sbit start=P1^5;
sbit stopagain=P1^6;
sbit turn=P1^3;
sbit timeadd1=P3^2;
sbit timeadd10=P3^3;
void ininterrupt() interrupt 1 //定时器T0计时函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
if(second==0 minute==0)
{
ET0=0;
}
else if(second==0 minute!=0)
{
second=59;
minute--;
}
else if(second!=0 )
second--;
}
}
void delay( ) //显示延时函数
{
uint x,y;
for(x=10;x0;x--)
for(y=10;y0;y--);
}
void delay1( ) //延时消抖函数16ms
{
uint x,y;
for(x=10;x0;x--)
for(y=360;y0;y--)
;
}
void display1()
{
uchar i,j;
uchar temp;
disbuffer[3]=second%10;
disbuffer[2]=second/10;
disbuffer[1]=minute%10;
disbuffer[0]=minute/10;
disbuffer[5]=Ascore%10;
disbuffer[4]=Ascore/10;
disbuffer[7]=Bscore%10;
disbuffer[6]=Bscore/10;
temp=0xfe; //采用动态扫描
P2=temp;
for(i=0;i
文档评论(0)