#include <reg51.h> sbit BUZZER=P1^0; //定义蜂鸣器连接的IO口 sbit ADD_BTN=P3^1; //定义加分按钮连接的IO口 sbit SUB_BTN=P3^2; //定义减分按钮连接的IO口 sbit RESET_BTN=P3^3; //定义复位按钮连接的IO口 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++); } void display(unsigned char num) //数码管显示函数 { P2 = 0x00; //关闭所有数码管 P0 = num; //设置要显示的数字 P2 = 0x01; //打开第1位数码管 delay(5); //延时一段时间 P2 = 0x02; //打开第2位数码管 delay(5); //延时一段时间 } void main() { ADD_BTN = 1; //设置加分按钮为输入模式 SUB_BTN = 1; //设置减分按钮为输入模式 RESET_BTN = 1; //设置复位按钮为输入模式 EA = 1; //开启总中断 EX0 = 1; //开启外部中断0 IT0 = 1; //设置外部中断0为下降沿触发 EX1 = 1; //开启外部中断1 IT1 = 1; //设置外部中断1为下降沿触发

while(1)
{
    display(score); //显示当前分数
    
    if(ADD_BTN == 0) //按下加分按钮
    {
        BUZZER = 0; //蜂鸣器发声
        delay(100); //延时一段时间
        BUZZER = 1; //停止蜂鸣器
        score++; //分数加1
        if(score > 99) //分数范围为00~99
            score = 99;
        while(ADD_BTN == 0); //等待按键释放
    }
    
    if(SUB_BTN == 0) //按下减分按钮
    {
        BUZZER = 0; //蜂鸣器发声
        delay(100); //延时一段时间
        BUZZER = 1; //停止蜂鸣器
        score--; //分数减1
        if(score < 0) //分数范围为00~99
            score = 0;
        while(SUB_BTN == 0); //等待按键释放
    }

    if(RESET_BTN == 0) //按下复位按钮
    {
        BUZZER = 0; //蜂鸣器发声
        delay(100); //延时一段时间
        BUZZER = 1; //停止蜂鸣器
        score = 50; //分数恢复为初始值
        while(RESET_BTN == 0); //等待按键释放
    }
}

} void int0_isr() interrupt 0 //外部中断0的中断服务程序 { BUZZER = 0; //蜂鸣器发声 delay(100); //延时一段时间 BUZZER = 1; //停止蜂鸣器 score++; //分数加1 if(score > 99) //分数范围为00~99 score = 99; } void int1_isr() interrupt 2 //外部中断1的中断服务程序 { BUZZER = 0; //蜂鸣器发声 delay(100); //延时一段时间 BUZZER = 1; //停止蜂鸣器 score--; //分数减1 if(score < 0) //分数范围为00~99 score = 0; }

51单片机电子记分牌编程代码 - 计分、加减分、复位功能实现

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

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