51单片机实现电子记分牌的编程代码设计内容:1选择51单片机晶振采用12MHz。2启动时显示的初始分数为50。3选手每答对一题加1分;每答错-题减1分。 加分和减分分别由加、减按钮K1和K2 实现。4计分范围为00 ~ 99。5裁判按下复位按钮K3 时数码管显示初始分数50。6 按键按下时有提示音当有键按下时蜂鸣器发出声音按键释放时停止发声
以下是一个可能的51单片机实现电子记分牌的编程代码的示例:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep = P1^0;
sbit addBtn = P2^0;
sbit subBtn = P2^1;
sbit resetBtn = P2^2;
uchar code SEG_TABLE[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar score = 50;
void delay(uint ms) {
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
void displayScore(uchar s) {
uchar tensDigit = s / 10;
uchar unitsDigit = s % 10;
P0 = SEG_TABLE[tensDigit];
P2 = 0xfe;
delay(5);
P0 = SEG_TABLE[unitsDigit];
P2 = 0xfd;
delay(5);
}
void init() {
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0x3c; // 定时器初值
TL0 = 0xb0;
EA = 1; // 允许中断
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
}
void main() {
init();
while(1) {
if(addBtn == 0) {
delay(10);
if(addBtn == 0) {
while(addBtn == 0);
if(score < 99) {
score++;
beep = 0;
displayScore(score);
}
}
}
if(subBtn == 0) {
delay(10);
if(subBtn == 0) {
while(subBtn == 0);
if(score > 0) {
score--;
beep = 0;
displayScore(score);
}
}
}
if(resetBtn == 0) {
delay(10);
if(resetBtn == 0) {
while(resetBtn == 0);
score = 50;
beep = 0;
displayScore(score);
}
}
}
}
void timer0() interrupt 1 {
TH0 = 0x3c;
TL0 = 0xb0;
beep = ~beep;
}
这段代码使用定时器0来实现蜂鸣器的控制,通过按下按钮K1和K2来增加和减少分数,并通过按钮K3来复位分数。数码管通过段码表进行显示,实时显示当前的分数
原文地址: https://www.cveoy.top/t/topic/hRNt 著作权归作者所有。请勿转载和采集!