51单片机电子制作

您所在的位置:网站首页 单片机switch语句运用 51单片机电子制作

51单片机电子制作

2023-09-12 15:45| 来源: 网络整理| 查看: 265

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中,我的接线如下

在这里插入图片描述

使用两个四位八段的数码管(共阴极)显示 在这里插入图片描述 **PS:**其他的都跟我之前的那篇交通灯的制作类似 但是有一个问题在那篇博客忘记说了,这里写一下 在这里插入图片描述 上图圈起来那块那个复位用的电阻,必须设置为Digital类型的,否则无法使用复位按钮 双击元件,即可修改 在这里插入图片描述

4)软件部分

这个整个流程比较简单,程序流程图如下 在这里插入图片描述

同样由于时间问题,没心情用更简单的方法改了,直接是无限扫描按键,

// 矩阵键盘扫描函数,返回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