1、按键模块通过P1口输入数据。总体实现功能如下:(1)能为比赛提供计时功能,并能任意修改所要计量的时间,以此来满足足球篮球比赛的不同赛制。(2)能为比赛提供记录比分功能,随时刷新甲、乙两队在整个比赛过程中的比分,出现错误也能重新修改比分。(3)比赛结束时,能发出报警声,并能随时关闭报警声。(4)比赛期间可随时接受暂停请求,计时停止。2、系统硬件模块设计:(1)设计框图及原理图(2)单片机芯片AT89S52模块 AT89S52的主要特性如下: 与AT89C51,C52,STC89RC52兼容8K字节可编程闪烁存储器128*8位内部RAM32可编程I/O线三个16位定时器/计数器6个中断源可编程串行
2、通道片内振荡器和时钟电路 (3)时钟模块采用12MHZ的晶振,另有两个30pF的瓷片电容(4)复位电路5(5)报警电路采用蜂鸣器加100的限流电阻接P1口(6)按键控制模块共有9个设置按键,P1口有7个:add1、add2是加分键(add1按一次加一分,add2按一次加二分),minus1是减分键(按一下减一分),bstop是关蜂鸣器键,start是开始计时键,stopagain是时间暂停键,turn是切换键(用于加分方的切换),P3口有2个中断:timeadd1是时间计时加1分钟,timeadd10是时间计时加10分钟。(7)时间显示模块采用一个四位共阴七段数码管显示分秒。段选口接P0口,P
3、0口接一个1k的排阻,起上拉电平作用。位选口接P2,采用动态扫描。(8)比分显示模块采用两个两位共阴七段数码管显示甲队乙队分数。三、系统软件模块设计(1)C语言程序流程图中断函数按否初始化显示 开始修改计时时间 Nstart按否时间是否为0按键函数计时函数显示函数复位函数报警函数(2)源程序代码:#include#include #define uint unsigned int#define uchar unsigned charuchar code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; uchar code ta
4、ble= 0x3f,0x06,0x5b,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=P
5、13;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 & minute=0) ET0=0; else if(second=0 & minute!=0) second=59; minute-; else if(second!=0 ) second-; void delay( ) /显示延时函数 uint x,y;
6、for(x=10;x0;x-) for(y=10;yy-);void delay1( ) /延时消抖函数16ms for(y=360;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; /采
7、用动态扫描 P2=temp; for(i=0;i8;i+) j=disbufferi; P0=table1j; delay(); temp=_crol_(temp,1); /temp的最低位0左移,依次选通各个数码管 P2=temp; void display() /显示函数 P0=tablej; void bizzer() /报警函数 while(minute=0 & second=0) bizz=0; delay1(); display1(); if(!bstop=1) delay1(); if(! while(!bstop=1); while(1) bizz=1; display();
8、void exinterrupt() interrupt 0 /外部中断0,增加1分钟计时timeadd1) while(!timeadd1); minute+;void exinterrupt1() interrupt 2 /外部中断1,增加10分钟计时timeadd10)timeadd10); minute+=10;void button() /按键控制函数 if(!turn)turn); flage+=1; if(flage%2=0)add1) /分数加1分add1)add1); Ascore+=1;add2) /分数加2分add2)add2); Ascore+=2;minus1) /减分minus1)minus1); Ascore-=1; else Bscore+=1; Bscore+=2; delay1(); if(! while(! Bscore-=1;stopagain) /时间暂停stopagain)stopagain); flage1+=1; if(flage1%2=1) TR0=0; else TR0=1;void main() while(1) TH0=(65536-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1