基于51单片机的8路抢答器
具体功能:
(1)主持人进行复位,依次显示8位选手的分数,8位选手分数显示结束后主持人方可按下开始按键;
(2)主持人按下抢答开始按键,抢答者才可以开始抢答,数码管抢答倒计时10S;
(3)抢答者按下按键,数码管显示抢答者的编号和答题剩余时间倒计时20S;
(4)在20S内,抢答者答题正确,主持人按下加分按键,分数加一,答错主持人按下减分按键,分数减一(默认抢答者的初始分数为60)。
部分代码:
#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit k0=P1^0; sbit k1=P1^1; sbit k2=P1^2; sbit k3=P1^3; sbit k4=P1^4; sbit k5=P1^5; sbit k6=P1^6; sbit k7=P1^7; sbit beep=P3^7; /*蜂鸣器*/ sbit ks=P2^4; /*开始计时*/ sbit jiayi=P2^5; /*分数加1*/ sbit jianyi=P2^6; /*分数减1*/ sbit fw=P2^7; /*复位*/ int flg=1; bit flg1=0; int t=0,s=0; uchar qiangdanum=0x0b; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x00}; uchar ge=0,shi=0; uint num,time=10, fs=0; int nums[]={60,60,60,60,60,60,60,60}; void kyy(void) ; void displayfs(); void display(); /*显示函数*/ void kys(); /*设置按键函数*/ void kys2(); /*抢答按键函数*/ void delay(unsigned int z) /*延迟函数*/ { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void intial() { TMOD=0X01; /*采用方式一,即十六位计数器*/ TH0=(65536-50000)/256; /*设置初始值,50ms中断一次*/ TL0=(65536-50000)%256; EA=1;ET0=1; /*开启总中断源,定时器中断*/ } void intia2() { TMOD=0X10; /*采用方式一,即十六位计数器*/ TH1=(65536-50000)/256; /*设置初始值,50ms中断一次*/ TL1=(65536-50000)%256; EA=1;ET1=1; /*开启总中断源,定时器中断*/ } main() { intia2(); intial(); /*初始化*/ beep=0; while(1) { kys(); if(flg1==1) displayfs(); else display(); /*显示函数*/ if(flg==0) { kys2(); } } }
仿真原理图: