#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 著作权归作者所有。请勿转载和采集!

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