用51单片机设计2位的篮球比赛记分牌,可以加分和减分,采用中断的方式。(自己设计硬件,自己编程)
时间: 2023-05-28 18:07:02 浏览: 75
硬件设计:
采用2个共阳数码管作为显示屏幕,使用CD4511芯片来驱动数码管。使用2个按键分别为加分和减分,连接到51单片机的外部中断引脚。同时,需要将数码管的A、B、C、D、E、F、G引脚连接到P0口的相应引脚上。
软件设计:
1. 首先定义数码管显示的数字和字符的编码,以及加分和减分按键的中断向量号。
2. 初始化P0口为输出状态,设置中断向量表,并开启中断允许。
3. 在主函数中,循环检测加分和减分按键是否被按下,如果被按下,则向数码管显示相应的数字,并更新分数。
4. 在中断服务函数中,检测按键是否被按下,如果被按下,则更新分数,并向数码管显示相应的数字。
下面是完整的代码:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 数码管显示的数字和字符的编码
uchar code table[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
// 加分和减分按键的中断向量号
#define KEY_ADD 0 // P3.2
#define KEY_SUB 1 // P3.3
// 数码管显示的分数
uchar score[2] = {0, 0};
// 数码管的段选编码
uchar display[2] = {0xFF, 0xFF};
// 延迟函数,用于消除按键抖动
void delay(uint t)
{
uint i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 120; j++);
}
// 数码管显示函数
void displayScore()
{
uchar i;
for (i = 0; i < 2; i++)
{
P0 = display[i];
P2 = i;
P0 = table[score[i]];
delay(1);
}
}
// 中断服务函数
void ISR() interrupt 0
{
if (INT0) // 加分按键被按下
{
score[0]++;
if (score[0] > 9) score[0] = 0;
display[0] = ~table[score[0]];
}
else if (INT1) // 减分按键被按下
{
score[1]++;
if (score[1] > 9) score[1] = 0;
display[1] = ~table[score[1]];
}
displayScore(); // 更新数码管显示
}
// 主函数
void main()
{
P0 = 0xFF; // 初始化P0口为输出状态
IT0 = 1; // 设置INT0为下降沿触发
IT1 = 1; // 设置INT1为下降沿触发
EX0 = 1; // 开启INT0中断
EX1 = 1; // 开启INT1中断
EA = 1; // 开启总中断允许
while (1)
{
displayScore(); // 更新数码管显示
}
}
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)