51单片机电子记分牌编程代码:实现加减分、复位功能
#include <reg51.h>
// 定义端口和引脚 sbit buzzer = P1^0; // 蜂鸣器 sbit buttonAdd = P2^0; // 加分按钮 sbit buttonSubtract = P2^1; // 减分按钮 sbit buttonReset = P2^2; // 复位按钮 sbit digit1 = P2^4; // 数码管第一位 sbit digit2 = P2^5; // 数码管第二位 sbit segA = P2^6; // 数码管段A sbit segB = P2^7; // 数码管段B
// 函数声明 void delay(unsigned int ms); void displayScore(unsigned int score); void addScore(); void subtractScore();
// 主函数 void main() { unsigned int score = 50; // 初始分数为50
while(1) {
if (buttonAdd == 0) {
delay(10); // 延迟10毫秒
if (buttonAdd == 0) {
addScore(); // 答对一题加分
delay(1000); // 延迟1秒
}
}
if (buttonSubtract == 0) {
delay(10); // 延迟10毫秒
if (buttonSubtract == 0) {
subtractScore(); // 答错一题减分
delay(1000); // 延迟1秒
}
}
if (buttonReset == 0) {
delay(10); // 延迟10毫秒
if (buttonReset == 0) {
score = 50; // 复位按钮按下时,分数重置为50
displayScore(score); // 显示分数
delay(1000); // 延迟1秒
}
}
}
}
// 延时函数 void delay(unsigned int ms) { unsigned int i, j; for (i = ms; i > 0; i--) { for (j = 110; j > 0; j--); } }
// 显示分数函数 void displayScore(unsigned int score) { unsigned int digit1Value, digit2Value;
digit1 = 1; digit2 = 1; segA = 0; segB = 0;
digit1Value = score / 10; // 十位数 digit2Value = score % 10; // 个位数
switch (digit1Value) { case 0: segA = 1; segB = 1; break; case 1: segB = 1; break; case 2: segA = 0; segB = 1; break; // ... 其他数字的显示规则 }
digit1 = 0; delay(5); digit1 = 1;
switch (digit2Value) { case 0: segA = 1; segB = 1; break; case 1: segB = 1; break; case 2: segA = 0; segB = 1; break; // ... 其他数字的显示规则 }
digit2 = 0; delay(5); digit2 = 1; }
// 加分函数 void addScore() { buzzer = 1; // 发出提示音 delay(100); // 延迟100毫秒 buzzer = 0; // 停止提示音
if (score < 99) { score++; // 分数加1 }
displayScore(score); // 显示分数 }
// 减分函数 void subtractScore() { buzzer = 1; // 发出提示音 delay(100); // 延迟100毫秒 buzzer = 0; // 停止提示音
if (score > 0) { score--; // 分数减1 }
displayScore(score); // 显示分数 }
原文地址: https://www.cveoy.top/t/topic/pAUe 著作权归作者所有。请勿转载和采集!