51单片机电子制作 |
您所在的位置:网站首页 › 单片机switch语句运用 › 51单片机电子制作 |
51单片机电子制作------篮球比赛计分器
作者:李剀
出处:https://blog.csdn.net/Kevin_8_Lee
或者 https://www.cnblogs.com/kevin-nancy/
欢迎转载,但也请保留上面这段声明。谢谢!(上面两个都是我的博客,只是在不同平台) 这个也是可以用于单片机课设的一个小东西。 同样和之前的交通灯项目一样,我用同样的方法介绍一下 1) 题目及设计要求题目: 篮球比赛计分器 要求: 1、两队各三位显示,共计六位数码显示; 2、设A、B队加、减分按键,复位键; 3、加减分实现1分、2分、3分加减。 2) C51编程以及电路仿真软件编程:: 同样使用keil3或者keil4,以keil4为例 软件就不截图了,可以看我关于交通灯的那篇blog https://www.cnblogs.com/kevin-nancy/p/10993057.html 或者 https://blog.csdn.net/Kevin_8_Lee/article/details/91351632 3) 解决思路使用矩阵键盘作为按键输入,分别设置A、B两队加减1、2、3分按键以及清零按键 在proteus中,我的接线如下 使用两个四位八段的数码管(共阴极)显示 这个整个流程比较简单,程序流程图如下 同样由于时间问题,没心情用更简单的方法改了,直接是无限扫描按键, // 矩阵键盘扫描函数,返回16进制数 uchar KeyScan() { uchar cord_c,cord_r; P3 = 0x0f; if( (P3 & 0x0f) != 0x0f) { delay_ms(5); if( (P3 & 0x0f) != 0x0f) { cord_r = P3 & 0x0f; P3 = cord_c | 0xf0; cord_c = P3 & 0xf0; while( (P3 & 0xf0) != 0xf0 ); return (cord_c + cord_r); } } } // 不同的按键按下 执行不同的操作 void Key_score_Dispaly() { switch( KeyScan() ) { case 0xee: flag = 0; teamA_scores++; // A队加分 break; case 0xde: flag = 1; teamA_scores--; break; case 0xbe: flag = 2; teamB_scores++; break; case 0x7e: flag = 3; teamB_scores--; break; case 0xed: flag = 4; teamA_scores+=2; // 两分球 break; case 0xdd: flag = 5; teamA_scores-=2; break; case 0xbd: flag = 6; teamB_scores+=2; break; case 0x7d: flag = 7; teamB_scores-=2; break; case 0xeb: flag = 8; teamA_scores+=3; // 三分 break; case 0xdb: flag = 9; teamA_scores-=3; break; case 0xbb: flag = 10; teamB_scores+=3; break; case 0x7b: flag = 11; teamB_scores-=3; break; case 0xe7: flag = 12; teamA_scores=0; // 清零 break; case 0xd7: flag = 13; teamA_scores=0; break; case 0xb7: flag = 14; teamB_scores=0; break; case 0x77: flag = 15; teamB_scores=0; break; } Display(teamA_scores, teamB_scores); // 显示 } // 主函数无限循环 void main() { system_Init(); // 初始化只是关闭数码管 while(1) { Key_score_Dispaly(); } }放一下最终的效果吧 ps:这个做的并不是很好,代码大多都是在循环中做,所以没有太细致的讲,但是用来做单片机的课设还是足够了 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |