历史上的今天
今天是: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--; } } } }
上一篇:课程设计题九: 倒计时时钟设计
下一篇:课程设计题七:交通灯控制器
史海拾趣
|
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下载软件名目众多,无所适从!还是请诸位大侠帮忙指点选择一款!多谢! [ 本帖最后由 liweiliang 于 2009-7-25 14:29 编辑 ]… 查看全部问答> |
|
机箱带电可以在机箱的螺丝上连一个导电线接到暖气片上最简单的吧~~摸机箱前最好先把手往暖气或其他能连接到大地上的金属物下~如果手上有静电,很容易击穿电子元件 静电在我们的日常生活中可以说是无处不在,我们的身上和周围就带有 ...… 查看全部问答> |
|
有个华硕的WL-500gpv2,通过usb接个hsdpa modem(huawei E220),实现了双wan的备份,但不知道怎么实现双wan的负载平衡,谁有这方面的资料啊,谢谢解答… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:19 编辑 作者:Doug Rasor,德州仪器新兴医疗应用卸任副总裁,以及Mir Imran,InCube, Inc. 创办人兼总裁 关键词:医学、可植入装置、个人化医疗、病患监控系统、Bluetooth、低功耗Bluetooth、ZigBee ...… 查看全部问答> |




