51单片机电子记分牌编程代码 - 详细实现与解析
#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()函数用于在数码管上显示当前分数。
原文地址: https://www.cveoy.top/t/topic/pAU8 著作权归作者所有。请勿转载和采集!