历史上的今天
返回首页

历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2019年09月29日 | 课程设计题八:篮球比赛计分器

2019-09-29 来源:eefocus

要求:


1、两队各三位显示,共计六位数码显示;


2、设A、B队加、减分按键,复位键;


3、加减分实现1分、2分、3分加减。


升级:


1、两队各三位显示,共计六位数码显示;


2、设A、B队加、减分按键、复位按键;


3、计时开始/暂停按键、归零按键、归12按键;


4、分钟加1按键、交换场地按键;


一、Protues仿真图:

二、程序源码:

因为注释非常的全,这里就不再进行讲解了。

----------------------控制分数部分-------------------------


/*******************************************************************************

================================================================================

【平    台】STC89C51_sumjess平台

【编    写】sumjess

【E-mail  】1371129880@qq.com

【软件版本】V2.0

【最后更新】2019年06月10日

【相关信息参考下列地址】

【网    站】

           https://blog.csdn.net/qq_38351824

           http://www.51hei.com/bbs/mcu-2-1.html

---------------------------------------------------------------------------------

【dev.env.】MDK4.02及以上版本

【Target  】STC89C51

第一次修订:2019/05/09

第二次修订:2019/05/21

第三次修订:2019/06/10

【problem 】

    (1)库内补充的不全面;

    (2)库内解释部分不全面;

    (3)库内还存在一定的bug;

【direction】

      下一步的目标就是把库继续集成!

【explain 】

      为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!

【warning】

      目前程序中暂无错误 !   

---------------------------------------------------------------------------------

没有完美的代码,只有不断的奉献,大家一起努力;

赠人玫瑰手留余香,欢迎大家反馈bug!

================================================================================

********************************************************************************/

 

/////////////////控制分数单片机/////////////////

#include

 

#define LDUAN  P0 //段选

#define LWEI   P2 //位选

#define RDUAN  P1 //段选

#define RWEI   P2 //位选

 

#define uchar unsigned char

#define uint  unsigned int

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  //  0    1    2    3    4    5    6    7    8    9    a    b    c    d    e   f

sbit key1=P3^0;   //左边加分

sbit key2=P3^1;   //左边减分

sbit key3=P3^2;   //右边加分

sbit key4=P3^3;   //右边减分

sbit key5=P3^6;   //交换场地

sbit led1=P3^4;   //左边 LED

sbit led2=P3^5;   //右边 LED

 

uchar lnum,rnum,a;//左方分数计数、右方分数计数、中间变量

 

void delay(unsigned int num)     //延时函数

{

unsigned i,j;

for(i=num;i>0;i--)

for(j=120;j>0;j--);

}

 

 

 

void main()

{

led1=0;    //关闭LED

led2=0;    //关闭LED

 while(1)

 {

/////////////////数码管显示/////////////////

P2=0xff;       

LWEI=0xfb;

LDUAN=table[lnum%100/10];

delay(5);

P2=0xff;

LWEI=0xf7;

LDUAN=table[lnum%100%10];

delay(5);

LWEI=0xfd;

LDUAN=table[lnum/100];

delay(5);

 

P2=0xff;       

RWEI=0xbf;

RDUAN=table[rnum%100/10];

delay(5);

P2=0xff;

RWEI=0x7f;

RDUAN=table[rnum%10];

delay(5);

RWEI=0xdf;

RDUAN=table[rnum/100];

delay(5);

 

/////////////////左边加分/////////////////

if(!key1)    

{

 delay(10);   //延时消抖

 if(!key1)

 {

lnum++;   //分数加1

led1=1;   //LED亮

delay(500);   //延时

led1=0;   //LED灭

while(!key1); //等待按键释放

  }

}

/////////////////左边减分/////////////////

if(!key2)    

{

 delay(10);   //延时消抖

 if(!key2)

 {

lnum--;   //分数减1

led1=1;   //LED亮

delay(500);   //延时

led1=0;   //LED灭

while(!key2); //等待按键释放

  }

}

/////////////////右边加分/////////////////

if(!key3)    

{

 delay(10);   //延时消抖

 if(!key3)

 {

rnum++;   //分数加1

led2=1;   //LED亮

delay(500);   //延时

led2=0;   //LED灭

while(!key3); //等待按键释放

  }

}

/////////////////右边减分/////////////////

if(!key4)    

{

 delay(10);    //延时消抖

 if(!key4)

 {

rnum--;    //分数减1

led2=1;    //LED亮

delay(500);    //延时

led2=0;    //LED灭

while(!key4);    //等待按键释放

  }

}

/////////////////左右分数交换/////////////////

 

if(!key5)    

{

 delay(10);    //延时消抖

 if(!key5)

 {

a=rnum;    //右边分数赋值给中间变量

rnum=lnum;    //左右分数交换

lnum=a;    //左右分数交换

while(!key5);    //等待按键释放

  }

}

//////////////////////////////////////////

  }

}

----------------------------------控制时间部分-------------------------------


/*******************************************************************************

================================================================================

【平    台】STC89C51_sumjess平台

【编    写】sumjess

【E-mail  】1371129880@qq.com

【软件版本】V2.0

【最后更新】2019年06月10日

【相关信息参考下列地址】

【网    站】

           https://blog.csdn.net/qq_38351824

           http://www.51hei.com/bbs/mcu-2-1.html

---------------------------------------------------------------------------------

【dev.env.】MDK4.02及以上版本

【Target  】STC89C51

第一次修订:2019/05/09

第二次修订:2019/05/21

第三次修订:2019/06/10

【problem 】

    (1)库内补充的不全面;

    (2)库内解释部分不全面;

    (3)库内还存在一定的bug;

【direction】

      下一步的目标就是把库继续集成!

【explain 】

      为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!

【warning】

      目前程序中暂无错误 !   

---------------------------------------------------------------------------------

没有完美的代码,只有不断的奉献,大家一起努力;

赠人玫瑰手留余香,欢迎大家反馈bug!

================================================================================

********************************************************************************/

 

/////////////////控制时间单片机/////////////////

#include

#define DUAN P0 //段选

#define WEI  P2 //位选

 

#define uchar unsigned char

#define uint  unsigned int

 

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

   //  0   1   2     3    4    5    6    7    8    9 a    b   c    d e f

sbit key0=P3^0; //归零

sbit key1=P3^1; //归12

sbit key2=P3^2; //分钟加一

sbit key3=P3^3; //暂停/开始

sbit beep=P3^7; //蜂鸣器

 

uint addnum; //加一分钟

uchar miaonum,fennum; //秒数,分数

uchar b;

 

void delay(unsigned int num)     //延时函数

{

unsigned i,j;

for(i=num;i>0;i--)

for(j=120;j>0;j--);

}

 

/*

  当用定时器的方式2时,设机器周期为Tcy,定时器产生一次中断的时间为t,

  那么需要计数的个数N=t/Tcy,

  装入THX和TLX中的数分别为THX=256-N,TLX=256-N

  256 ---因为计数器是8位,所以最大装载值256 = 2^8    

*/

void Init_TIMER0_2(void)        //使用定时器0  ---  11.0592M晶振  1次中断为271.275μs,3686次为1s

{

  TMOD=0x02; //设置定时器0为工作方式2(M1M0为10)

TH0=256-250;       //装初值11.0592M晶振定时271.275μs数为250

TL0=256-250;

EA=1; //开总中断

ET0=1; //开定时器0中断

TR0=1; //启动定时器0

 }

 

 

void main()

{

Init_TIMER0_2();//定时器初始化

beep=0; //关闭蜂鸣器

b=10; //延时---蜂鸣器使用

fennum=12; //分钟初始化

miaonum=0; //秒钟初始化

 

  while(1)

  {

/////////////////数码管显示/////////////////

P2=0xff;       

WEI=0xef;

DUAN=table[miaonum/10];

delay(5);

P2=0xff;

WEI=0xdf;

DUAN=table[miaonum%10];

delay(5);

P2=0xff;

WEI=0Xf7;

DUAN=0X40;

delay(5);

P2=0xff;

WEI=0xfd;

DUAN=table[fennum/10];

delay(5);

P2=0xff;

WEI=0xfb;

DUAN=table[fennum%10];

delay(5);

/////////////////按键---清零/////////////////

if(!key0) //清零

{

delay(10); //延时消抖

if(!key0)

{

fennum=0; //分钟赋值为0

miaonum=0; //秒钟赋值为0

  }

while(!key0); //等待按键释放

  }

/////////////////按键---分钟归12/////////////////

if(!key1) //分钟归12

{

delay(10); //延时消抖

if(!key1) 

{

  fennum=12;     //分钟赋值为12

  miaonum=0;     //秒钟赋值为0

  }

while(!key1); //等待按键释放

}

/////////////////按键---分钟加1/////////////////

if(!key2) //分钟加1

{

delay(10); //延时消抖

if(!key2) fennum++; //分钟加1

while(!key2); //等待按键释放

}

/////////////////按键---暂停/开始/////////////////

if(!key3)    //暂停/开始

{

delay(10);    //延时消抖

if(!key3)

{

  TR0=~TR0;    //定时器开关

  while(!key3);//等待按键释放

  }

}

////////////////////////////////////////////////

   }

 }

 

 

 

 

 

void timer0() interrupt 1

{

 

addnum++;

if(addnum==400)

{

if(fennum!=0)

{

if(miaonum==0)

 

miaonum=59,fennum--,addnum=0;

else

miaonum--;

addnum=0;

}

 

if(fennum==0)

{

if(miaonum==0)

 

miaonum=0;

 

else

miaonum--;

addnum=0;

}

 

if(fennum==0)

{

if(miaonum==0)

{

 

if(b==0)

 

beep=0;

else

beep=1,b--;

 

}

}

 

}

}

推荐阅读

史海拾趣

General Instrument公司的发展小趣事
长时间使用后,内部电子元件可能出现老化、失效,导致判断失准。
BOOKHAM公司的发展小趣事

随着市场的不断扩大,BOOKHAM公司意识到单打独斗难以取得更大的突破。于是,公司开始积极寻求与其他企业的战略合作。通过与一家知名电子设备制造商的合作,BOOKHAM公司成功将其光学元件产品集成到对方的产品中,共同开拓市场。这种合作不仅提升了BOOKHAM公司的市场份额,还为其带来了更多的商业机会和合作伙伴。

Bestar Electric公司的发展小趣事

在电子行业的早期,Bestar Electric公司应运而生。作为一家初创企业,公司凭借对技术的深刻理解和市场需求的敏锐洞察,专注于电子元器件的研发与生产。通过不断的技术创新和产品优化,Bestar Electric逐渐在行业内建立起良好的声誉,并获得了初步的市场份额。

FDK AMERICA公司的发展小趣事

随着环保意识的日益增强,FDK AMERICA公司积极响应绿色制造理念。公司投入大量资金研发环保型电子产品,采用环保材料和绿色生产工艺,减少对环境的影响。同时,公司还积极参与各类环保活动,倡导绿色消费理念。这种环保举措不仅提升了公司的社会形象,也为公司赢得了更多消费者的青睐。

ENOCEAN公司的发展小趣事

2010年,EnOcean公司成功成为国际标准组织ISO/IEC的成员。这一里程碑事件标志着EnOcean的技术和产品在全球范围内得到了广泛认可。通过参与制定无线传感网络的国际标准,EnOcean进一步巩固了其在行业内的领先地位,为推广其无线无源传输技术奠定了坚实基础。

BERNSTEIN公司的发展小趣事

随着工业技术的不断发展,BERNSTEIN公司始终保持着对技术创新的热情。在公司的发展史上,它涉足了几乎所有的重要技术发展的阶段,从电子开关到传感器,再到工业机箱等领域,都取得了显著的成就。尤其是在工业安全技术方面,BERNSTEIN公司凭借其卓越的技术实力和产品质量,成为了行业内的佼佼者。

问答坊 | AI 解惑

ATMEL微控制器、电源管理产品、存储产品

ATMEL微控制器、电源管理产品、存储产品  Flash (Kbytes)  OTP (Kbytes)  Mask ROM (Kbytes)  ISP  Self Program Memory  EEPROM (Kbytes)  RAM (Bytes)  F.max (MHz)  Vcc (V)  I/O Pi ...…

查看全部问答>

指点一下protel99se下载

新手问:我怎么看到protel99se下载软件名目众多,无所适从!还是请诸位大侠帮忙指点选择一款!多谢! [ 本帖最后由 liweiliang 于 2009-7-25 14:29 编辑 ]…

查看全部问答>

~~关于电脑机箱带电~!

机箱带电可以在机箱的螺丝上连一个导电线接到暖气片上最简单的吧~~摸机箱前最好先把手往暖气或其他能连接到大地上的金属物下~如果手上有静电,很容易击穿电子元件     静电在我们的日常生活中可以说是无处不在,我们的身上和周围就带有 ...…

查看全部问答>

IR's overview(半导体)

现在应该是中国从劳动密集转向技术产业的转折点,可是像这样的功率器件,国内企业能做吗?堪忧…

查看全部问答>

麻烦大家推荐一个合适的AD转换芯片

要求: +5V供电;串行12位;输出量程0-10V…

查看全部问答>

主流聊天软件外接闪灯

各位高手,有没有办法可以做到给电脑上外接一个USB灯或者在用其它方法连接一个灯后,在聊天软件有新信息来时,灯自动亮或闪烁…

查看全部问答>

求助:谁有比较好的双wan策略啊?

有个华硕的WL-500gpv2,通过usb接个hsdpa modem(huawei E220),实现了双wan的备份,但不知道怎么实现双wan的负载平衡,谁有这方面的资料啊,谢谢解答…

查看全部问答>

一个难题,求助!!!

在Intel芯片下运行的无线网卡的驱动程序,到了TI芯片下运行时要改什么参数吗??…

查看全部问答>

请教电路问题

我想用一个电路实现以下功能:控制电压从零缓慢升到3~5V ,上升需5~10秒 (时间可调整),然后让电压稳定到3~5V (电压可调整),持续3~5分钟(时间可调), 最后电压缓慢下降到0V ,下降时间3~5秒(时间可调)。麻烦哪位高手给指点一下,谢谢啊~!…

查看全部问答>

医疗趋势:展望 2029 年

本帖最后由 dontium 于 2015-1-23 13:19 编辑 作者:Doug Rasor,德州仪器新兴医疗应用卸任副总裁,以及Mir Imran,InCube, Inc. 创办人兼总裁   关键词:医学、可植入装置、个人化医疗、病患监控系统、Bluetooth、低功耗Bluetooth、ZigBee ...…

查看全部问答>