单片机六路抢答器C语言程序
单片机六路抢答器课程设计
单片机六路抢答器课程设计
单片机六路抢答器是一种用于教育培训场景的设备,旨在提高学生的抢答能力和思维敏捷性。
在这个课程设计中,我们将使用单片机来实现一个具有六个按钮的抢答器系统。
首先,我们需要准备硬件部分的材料。
一个典型的单片机抢答器系统包括一个单片机主控板、六个按钮、一个显示器以及一些连接线材。
在这里,我们选择使用常见的Arduino Uno作为单片机主控板,并将六个按钮分别连接到主控板的不同IO口上。
接下来,我们需要编写相应的代码来实现抢答器的功能。
在Arduino 编程环境中,我们可以使用C/C++语言来编写代码。
首先,我们需要初始化IO口和显示器。
然后,我们可以设置一个定时器,用于限制每个学生的抢答时间。
当某个按钮被按下时,我们可以通过判断相应的IO口状态来确定哪个学生抢答成功。
最后,我们将抢答结果显示在显示器上。
除了基本的抢答功能,我们还可以进一步扩展课程设计。
例如,我们可以加入抢答器的计分功能,每次学生抢答成功后,可以在显示器上显示相应的分数。
此外,我们还可以设置难度级别,给不同的学生设置不同的抢答时间限制,以提高学生的竞争性和抢答能力。
在课程设计的过程中,我们可以引入一些有趣的抢答游戏,例如多人对战、团队比赛等,以增加学生的参与度和趣味性。
此外,我们还可以加入音效和灯光效果,使整个抢答过程更加生动有趣。
总之,单片机六路抢答器是一个很好的教育培训工具,可以帮助学生提高抢答能力和思维敏捷性。
通过合理设计课程内容和引入一些有趣的元素,我们可以创造一个富有活力和互动性的课堂氛围,激发学生的学习兴趣和积极性。
六路抢答器源程序
源程序代码#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define led_seg P0#define led_bit P2 //高四位位选#define JZ_KEY P2 //矩阵扫描Unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};//共阳段码,0-9unsigned char code rest[]={0xbf,0xbf,0xbf,0xbf};bit action = 0; //允许抢答标志bit key_flag=0;bit qianda_flag=0;bit Rest_flag=0;sbit K7=P1^6; //抢答指示灯sbit buzzer=P3^7; // 蜂鸣器uchar qianda_time=5,dati_time=30; //抢答、答题倒计时uchar qianda_time_m=5,dati_time_m=30;uchar timer0_count = 0;uchar player=0;uchar key=100;uchar GD_player=0;//成功者编号(存储用数组)void K_scan4x4(void);void alert();void show_QD();void show_DT();void dati();void DelayMs(uint Delay){uchar i;for(;Delay>0;Delay--)for(i=0;i<128;i++);}uchar FW_wait(){uchar i;Rest_flag=1;P1=~0xaa;do //等待按键{K_scan4x4();led_bit =~(0x10); led_seg = rest[0]; DelayMs(10);led_bit =~(0x20); led_seg = rest[1]; DelayMs(10);led_bit =~(0x40); led_seg = rest[2]; DelayMs(10);led_bit =~(0x80); led_seg = rest[3]; DelayMs(10);i++;if(i==6) {i=0;P1=~P1;} //闪烁延时DelayMs(30);if(key==0x0a) break;if(key==0x0b) break;if(key!=0x0c){if(action==0&&key_flag==1) {alert();}}}while(key!=0x0c);return (key);}uchar QD_wait(){P1=~(0x02);dati_time=dati_time_m;do //等待启动按键{K_scan4x4();led_bit =~(0x10); led_seg = table[GD_player];DelayMs(10); led_seg=0xff; //led_seg=0xff 消影led_bit =~(0x20); led_seg = rest[1];DelayMs(10); led_seg=0xff;led_bit =~(0x40); led_seg = table[(dati_time/10)];DelayMs(10); led_seg=0xff;led_bit =~(0x80); led_seg = table[(dati_time%10)];DelayMs(10); led_seg=0xff;if(key==0x0d) {key=1;return (key);}}while(key!=0x0c);key=0;return (key);}void show_QD(){qianda_time=qianda_time_m;led_bit =~(0x10); led_seg = rest[0];DelayMs(10); led_seg=0xff;led_bit =~(0x20); led_seg = rest[1];DelayMs(10); led_seg=0xff;led_bit =~(0x40); led_seg = table[(qianda_time/10)];DelayMs(10); led_seg=0xff;led_bit =~(0x80); led_seg = table[(qianda_time%10)];DelayMs(10); led_seg=0xff;}void show_DT(){dati_time=dati_time_m;led_bit =~(0x10); led_seg = table[GD_player];DelayMs(10); led_seg=0xff;led_bit =~(0x20); led_seg = rest[0];DelayMs(10); led_seg=0xff;led_bit =~(0x40); led_seg = table[(dati_time/10)];DelayMs(10); led_seg=0xff;led_bit =~(0x80); led_seg = table[(dati_time%10)];DelayMs(10); led_seg=0xff;}void K_scan4x4(void){char a=0;key_flag=0;JZ_KEY=0x0f;if(JZ_KEY!=0x0f)//读取按键是否按下{DelayMs(10);//延时10ms进行消抖if(JZ_KEY!=0x0f)//再次检测键盘是否按下{key_flag=1;JZ_KEY=0x0f; //读取列值switch(JZ_KEY){case(0X07): player=0; key = player;break;case(0X0b): player=1; key = player;break;case(0X0d): player=2; key = player;break;case(0X0e): player=3; key = player;break;}JZ_KEY=0xf0; //读取行值switch(JZ_KEY){case(0X70): player=player; key = player;break;case(0Xb0): player=player+4; key = player;break;case(0Xd0): player=player+8; key = player;break;case(0Xe0): player=player+12;key = player;break;}while((a<50)&&(JZ_KEY!=0xf0)) { DelayMs(10);a++; } //检测按键松手检测}}}void alert(){uchar i=0;for(i=100;i>0;i--) //i:警报长短{buzzer=0;DelayMs(20); //不同声音buzzer=1;}}void qianda(){qianda_flag=1;qianda_time=qianda_time_m;K7=0;key=100;do{K_scan4x4();show_QD();if(qianda_time == 0) {qianda_time = qianda_time_m; qianda_flag=0; break; } ////抢答倒计时,10s结束DelayMs(10);if((key>4)&&(key<16)) //这里设置路数按错键退出{if(key==0x0d) {qianda_flag=0; break;}else {alert();qianda_flag=0; break;}}} while(!(key<8));if(qianda_flag==0){ qianda_flag=0;} //未抢答成功else{qianda_flag=1; //抢答成功,关闭定时TR0 = 0;K7=1;GD_player=key+1;key=0;action = 0;}}void dati(){dati_time = dati_time_m;player=0;while(player!=0x0d){K_scan4x4();show_DT();if(dati_time == 0) { dati_time = 20; break;}}}void mod_time_q(){uchar flag=0;do{K_scan4x4();if(player==0x0e) { player=0; flag=1; qianda_time_m++; }if(player==0x0f) { player=0; flag=1;qianda_time_m--; }if(flag==0&&key_flag==1) {if(key!=0x0d) {key_flag=0;alert();}}DelayMs(50);show_QD();} while(key!=0x0d);qianda_time=qianda_time_m;dati_time=dati_time_m;}void mod_time_d(){uchar flag=0;do{K_scan4x4();if(player==0x0e) { player=0; flag=1; dati_time_m++; }if(player==0x0f) { player=0; flag=1; dati_time_m--; } if(flag==0&&key_flag==1) {if(key!=0x0d){key_flag=0;alert();} }DelayMs(50);show_DT();} while(key!=0x0d);qianda_time=qianda_time_m;dati_time=dati_time_m;}void main(){TMOD=0x01; //使用定时0,工作方式1,16位定时器TH0=(65536-20000)/256; //定时50msTL0=(65536-20000)%256;EA=1;ET0=1;TR0=0;while(1){FW_wait(); //复位状态等待按键switch(key){case 0x0a: if(Rest_flag==1){key=0;Rest_flag=0;mod_time_q();break;} break;case 0x0b: if(Rest_flag==1){key=0;Rest_flag=0;mod_time_d();break;}break;case 0x0c: key=0;K7=0;DelayMs(10); action=1; TR0=1; qianda();//启动抢答if(qianda_flag==0) {break;} //抢答不成功else QD_wait(); //抢答成功,执行答题等待界面if(key==0) {K7=0; TR0=1; dati(); K7=1;break;}//启动if(key==1) {break;} //复位case 0x0d: if(action==1) {key=0; FW_wait();break;} //抢答复位键if(qianda_flag==1) {key=0;QD_wait();break;}break; //答题复位键}}}void timer0() interrupt 1 //定时时间为1s{TH0=(65536-20000)/256; //定时20msTL0=(65536-20000)%256;timer0_count ++;if(timer0_count == 50){timer0_count = 0;qianda_time--;dati_time--; //答题记时}}。
单片机C语言实现抢答器程序
// }
}
void main()
{
unsigned int n; //用于控制等待时LED显示的形状
SECBOOL=15; //设置定时15s
P1=0xff; //p0口拉高
if(TIME_SWICH15==0){ //如果 15秒 按钮被按下 并且之前没有人举过手 )&&(TEAM_a==0&&TEAM_b==0)
Speed(0); //去抖
if(TIME_SWICH15==0){
D1=LED[3]; //显示1
S1=1; //用2号数码管
BELL=0; //响铃
Speed(3); //延时
BELL=1; //响铃
while(1){
if(wrong==0){ //允许答题按钮被按下
void Speed(unsigned char n){ //延时函数
unsigned char i,j,k;
for(k=0;k<n;k++)
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
void Speed1(){ //延时函数2
Speed(0); //去抖动
if(wrong==0){
KG=1; //开关被按下
break;
}
}
else
continue;
break;
}
TEAM_3=1;
BOOL=0; //
sbit TIME_SWICH30=P2^2; //连接(30秒 切换)按钮 (主持人控制)
六路抢答器课程设计(附程序)
北京科技大学本科生课程设计说明书题目:六路抢答器学院:专业:姓名:学号:指导教师签字:摘要随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要的作用。
各种技术都离不开计算机,计算机已经在人们生活的各个方面普及了。
本课程设计是微机原理及接口技术的简单应用。
运用所学的微机原理和接口技术知识完成六路抢答器。
通过硬件与软件的结合,用我们刚刚学过的汇编语言编写程序模拟分析了六路抢答器出现的各种情况。
该抢答器以主持人为中心,操作抢答器的开始与复位,选手们可以根据主持人的提示进行抢答,该抢答器基本能满足现在社会抢答的需要,设计简单,成本低,适合小型抢答场合。
关键词:抢答器硬件电路软件编程模拟系统前言随着人们生活水平的提高,微机已经成为人们生活中重要的部分,掌握微机原理是我们信息类专业的必备知识。
8086/8088CPU是基础且广泛应用的处理器,它由执行单元和总线接口部分组成。
本说明书是包括课程设计的要求、汇编语言程序以及相关的硬件设计等内容组成。
根据汇编语言的优点,运用汇编语言的来编写程序,使程序更加便于阅读和理解。
本说明书是根据本人课堂上所学的知识以及参考相关文献的基础上编写的。
通过这次的编写,使我对微机原理和各种软硬件系统的认识变得更加深刻,打下实践的基础。
全书共分为4章,第1章为课题的来源,为本说明书的导论,基本概括来介绍了本设计题目的基本要求。
第2章为总体的设计思路,系统的介绍了本课题的具体如何实现。
第3章为硬件设计,该部分主要介绍了所需要的硬件和硬件的连接。
第4章为软件设计,该部分主要介绍了设计流程和具体实现的程序代码。
本说明书的编写得到了许多同学的关心和帮助,正是由于他们的指导、帮助和大力支持,才使本说明书得以顺利的完成。
由于本人水平有限,说明书中难免存在不足与疏漏之处,恳请老师不吝指正。
目录摘要 (2)引言 (3)课程设计任务书 (5)1[课题来源] (6)1.1[需求分析] (6)1.1.1[课题来源的意义] (6)1.1.2[设计内容] (6)1.1.3[设计目的] (6)1.1.4[系统功能] (6)2[总体设计思路] (8)2.1[设计思路] (8)2.2[红黄绿灯的表示] (9)3[硬件设计] (10)3.1[芯片8255] (10)3.1.1[芯片8255,8253,8259的引脚] (10)3.1.2[芯片8255,8253,8259的工作方式] (11)3.2[硬件连接] (12)3.2.1[硬件连接图] (12)3.2.2[其他配置] (14)4[软件设计] (15)4.1[程序流程图] (15)4.2[程序设计] (16)小结 (23)参考文献 (24)课程设计任务书一.设计内容设计一个具有6路抢答的抢答器,启动计算机,计算机自动为系统各芯片进行初始化,抢答器开始工作。
单片机课程设计——抢答器源程序
READY EQU 64H;抢答开始标志位RING EQU 56H;铃声标志位ORG 0000HLJMP MAINORG 0003H ;外部中断0入口LJMP INT0SUBORG 000BH ;定时器0入口LJMP T0INTORG 0013H ;外部中断1入口LJMP INT1SUBORG 001BH ;定时器1入口LJMP T1INTORG 0040HMAIN: MOV R1,#10;设置初始抢答时间10SMOV R2,#60;设置初始答题时间60SMOV TMOD,#11H;设置定时器0、1的工作模式MOV TH0, #0F0HMOV TL0,#0FFH;设置蜂鸣器发声频率MOV TH1, #3CHMOV TL1,#0B0H;设置100ms为一次溢出中断SETB EASETB ET0SETB ET1SETB EX0SETB EX1;允许四个中断T0、T1、INT0、INT1CLR READYCLR RINGSETB TR1SETB TR0;开始就运行定时器,一开始显示000;查询程序START: MOV R5, #0BHMOV R4, #0BHMOV R3, #0BHACALL DISPLAY;未开始抢答时显示000JB P3.0,NEXT; 主持人未按下"开始"键,程序跳转到非法抢答中,否则顺序执行延时去抖动ACALL DELAYJB P3.0,NEXT;确实按下"开始"键就向下执行,否则跳到非法抢答查询ACALL BAOJING;按键发声MOV A, R1MOV R6,A;抢答时间R1送R6,SETB READY;抢答标志位,用于COUNT子程序中判断是否查询抢答MOV R7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号MOV R3,#0AH;抢答只显示计时,灭号数AJMP COUNT;进入倒计时程序NEXT: JNB P1.0,FALSE1 ;P1.0 为0时转到非法抢答程序,否则顺序执行JNB P1.1, FALSE2JNB P1.2, FALSE3JNB P1.3, FALSE4JNB P1.5, FALSE6JNB P1.6, FALSE7JNB P1.7, FALSE8AJMP START;非法抢答处理程序FALSE1:MOV R3,#01H;1号非法抢答AJMP ERRORFALSE2: MOV R3, #02HAJMP ERRORFALSE3: MOV R3, #03HAJMP ERRORFALSE4: MOV R3, #04HAJMP ERRORFALSE5: MOV R3, #05HAJMP ERRORFALSE6: MOV R3, #06HAJMP ERRORFALSE7: MOV R3, #07HAJMP ERRORFALSE8: MOV R3, #08HAJMP ERROR;调整抢答时间R1的程序INT0SUB: MOVA, R1MOV B, #0AHDIV ABMOV R5, AMOV R4, BMOV R3, #0AHACALL DISPLAY ;在两个LED上显示抢答时间倒计时R1JNB P3.4,QIANGADD ;P3.4为加1s键,如果按下跳到QIANGADD,否则顺序执行JNB P3.5,QIANGSUB ;P3.5为减1s键,如果按下跳到QIANGSUB ,否则顺序执行JNB P3.1,QIANGFH ;P3.1为确定键,如果按下跳到QIANGFH 否则顺序执行AJMP INT0SUBQIANGADD: MOV A, R1CJNE A,#63H,QINGZ;如果不是99,R1加到99,R1就置0 重新加起MOV R1, #00H;ACALL DELAY1AJMP INT0SUBQINGZ: INC R1ACALL DELAY1AJMP INT0SUBQIANGSUB: MOV A, R1JZ SETR1;如果R1为0,R1就置99DEC R1AJMP INT0SUBSETR1: MOV R1, #63HACALL DELAY1AJMP INT0SUBQIANGFH: RETI; 调整回答时间R2的程序INT1SUB: MOVA, R2MOV B, #0AHDIV ABMOV R5, AMOV R4, BMOV R3, #0AHACALL DISPLAYJNB P3.4, HUIADDJNB P3.5, HUISUBJNB P3.1, HUIFHAJMP INT1SUBHUIADD: MOV A, R2CJNE A, #63H, HUIZMOV R2, #00HACALL DELAY1AJMP INT1SUBHUIZ: INC R2ACALL DELAY1AJMP INT1SUBHUISUB: MOV A, R2JZ SETR2DEC R2ACALL DELAY1AJMP INT1SUBSETR2: MOV R2, #63HACALL DELAY1AJMP INT1SUBHUIFH: RETI;抢、回答倒计时程序COUNT:MOV R0,#00H;重设定时器中断次数MOV TH1, #3CHMOV TL1,#0B0H;重设定时100ms的初值RECOUNT:MOV A,R6;R6保存了抢、回答倒计时的时间MOV B, #0AHDIV ABMOV R5,A;取十位数字MOV R4,B;取个位数字MOV A, R6SUBB A, #07HJNC LARGER; 大于5s跳到LARGER,否则顺序执行MOV A, R0CJNE A,#0AH,LESS;1s中0.5s向下运行AJMP CHECKLESS:CJNE A,#14H,CHECK;下面是2s的情况,响并显示号数并清R0重新计SETB RINGMOV A, R6JZ QUIT;计时完毕MOV R0, #00HDEC R6;一秒标志减1AJMP CHECKLARGER: MOV A, R0CJNE A,#14H,CHECK;如果2s向下运行,否则跳到查询"停/显示"DEC R6;计时一秒R6自动减1MOV R0,#00HCHECK:JNB P3.1,QUIT;若按下停止键则退出NEXTT: ACALL DISPLAYJB READY, ACCOUNTAJMP RECOUNTACCOUNT: MOV A, 36HJNB ACC.0, TRUE1JNB ACC.1, TRUE2JNB ACC.2, TRUE3JNB ACC.3, TRUE4JNB ACC.4, TRUE5JNB ACC.5, TRUE6JNB ACC.6, TRUE7JNB ACC.7, TRUE8AJMP RECOUNTTZ1: JMP TRUE7TZ2: JMP TRUE8QUIT: CLR READYCLR RINGAJMP START; 正常抢答处理程序TRUE1: ACALL BAOJINGMOV A, R2MOV R6,A;抢答时间R2送R6MOV R3,#01HCLR READY;答题计时不再进行查询抢答,所以就锁了抢答AJMP COUNTTRUE2: ACALL BAOJINGMOV A, R2MOV R6, AMOV R3, #02HCLR READYAJMP COUNTTRUE3: ACALL BAOJINGMOV A, R2MOV R6, ACLR READYAJMP COUNTTRUE4: ACALL B AOJINGMOV A, R2MOV R6, AMOV R3, #04HCLR READYAJMP COUNTTRUE5: ACALL B AOJINGMOV A, R2MOV R6, AMOV R3, #05HCLR READYAJMP COUNTTRUE6: ACALL B AOJINGMOV A, R2MOV R6, AMOV R3, #06HCLR READYAJMP COUNTTRUE7: ACALL B AOJINGMOV A, R2MOV R6, AMOV R3, #07HCLR READYAJMP COUNTTRUE8: ACALL BAOJINGMOV A, R2MOV R6, AMOV R3, #08HCLR READYAJMP COUNT; 犯规抢答处理程序ERROR: MOV R0, #00HMOV TH1,#3CHMOV TL1, #0B0HMOV 34H,R3;犯规号数暂存到34H单元HERE: MOV A, R0CJNE A,#06H,SHANSHUO;0.6s向下运行灭并停响CLR RINGMOV R3, #0AHMOV R4, #0AHMOV R5,#0AH;三灯全灭AJMP CHECK1SHANSHUO:CJNE A,#0CH,CHECK1;下面是1.2s的情况,响并显示号数并清R0,重新计SETB RINGMOV R0, #00HMOV R3,34H;取回号数MOV R5, #0BHMOV R4,#0BH;显示00和号数AJMP CHECK1CHECK1: JNB P3.1, QUIT1LCALL DISPLAYAJMP HEREQUIT1: CLR RINGCLR READYLJMP START; 显示程序DISPLAY:MOV DPTR,#TAB1;查询显示程序利用P0口做段选码口输出,P2口低3位做位选码输出MOV A, R3MOVC A,@A+DPTRMOV P2, #0FEHMOV P0, AACALL DELAY2;最左边的LED显示选手号MOV DPTR, #TAB2MOV A, R5MOVC A,@A+DPTRMOV P2, #0FDHMOV P0, AACALL DELAY2 ;左边第三个LED显示倒计时的十位数字MOV A, R4MOVC A,@A+DPTRMOV P2, #0FBHMOV P0, AACALL DELAY2;最右边的LED显示倒计时的个位数字RETTAB1:DB 00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,3FH ;灭、1、2、3、4、5、6、7、8、9、灭、0TAB2:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,3FH;0、1、2、3、4、5、6、7、8、9、灭、0; 按加减键的加减延时程序DELAY1: MOV 35H, #10HLOOP0: ACALL D ISPLAYDJNZ 35H, LOOP0RET; 键盘去抖动延时13msDELAY: MOV 32H, #12HLOOP: MOV 33H, #0AFHLOOP1: DJNZ 33H, LOOP1DJNZ 32H, LOOPRET;LED显示延时DELAY2: MOV 32H, #43HLOOP3: MOV 33H, #1EHMOV A, R7JNZ A1;没读到有效数据时继续转到A1LOOP2: DJNZ 33H, LOOP2DJNZ 32H, LOOP3RET; 读抢答按键数据口程序A1: MOV A, P1CJNE A,#0FFH,A3;当不全为1时的数据为有效数据,即此时有选手按下按键A2:MOV 36H,A;将有效数据送到36H单元暂存AJMP LOOP2A3: DEC R7AJMP A2; 发声程序BAOJING: SETB RINGACALL DELAY1ACALL DELAY1CLR RING;按键发声RET; T0溢出中断T0INT: MOV TH0, #0ECHMOV TL0, #0FFHJNB RING, OUTCPL P3.6;取反使喇叭发出一定频率的声音OUT: RETI; T1溢出中断(计时程序)T1INT: MOV TH1, #3CHMOV TL1, #0B0HINC R0RETIEND。
单片机设计的六路抢答器
目录一、设计任务与要求 (2)二、元器件清单及简介 (2)三、设计原理分析及简单设计过程 (3)四、设计中的问题及改进 (8)五、总结 (8)六、参考文献6路抢答器设计一、设计任务与要求1、第一人抢答开关按下后,红LED亮,别人不能再抢答,用1位数码管显示抢答号。
2、主持人有复位开关,按下开关后绿LED灯亮,同时两位动态数码管进行20秒倒计时,有人抢答后停止。
二、元器件清单及简介1.原器件清单如下表所示:2.元器件简介2.1 关于SM420364的介绍SM420364是12个引脚的8段数码管,其中6、7、10、11管脚要通过上拉电阻接电源。
SM420364的逻辑符号和管脚排列如下图所示:2.2 关于AT89S51的介绍2.2.1、AT89S51单片机采用40个引脚的双列直插封装方式,如下图所示:2.2.2、40个引脚按其功能可分为如下三类:(1)电源及时钟引脚(2)控制引脚(3)I/O口引脚2.2.3、AT89S51单片机的片内集成了如下功能部件:AT89S51单片机片内集成了一个8位CPU,数据存储器,4KB Flash ROM,4个8位可编程并行I/O口(P0、P1、P2、P3)。
1个全双工的异步串行口,2个可编程的16位定时器/计数器,1个看门狗定时器,中断系统具有5个中断源、5个中断向量,特殊功能寄存器(SFR)26个,低功耗节电模式有空闲模式和掉电模式,且具有掉电模式下的中断恢复模式、3个程序加密锁定位。
2.3 其他器材的简单说明限流电阻:保护二极管不被烧坏。
三、设计原理分析及简单设计过程3.1 设计思路此抢答器的设计采用模块化结构,主要由以下3个组成,即数码管显示模块、按键控制模块、LED发光显示模块。
在设计此抢答器时,采用模块化的设计思想,使设计起来更加简单、方便、快捷。
此电路是一时钟产生,触发,倒计时计数,数码码显示,在此结构的基础上,构造主体电路和辅助电路两个部分。
3.2 基本原理该抢答器供六人个的抢答比赛使用。
基于某AT89C51单片机六路抢答器的设计
基于某AT89C51单片机六路抢答器的设计AT89C51单片机六路抢答器设计一、引言抢答器是一种常见的电子设备,特别是在教育领域中,常用于学生课堂上积极参与课堂互动和答题的工具。
本设计以AT89C51单片机为核心,设计了一款六路抢答器,能够实现多个人同时抢答的功能,提高学生参与课堂互动的积极性。
二、系统设计该抢答器设计包括六个按键、六个LED指示灯和一个液晶显示屏。
具体设计如下:1.硬件设计(1)按键设计:设计六个按键,分别对应六个抢答按钮。
当按下一些按键时,相应的LED指示灯亮起,并通过串口数据传送给单片机,单片机根据接收到的数据来判断相应的学生抢答情况。
(2)LED指示灯设计:设计六个LED指示灯,用于显示学生抢答情况。
当一些学生按下相应的按键抢答时,其对应的LED指示灯亮起。
(3)液晶显示屏设计:设计一个液晶显示屏,用于显示当前的抢答情况。
通过串口将单片机接收到的学生抢答情况传送给液晶显示屏,实时显示当前的抢答情况。
2.软件设计(1)按键扫描程序:通过循环扫描六个按键的状态,当一些按键被按下时,将按键对应的值通过串口传送给单片机。
(2)按键控制程序:单片机接收到按键传来的值后,根据不同的值对相应的LED指示灯进行控制,实现抢答状态的显示。
(3)串口通信程序:设计单片机与液晶显示屏之间的串口通信程序,实现单片机将学生抢答情况传送给液晶显示屏的功能。
(4)液晶显示程序:通过串口接收到的数据,将学生抢答情况显示在液晶显示屏上,实时显示当前的抢答情况。
三、系统实现1.硬件实现:按照设计要求,搭建相应的电路,包括按键、LED指示灯和液晶显示屏等模块的连接。
2.软件实现:根据设计要求,进行相应的程序编写。
四、系统测试五、结论本设计基于AT89C51单片机,设计了一款六路抢答器,能够实现多个人同时抢答的功能。
经过测试,系统能够准确地显示学生的抢答情况,并且操作简便。
通过该抢答器,能够有效提高学生的参与度,促进课堂互动,加深学生对知识的理解和记忆。
用单片机设计并制作抢答器Microsoft Word 文档
目录一、课程设计任务书 (1)二、方案设计说明................................. - 1 -三、硬件设计说明................................. - 2 -1、硬件电路结构框图........................... - 2 -2、完整电路图................................. - 2 -3.电路图电气说明.............................. - 3 -四、软件设计说明................................. - 4 -1、程序流程图................................. - 4 -2、程序清单................................... - 4 -五、制作调试.................................... - 10 -六、使用说明.................................... - 10 -七、总结........................................ - 11 -八、参考文献.................................... - 12 -二、方案设计说明利用单片机设计并制作抢答器:该抢答器设6个按键:2个供主持人分别用于“开始抢答”和“复位”操作,4个供选手作“抢答”操作;用1个发光二极管指示灯点亮后表示开始抢答,再用4个灯分别显示4个选手的抢答状况;开始抢答后,哪一个选手的抢答键最先按下,该选手的抢答状态指示灯点亮,表示抢答成功,其他选手再按下抢答键将无效;开始抢答前若谁按下抢答键,对应的抢答状态指示灯闪亮,表示该选手犯规。
有选手犯规后其他抢答键也将无效;抢答成功后开始3秒钟计时,到时指示灯将变为闪亮,以提醒选手抢答后必须在3秒内回答问题,否则为犯规;出现犯规后,主持人可利用“复位键”重新开始。
基于单片机的六路多功能抢答器
硬件设备80基于单片机的六路多功能抢答器◆◆王晶摘要:本文利用单片机AT89S51为核心器件,数码管、LED 灯为显示模块,蜂鸣器为声响模块,以按键为键盘模块,结合软硬件两个方面设计了一个六路抢答器系统,并经过调试和运行使该系统达到预期目标。
具有抢答功能,显示功能,声响提示功能,抢答倒计时,抢答时间设定,答题时间倒计时,还有数据的清零功能。
该六路抢答器系统结构简单、可靠性好,并且具有性能高、功耗小、反应迅速、结果准确等特点,充分发挥了单片机系统的长处。
关键词:单片机;抢答器;数码管;声响;按键1◆◆设计任务该抢答器主要功能如下:(1)该六路多功能抢答器可同时供6个参赛队员或6个团队参加比赛(分别用k1-k66个按键来表示。
(2)系统一上电,蜂鸣器响起一段音乐,音乐结束后系统指示灯流水显示表示系统正常。
系统复位和主持人清零按钮均可实现该功能,提醒选手做好新一轮的抢答和答题准备。
(3)给主持人设置一个按钮,同时具有开始抢答和复位功能。
(4)六路多功能抢答器的数据显示与锁存功能:选手按下按钮,系统立即锁存相应的编号,并显示在LED数码管上,同时扬声器发出“叮叮”的声音提示。
选手之间的抢答实行优先锁存方案,优先抢答选手的编号一直保持到主持人将系统清零为止。
(5)六路多功能抢答器的定时抢答功能:系统可设定定时抢答,且每次的抢答时间可由主持人根据实际情况来进行设定(比如15秒)。
当主持人启动“开始”按钮后,定时器进行减计计算,同时蜂鸣器发出短暂的响声,倒计时的时间在显示器上显示,最后的3秒钟闪烁显示时间。
(6)参赛选手在设定的抢答时间内抢答,抢答有效,并立即进入答题倒计时,设定答题时间为30秒,显示器上显示答题选手编号和答题倒计时时间,最后5秒闪烁显示。
若定时时间一到,蜂鸣器发出声响,禁止选手继续答题,此时清零系统。
(7)若设定的抢答时间到却无人抢答,则本次动作无效,抢答器系统并止抢答并报警。
这种情况下,时间显示器会一直显示00直到到主持人将系统复位。
单片机六人抢答器程序讲解
题目如下:六人抢答器,以拨动开关K0~K5中的某个开关为ON作为抢答按键,无人抢答时,6只数码管循环轮流显示1~6跑马,谁先抢答,数码管停止跑马,6个数码管同时亮谁的编号,气候再有按键按下,系统不予回应,知道此拨为OFF,恢复1~6跑马开始下一轮抢答。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(uchar x);void Js_Scan1(void);void Js_Scan2(void);int flag=0,i;int code LED_Num[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d};void main(){EA=1;ET0=1;EX0=1;while(1){Js_Scan1();flag=0;}}void key() interrupt 0 using 0{int x;x=P2;if(x==0xfe&&flag==0){i=0;Js_Scan2();flag=1;}if(x==0xfd&&flag==0){i=1;Js_Scan2();flag=1;}if(x==0xfb&&flag==0){i=2;Js_Scan2();flag=1;}if(x==0xf7&&flag==0){i=3;Js_Scan2();flag=1;}if(x==0xef&&flag==0){i=4;Js_Scan2();flag=1;}if(x==0xdf&&flag==0){i=5;Js_Scan2();flag=1;}}void Js_Scan1() //数码管扫描函数{P1=0xfe;P0=LED_Num[0];delay(100);P1=0xfd;P0=LED_Num[1];delay(100);P1=0xfb;P0=LED_Num[2];delay(100);P1=0xf7;P0=LED_Num[3];delay(100);P1=0xef;P0=LED_Num[4];delay(100);P1=0xdf;P0=LED_Num[5];delay(100);}void Js_Scan2() //数码管扫描函数{uchar j; //定义j数据类型for(j=0;j<5;j++) //建立循环{P1=0x00;P0=LED_Num[i];delay(1);}}void delay(uchar x) //延时函数,防止数码管显示不稳定{uchar k;while(x--)for(k=0;k<125;k++);}基本功能:(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 ~ S7表示。
单片机六路抢答器C语言程序
单片机六路数显计时抢答器c语言程序 #include <>#define uint unsigned int#define uchar unsigned charunsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0} ;sbit start=P3^6;sbit reset=P3^7;sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit key5=P1^4;sbit key6=P1^5;sbit key7=P1^6;sbit key8=P1^7;sbit jia=P3^4;sbit jian=P3^5;bit action = 0;uchar second=10,a[7]={0}; uchar timer0_count = 0; uchar number=0;uchar number_display = 0; uchar k;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}void display(uchar number,uchar second){P2 = 0x01;P0 = table[second];delay(1);P2 = 0x02;P0 = table[number];delay(1);P2 = 0x04;P0 = table[a[0]];delay(1);P2 = 0x08;P0 = table[a[1]];delay(1);P2 = 0x10;P0 = table[a[2]];delay(1);P2 = 0x20;P0 = table[a[3]];delay(1);P2 = 0x40;P0 = table[a[4]];delay(1);P2 = 0x80;P0 = table[a[5]];delay(1);}void start_keyscan(){void fengling();while(start == 0){key7=0;display(number_display,second);if(start == 1){key7=1;action = 1;TR0 = 1;}}}uchar key_scan8(){if(key1 == 0){delay(8);if(key1 == 0){number = 1;number_display = number;}}if(key2 == 0){delay(8);if(key2 == 0){number = 2;number_display = number;}}if(key3 == 0){delay(8);if(key3 == 0){number = 3;number_display = number;}}if(key4 == 0){delay(8);if(key4 == 0){number = 4;number_display = number;}}if(key5 == 0){delay(8);if(key5 == 0){number = 5;number_display = number;}}if(key6 == 0){delay(8);if(key6 == 0){number = 6;number_display = number;}}if(number_display != 0){return number_display;}else{return 0;}}void reset_keyscan(){if(reset == 0){delay(8);if(reset == 0){number_display = 0;second=10;}}}void main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;P2=0x00;while(1){reset_keyscan();start_keyscan();if(jia==0&&a[number-1]<9){delay(10);while(jia==0) display(number_display,second);a[number-1]=a[number-1]+1;}if(jian==0&&a[number-1]>0){delay(10);while (jian==0)display(number_display,second);a[number-1]=a[number-1]-1;}while(action){while(!key_scan8()){display(number_display,second);if(second == 0){second = 10;break;}}TR0 = 0;key7=0;delay(80);display(number_display,second);key7=1;action = 0;break;}display(number_display,second);}}void timer0() interrupt 1{}TH0=(65536-50000)/256;TL0=(65536-50000)%256;timer0_count ++;if(timer0_count == 20){second --;timer0_count = 0;if(second==0){key7=0;delay(60);key7=1;}}。
基于某AT89C51单片机六路抢答器的设计
学号:xxxxxxxxxx课程设计报告基于AT89C51单片机抢答器的设计院系电子信息工程学院专业电子信息工程班级 1姓名xxx摘要单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中,单片微型计算机是微型计算机的一个重要分支,也是颇具生产力的机种。
单片微型计算机简称单片机,特别适用于控制领域,故又称微控器。
学校和电视台等单位场举办各种比赛,抢答器是必要设备。
在我校举行的各种竞赛中我们经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观判断造成比赛的不公平性。
抢答器是一名公正的裁判员,他由主体电路与扩展电路组成。
单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中,单片微型计算机是微型计算机的一个重要分支,也是颇具生产力的机种。
单片微型计算机简称单片机,特别适用于控制领域,故又称微控器。
学校和电视台等单位场举办各种比赛,抢答器是必要设备。
在我校举行的各种竞赛中我们经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观判断造成比赛的不公平性。
抢答器是一名公正的裁判员,他由主体电路与扩展电路组成。
AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
基于单片机的抢答器设计与仿真(c语言)
课程设计报告论文题目基于单片机的多路抢答器的设计作者姓名龙鑫指导教师杨(晓辉)老师所在院系信息工程学院专业名称电气卓越完成时间2014年6月30日目录1.电路原理图的设计 (1)1.1 电路组成框图 (1)1.2 电路原理图 (2)2.电路硬件设计 (2)2.1单片机最小系统 (2)2.2按键电路 (6)2.3显示电路 (7)2.4报警电路 (8)3.系统软件的设计 (9)3.1编译软件——Keil C (9)3.2仿真软件——Proteus (10)4.调试及故障分析 (11)4.1程序调试 (11)5.总结 (12)参考文献 (14)附录一 (15)基于单片机的多路智能抢答器的设计1.电路原理图的设计根据设计功能的要求,电路应该包括控制电路,按键电路,以及用来显示裁决结果的显示电路。
除了用数码管显示目前的动作情形,同时也需要用声音提醒或者警告操作人员,因此也在电路设计时加入了报警电路。
1.1 电路组成框图抢答器电路总体设计方框图如图1所示:图1抢答器总体设计方框图1.2 电路原理图抢答器电路原理图如图2所示,控制电路以单片机AT89C51为核心,按键电路采用矩阵式键盘的接法,显示电路采共阴极数码管动态显示,报警采用蜂鸣器报警电路。
图2抢答器电路设计原理图2.电路硬件设计电路硬件包括:单片机最小系统(即控制电路)、按键电路、显示电路、报警电路。
2.1单片机最小系统(1)系统结构总线型单片机非总线应用的最小系统示意图如图3所示,只有单片机和时钟电路、复位电路构成的最简单电路,并行总线不用于外围扩展,可作为应用系统的I/O口使用。
图3 总线型单片机非总线应用的最小系统(2)系统特点○1有大量可使用的I/O口;○2没有并行扩展,应用系统结构简单;○3外围器件只能通过UART口的串行移位方式或虚拟串行扩展总线进行扩展。
(3)AT89C51单片机微控制器选用ATMAL公司生产的AT89C51,该芯片货源充足,并且价格也比较便宜。
v-1 单片机六路抢答器C语言程序
把216程序去掉空格添上下括号} v4扦测无错一处警告单片机六路数显计时抢答器c语言程序#include <reg52.h>#define uint unsigned int#define uchar unsigned charunsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};sbit start=P3^6;sbit reset=P3^7;sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit key5=P1^4;sbit key6=P1^5;sbit key7=P1^6;sbit key8=P1^7;sbit jia=P3^4;sbit jian=P3^5;bit action = 0;uchar second=10,a[7]={0};uchar timer0_count = 0;uchar number=0;uchar number_display = 0; uchar k;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}void display(uchar number,uchar second) {P2 = 0x01;P0 = table[second];delay(1);P2 = 0x02;P0 = table[number];delay(1);P2 = 0x04;P0 = table[a[0]];delay(1);P2 = 0x08;P0 = table[a[1]];delay(1);P2 = 0x10;P0 = table[a[2]];delay(1);P2 = 0x20;P0 = table[a[3]];delay(1);P2 = 0x40;P0 = table[a[4]];delay(1);P2 = 0x80;P0 = table[a[5]];delay(1);}void start_keyscan(){void fengling();while(start == 0){key7=0;display(number_display,second);if(start == 1){key7=1;action = 1;TR0 = 1;}}}uchar key_scan8(){if(key1 == 0){delay(8);if(key1 == 0){number = 1;number_display = number;} }if(key2 == 0){delay(8);if(key2 == 0){number = 2;number_display = number;}}if(key3 == 0){delay(8);if(key3 == 0){number = 3;number_display = number;}}if(key4 == 0){delay(8);if(key4 == 0){number = 4;number_display = number;}}if(key5 == 0){delay(8);if(key5 == 0){number = 5;number_display = number;}}if(key6 == 0){delay(8);if(key6 == 0){number = 6;number_display = number;}}if(number_display != 0){return number_display;}else{return 0;}}void reset_keyscan(){if(reset == 0){delay(8);if(reset == 0){number_display = 0;second=10;}}}void main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;P2=0x00;while(1){reset_keyscan();start_keyscan();if(jia==0&&a[number-1]<9){delay(10);while(jia==0)display(number_display,second);a[number-1]=a[number-1]+1;}if(jian==0&&a[number-1]>0){delay(10);while (jian==0) display(number_display,second);a[number-1]=a[number-1]-1;}while(action){while(!key_scan8()){display(number_display,second);if(second == 0){second = 10;break;}}TR0 = 0;key7=0;delay(80); display(number_display,second);key7=1;action = 0;break;}display(number_display,second);}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;timer0_count ++;if(timer0_count == 20){second --;timer0_count = 0;if(second==0){key7=0;delay(60);key7=1;}}}。
基于单片机的抢答器系统设计
《单片机原理及接口》课程设计报告题 目: 抢答系统设计 专业名称: 电子信息工程 班 级:学 号:姓 名:2011年 1月抢答器系统设计1、设计目标:1.1制作一个6人抢答器,以开关(K1—K6)按下作为抢答按键。
有人按下时,有声音提醒。
1.2无人抢答时,6只数码管轮流循环显示1~6(跑马)。
1.3若有人先抢答,数码管停止跑马,6个数码管同时亮谁的编号,其后再有人按键,系统不予响应,直到复位键按下,开始下一轮抢答。
1.4设一个复位键(主持人),当按下时无论数码管处于什么状态,都恢复跑马,进行抢答。
2、设计环境Windows xp Keil uVision3 Proteus 7.53、硬件设计3.1控制系统及所需元件3.2 控制系统主要由单片机应用电路、存储接口电路、显示接口电路、复位电路组成。
其中单片机A T89C52是系统工作的核心,它主要负责控制各个部分协调工作。
3.3所需元件A T89C52、6位数码管(共阴)、74HC138、BUZZER蜂鸣器、PNP三极管、晶振、电容C1、C2、C3、上拉电阻。
4、各模块方案选择及硬件模块设计4.1 AT89C52功能介绍4.1.1A T89C52有40个引脚,32各外部双向输入/输出(I/O)端口,同时内含2各外中端口,3各16位可编程定时计数器,2各全双工串行通信口,2各读写口线,A T89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
同时A T89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
4.1.2主要功能特性:兼容MCS51指令系统。
8K可反复擦写(>1000次)Flash ROM。
32个双向I/O口,256x8bit内部RAM。
3个16位可编程定时/计数器中断,时钟频率0-24MHz。
2个串行中断,可编程UART串行通道。
基于51单片机的六路智能抢答器设计
基于51单片机的六路智能抢答器设计摘要在抢答中,只靠人的视觉是很难判断出哪组先答题。
利用单片机来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。
能够实现抢答器功能的方式有多种,可以采用模拟电路、数字电路或模拟与数字电路相结合的方式。
实现抢答器功能的方式有多种,可以采用早期的模拟电路、数字电路或模数混合电路。
本文利用AT89C51单片机及外围接口设计了一个六路抢答器。
关键词: AT89C51 LED数码管抢答器计时报警Design of six way intelligent responder based on 51 single chipmicrocomputerAbstract:In the answer, only by people's vision is difficult to determine which group first answer. Using single-chip microcomputer to design responder, so that the above problems can be solved, even if the two groups of responder time difference between a few microseconds, you can identify which group of priority questions. There are many ways to realize the function of responder, which can be simulated by means of analog circuits, digital circuits or analog and digital circuits. There are many ways to realize the function of answering device, and the early analog circuit, digital circuit or analog digital mixed circuit can be adopted. This paper uses AT89C51 microcontroller and peripheral interface to design a six way responder. Key words: AT89C51 LED digital tube responder, timing alarm目录第一章系统总体方案的设计 (1)1.1 硬件电路的设计 (1)1.2 总体原理图 (2)1.3 时钟频率电路的设计 (2)1.4 复位电路的设计 (3)1.5 显示电路的设计 (4)1.5.1 显示模块在系统软件中的安排 (4)1.6 键盘扫描电路的设计 (6)1.7 发声 (7)1.8 系统复位 (7)第二章软件设计 (9)2.1 主程序系统结构图 (9)2.2软件任务分析 (9)2.3 程序流程图 (10)致谢 (12)参考文献 (13)第一章系统总体方案的设计1.1 硬件电路的设计本设计分为硬件设计和软件设计,这两者相互结合,不可分离;从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。
六路抢答器单片机课程设计
抢答器课程设计原文一、设计要求及目的(1)设计一个可供6人进行的抢答器。
(2)系统设置复位按钮,按动后,重新开始抢答。
(3)抢答器开始时数码管显示序号0,选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
抢答后显示优先抢答者序号,同时发出音响。
,并且不出现其他抢答者的序号。
(4)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定,本抢答器的时间设定为60秒,当主持人启动“开始”开关后,定时器开始减计时,同时音乐盒有短暂的声响。
(5)设定的抢答时间内,选手可以抢答,这时定时器停止工作,显示器上显示选手的号码和抢答时间。
并保持到主持人按复位键。
(6)当设定的时间到,而无人抢答时,本次抢答无效,扬声器报警发出声音,并禁止抢答。
定时器上显示00。
二、设计电路方框图:......三、电路组成本抢答器的电路主要有四部分组成:数字抢答电路、时序控制电路、报警电路以及可预置时间的定时电路。
其中数字抢答部分有一个CD4511译码器和LED数码管显示器组成,可以将六位抢答者的按钮通过CD4511译码驱动LED数码管显示器显示出他们最先抢答者的序号。
而时序控制电路的功能是当参赛选手按动抢答器时,使扬声器发声,这时抢答电路和定时电路停止工作。
而且设定的时间60秒到达后若无人抢答,则报警电路工作。
报警电路工作的条件是当设定时间到达后或者有人抢答时,报警电路被输入一个高电平,这时此电路工作。
可预置时间的定时电路是靠74LS121工作的。
以下是抢答电路的组成以及各部分功能(1)抢答电路1.电路组成电路如下图3.1所示,该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。
......目录目录:第一部分:设计的要求及目的第二部分:系统方框图第三部分:电路组成及各部分选定方案、功能及计算(1)抢答电路: 1、抢答电路功能2、方案选定(2)报警电路(3)定时电路 1、电路功能介绍2、电路选定方案分析及计算(4)时序控制电路 1、电路组成分析2、电路功能第四部分:器件说明第五部分:参考文献第六部分:设计总结第六部分:总体电路图(用PROTEL99制作)参考资料康华光《电子技术基础—数字部分》高等教育出版社董子舟、段辉娟《电子技术》机械工业出版社2002年,第7期《电子报》类别:电子制作12002年,第50期《电子报》类别:电子产品与器件张惠敏、肖耀南《数字电子技术》化学工业出版社江国强《现代数字逻辑电路》电子工业出版社简单介绍本抢答器的电路主要有四部分组成:数字抢答电路、时序控制电路、报警电路以及可预置时间的定时电路。
基于单片机实现的六路抢答器设计毕业设计
目录一、六路抢答器设计任务及要求 (1)1.1设计任务 (1)1.2设计要求 (1)1.2.1系统设计要求 (1)1.2.2设计目标………………………………………………………………二、系统组成及工作原理 (2)2.1方案选择 (2)2.1.1 利用译码芯片 (2)2.1.2 利用单片机 (2)2.2原理分析 (3)2.3设计方案 (3)三、抢答器硬件系统设计 (4)3.1时钟电路和复位电路 (4)3.1.1时钟电路 (5)3.1.2复位电路 (5)3.2键盘电路 (6)3.3 显示电路 (7)3.3.1 显示驱动电路 (7)3.3.2显示报警电路 (8)3.4芯片介绍 (9)3.4.1集成芯片AT89S52 (9)3.5共阳数码管介绍 (11)四、软件系统设计 (12)4.1 设计思想 (12)4.2 资源分配 (12)4.3 程序设计流程图 (13)4.3.1 定时器中断服务程序流程 (13)4.3.2抢答违规流程图 (13)4.3.3 显示程序流程 (14)4.3.4主程序流程图 (15)五、调试及使用说明 (16)5.1实物调试 (16)5.2 使用说明 (16)六、设计心得体会及教学建议 (17)6.1 设计体会 (18)6.2教学建议 (18)致谢 (19)参考文献 (20)附录Ⅰ电路原理图 (21)附录Ⅱ PCB元器件布局图 (22)附录Ⅲ PCB顶层图 (23)附录Ⅳ PCB底层图 (24)附录Ⅴ元器件清单 (25)附录Ⅵ程序清单 (27)一、六路抢答器设计任务及要求1.1设计任务设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,他们的编号分别是1、2、3、4、5、6、各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是S0、S1、S2、S3、S4、S5。
要求一人一组在一周时间内完成实物并打印《单片机技术》课程设计说明书一份。
1.2设计要求1.2.1系统设计要求:(1)该抢答器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态;(2)主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;(3)主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;(4)正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,数码管显示违规台号;(5)在30S,内选手提前答完,由主持人按下停止,并显示答题时间,主持人按复位,等待下一轮抢答:(6)各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位按钮;1.2.2设计目标:(1)通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能;(2)熟悉电路中所用到的各集成芯片的管脚及其功能;(3)进行电路的装接、调试,直到电路能达到规定的设计要求;(4)掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力告,以后从事电子电路设计、研发电子产品打下良好的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机六路数显计时抢答器c语言程序#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code
table[]={0xc0,0xf9,0xa4,
0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xc0};
sbit start=P3^6;
sbit reset=P3^7;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit jia=P3^4;
sbit jian=P3^5;
bit action = 0;
uchar second=10,a[7]={0};
uchar timer0_count = 0;
uchar number=0;
uchar number_display = 0;
uchar k;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void display(uchar number,uchar second) {
P2 = 0x01;
P0 = table[second];
delay(1);
P2 = 0x02;
P0 = table[number];
delay(1);
P2 = 0x04;
P0 = table[a[0]];
delay(1);
P2 = 0x08;
P0 = table[a[1]];
delay(1);
P2 = 0x10;
P0 = table[a[2]];
delay(1);
P2 = 0x20;
P0 = table[a[3]];
delay(1);
P2 = 0x40;
P0 = table[a[4]];
delay(1);
P2 = 0x80;
P0 = table[a[5]];
delay(1);
}
void start_keyscan()
{
void fengling();
while(start == 0)
{
key7=0;
display(number_display,second);
if(start == 1)
{
key7=1;
action = 1;
TR0 = 1;
}
}
}
uchar key_scan8()
{
if(key1 == 0)
{
delay(8);
if(key1 == 0)
{
number = 1;
number_display = number;
}
}
if(key2 == 0)
{
delay(8);
if(key2 == 0)
{
number = 2;
number_display = number;
}
}
if(key3 == 0)
{
delay(8);
if(key3 == 0)
{
number = 3;
number_display = number;
}
}
if(key4 == 0)
{
delay(8);
if(key4 == 0)
{
number = 4;
number_display = number;
}
}
if(key5 == 0)
{
delay(8);
if(key5 == 0)
{
number = 5;
number_display = number;
}
}
if(key6 == 0)
{
delay(8);
if(key6 == 0)
{
number = 6;
number_display = number;
}
}
if(number_display != 0)
{
return number_display;
}
else
{
return 0;
}
}
void reset_keyscan()
{
if(reset == 0)
{
delay(8);
if(reset == 0)
{
number_display = 0;
second=10;
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
P2=0x00;
while(1)
{
reset_keyscan();
start_keyscan();
if(jia==0&&a[number-1]<9)
{
delay(10);
while(jia==0)
display(number_display,second);
a[number-1]=a[number-1]+1;
}
if(jian==0&&a[number-1]>0)
{
delay(10);
while (jian==0)
display(number_display,second);
a[number-1]=a[number-1]-1;
}
while(action)
{
while(!key_scan8())
{
display(number_display,second);
if(second == 0)
{
second = 10;
break;
}
}
TR0 = 0;
key7=0;
delay(80);
display(number_display,second);
key7=1;
action = 0;
break;
}
display(number_display,second);
}
}
void timer0() interrupt 1 {
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
timer0_count ++;
if(timer0_count == 20)
{
second --;
timer0_count = 0;
if(second==0)
{
key7=0;
delay(60);
key7=1;
}
}
}。