51单片机电子记分牌编程代码 - 详细解析和示例
#include <reg51.h>
sbit buzzer = P1^7; // 蜂鸣器连接到P1.7 sbit addBtn = P2^0; // 加分按钮连接到P2.0 sbit subBtn = P2^1; // 减分按钮连接到P2.1 sbit resetBtn = P2^2; // 复位按钮连接到P2.2
unsigned char score = 50; // 初始分数为50
void delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 120; j++) { // 延时约1ms (12MHz晶振) } } }
void displayScore(unsigned char score) { unsigned char tens = score / 10; // 十位数 unsigned char ones = score % 10; // 个位数
P0 = 0xFF; // 关闭所有数码管
// 显示十位数
P0 = ~(0x01 << tens);
P2 = P2 | 0x04; // 选择第一个数码管
delay(5);
// 显示个位数
P0 = ~(0x01 << ones);
P2 = P2 & 0xFB; // 选择第二个数码管
delay(5);
}
void main() { addBtn = 1; // 设置加分按钮为输入 subBtn = 1; // 设置减分按钮为输入 resetBtn = 1; // 设置复位按钮为输入
EA = 1; // 启用全局中断
EX0 = 1; // 启用外部中断0
EX1 = 1; // 启用外部中断1
while (1) {
displayScore(score); // 显示当前分数
if (addBtn == 0) { // 检测到加分按钮按下
while (addBtn == 0) {
// 等待按钮释放
}
score++; // 分数加1
buzzer = 0; // 发出提示音
delay(100);
buzzer = 1; // 停止发声
}
if (subBtn == 0) { // 检测到减分按钮按下
while (subBtn == 0) {
// 等待按钮释放
}
score--; // 分数减1
buzzer = 0; // 发出提示音
delay(100);
buzzer = 1; // 停止发声
}
if (resetBtn == 0) { // 检测到复位按钮按下
while (resetBtn == 0) {
// 等待按钮释放
}
score = 50; // 分数重置为50
buzzer = 0; // 发出提示音
delay(100);
buzzer = 1; // 停止发声
}
}
}
void int0() interrupt 0 { // 外部中断0的中断处理函数 // 空函数 }
void int1() interrupt 2 { // 外部中断1的中断处理函数 // 空函数 }
原文地址: https://www.cveoy.top/t/topic/pAUj 著作权归作者所有。请勿转载和采集!