#include <reg51.h>

sbit buzzer = P2^0; // 蜂鸣器连接到P2.0 sbit buttonAdd = P3^0; // 加分按钮连接到P3.0 sbit buttonSubtract = P3^1; // 减分按钮连接到P3.1 sbit buttonReset = P3^2; // 复位按钮连接到P3.2

unsigned char score = 50; // 初始化分数为50

void delay(unsigned int milliseconds) { unsigned int i, j; for (i = 0; i < milliseconds; i++) { for (j = 0; j < 125; j++); // 延时约1ms } }

void displayScore() { unsigned char tensDigit = score / 10; unsigned char onesDigit = score % 10;

P1 = 0xFF; // 关闭数码管显示
P0 = 0x80; // 选择第一个数码管
P1 = ~tensDigit; // 显示十位数字
delay(5); // 延时一段时间以显示数码管

P1 = 0xFF; // 关闭数码管显示
P0 = 0x40; // 选择第二个数码管
P1 = ~onesDigit; // 显示个位数字
delay(5); // 延时一段时间以显示数码管

}

void main() { EA = 1; // 启用全局中断 EX0 = 1; // 启用外部中断0(加分按钮) EX1 = 1; // 启用外部中断1(减分按钮) IT0 = 1; // 设置外部中断0为下降沿触发方式 IT1 = 1; // 设置外部中断1为下降沿触发方式

while(1) {
    displayScore();
}

}

void buttonAddInterrupt() interrupt 0 { score++; // 加分 buzzer = 0; // 发声 delay(100); // 延时一段时间以发声 buzzer = 1; // 停止发声 }

void buttonSubtractInterrupt() interrupt 2 { score--; // 减分 buzzer = 0; // 发声 delay(100); // 延时一段时间以发声 buzzer = 1; // 停止发声 }

void buttonResetInterrupt() interrupt 3 { score = 50; // 复位分数为50 buzzer = 0; // 发声 delay(100); // 延时一段时间以发声 buzzer = 1; // 停止发声 }

// 代码解释

上述代码中使用了外部中断0和外部中断1来实现加分和减分按钮的功能,使用外部中断3来实现复位按钮的功能。当按钮按下时,会触发对应的中断函数,分数会相应增加或减少,并且蜂鸣器会发出声音。同时,displayScore()函数用于在数码管上显示当前分数。

51单片机电子记分牌编程代码 - 详细实现与解析

原文地址: https://www.cveoy.top/t/topic/pAU8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录