您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于51单片机的抢答器
/**********************51单片机实验开发板例程*************************名称:本例程为一抢答器;其中主持人操控S7与S8两个按键。选手共六位,分别操控S1--S6中的一个按键。当主持人按下抢答开始按键S7后,倒计时开始,计时5s。此后最先按下按键的选手号码将显示与数码管上。后来按下的将无显示。若五秒计时结束后,再按下按键也不会显示。若主持人没有按开始键,就有选手抢答,则视为犯规。此时犯规的选手号码将被显示于数码管上(最多显示五位犯规选手)同时,蜂鸣器发出长笛声报警,数码管全亮。而当主持人按下清零键S8后,一切状态均恢复,可以开始新一轮的抢答。按键功能简介S8抢答开始S7清零S1--S6分别为1到6号选手按键******************************************************************/#includereg51.h#defineucharunsignedcharsbitdula=P2^6;sbitwela=P2^7;sbitbeep=P2^3;ucharkey,j,k,temp,daojishi=5,wei;bitbegin,end,clear,fangui;uchara0,b0=16;c0=16;d0=16;e0=16;f0=5;unsignedintpp;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};voiddelay(unsignedchari){for(j=i;j0;j--)for(k=125;k0;k--);}voiddisplay(uchara,ucharb,ucharc,uchard,uchare,ucharf){dula=0;P0=table[a];dula=1;dula=0;wela=0;P0=0xfe;wela=1;wela=0;delay(5);P0=table[b];dula=1;dula=0;P0=0xfd;wela=1;wela=0;delay(5);P0=table[c];dula=1;dula=0;P0=0xfb;wela=1;wela=0;delay(5);P0=table[d];dula=1;dula=0;P0=0xf7;wela=1;wela=0;delay(5);P0=table[e];dula=1;dula=0;P0=0xef;wela=1;wela=0;delay(5);P0=table[f];dula=1;dula=0;P0=0xdf;wela=1;wela=0;delay(5);}voidkeyscan(){P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xee:key=1;wei++;break;case0xde:key=2;wei++;break;case0xbe:key=3;wei++;break;case0x7e:key=4;wei++;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=5;wei++;break;case0xdd:key=6;wei++;break;case0xbd:clear=1;//key=7;break;case0x7d:begin=1;//key=8;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;}}}voidmain(){TMOD=0x01;TH0=(65536-46080)/256;//由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12ET0=1;EA=1;while(1){keyscan();if(begin){if(!end){TR0=1;//if(!daojishi)daojishi=5;//begin=0;//daojishi=5;if(pp==20){pp=0;daojishi--;}f0=daojishi;if(key!=0)a0=key;//a1=a0;//if(a0!=0)end=1;if(!daojishi|a0){end=1;TR0=0;//daojishi=5;//begin=0;pp=0;}}}else{if(key!=0){switch(wei){case1:a0=key;break;case2:b0=key;break;case3:c0=key;break;case4:d0=key;break;case5:e0=key;break;}//if(!fangui)fangui=1;beep=0;}}if(clear){a0=0;key=0;begin=0;end=0;fangui=0;beep=1;daojishi=5;f0=5;clear=0;b0=16;c0=16;d0=16;e0=16;wei=0;P1=0xff;}display(a0,b0,c0,d0,e0,f0);if(fangui){beep=0;P1=0x00;;}}}voidtime0()interrupt1{TH0=(65536-46080)/256;TL0=(65536-46080)%256;pp++;}
本文标题:基于51单片机的抢答器
链接地址:https://www.777doc.com/doc-5370247 .html