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

下载本文档

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

文档简介

单单片片机机开开发发和和设设计计工工程程师师 测测试试文文档档 设计题目设计题目 抢答器 学学 校 校 湖南人文科技学院 系系 别 别 通信和控制工程系 专专 业 业 电子信息工程 班班 级 级 07 级电信一班 学生姓名学生姓名 龙丽婷 董文 学学 号 号 07409106 07409129 起止日期起止日期 2010 年 6 月 12 日 2010 年 6 月 25 日 摘 要 本设计是以抢答为基本理念 考虑到依需设定限时回答的功能 利用 STC89C52 单片机及外围接口实现的抢答系统 利用单片机的定时器 计数器定时和 记数的原理 将软 硬件有机地结合起来 使得系统能够正确地进行计时 同时使 数码管能够正确地显示时间 同时系统能够实现 在抢答中 只有开始后抢答才有 效 如果在开始抢答前抢答为无效 相应犯规灯亮 开始后抢答 即正确按键后 相应成功指示灯亮 并开始倒计时 回答问题的时间限定为 10 秒 满时后系统计时 自动复位及主控复位 按键锁定 在有效状态下 按键无效非法 关键词 STC89C52 LED 灯 数码管 抢答器 计时 目录 设计要求 1 1 方案 1 2 系统的主要功能 2 3 抢答器的硬件设计 2 3 1 STC89C52 简介 2 3 2 LED 灯 5 3 3 8255 接口芯片 6 3 4 数码管显示模块 7 3 5 按键模块 7 3 6 外部中断 0 和外部中断 1 8 4 抢答器的软件设计 9 4 1 主程序流程及分析 9 4 2 总程序模块 10 5 调试结果及分析 14 参考文献 15 附录一 总体原理图 16 附录二 总程序 17 1 抢答器抢答器 设计要求 1 一位主持人和 3 位抢答者 复位后 甲乙丙的绿 红灯全亮 开始键 复位 键的指示灯全暗 主持人按复位键则仅复位指示灯亮 其他都暗 准备开始 主持 人按开始键 开始灯亮 允许甲乙丙抢答 此时优先者则相应成功指示灯亮 如允 许前抢就相应犯规灯亮 答题开始进行倒计时 到规定时间不允许答题 并返回复 位状态 2 具有抢答控制和倒计时显示功能 3 控制器应有复位控制 开始控制 抢答控制和状态指示等功能 并有答题时 间控制和显示功能 1 方案 采用宏晶公司的 STC89C52 作为系统控制器的 CPU 方案 原理框图如图 1 所示 图 1 原理方框图 2 2 系统的主要功能 本系统是借用单片机采用模块化设计的抢答器 包括 3 路抢答按钮 开始按钮 复位按钮 指示灯显示 倒计时显示部分 用中断 0 和中断 1 的控制按钮做复位和 开始控制 同时系统能够实现 在抢答中 只有开始后抢答才有效 如果在开始抢 答前抢答为无效 相应犯规灯亮 主持人按键开始后 选手开始抢答为有效 相应 成功指示灯亮 并开始倒时 回答问题的时间限定为 10 秒 满时后系统计时自动复 位及主控复位 3 抢答器的硬件设计抢答器的硬件设计 3 1 STC89C52 简介 STC89C52 引脚图如图 2 所示 图 2 STC89C52 引脚图 主要性能 和 MCS 51 单片机产品兼容 8K 字节在系统可编程 Flash 存储器 1000 次擦写周期 全静态操作 0Hz 33Hz 三级加密程序存储器 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 0 P1 7 分别接到 D4 D11 这 8 个 LED 灯 3 3 8255 接口芯片 单片机系统里常用的 8255 1 芯片是一个典型的可编程通用并行接口芯片 用来 扩展单片机的端口 它具有 3 个 8 位的并行口 有三种工作方式 可作为单片机和各 种外部设备连接的接口电路 8255 的引脚图如图 4 所示 图 4 8255 的引脚图 8255 引脚功能说明 RESET 复位输入线 当该输入端外于高电平时 所有内部寄存器 包括控制寄 存器 均被清除 所有 I O 口均被置成输入方式 PA0 PA7 端口 A 输入输出线 7 一个 8 位的数据输出锁存器 缓冲器 一个 8 位的数据输入锁存器 PB0 PB7 端 口 B 输入输出线 一个 8 位的 I O 锁存器 一个 8 位的输入输出缓冲器 PC0 PC7 端口 C 输入输出线 一个 8 位的数据输出锁存器 缓冲器 一个 8 位 的数据输入缓冲器 端口 C 可以通过工作方式设定而分成 2 个 4 位的端口 每个 4 位的端口包含一个 4 位的锁存器 分别和端口 A 和端口 B 配合使用 可作为控制 信号输出或状态信号输入端口 CS 片选信号线 当这个输入引脚为低电平时 表 示芯片被选中 允许 8255 和 CPU 进行通讯 RD 读信号线 当这个输入引脚为低电平时 允许 8255 通过数据总线向 CPU 发 送数据或状态信息 即 CPU 从 8255 读取信息或数据 WR 写入信号 当这个输入引脚为低电平时 允许 CPU 将数据或控制字写 8255 D0 D7 三态双向数据总线 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 口给数码管 键盘使用 3 4 数码管显示模块 数码管原理图如图 5 所示 8 图 5 数码管原理图 在本次设计中 数码管的 8 段是由芯片 8255 的 PB 口控制亮灭 每个数码管的 公共脚分别由 8255 的 PA0 PA5 经三极管扩流后进行控制 且数码管是共阳极的 当公共脚接上电源正极 笔画脚通过一个 220 欧姆电阻接负极 对应的笔画就会点 亮 要在某位数码管上显示一个数字 首先把待显示数字的显示码送给 8255 的 PB 口 接着选中要显示的位 3 5 按键模块 按键示意图如图 6 所示 图 6 按键示意图 在单片机系统中键盘中按钮数量较多时 为了减少 I O 口的占用 常常将按钮 排列成矩阵形式 在矩阵式键盘中 每条水平线和垂直线在交叉处不直接连通 而 是通过一个按钮加以连接 这样 一个端口 如 P1 口 就能组成 4 4 16 个按钮 比之直接将端口线用于键盘多出了一倍 而且线数越多 区别越明显 比如再多加 9 一条线就能组成 20 键的键盘 而直接用端口线则只能多出一键 9 键 由此可见 在需要的键数比较多时 采用矩阵法来做键盘是合理的 矩阵式键盘的按钮识别办 法确定矩阵式键盘上何键被按下 介绍一种 行扫描法 行扫描法又称为逐行 或 列 扫描查询法 是一种最常用的按钮识别办法 判断键盘中有无键按下将全部列 线置高电平 然后检测行线的状态 只要有一行的电平为高 则表示键盘中有键被 按下 而且闭合的键位于高电平线和 4 根列线相交叉的 4 个按钮之中 若所有行线 均为低电平 则键盘中无键按下 判断闭合键所在的位置 在确认有键按下后 即 可进入确定具体闭合键的过程 其办法是 将全部列线置为高电平 在确定某根行 线位置为高电平后 再逐列对列线置高再检测先前返回高电平的行线的电平状态 若此行返回为高 则该列线和返为高电平的行线交叉处的按钮就是闭合的按钮 本 次设计虽只用到其中三个按键但考虑到以后对系统升级 所以采用了矩阵式键盘 3 6 外部中断 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 抢答器的软件设计 4 1 主程序流程及分析 抢答器的基本工作原理 在抢答竞赛或呼叫时 有多个信号同时或不同时送入 主电路中 抢答器内部的寄存器工作 并识别 记录第一个号码 同时内部的定时 器开始工作 记录有关时间并产生超时信号 在整个抢答器工作过程中 显示电路 还要根据现场的实际情况向外电路输出相应信号 抢答器的工作流程分为 系统复 位 正常流程 违例流程等几部分 如图 8 所示 下面予以介绍 1 主持人按复位键 复位指示灯亮 进入准备状态 主持人出题 3 主持人按开始键 进入抢答部分 有人抢答就开始回答倒计时 抢答人在此 限定时间内做出回答 计时完毕后停止做答并返回复位状态 无人抢答则主持人根 据实际情况做出处理后可进入下一轮抢答 4 如果主持人未按开始键 而有人按了抢答按键 犯规抢答 相应犯规灯亮 主持人根据实际情况做出处理后可进入下一轮抢答 图 8 工作流程图 11 4 2 总程序模块 在本次设计中 总程序可分为主程序部分 显示部分 延时部分 键盘部分 计时部分 定时器工作模式设定及初始化部分 中断程序部分 主程序 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 12 打开中断及相应的设定 void GInt Init void EA 1 EX0 1 IT0 1 EX1 1 IT1 1 ET1 1 外中断 0 void ISR Ex0 void interrupt 0 light 0 x7f 外中断 1 1void ISR Ex1 void interrupt 2 light 定时器工作模式设定及初始化 void Timer1 Init void TMOD 0 x10 TH1 65535 50000 256 TL1 65535 50000 256 1 秒时间的设定 void ISR Timer1 void interrupt 3 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 13 显示部分 include reg51 h include ABSACC H define a8255 PA XBYTE 0 xD1FF define a8255 PB XBYTE 0 xD2FF define a8255 PC XBYTE 0 xD5FF define a8255 CON XBYTE 0 xD7FF unsigned char const num table 16 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 display unsigned char place unsigned char number a8255 CON 0 x89 a8255 PA 0 xff a8255 PB 0 xff a8255 PA 0 x01 place 1 a8255 PB num table number 键盘部分 unsigned char keyboard 14 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 j 4 j if PC data return y 完整总程序见附录 5 调试结果及分析 本设计主要是在编写的程序编译通过后 用下载软件将编写的程序下载到实验 开发板上 验证结果是否满足设计要求 主要通过按键部分进行控制 通过数码管 和 LED 灯部分进行观察 经验证 在抢答中 只有开始后抢答才有效 如果在开始抢答前抢答为无效 相应犯规灯亮 主持人按键开始后 选手开始抢答为有效 相应成功指示灯亮 并 开始倒时 回答问题的时间限定为 10 秒 满时后系统计时自动复位及主控复位 满 足设计要求 参考文献 1 张鑫编著 单片机原理及使用 M 北京 电子工业出版社 2005 8 105 136 2 陈家骏 郑滔主编 程序设计教程 M 北京 机械工业出版社 2004 8 41 92 3 余文俊主编 8051 C 语言实习 M 北京 中国水利水电出版社 2002 10 50 89 4 孙育才编著 新型 AT89S52 系列单片机及其使用 M 北京 清华大学出版社 2005 5 1 63 15 附录一 总体原理图 总体原理图如图 9 所示 图 9 总体硬件连接原理图 图中 U1 为单片机 STC89C52 U2 为芯片 8255 单片机的 P1 0 P1 7 分别接到 D4 D11 这 8 个 LED 灯 复位按键和开始按键分别接到单片机的 P3 2 P3 3 脚 单 片机的 P0 0 P0 7 脚接 8255 芯片 D0 D7 脚 8255 的 PA0 PA5 分别接 6 个数码管的 位选 同时 PA0 PA3 接键盘的四列 PC3 PC0 接键盘的四行 PB0 接数码管引脚 11 PB1 接数码管引脚 10 PB2 接数码管引脚 7 PB3 接数码管引脚 1 PB4 接数码管 引脚 2 PB5 接数码管引脚 3 PB6 接数码管引脚 4 PB7 接数码管引脚 5 附录二 总程序 include reg51 h 包括一个 51 标准内核的头文件 include ABSACC H 库函数 define a8255 PA XBYTE 0 xD1FF PA 口地址 define a8255 PB XBYTE 0 xD2FF PB 口地址 define a8255 PC XBYTE 0 xD5FF PC 口地址 define a8255 CON XBYTE 0 xD7FF 控制字地址 unsigned char Timer Count 0 定义变量 16 unsigned char second 9 unsigned char light unsigned char const num table 16 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 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 17 if second 0 second 0 x09 TR1 0 light 0 x7

温馨提示

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

最新文档

评论

0/150

提交评论