51单片机电子记分牌编程代码:加减分、复位和提示音
#include "reg52.h"\n\nsbit K1 = P1^0; // 加分按钮\nsbit K2 = P1^1; // 减分按钮\nsbit K3 = P1^2; // 复位按钮\nsbit Buzzer = P2^3; // 蜂鸣器\nsbit LSA = P2^2;\nsbit LSB = P2^3;\nsbit LSC = P2^4;\n\nunsigned char code table[] = { // 数码管显示0-9的编码\n 0xC0, // 0\n 0xF9, // 1\n 0xA4, // 2\n 0xB0, // 3\n 0x99, // 4\n 0x92, // 5\n 0x82, // 6\n 0xF8, // 7\n 0x80, // 8\n 0x90 // 9\n};\n\nunsigned char score = 50; // 初始分数为50\n\nvoid delay(unsigned int ms) { // 延时函数\n unsigned int i, j;\n for(i = ms; i > 0; i--)\n for(j = 110; j > 0; j--);\n}\n\nvoid display(unsigned char num) { // 数码管显示函数\n LSA = 0;\n LSB = 0;\n LSC = 0;\n P0 = table[num];\n}\n\nvoid main() {\n K1 = 1; // 加分按钮初始化为高电平\n K2 = 1; // 减分按钮初始化为高电平\n K3 = 1; // 复位按钮初始化为高电平\n Buzzer = 0; // 蜂鸣器初始化为低电平\n\n while(1) {\n if(K1 == 0) { // 加分按钮按下\n delay(10); // 延时去抖\n if(K1 == 0) { // 再次检测按键是否还按下\n Buzzer = 1; // 发声\n delay(50); // 发声持续时间\n Buzzer = 0; // 停止发声\n score++; // 分数加1\n if(score > 99) // 分数范围限制\n score = 99;\n display(score / 10); // 十位数显示\n delay(10); // 延时\n display(score % 10); // 个位数显示\n }\n while(!K1); // 等待按键释放\n }\n\n if(K2 == 0) { // 减分按钮按下\n delay(10); // 延时去抖\n if(K2 == 0) { // 再次检测按键是否还按下\n Buzzer = 1; // 发声\n delay(50); // 发声持续时间\n Buzzer = 0; // 停止发声\n score--; // 分数减1\n if(score > 99) // 分数范围限制\n score = 0;\n display(score / 10); // 十位数显示\n delay(10); // 延时\n display(score % 10); // 个位数显示\n }\n while(!K2); // 等待按键释放\n }\n\n if(K3 == 0) { // 复位按钮按下\n delay(10); // 延时去抖\n if(K3 == 0) { // 再次检测按键是否还按下\n Buzzer = 1; // 发声\n delay(50); // 发声持续时间\n Buzzer = 0; // 停止发声\n score = 50; // 分数复位为50\n display(score / 10); // 十位数显示\n delay(10); // 延时\n display(score % 10); // 个位数显示\n }\n while(!K3); // 等待按键释放\n }\n }\n}\n
原文地址: https://www.cveoy.top/t/topic/pAUw 著作权归作者所有。请勿转载和采集!