课程设计实验报告 一、题目: 篮球记分器 STC89C52 12M晶振 四位一体数码管 两位数码管2个 4.7K欧排阻2个 极性电容 电容22pF 电阻10K欧 开关8个 导线若干 1.12分钟倒计时 - 分别给A、B队加1、2、3分并显示
- 换场A、B两队分数交换
- 暂停
初始化定时器T0,并开启T0中断,十二分钟倒计时开始工作,每隔20uS数码管显示分、秒,循环检查各开关是否按下并做相应处理。判断是aa还是bb按下,再按one则给相应的队加一分,按two加两分,按three加三分;如果exchange按下,则交换AB两队分数;如果stop按下,则暂停工作。 六、体会 通过这次设计制作,进一步了解到单片机最小系统和工作原理,掌握了定时器和数码管的使用。真心体会到数码管的引脚连线是个复杂的过程,第一次连接好后由于线接的太乱,有断开和连上的地方,没有成功,第二次重新规整了连线,终于使单片机正常工作了。
- #include<reg51.h>
- unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x90 };
- int i=11,j=59,a=0,b=0,m=0,n=0,temp,s=0,r=24,k;
- sbit aa=P0^0;
- sbit bb=P0^1;
- sbit one=P0^2;
- sbit two=P0^3;
- sbit three=P0^4;
- sbit exchange=P0^5;
- sbit stop=P0^6;
- sbit led=P3^6;
- sbit tt=P3^7;
-
- void delay(int x)
- {
- int w,q;
- for(w=0;w<x;w++)
- for(q=0;q<120;q++);
- }
-
- void display(int i,int j,int a,int b)
- {
- P2 = 0x01;
- P1 = seg[i/10];
- delay(1);
- P2 = 0x00;
-
- P2 = 0x02;
- P1 = seg[i%10];
- delay(1);
- P2 = 0x00;
-
- P2 = 0x04;
- P1 = seg[j/10];
- delay(1);
- P2 = 0x00;
-
-
- P2 = 0x08;
- P1 = seg[j%10];
- delay(1);
- P2 = 0x00;
-
-
- P2= 0x10;
- P1 = seg[a/10];
- delay(1);
- P2= 0x00;
-
- P2= 0x20;
- P1 = seg[a%10];
- delay(1);
- P2 = 0x00;
-
-
- P2 = 0x40;
- P1 = seg[b/10];
- delay(1);
- P2 = 0x00;
-
-
- P2= 0x80;
- P1 = seg[b%10];
- delay(1);
- P2 = 0x00;
-
- }
-
- void time0() interrupt 1
- {
- TH0 = 0xb1;
- TL0 = 0xe0;
- m++;
- if(m==50)
- {
- m=0;
- j--;
- if(j==-1)
- j = 59;
- n++;
- if(n==60)
- {
- n=0;
- i--;
- if(i==0&&j==0){
- ET0=1;
- TR0 = 1;
- }
- }
- }
- display(i,j,a,b);
- }
-
-
- void main()
- {
- P0 = 0x00;
- display(12,0,0,0);
- TMOD = 0x01;
- TH0 = 0xb1;
- TL0 = 0xe0;
- IE = 0x82;
- TR0 = 1;
- while(1)
- {
- if(aa==1&&one==1)
- {a++;display( i, j, a, b);while(one==1);}
- else if(aa==1&&two==1)
- { a=a+2;display( i, j, a, b);while(two==1);}
- else if(aa==1&&three==1)
- {a=a+3;display( i, j, a, b);while(three==1);}
- else if(bb==1&&one==1)
- {b++;display( i, j, a, b);while(one==1);}
- else if(bb==1&&two==1)
- { b=b+2;display( i, j, a, b);while(two==1);}
- else if(bb==1&&three==1)
- { b=b+3;display( i, j, a, b);while(three==1);}
- else if(exchange==1)
- {temp = a;a = b;b = temp;delay(500);}
- else if(stop==1) {ET0=0;TR0=0;while(stop==1);while(stop==0);while(stop==1){ET0=1;TR0=1;}}
- }
- }
复制代码
完整的Word格式文档51黑下载地址:
|