51单片机实现电子记分牌的编程代码设计要求:1选择51单片机晶振采用12MHz。2启动时显示的初始分数为50。3选手每答对一题加1分;每答错-题减1分。 加分和减分分别由加、减按钮K1和K2 实现。4计分范围为00 ~ 99。5裁判按下复位按钮K3 时数码管显示初始分数50。6 按键按下时有提示音当有键按下时蜂鸣器发出声音按键释放时停止发声。
以下是一个使用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的中断处理函数
// 空函数
}
这个代码使用了P0和P2端口来控制数码管的显示,P1.7口用于控制蜂鸣器。通过检测加分按钮、减分按钮和复位按钮的按下来改变分数,并使用蜂鸣器发出提示音。在displayScore函数中,根据分数的十位数和个位数来逐个显示在两个数码管上
原文地址: https://www.cveoy.top/t/topic/hRNp 著作权归作者所有。请勿转载和采集!