单片机实验8路抢答器C语言版.doc

上传人:韩长文 文档编号:8670412 上传时间:2020-12-18 格式:DOC 页数:11 大小:139.50KB
返回 下载 相关 举报
单片机实验8路抢答器C语言版.doc_第1页
第1页 / 共11页
单片机实验8路抢答器C语言版.doc_第2页
第2页 / 共11页
单片机实验8路抢答器C语言版.doc_第3页
第3页 / 共11页
单片机实验8路抢答器C语言版.doc_第4页
第4页 / 共11页
单片机实验8路抢答器C语言版.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《单片机实验8路抢答器C语言版.doc》由会员分享,可在线阅读,更多相关《单片机实验8路抢答器C语言版.doc(11页珍藏版)》请在三一文库上搜索。

1、.单片机综合实验报告题 目: 8路抢答器实验 班 级: 姓 名: 学 号: 指导老师: 时 间: 精品.一、实验内容:以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0S7表示。本实验有Protues软件仿真。分别设置一个抢答控制开关S1和复位开关S2,由主持人控制。抢答器具有锁存与显示功能。即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。抢答器具有定时抢答功能,且一次抢答的时间由主持人设定为30秒。当主持人启动“开始”键后,定时器进行减计时,同时绿色LED灯亮。二、实验电路及功能说明分别设置一

2、个抢答控制开关S1和复位开关S2,由主持人控制。抢答器具有锁存与显示功能。即选手按按钮抢答时,锁存相应的编号,并且优先抢答选手的编号一直保持显示在显示器上,直到主持人将系统复位为止。参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统复位为止。复位后参赛队员可继续抢答。如果定时时间已到,无人抢答,本次抢答无效,系统报警红色LED灯亮,并禁止抢答,定时显示器上显示00。 精品.三、实验程序流程图: 主程序;非法抢答序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。主流程图如下图所示子程

3、序精品.四、实验结果分析五、心得体会精品.6、 程序清单精品.#include #define uchar unsigned char#define uint unsigned intsbit wela_a=P30;sbit wela1=P31;sbit wela2=P37;sbit rest=P35;sbit host=P36;sbit led1=P34;/绿灯sbit led2=P33;/红灯sbit led3=P32;/黄灯sbit key1=P10;sbit key2=P11;sbit key3=P12;sbit key4=P13;sbit key5=P14;sbit key6=P15

4、;sbit key7=P16;sbit key8=P17;uchar x,q,d,s,ge,t0,t1,start,flag;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void init();/*初始函数申明*/void display(uchar s,uchar ge,uchar a);void delay(uint z);void keyscan();void main() init(); display(s,ge,a); while(1)

5、 if(host=0)/主持人控制开关 delay(5); if(host=0) flag=1; start=1; delay(5); 延时 while(!host); 检测开关 if(rest=0)/复位 delay(5); if(rest=0) q=30; led2=1; led3=1; x=0;delay(5);精品.start=1; delay(5); while(!rest); if(flag=1) if(start=0)/选手按下,倒计10秒开始 led3=0; wela1=0; wela2=0;delay(1);TR0=0;TR1=1; display(s,ge,a); dela

6、y(1); if(start=1)/主持人按下,倒计时30秒 led1=0;wela1=0;wela2=0; delay(1);TR0=1; TR1=0; display(s,ge,a);delay(1);keyscan(); void init()/*初始化*/ t0=0; t1=0; flag=0; q=30; d=10; wela_a=0; a=0; TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=

7、1; TR0=0; TR1=0;void display(uchar s,uchar ge,uchar a)/*数码管动态扫描*/ wela1=1; P0=tablege;精品. delay(5); wela2=1; P0=tables; delay(5); wela_a=0; P2=tablea; delay(5);void keyscan()/*按键扫描函数*/ if(key1=0) delay(5);if(key1=0) a=1; P2=tablea; start=0; TR1=1; TR0=0; delay(5); while(!key1); if(key2=0) delay(5);i

8、f(key2=0) a=2; P2=tablea; start=0; delay(5); while(!key2); if(key3=0) delay(5);if(key3=0) a=3; P2=tablea; start=0; delay(5); while(!key3); if(key4=0) delay(5);if(key4=0) a=4; P2=tablea; start=0; delay(5); while(!key4);精品. if(key5=0) delay(5);if(key5=0) a=5; P2=tablea; start=0; delay(5); while(!key5)

9、; if(key6=0) delay(5);if(key6=0) a=6; P2=tablea; start=0; delay(5); while(!key6); if(key7=0) delay(5);if(key7=0) a=7; P2=tablea; start=0; delay(5); while(!key7); if(key8=0) delay(5);if(key8=0) a=8; P2=tablea; start=0; delay(5); while(!key8); void delay(uint z)/*延时函数*/ uint i,j; for(i=z;i0;i-) for(j=

10、110;j0;j-);void time0() interrupt 1/*定时器0*/精品. TH0=(65536-50000)/256; TL0=(65536-50000)%256; s=q/10; ge=q%10; t0+; if(t0=20) t0=0; q-; s=q/10; ge=q%10; if(q=0) while(1) q=0; a=0; led1=1; led2=0; wela1=0; wela2=0; delay(1); display(s,ge,a); void time1() interrupt 3/*定时器1*/ TH1=(65536-50000)/256; TL1=(65536-50000)%256; s=d/10; ge=d%10; t1+; if(t1=20) t1=0; d-; s=d/10; ge=d%10; if(d=0) while(1) d=0; a=0; led1=1; led3=1; led2=0; wela1=0; wela2=0; delay(1); display(s,ge,a); 精品./最后,给朋友们一点点提示,本程序有一点点小问题,有个中断没关,当主持人复位之后,后面的选手回答问题的时间就没有10秒了(可怜啊)。但还是可以运行的,要求不高的朋友可借鉴一哈。如有侵权请联系告知删除,感谢你们的配合!精品

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1