基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图) 下载本文

参考文献

【1】余发山,单片机原理及应用技术:中国矿业大学出社,2003 【2】 河南理工大学电气学院:单片机实验报告指导册,2008 【3】刘法治,常用电子器件及典型芯片应用技术:机械工业出版社,2007 【4】何立民,MSC--51系列单片机应用系统设计:北京航空航天大学出版社,1993

28

附1 源程序

#include //#include 为头文件P1口各位分别用P1_0等表示 code unsigned seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//其中{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} //分别对应数码管显示的字形0到9

int m=1,n=60,x=0,y=0,i=0,jie=2,zidong=1,bujin=1,zanting=0,chuzanting=0;

//定义全局变量m,n,x,y,i,jie,zidong,bujin,zanting,chuzanting //并初始化,其中m,n分别表示分钟与秒计时,x,y分别表示甲乙//两队的分数,其余中间变量

void delay(int t) {

while(t--) {

unsigned int i; for(i=0;i<200;i++); } }

void display(int i,int j,int x,int y) // 数码管动态刷新显示程序 {

if(jie==1&&bujin!=2) //中间变量jie==1时,为上半场,对P1赋值

P1=0xbf; //P1=0xbf, 即P1=1011 1111B,点亮对应上半场指示灯

// 延时子程序 通过参数t,可以调整暂停时间

P2=0xfe;

//数码管动态刷新显示程序 P2=1111 1110,i为分钟

P0=seg[i0/10]; //刷新显示时间显示分钟十位,调用延时程序, delay(1); //延时数码管的点亮 P2=0xff; P0=0;

29

P2=0xfd; //同理,动态刷新时分钟个位并延时点亮 P0=seg[i]; delay(1); P2|=0xff; P0=0;

P2=0xfb; P0=seg[j0/10]; delay(1); P0=0; P2=0xff;

P2=0xf7; P0=seg[j]; delay(1); P0=0; P2=0xff;

P2=0xef;

P0=seg[x0/10]; delay(1); P2=0xff; P0=0;

P2=0xdf; P0=seg[x]; delay(1); P2=0xff; P0=0;

P2=0xbf; //同理,动态刷新时秒钟十位并延时点亮 //同理,动态刷新时秒钟个位并延时点亮 //同理,动态刷新甲队分数十位并延时点亮//同理,动态刷新甲队分数个位并延时点亮 / /同理,动态刷新乙队分数十位并延时点亮

30

P0=seg[y0/10];

delay(1); P0=0; P2=0xff;

P2=0x7f; //同理,动态刷新乙队分数十位并延时点亮

P0=seg[y]; delay(1); P0=0; P2=0xff; }

void t0(void) interrupt 1

{ TH0=0xb1; TL0=0x10; if(n==0)

{ n=60;m--; } i++; if(i==50)

{ n--; i=0; }

display(m,n-1,x,y); }

void keyjiafen1()

{ if(RXD==0)

//调用定时器T0 基本计时单位秒

//利用定时器T0,送入计数初值TH0=0xb1; TL0=0x10; //定时器定时单位为20毫秒 //分钟与秒时间调整 当秒减到0以后分钟减1 //利用中间变量i 令i值为50 50*20毫秒=1秒 //以实现一秒计时 //调用动态刷新显示程序 //加分按键子程序,在主程序中不断调用该子程序 //当检测到甲队加分按键按下时,对应加分 31