书签 分享 收藏 举报 版权申诉 / 29
上传文档赚钱

类型基于MCS51单片机的四路抢答器课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3340293
  • 上传时间:2022-08-22
  • 格式:PPT
  • 页数:29
  • 大小:700KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《基于MCS51单片机的四路抢答器课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    基于 MCS51 单片机 四路 抢答 课件
    资源描述:

    1、物理系08 超Protel课程设计基于MCS-51单片机的四路抢答器目录:硬件设计硬件设计各模块功能各模块功能程序设计程序流程图电路原理图和PCB制版硬件设计硬件设计 硬件电路应能完成以下功能:参加竞赛者对主持人提出的问题要在最短的时间内作出判断,并按下抢答按键回答问题。当第一个人按下按键后,则在显示器上显示此竞赛者的号码并进行声音提示,同时电路将其他抢答按键封锁,使其不起作用。若有人在可以抢答之前按键,应该有违规提示。电路应该具有倒计时功能,倒计时时间可以设置并显示,在规定时间内没有人抢答则本题作废。回答完或超时后,由主持人将所有按键恢复,重新开始下一轮。完成上述功能的电路包括时间设定开关、

    2、声光显示、按键控制以及按键锁存等部分各模块功能各模块功能 单片机部分单片机部分 时间设定模块时间设定模块 按键模块按键模块 数码管显示模块数码管显示模块 蜂鸣器模块蜂鸣器模块单片机部分单片机部分 通过读取P3.7P3.3的状态决定倒计时时间;通过读取P1.3P1.0的状态读取按键情况;通过P2.4P2.2控制显示模块以显示按键者的号码和倒计时所剩时间;通过P0.1控制蜂鸣器 时间设定模块时间设定模块 以拨码开关U3作为倒计时时间的选择信号。若P3.7通过U3接地,倒计时时间为10s;若P3.6通过U3接地,倒计时时间为8s,若P3.5通过U3接地,倒计时时间为6s,若P3.4通过U3接地,倒计

    3、时时间为4s。判断时P3.7优先级最高,P3.4优先级最低。按键模块按键模块 KEY1KEY4的信息可以直接传输到P1.3P1.0。单片机一旦检测到有按键按下,立即将P1.4置为低电平,将按键信息锁存,以免后来的按键对其产生影响。KEY1KEY4为抢答按键,KEY5为主持人控制按键 数码管显示模块数码管显示模块 数码管显示模块由一片MAX7219和3个数码管组成。其中U8用来显示按键者的编号,U6、U7在倒计时时显示还有多长时间,如果有人犯规抢答,U6U7显示“FF”。蜂鸣器模块蜂鸣器模块 蜂鸣器在主持人发出可以抢答信号、有人按下抢答按键和倒计时时间到等3种情况下发出蜂鸣声。程序流程图如下程序

    4、流程图如下电路原理图及电路原理图及PCB制版图制版图 四路智力抢答器电路原理图四路智力抢答器PCB模块程序设计程序设计 抢答器工作过程如下抢答器工作过程如下 首先主持人选定倒计时时间,单片机扫描U3以获取此信息。如果没有人为设置,默认为10s。在按下抢答按键之前,3个数码管全部显示“0”。按下抢答按键之后,蜂鸣器响一声,单片机开始倒计时,数码管U6和U7显示倒计时时间,数码管U8显示“0”。如果有竞赛者率先在规定时间内按键,则蜂鸣器响一声,数码管U8显示该竞赛者的编号,U6和U7停止更新。如果在主持人未按下抢答按键的时候有选手抢答,则此时蜂鸣器响一声,U8显示犯规者的编号,U6和U7显示“FF

    5、”以指示有人犯规。如果在规定时间内无人按键,则U8显示“0”,U6和U7显示“EE”以指示无人按键。无论是在规定时间内有人按键、在规定时间内无人按键或者是有人犯规,都需要主持人再按一下抢答按键,之后单片机根据U3状态决定倒计时时间,3个数码管全部显示“0”,恢复到初始状态,准备下一轮抢答。8051单片机控制的四路抢答器程序单片机控制的四路抢答器程序#include typedef unsigned char uchar;sbit LE=P14;sbit KEY5=P37;sbit DIN=P24;/定义P2.5控制MAX7219的串行数据输入端 sbit LOAD=P23;/定义P2.4控制M

    6、AX7219的载入使能端 sbit CLK=P22;/定义P2.3控制MAX7219的时钟信号 sbit BUZ=P01;#define TIMER_HBYTE-50000/256 /定时50ms#define TIMER_LBYTE-50000%256 uchar intr_counter;/设定的时间用需要产生的中断次数表示 uchar bdata byte;/在bdata区定义一个变量,便于位操作 sbit byte_7=byte7;bit foul_flg;/是否有人犯规标志 bit time_over_flg;/是否倒计时超时标志 bit key_flg;/是否有人在规定时间内按键标

    7、志 void max7219_reset(void);/初始化MAX7219 void write_reg(uchar,uchar);/向控制寄存器写数据 void write_digit(uchar,uchar);/向字型寄存器写数据 void send_data(uchar);/底层的硬件驱动 uchar set_time(void);/函数功能:设置倒计时时间 bit control_key(void);/函数功能:检测主持人是否按键 uchar get_key_num(void);/函数功能:检测哪个参赛者按键 void display_time(void);/函数功能:显示倒计时剩余

    8、时间 void foul_handle(uchar);/函数功能:犯规处理 void key_handle(uchar);/函数功能:按键处理 void time_over_handle(void);/函数功能:超时处理 void init_t0(void);/函数功能:初始化T0定时器 void delay_20ms(void);/函数功能:延时20ms,按键去抖动 void buz_on(void)/函数功能:蜂鸣器响500msvoid buz_on(void)/函数功能:蜂鸣器响500msvoid main(void)uchar key_number;max7219_reset();/初

    9、始化MAX7219 while(1)foul_flg=0;/设置初始环境 time_over_flg=0;TR0=0;/禁止T0运行 write_digit(DIGIT0,LED_code0 x0);/上电后3个数码管全部显示0 write_digit(DIGIT1,LED_code0 x0);write_digit(DIGIT2,LED_code0 x0);while(control_key()=1)&(foul_flg=0)/如果主持人没有按键 /如果主持人没有按键 key_number=getkey_num();/检查是否有人犯规 if(key_number=0)/如果没有,进行下一次循

    10、环 continue;else /如果有人犯规 foul_handle();/犯规处理 foul_flg=1;/设置犯规标志 if(foul_flg=1)/如果有人犯规 while(control_key()=1);/等待主持人按键以进入下一轮 continue;/主持人按键后进入下一轮 else /如果没有人犯规,必定是主持人允许答题 intr_counter=set_time();/读取倒计时时间 init_t0();/定时器T0开始计时 buz_on();/蜂鸣器响500ms while(time_over_flg=0&key_flg=0)key_number=getkey_num();

    11、/在规定时间内检查是否有按键 if(key_number!=0)/如果有 key_handle(key_number);/按键处理 key_flg=1;/设置有人按键答题标志 TR0=0;/停止T0运行 else /否则循环检测 display_time();/并显示剩余时间 continue;if(key_flg=1)/如果有人在规定时间内答题 while(control_key=1);/等待主持人按键以进入下一轮 continue;/主持人按键后进入下一轮 else /倒计时时间到仍无人按键 time_over_handle();/超时处理 while(control_key=1);/等待

    12、主持人按键以进入下一轮 continue;/主持人按键后进入下一轮 bit control_key(void)/检测主持人是否按键 if(KEY5=1)/如果KEY5为高,说明没有按键 return 1;/返回1,表示没有按键动作 else /如果KEY5为低,说明可能有按键动作 delay_20ms();/延时20ms,去抖动 if(KEY5=1)/如果20ms后KEY5变为高电平,是干扰 return 1;/返回1 else /如果20ms后仍为低电平,确认有按键动作 return 0;/返回0uchar set_time(void)/根据设置决定倒计时时间 uchar intr_coun

    13、ter;if(P36=0)intr_counter=200;/10s else if(P35=0)intr_counter=160;/8s else if(P34=0)intr_counter=120;/6s else if(P33=0)intr_counter=80;/4s else intr_counter=200;/如果没有设置,默认为10s return intr_counter;uchar get_key_num()/检测哪个参赛者按键 uchar key_state=0;key_state=P1;key_state&=0 x0f;/读取P1端口的低4位 if(key_state=0

    14、 x0f)/若均为高电平,说明无人按键 return 0;/返回1 else key_state=0 xff;if(key_state&0 x01)return 1;/如果KEY1被按下,返回1 else if(key_state&0 x02)return 2;/如果KEY2被按下,返回2 else if(key_state&0 x04)return 3;/如果KEY3被按下,返回3 else return 4;/如果KEY4被按下,返回4 void foul_handle(uchar key_number)/犯规处理 write_digit(DIGIT0,key_number);/显示犯规者

    15、号码 write_digit(DIGIT1,0 x0f);/显示“FF”write_digit(DIGIT2,0 x0f);buz_on();/蜂鸣器响void time_over_handle(void)/超时处理 write_digit(DIGIT0,0 x0);/显示“0”write_digit(DIGIT1,0 x0e);/显示“EE”write_digit(DIGIT2,0 x0e);buz_on();/蜂鸣器响void key_handle(uchar key_number)/按键处理 write_digit(DIGIT0,key_number);/显示按键者号码 buz_on()

    16、;void display_time(void)/显示倒计时剩余时间 uchar number;write_digit(DIGIT0,LED_code0);number=int_counter/20;/秒数 write_digit(DIGIT1,number/10);/秒数的十位数字 write_digit(DIGIT2,number%10);/秒数的个位数字 void buz_on(void)uchar i;BUZ=0;/开蜂鸣器 for(i=1;i=25;i+)/延时500ms delay_20ms;BUZ=1;/关蜂鸣器void init_t0(void)TMOD=0 x01;/T0选择

    17、工作方式1,16位定时器 TH0=TIMER_HBYTE;/定时时间为50ms TL0=TIMER_LBYTE;EA=1;/使能CPU中断 ET0=1;/使能T0溢出中断 TR0=1;/T0运行 void isr_t0(void)interrupt 1 /T0中断服务函数 TH0=TIMER_HBYTE;/定时时间为50ms TL0=TIMER_LBYTE;intr_counter-;/中断次数 if(intr_counter=0)/倒计时时间到 time_over_flg=1;/设置超时标志 TR0=0;/禁止T0运行 void delay_20ms(void)/延时20ms void ma

    18、x7219_reset(void)/初始化MAX7219 void write_reg(uchar reg,uchar sdata)/写入命令 void write_digit(uchar digit,uchar number)/显示数字 void send_data(uchar byte)/MAX7219的驱动程序 总结与展望总结与展望总结总结:通过这次的课程设计,使我的动手能力和经验有了一定程度的提高,在51单片机技术和protel的理论知识上也有了更深的了解。在调试过程中,通过排障,我学到了不少知识,增长了许多经验,而这些都是书上学不到的。同时,在设计过程中我发现自己考虑问题很不全面,自己的专业知识掌握的不牢固,所掌握的计算机应用软件还不够多,我希望自己的这些不足之处能在后的工作和学习中得到改善。而且,通过这次设计,我懂得了学习的重要性,会了坚持和努力,这将为以后的学习做出了最好的榜样!

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:基于MCS51单片机的四路抢答器课件.ppt
    链接地址:https://www.163wenku.com/p-3340293.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库