#include <reg51.h> sbit addBtn = P1^0; // 加分按钮 sbit subBtn = P1^1; // 减分按钮 sbit resetBtn = P1^2; // 复位按钮 sbit buzzer = P2^0; // 蜂鸣器 sbit segA = P2^1; // 数码管段A sbit segB = P2^2; // 数码管段B sbit segC = P2^3; // 数码管段C sbit segD = P2^4; // 数码管段D sbit segE = P2^5; // 数码管段E sbit segF = P2^6; // 数码管段F sbit segG = P2^7; // 数码管段G unsigned char score = 50; // 初始分数为50 void delay(unsigned int time) { unsigned int i, j; for(i = 0; i < time; i++) { for(j = 0; j < 1000; j++) { } } } void display(unsigned char num) { switch(num) { case 0: segA = 0; segB = 0; segC = 0; segD = 0; segE = 0; segF = 0; segG = 1; break; case 1: segA = 1; segB = 0; segC = 0; segD = 1; segE = 1; segF = 1; segG = 1; break; case 2: segA = 0; segB = 0; segC = 1; segD = 0; segE = 0; segF = 1; segG = 0; break; case 3: segA = 0; segB = 0; segC = 0; segD = 0; segE = 1; segF = 1; segG = 0; break; case 4: segA = 1; segB = 0; segC = 0; segD = 1; segE = 1; segF = 0; segG = 0; break; case 5: segA = 0; segB = 1; segC = 0; segD = 0; segE = 1; segF = 0; segG = 0; break; case 6: segA = 0; segB = 1; segC = 0; segD = 0; segE = 0; segF = 0; segG = 0; break; case 7: segA = 0; segB = 0; segC = 0; segD = 1; segE = 1; segF = 1; segG = 1; break; case 8: segA = 0; segB = 0; segC = 0; segD = 0; segE = 0; segF = 0; segG = 0; break; case 9: segA = 0; segB = 0; segC = 0; segD = 0; segE = 1; segF = 0; segG = 0; break; } } void main() { addBtn = 1; // 初始化为高电平 subBtn = 1; // 初始化为高电平 resetBtn = 1; // 初始化为高电平

while(1) {
    if(addBtn == 0) { // 加分按钮被按下
        delay(10); // 延时消抖
        if(addBtn == 0) { // 确认按下
            score++;
            if(score > 99) { // 分数范围限制
                score = 99;
            }
            buzzer = 0; // 发声
            delay(50); // 延时一段时间
            buzzer = 1; // 停止发声
        }
    }
    
    if(subBtn == 0) { // 减分按钮被按下
        delay(10); // 延时消抖
        if(subBtn == 0) { // 确认按下
            score--;
            if(score < 0) { // 分数范围限制
                score = 0;
            }
            buzzer = 0; // 发声
            delay(50); // 延时一段时间
            buzzer = 1; // 停止发声
        }
    }
    
    if(resetBtn == 0) { // 复位按钮被按下
        delay(10); // 延时消抖
        if(resetBtn == 0) { // 确认按下
            score = 50;
            buzzer = 0; // 发声
            delay(50); // 延时一段时间
            buzzer = 1; // 停止发声
        }
    }
    
    display(score / 10); // 显示十位数
    delay(5); // 延时一段时间
    display(score % 10); // 显示个位数
    delay(5); // 延时一段时间
}
51 单片机电子记分牌编程代码:实现分数加减和复位功能

原文地址: https://www.cveoy.top/t/topic/pAUx 著作权归作者所有。请勿转载和采集!

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