51单片机三路抢答器.doc_第1页
51单片机三路抢答器.doc_第2页
51单片机三路抢答器.doc_第3页
51单片机三路抢答器.doc_第4页
51单片机三路抢答器.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计单片机课程设计 题题 目:目:三三 路路 抢抢 答答 器器 专专 业业 班班 级:级:应用电子(对口)应用电子(对口) 姓姓 名:名:徐徐 发发 金金 学学 号:号:201125110130 指指 导导 老老 师:师: 陆陆 程程 2012-12-16 摘 要 本设计是以抢答为基本理念。考虑到依需设定限时回答的功能,利用 stc89c52 单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和 记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使 数码管能够正确地显示时间。同时系统能够实现:在抢答中,只有开始后抢答才有 效,如果在开始抢答前抢答为无效,相应犯规灯亮;开始后抢答,即正确按键后, 相应成功指示灯亮,并开始倒计时,回答问题的时间限定为 10 秒,满时后系统计时 自动复位及主控复位;按键锁定,在有效状态下,按键无效非法。 关键词: stc89c52;led 灯;数码管;抢答器;计时 目录 设计要求.1 1 方案.1 2 系统的主要功能.2 3 抢答器的硬件设计.2 31 stc89c52 简介 .2 3、2 led 灯.5 33 8255 接口芯片.6 34 数码管显示模块.7 35 按键模块.7 36 外部中断 0 和外部中断 1.8 4 抢答器的软件设计.9 41 主程序流程及分析.9 42 总程序模块.10 5 调试结果及分析.14 设计心得体会 15 参考文献.16 附录一:总体原理图.17 1 抢答器抢答器 设计要求 1、一位主持人与 3 位抢答者,复位后,甲乙丙的绿、红灯全亮,开始键、复位 键的指示灯全暗;主持人按复位键则仅复位指示灯亮,其他都暗,准备开始;主持 人按开始键,开始灯亮,允许甲乙丙抢答,此时优先者则相应成功指示灯亮,如允 许前抢就相应犯规灯亮;答题开始进行倒计时,到规定时间不允许答题,并返回复 位状态。 2、具有抢答控制和倒计时显示功能。 3、控制器应有复位控制、开始控制、抢答控制和状态指示等功能,并有答题时 间控制和显示功能。 1 方案 采用宏晶公司的 stc89c52 作为系统控制器的 cpu 方案。原理框图如图 1 所示: 图 1 原理方框图 2 2 系统的主要功能 本系统是借用单片机采用模块化设计的抢答器,包括 3 路抢答按钮、开始按钮、 复位按钮,指示灯显示,倒计时显示部分。用中断 0 和中断 1 的控制按钮做复位与 开始控制。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢 答前抢答为无效,相应犯规灯亮;主持人按键开始后,选手开始抢答为有效,相应 成功指示灯亮,并开始倒时,回答问题的时间限定为 10 秒,满时后系统计时自动复 位及主控复位。 3 抢答器的硬件设计抢答器的硬件设计 31 stc89c52 简介 stc89c52 引脚图如图 2 所示: 图 2 stc89c52 引脚图 主要性能: 与 mcs-51 单片机产品兼容 8k 字节在系统可编程 flash 存储器 1000 次擦写周期 全静态操作:0hz33hz 三级加密程序存储器 32 个可编程 i/o 口线 三个 16 位定时器/计数器 3 八个中断源 全双工 uart 串行通道 低功耗空闲和掉电模式 掉电后中断可唤醒 看门狗定时器 双数据指针 掉电标识符 功能特性描述: stc89c52 是一种低功耗、高性能 cmos8 位微控制器,具有 8k 在系统可编 程 flash 存储器。使用宏晶高密度非易失性存储器技术制造,与工业 80c51 产品指 令和引脚完全兼容。 片上 flash 允许程序存储器在系统可编程, 亦适于常规编器。 在单芯片上,拥有灵巧的 8 位 cpu 和在系统可编程 flash,使得 stc89c52 为众 多嵌入式控制应用系统提供高灵活、超有效的解决方案。stc89c52 具有以下标准 功能:8k 字节 flash,256 字节 ram,32 位 i/o 口线,看门狗定时器,2 个数据指 针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶 振及时钟电路。另外,stc89c52 可降至 0hz 静态逻辑操作,支持 2 种软件可选择 节电模式。空闲模式下,cpu 停止工作,允许 ram、定时器/计数器、串口、中断 继续工作。掉电保护方式下,ram 内容被保存,振荡器被冻结。 vcc : 电源 gnd: 地 p0 口:p0 口是一个 8 位漏极开路的双向 i/o 口。作为输出口,每位能驱动 8 个 ttl 逻辑电平。对 p0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和 数据存储器时,p0 口也被作为低 8 位地址/数据复用。在这种模式下,p0 具有内部 上拉电阻。在 flash 编程时,p0 口也用来接收指令字节;在程序校验时,输出指令 字节。程序校验时,需要外部上拉电阻。 p1 口:p1 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p1 输出缓冲器能 驱动 4 个 ttl 逻辑电平。对 p1 端口写“1”时,内部上拉电阻把端口拉高,此时 可以作 为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因, 将输出 电流(iil) 。 此外,p1.0 和 p1.2 分别作定时器/计数器 2 的外部计数输入 4 (p1.0/t2)和时器/计数器 2 的触发输入(p1.1/t2ex) ,具体如下表所示。在 flash 编程和校验时,p1 口接收低 8 位地址字节。 p1.0 t2(定时器/计数器 t2 的外部计数输入) ,时钟输出 p1.1 t2ex(定时器/计数器 t2 的捕捉/重载触发信号和方向控制) p1.5 mosi(在系统编程用) p1.6 miso(在系统编程用) p1.7 sck(在系统编程用) p2 口:p2 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p2 输出缓冲器能 驱动 4 个 ttl 逻辑电平。对 p2 端口写“1”时,内部上拉电阻把端口拉高,此时 可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因, 将输出电流(iil) 。 在访问外部程序存储器或用 16 位地址读取外部数据存储器 (例如执行 movx dptr)时,p2 口送出高八位地址。在这种应用中,p2 口使 用很强的内部上拉发送 1。在使用 8 位地址(如 movx ri)访问外部数据存储器 时,p2 口输出 p2 锁存器的内容。在 flash 编程和校验时,p2 口也接收高 8 位地址 字节和一些控制信号。 p3 口:p3 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p2 输出缓冲器能 驱动 4 个 ttl 逻辑电平。对 p3 端口写“1”时,内部上拉电阻把端口拉高,此时 可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因, 将输出电流(iil) 。 p3 口亦作为 stc89s52 特 殊功能(第二功能)使用, 。在 flash 编程和校验时,p3 口也接收一些控制信号。 p3.0 rxd(串行输入) p3.1 txd(串行输出) p3.2 int0(外部中断 0) p3.3 int0(外部中断 0) p3.4 t0(定时器 0 外部输入) p3.5 t1(定时器 1 外部输入) p3.6 wr(外部数据存储器写选通) p3.7 rd(外部数据存储器写选通) rst: 复位输入。晶振工作时,rst 脚持续 2 个机器周期高电平将使单片机复 位。看门狗计时完成后,rst 脚输出 96 个晶振周期的高电平。特殊寄存器 5 auxr(地址 8eh)上的 disrto 位可以使此功能无效。disrto 默认状态下,复位高 电平有效。 ale/prog:地址锁存控制信号(ale)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在 flash 编程时,此引脚(prog)也用作编程输入脉冲。在一 般情况下,ale 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时 钟使用。然而,特别强调,在每次访问外部数据存储器时,ale 脉冲将会跳过。 如果需要,通过将地址为 8eh 的 sfr 的第 0 位置“1” ,ale 操作将无效。这一位 置“1” ,ale 仅在执行 movx 或 movc 指令时有效。否则,ale 将被微弱拉高。 这个 ale 使能标志位 (地址为 8eh 的 sfr 的第 0 位) 的设置对微控制器处于外 部执行模式下无效。 psen:外部程序存储器选通信号 (psen) 是外部程序存储器选通信号。 当 stc89c52 从外部程序存储器执行外部代码时,psen 在每个机器周期被激活两次, 而在访问外部数据存储器时,psen 将不被激活。 ea/vpp:访问外部程序存储器控制信号。为使能从 0000h 到 ffffh 的外部程 序存储器读取指令,ea 必须接 gnd。为了执行内部程序指令,ea 应该接 vcc。 在 flash 编程期间,ea 也接收 12 伏 vpp 电压。 xtal1:振荡器反相放大器和内部时钟发生电路的输入端。 xtal2:振荡器反相放大器的输出端。 3、2 led 灯 led 灯示意图如图 3 所示: 6 图 3 led 灯示意图 单片机的 p1.0p1.7 分别接到 d4-d11 这 8 个 led 灯。 33 8255 接口芯片 单片机系统里常用的 82551芯片是一个典型的可编程通用并行接口芯片,用来 扩展单片机的端口,它具有 3 个 8 位的并行口,有三种工作方式,可作为单片机与各 种外部设备连接的接口电路。 8255 的引脚图如图 4 所示。 图 4 8255 的引脚图 8255 引脚功能说明: reset:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄 存器)均被清除,所有 i/o 口均被置成输入方式。 pa0pa7:端口 a 输入输出线, 7 一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入锁存器。 pb0pb7:端 口 b 输入输出线,一个 8 位的 i/o 锁存器, 一个 8 位的输入输出缓冲器。 pc0pc7:端口 c 输入输出线, 一个 8 位的数据输出锁存器/缓冲器, 一个 8 位 的数据输入缓冲器。端口 c 可以通过工作方式设定而分成 2 个 4 位的端口, 每个 4 位的端口包含一个 4 位的锁存器,分别与端口 a 和端口 b 配合使用,可作为控制 信号输出或状态信号输入端口。 cs:片选信号线,当这个输入引脚为低电平时,表 示芯片被选中,允许 8255 与 cpu 进行通讯。 rd:读信号线,当这个输入引脚为低电平时,允许 8255 通过数据总线向 cpu 发 送数据或状态信息,即 cpu 从 8255 读取信息或数据。 wr:写入信号,当这个输入引脚为低电平时,允许 cpu 将数据或控制字写 8255。 d0d7:三态双向数据总线,8255 与 cpu 数据传送的通道,当 cpu 执行输入 输出指令时,通过它实现 8 位数据的读/写操作,控制字和状态信息也通过数据总线 传 a0,a1:地址选择线,用来选择 8255 的 pa 口,pb 口,pc 口和控制寄存器。 当 a0=0,a1=0 时,pa 口被选择; 当 a0=0,a1=1 时,pb 口被选择; 当 a0=1,a1=0 时,pc 口被选择; 当 a0=1.a1=1 时,控制寄存器被选择。 在本次设计中,8255 芯片用来扩展系统的外部接口,将 8255 的 pa、pb、pc 口给数码管、键盘使用。 34 数码管显示模块 数码管原理图如图 5 所示: 8 图 5 数码管原理图 在本次设计中,数码管的 8 段是由芯片 8255 的 pb 口控制亮灭,每个数码管的 公共脚分别由 8255 的 pa0-pa5 经三极管扩流后进行控制,且数码管是共阳极的。 当公共脚接上电源正极,笔画脚通过一个 220 欧姆电阻接负极,对应的笔画就会点 亮。 要在某位数码管上显示一个数字,首先把待显示数字的显示码送给 8255 的 pb 口,接着选中要显示的位。 35 按键模块 按键示意图如图 6 所示: 图 6 按键示意图 在单片机系统中键盘中按钮数量较多时,为了减少 i/o 口的占用,常常将按钮 排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而 是通过一个按钮加以连接。这样,一个端口(如 p1 口)就能组成 4*4=16 个按钮, 比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加 9 一条线就能组成 20 键的键盘,而直接用端口线则只能多出一键(9 键) 。由此可见, 在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式键盘的按钮识别办 法确定矩阵式键盘上何键被按下,介绍一种“行扫描法” 。行扫描法又称为逐行(或 列)扫描查询法,是一种最常用的按钮识别办法。 判断键盘中有无键按下将全部列 线置高电平,然后检测行线的状态。只要有一行的电平为高,则表示键盘中有键被 按下,而且闭合的键位于高电平线与 4 根列线相交叉的 4 个按钮之中。若所有行线 均为低电平,则键盘中无键按下。 判断闭合键所在的位置:在确认有键按下后,即 可进入确定具体闭合键的过程。其办法是:将全部列线置为高电平,在确定某根行 线位置为高电平后,再逐列对列线置高再检测先前返回高电平的行线的电平状态。 若此行返回为高,则该列线与返为高电平的行线交叉处的按钮就是闭合的按钮。本 次设计虽只用到其中三个按键但考虑到以后对系统升级,所以采用了矩阵式键盘。 36 外部中断 0 和外部中断 1 外部中断 0 和外部中断 1 示意图如图 7 所示: 图 7 外部中断 0 和外部中断 1 示意图 在单片机上有两个引脚,名称为 int0、int1,也就是 p3.2、p3.3 这两个引脚。 在单片机内部的 tcon 寄存器中有四位是与外中断有关的。 it0: int0 触发方式 控制位,可由软件进和置位和复位,it0=0,int0 为低电平触发方式,it0=1,int0 为负跳变触发方式。ie0:int0 中断请求标志位。当有外部的中断请求时,这位就 会置 1(这由硬件来完成) ,在 cpu 响应中断后,由硬件将 ie0 清 0。it1、ie1 的用 途和 it0、ie0 相同。按键 0 接单片机 p32 脚,按键 1 接单片机的 p33 脚。本次设计 用到了外中断 1 和外中断 0,需接上跳帽 w1 和 w2。 10 4 抢答器的软件设计 41 主程序流程及分析 抢答器的基本工作原理:在抢答竞赛或呼叫时,有多个信号同时或不同时送入 主电路中,抢答器内部的寄存器工作,并识别、记录第一个号码,同时内部的定时 器开始工作,记录有关时间并产生超时信号。在整个抢答器工作过程中,显示电路 还要根据现场的实际情况向外电路输出相应信号。抢答器的工作流程分为:系统复 位、正常流程、违例流程等几部分,如图 8 所示,下面予以介绍。 1、主持人按复位键,复位指示灯亮,进入准备状态,主持人出题。 3、主持人按开始键,进入抢答部分,有人抢答就开始回答倒计时,抢答人在此 限定时间内做出回答,计时完毕后停止做答并返回复位状态。无人抢答则主持人根 据实际情况做出处理后可进入下一轮抢答。 4、如果主持人未按开始键,而有人按了抢答按键,犯规抢答,相应犯规灯亮。 主持人根据实际情况做出处理后可进入下一轮抢答。 图 8 工作流程图 11 42 总程序模块 在本次设计中,总程序可分为主程序部分,显示部分,延时部分,键盘部分, 计时部分,定时器工作模式设定及初始化部分,中断程序部分。 #includereg51.h /包括一个 51 标准内核的头文件 #include absacc.h /库函数 #define a8255_pa xbyte0 xd1ff /*pa 口地址*/ #define a8255_pb xbyte0 xd2ff /*pb 口地址*/ #define a8255_pc xbyte0 xd5ff /*pc 口地址*/ #define a8255_con xbyte0 xd7ff /*控制字地址*/ unsigned char timer_count=0; /定义变量 unsigned char second=9; unsigned char light; unsigned char const num_table16= 0 xa0, /*0*/ 0 xbb, /*1*/ 0 x62, /*2*/ 0 x2a, /*3 */ 0 x39, /*4*/ 0 x2c, /*5 */ 0 x24, /*6*/ 0 xba, /*7*/ 0 x20, /*8*/ 0 x28, /*9 */ 0 x30, /*a*/ 0 x25, /*b*/ 0 xe4, /*c*/ 0 x23, /*d*/ 0 x64, /*e*/ 0 x74, /*f */ ; void timer1_init(void); /函数声明 void gint_init(void); 12 void delay (unsigned int x) ; void display (unsigned char place, unsigned char number); unsigned char keyboard(); main()/ 主程序 unsigned char flag=0; light=0 xc0; timer1_init();定时器工作模式设定及初始化 while(1) /主程序循环 gint_init(); /函数调用(打开中断及相应的设定) p1=light; display(6,second); if(second=0) second=0 x09; tr1=0; light=0 x7f; flag=keyboard(); if(light=0 x3f) switch(flag) case 1: light=0 xfd,tr1=1; break; case 2: light= 0 xf7, tr1=1 ; break; case 3:light=0 xdf, tr1=1; break; default : light =0 x3f; if(light=0 x7f) switch(flag) case 1: light=0 xfe; break; case 2:light=0 xfb; break; case 3:light= 0 xef; break; default : light =0 x7f; 13 void gint_init(void) /打开中断及相应的设定 ea = 1; ex0 = 1; it0 = 1; ex1= 1; it1 = 1; et1=1; void isr_ex0(void) interrupt 0 /外中断 0 light=0 x7f; void isr_ex1(void) interrupt 2 /外中断 1 light void timer1_init(void) / 定时器工作模式设定及初始化 tmod=0 x10; th1=(65535-50000 )/256; tl1=(65535-50000)%256; void isr_timer1(void) interrupt 3 /1 秒时间的设定 timer_count+; if(timer_count = 20) timer_count = 0; second-; timer1_init(); void delay(unsigned int x)/延时 unsigned char i,j,k; while(x-) for(i=0;i=5;i+) for(j=0;j=10;j+) ; void display(unsigned char place, unsigned char number) /显示 a8255_con=0 x89; a8255_pa =0 xff; 14 a8255_pb=0 xff; a8255_pa=(0 x01(place-1); a8255_pb=num_tablenumber; unsigned char keyboard() /键盘 unsigned char pc_data; unsigned char j; unsigned char y=0; a8255_con=0 x89; a8255_pa=0 xf1; a8255_pb=0 xff; delay(1); pc_data=a8255_pc; for(j = 0;j4;j+) if(pc_data return(y) ; 5 调试结果及分析 本设计主要是在编写的程序编译通过后,用下载软件将编写的程序下载到实验 开发板上,验证结果是否满足设计要求。主要通过按键部分进行控制,通过数码管 和 led 灯部分进行观察。 经验证,在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效, 相应犯规灯亮;主持人按键开始后,选手开始抢答为有效,相应成功指示灯亮,并 开始倒时,回答问题的时间限定为 10 秒,满时后系统计时自动复位及主控复位,满 足设计要求。 15 设计心得体会设计心得体会 此次单片机课程设计,我做的是电

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论