八路抢答器-基于单片机C语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#define uchar unsigned char

#define uint unsigned int

sbit k1=P1^0;

sbit k2=P1^1;

sbit k3=P1^2;

sbit k4=P1^3;

sbit k5=P1^4;

sbit k6=P1^5;

sbit k7=P1^6;

sbit k8=P1^7; //选手按键

sbit beep=P3^6; //蜂鸣器

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77}; //0-9代码(共阴极)

uchar shiwei,gewei,xuanshou,count,i,second;

uchar score1,score2,score3,score4,score5,score6,score7,score8;//选手1~8的分数

uint t,m,n,a,a1,a2,a3,a4,a5,a6,a7,a8;

void Timer()

{

TMOD|=0x01;

TH0=0xd8; //初值55536,计数10000次,每次1US,总计10ms

TL0=0xf0;

IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时

TR0=1;

}

void tim(void) interrupt 1 using 1 //为定时中断TR0

{

TH0=0xd8; //重新赋值

TL0=0xf0;

count++;

if(count==100) //100*10ms=1秒

{

count=0;

second--; //秒减1

}

}

void delay(uint z) //延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);//延时1ms

}

void display (uchar shiwei,gewei,xuanshou) //显示函数

{

P2=0xfe; //打开显示时间十位的位选低电平有效1111 1110 P0=shiwei;//显示十位

delay(5);

P2=0xfd; //个位位选1111 1101

P0=gewei;

delay(5);

P2=0xf7; //选手位选1111 0111

P0=xuanshou;

delay(5);

}

void dis(void)//调用显示函数

{

shiwei=tab[second/10];

gewei=tab[second%10];

xuanshou=tab[i];

display (shiwei,gewei,xuanshou);

}

void init() //初始化函数

{

P2=0x04;//0000 0100

P0=0x3f;//数码管共阴0011 1111显示0

t=0;

beep=0;//蜂鸣器

i=0;

second=29;

score1=60;

score2=60;

score3=60;

score4=60;

score5=60;

score6=60;

score7=60;

score8=60;

a1=1;

a2=1;

a3=1;

a4=1;

a5=1;

a6=1;

a7=1;

a8=1;

}

void main()//主函数

{

init();//调用初始化函数

if(k==1){ m=0; if(k1==0) {delay(5);if(k1==0);while(!k1);beep=1;delay(500);beep=0;} // 违规抢答显示号码报警

while(t)

{

if(m==0) //开关,保证程序只执行一次

{

switch(t)

{

case 1:

{

TR0=0;i=1;second=score1;beep=1;delay(500);beep=0;

a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; //有选手抢答时显示选手号码蜂鸣器响,时间为0,t和i对应

}}} }

if(k2==0) {delay(5);if(k1==0);while(!k1);t=2;beep=1;delay(500);beep=0;}

if(k3==0) {delay(5);if(k1==0);while(!k1);t=3;beep=1;delay(500);beep=0;}

if(k4==0) {delay(5);if(k1==0);while(!k1);t=4;beep=1;delay(500);beep=0;}

if(k5==0) {delay(5);if(k1==0);while(!k1);t=5;beep=1;delay(500);beep=0;}

if(k6==0) {delay(5);if(k1==0);while(!k1);t=6;beep=1;delay(500);beep=0;}

if(k7==0) {delay(5);if(k1==0);while(!k1);t=7;beep=1;delay(500);beep=0;}

if(k8==0) {delay(5);if(k1==0);while(!k1);t=8;beep=1;delay(500);beep=0;}

}

if(k==0)

{

Timer();//中断定时器打开

delay(10);

while(!k);

while(1)

{

相关文档
最新文档