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

题目:篮球比赛计时记分系统

硬件:STC89C52RC、1602LCM液晶屏、六个按键

软件:Keil C

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

#include //头文件

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit S1=P3^2; //中断0(比赛倒计时开始/暂停)

sbit S2=P3^3; //中断1(24s倒计时重新开始)

sbit key="P2"^4; //连接S3、S4、S5、S6(矩阵按键)

sbit key_S3=P2^3; //连接S3

sbit key_S4=P2^2; //连接S4

sbit key_S5=P2^1; //连接S5

sbit key_S6=P2^0; //连接S6

sbit FM="P1"^5; //蜂鸣器接口

sbit EN="P1"^0;

sbit RS="P1"^1;

char sec,min,num,time,sec_24s;

uchar hpoint,rpoint;

uchar code table1[]={"H.T 000:000 R.T "};

//H.T(home team)代表主队,R.T(road team)代表客队,中间是比分

uchar code table2[]={"12:00 SEC-1 24"};

//SEC-X代表第X节比赛,左边是单节比赛倒计时,右边是24秒倒计时

/***1ms延时子程序***/

void delay(int z)

{

int x;

uchar y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/***LCD写指令***/

void write_com(uchar com)

{

RS=0;

P0=com;

delay(5);

EN=1;

delay(5);

EN=0;

}

/***LCD写数据***/

void write_dat(uchar dat)

{

RS=1;

P0=dat;

delay(5);

EN=1;

delay(5);

EN=0;

}

/***初始化程序***/

void init(void)

{

uchar i;

hpoint=0; //H.T分数初始化

rpoint=0; //R.T分数初始化

time=0;

TMOD=0x10; //定时器1初始化

TL1=0x00;

TH1=0x4c;

EA=1; //开总中断

ET1=1; //开定时器1

TR1=0; //定时器1不工作

EX0=1; //开中断0

EX1=1; //开中断1

IT0=1; //中断0为边沿触发

IT1=1; //中断1为边沿触发

EN=0;

sec=0;

min=12;

num=1;

sec_24s=24;

write_com(0x38); //LCD设置初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80); //LCD显示初始化

for(i=0;i<16;i++)

{

write_dat(table1[i]);

}

write_com(0x80+0x40);

for(i=0;i<16;i++)

{

write_dat(table2[i]);

}

}

/***LCD分数更新***/

void point_lcd(uchar add,uchar dat)

{

write_com(0x80+add);

write_dat(0x30+dat/100);

write_dat(0x30+(dat%100)/10);

write_dat(0x30+dat%10);

}

/***按键检测***/

void keyscan(void)

{

key=0;

if(key_S3==0) //S3按下H.T分数加一

{

hpoint++;

point_lcd(0x04,hpoint); //分数显示更新

if(key_S3==0) //松手检测

{

while(key_S3==0);

delay(20);

}

}

else if(key_S4==0) //S4按下H.T分数减一

{

hpoint--;

point_lcd(0x04,hpoint);

if(key_S4==0)

{

while(key_S4==0);

delay(20);

}

}

else if(key_S5==0) //S5按下R.T分数加一

{

rpoint++;

point_lcd(0x08,rpoint);

if(key_S5==0)

{

while(key_S5==0);

delay(20);

}

}

else if(key_S6==0) //S6按下R.T分数减一

{

rpoint--;

point_lcd(0x08,rpoint);

if(key_S6==0)

{

while(key_S6==0);

delay(20);

}

}

}

/***比赛倒计时/24s倒计时(同步)***/

void counter_down(void)

{

uchar i;

if(time>=20) //每1s倒计时做减一操作

{

sec--;

sec_24s--;

write_com(0x80+0x4e); //24s倒计时显示

write_dat(0x30+sec_24s/10);

write_dat(0x30+sec_24s%10);

if(sec_24s==0) //24s结束发出3s连续报警

{

FM="0";

delay(3000);

FM="1";

sec_24s=24;

}

if((sec==0)&&(min==0)) //检测一节比赛是否结束

{

TR1=0; //定时器1暂停

write_com(0x80+0x44);

write_dat(0x30);

num++;

sec_24s=24; //24s计时复位

write_com(0x80+0x4e); //24s倒计时显示

write_dat(0x30+sec_24s/10);

write_dat(0x30+sec_24s%10);

if(num<5) //每节结束蜂鸣器发出8s的间断报警

{

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

{

FM="0";

delay(500);

FM="1";

delay(500);

}

}

if(num==5) //终场结束,蜂鸣器发出10s的连续警报声

{

FM="0";

delay(10000);

num="1";

}

FM="1"; //蜂鸣器关闭

write_com(0x80+0x4b); //更新"SEC-?"

write_dat(0x30+num);

sec="0"; //倒计时复位

min="12";

}

if(sec==-1)

{

sec="59";

min--;

}

write_com(0x80+0x40); //更新倒计时显示

write_dat(0x30+min/10);

write_dat(0x30+min%10);

write_com(0x80+0x43);

write_dat(0x30+sec/10);

write_dat(0x30+sec%10);

time=0;

}

}

/***主程序***/

void main()

{

init();

while(1)

{

keyscan(); //分数按键检测

}

}

/***S1按键中断0***/

void exter0() interrupt 0 //比赛时间开始/暂停

{

TR1=~TR1; //定时器1工作/暂停

if(TR1==1) //当倒计时工作时,S1按下定时器立即停止工作

{

PT1=0;

}

else //倒计时不工作时,S1按下倒计时立即工作

{

PT1=1;

}

if(S1==0) //松手检测

{

while(S1==0)

{

counter_down();

}

delay(20);

}

}

/***S2按键中断1***/

void exter1() interrupt 2 //24s倒计时重新开始

{

sec_24s=24;

write_com(0x80+0x4e); //24s倒计时显示

write_dat(0x30+sec_24s/10);

write_dat(0x30+sec_24s%10);

if(S2==0) //松手检测

{

while(S2==0)

{

counter_down();

}

delay(20);

}

}

/***定时器1中断***/

void timer1() interrupt 3 //定时器1中断20次为1s

{

time++;

TL1=0x00;

TH1=0x4c;

counter_down(); //倒计时

}

篮球c语言程序,源程序C代码:篮球比赛应用系统相关推荐

  1. C语言程序与设计:篮球游戏

    文章目录 @[toc] C语言程序与设计:篮球游戏 1.题目 2.代码实现(输出坐标) C语言程序与设计:篮球游戏 1.题目 你们正在编写一个篮球游戏.假设篮球质量为1kg,将其放在高度为y米高的地方 ...

  2. c语言程序2000行代码,C语言教务管理系统2000行代码

    <C语言教务管理系统2000行代码>由会员分享,可在线阅读,更多相关<C语言教务管理系统2000行代码(56页珍藏版)>请在读根文库上搜索. 1.C语言教务管理系统一.程序结构 ...

  3. 微信 开发 聊天机器人设计方案 java语言 程序和数据库代码

    转自:http://www.tuicool.com/articles/RBJfqyM 使用 Liferay 和 Lucene 实现企业门户智能帮助机器人 时间 2015-04-30 12:00:00  ...

  4. 摇摇棒C语言程序,摇摇棒代码C语言.doc

    摇摇棒代码C语言 /**************************************************************************** * * ********* ...

  5. 电流速断保护c语言程序,TQXDB-III多功能继电保护实验培训系统实验指导书2.doc

    TQXDB-III多功能继电保护实验培训系统实验指导书2,继电保护作业指导书,多功能电表作业指导书,实验指导书,计算机网络实验指导书,实验室作业指导书,c语言实验指导书答案,实验指导书格式,信号与系统 ...

  6. 已知c语言程序有主程序模块prog.c,嵌入式系统试卷--A卷

    第 1 页 (共 页) 班级(学生填写) : 姓名: 学号: 命题: 符秋丽 审题: 审批: ----------------------------------------------- 密 --- ...

  7. 八楼电梯的c语言程序,本科毕业设计—电梯自动语音提示系统.doc

    电梯自动语音提示系统 院 系:信息科学与工程学院 专 业 班:电子科学与技术1102班 姓 名: 学 号: 指导教师: 2015年5月 电梯自动语音提示系统 The Elevator Automati ...

  8. c语言自行车存放管理系统,C语言程序编写单片机控制的电动自行车驱动系统程序...

    >1); CCPR1L=FULLDUTY; asm("CLRWDT"); }while(voltage>=1; curek=gcur-currenth;//计算本次偏差 ...

  9. 水质检测c语言程序,基于51单片机的水质监测系统的设计.doc

    基于51单片机的水质监测系统的设计 基于AT89C51单片机的水质监测系统的设计 摘要:现在水源污染已经成了社会密切关注的话题,所以对水质进行监测成了保护水资源的一项重要措施,基于此本文设计了一款能够 ...

  10. 秒表清零c语言程序,显示的秒表 C语言程序

    显示的秒表 C语言程序 源程序代码: //名称:用1602LCD设计的秒表 //说明:首先按下K1键时开始计时,自此按下时暂停,第三次按下时继续累积计时,再次按下时停止计时,K2键用于清零秒表. // ...

最新文章

  1. 遗传算法主程序(辅助)
  2. VC6导入和使用二进制资源
  3. 2021互联网大厂中秋礼盒哪家强?!
  4. 虚幻四如何实现第一人称_虚幻周报20200930 | 双节快乐么么哒!
  5. unity算法面试_Unity面试题汇总
  6. 不用加好友,查看对方校内照片
  7. java快速查找素数_Java实现快速查找某个范围内的所有素数
  8. 计算机视觉论文-2021-06-02
  9. 面向全局搜索的自适应领导者樽海鞘群算法
  10. 基于python的数据分析-基于Python的南京二手房数据可视化分析
  11. 分享:一个轻量级的企业Wiki和团队知识分享平台CMS
  12. 慢慢来,一切都来得及
  13. python|简单实现英文单词大小写转化
  14. ES地理范围查询第一讲:Java操作地理位置信息(geo_point)
  15. 1497: 变态杀人狂
  16. 浏览器原理 39 # 页面性能工具:如何使用 Performance?
  17. python海龟绘图画玫瑰花_python学习(二)之turtle库绘图
  18. 史上最小 x86 Linux 模拟器「GitHub 热点速览 v.22.50」
  19. Flutter 功能最全的JsonToDart工具(桌面Web海陆空支持)
  20. 赫兹是如何发现电磁波从而证明了麦克斯韦方程的?

热门文章

  1. linux系统清理命令行,快速解决Win10系统升级助手打不开无法运行的方法
  2. 贴片晶振为什么要邻层挖空敷铜,背后的原理原来是这样的!#终南小师傅
  3. 汉庭董事长季琦:成功创业者的必经之路
  4. HashMap初始容量指定规则
  5. 抑制广播风暴 各种发包
  6. BO Xcelsius 2008注册方法
  7. 计算机科学系班服主题,高校流行班服“设计风”
  8. word为什么前面空白但是字上不去?
  9. [慈溪2011]电子警察
  10. (固态)产品的质量和可靠性标准全系列(JEDEC+ASTM) - 最齐全、最完整及最新版