基于单片机的无线抢答器设计内容摘要:

接地, 31 脚接电源 Vcc,就构成了 AT89S52 单片机的最小系统如图 312。 在单片机最小系统的基础上外接相关的工作电路,并让这些电路按程序设计要求工作,就组成了单片机应用电路。 青岛理工大学毕业论文 12 图 312 单片机的最小系统图 无线发射电路 无线发射电路由抢答按键,编码电路,发射电路组成。 由于 F05P 对 直流电平及模拟信号是不能发射的,而在本设计中无线发射电路发用蓄电池供电,故结合 PT2262 使用。 PT2262 的数据无论怎么变但频宽不变,计时出现一点突发性的外界干扰,它的宽容性也会解码输出高点品。 PT2262/PT2272 是台湾普诚公司生产的一种 CMOS 工艺制造的低功耗、低价位的通用编解码电路,可靠性及稳定性较好。 PT2262 外观如图 321 所示。 图 321 PT2262 外观图 其中 PT2262 最多可有 6 位 ( D0~D5) 数据引脚,通常使用 8 位地址, 4 青岛理工大学毕业论文 13 位数据的组合。 在 TE 端为低电平的情况下,只要有 1 位为高电平即有编码发出,因此本电路设计成 4 路抢答,使用全部 6 位数据端时可设计成 6 路抢答,在超过 6 路需扩展编码、译码电路。 设定的地址码和数据码从 17 脚串行输出,触发无线发射模块 F05P 工作。 F05P 采用 SMT 工艺,树脂封装,小体积,声表谐振器稳频,内部具有一级调制电路及限流电阻,适合单片机短距离无线数据传输。 FO5P 基本满足抢答器的传输距离要求,不需另加 天线。 单片机的数据可直接进入 F05P 的数据输入端,以 315MHz 向外发射无线信号。 F05P 需要输入数据才能发射,数据信号停止,发射电流为零。 本电路使用 9V 电池供电。 按下 S1S4, PT2262 给出对应的脉冲编码信号,按键动作转化为无线遥控信号发出。 无线发射原理图如图 322 所示。 图 322 无线发射电路原理图 无线接收电路 无线接收电路由接收电路、解码电路组成。 无线接收电路原理图如图 332所示。 无线接收电路采用与 FO5P 配套的 J05R,工作频率 315M,以及与 PT2262配套使用的 PT2272。 J05R 是一款超超高频无线数据传送超外差接收模块,具 青岛理工大学毕业论文 14 有灵敏度高、抗干扰能力强,与单片机直接接口容易实现的特点,使用中无需调整频点,特别适合多发一收的无线遥控系统。 与 F05P 配套使用可实现无线数据的稳定传输。 J05R 接收解调信号送 PT2272 解码。 PT2272 外观图如图331 所示。 PT2272 有 L4/M4/L6/M6 等 4 种不同功能的芯片,这里选用 M4即非锁存 4 路并行数据输出。 PT2272 接收有效信号时, VT( 17 脚)端由低电平转变为高电平经与非门倒相后触发中断, D0D3 将编码信息送入AT89S52 处理。 图 331 PT2272 外观图 图 332 无线接收电路原理图 输出控制模块 控制及输出电路由 AT89S52,共阴极 LED 数码管,蜂鸣器组成。 触发端受脉冲触发后立即输出信号,直接驱动蜂鸣器发出声音。 控制电路以 AT89S52青岛理工大学毕业论文 15 为核心,当有键按下时,通过外部中断 1 向单片机申请中断。 单片机响应中断后,判断出发射电路,并通过 P0、 P2 口输出显示抢答组号,从 输出低电平,使蜂鸣器发出有按键按下的提示音,同时封锁中断,屏蔽其它按 键响应,需手动复位后方可进行下一轮抢答。 输出控制图如图 341 所示。 图 341 输出控制图 青岛理工大学毕业论文 16 第 4 章 软件设计 抢答器流程图 流程图 是 使用图形表示算法的思路是一种极好的方法, 不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。 总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。 流程图是由一些图框和流程线组成的,其中图框表示各种操作 的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。 流程图的基本结构为 顺序结构,分支结构(又称选择结构),循环结构。 为便于识别,绘制流程图的习惯做法是: 方框表示:要执行的处理( Process) 平行四边型表示:代表资料输入( Input) 不规则图形代表资料输出( Output)或报表输出( Print) 菱形表示:决策或判断(例如: If...Then...Else) 同时,由于发射电路及接收电路采用了集成编码解码模块,软件设计只需考虑控制电路控制功能的实现。 主要涉及中断响应及输出控制两个部 分,软件设计较为简单。 显示程序采用动态显示方式。 上电后,单片机复位,显示输出“ 0 – 20”,同时开启外部中断,当按下开始键后,便等待抢答信号。 若抢答端口有信号送来,则调用中断程序。 中断程序首先关闭中断,这样屏蔽了对后来抢答信号的响应,然后查表判断抢答者对应的组号并转换为七段显示编码后经 P P2 输出显示,同时从 输出低电平,触发提示音电路工作。 由于在中断程序返回时并没有开放中断,需重新手动复位后才能进行下一轮抢答,这也方便主持人对现场的掌控。 程序流程图如图 411 所示。 青岛理工大学毕业论文 17 图 411 抢答器主程序流程图 图 412 抢答器定时器中断流程图 初 始化部分 抢答开始 启动定时器,数码管显示倒计时 若有选手抢答 计时停止,数码管显示选手的标号及所用的时间 结束 开 始 N Y Y N 定时器 0 中断 1 秒时间到。 中断返回 N 秒加 1 数码管显示秒值 Y 青岛理工大学毕业论文 18 图 413 外部中断程序图 主程序 我们组所设计的抢答器的程序采用的是 C 程序设计, C 语言的显著特点是 用二进制来编写程序 ,程序的各个部分除了必要的信息交流外彼此 之间相互独立。 这种结构化方式可使程序层次清晰 , 便于使用、维护 以及调试。 C 语言是以函数形式提供给用户的 ,这些函数可方便的调用 ,并具有多种循环、条件语句控制程序流向 ,从而使程序完全结构化。 虽然 C 语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。 本次设计的主程序中包括时钟设计程序,定时器中断子程序, LED 显示程序以及按键控制子程序,程序设计如下: include sbit k0=P1^0。 sbit k1=P1^1。 外部中断 0 中断 S1 键按下 S2 键按下 S4 键按下 S3 键按下 中断返回 与 S1 键对应的发光二极管亮及 数码管显示 与 S2 键对应的发光二极管亮及数码管显示 与 S3 键对应的发光二极管亮及数码管显示 与 S4 键对应的发光二极管亮及数码管显示 Y Y Y Y N N N N 青岛理工大学毕业论文 19 sbit k2=P1^2。 sbit k3=P1^3。 sbit d0=P1^4。 sbit d1=P1^5。 sbit d2=P1^6。 sbit d3=P1^7。 sbit B0=P3^7。 sbit l0=P2^0。 sbit l1=P2^2。 sbit l2=P2^3。 sbit l3=P2^4。 sbit kz=P3^0。 unsigned char qiangdanum=0x3f。 unsigned char code table[]={0x3f,0xxx,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 unsigned char ge=0,shi=0。 unsigned int num=0,time=0。 void display()。 /*显示函数 */ void delay(unsigned int)。 main() { TMOD=0X01。 /*采用方式一,即十六位计数器 */ TH0=(6553650000)/256。 /*设置初始值 */ TL0=(6553650000)%256。 IT0=0。 EA=1。 ET0=1。 /*开启总中断源 */ EX0=1。 /*启动外部中断 0*/ {while(1) {display()。 青岛理工大学毕业论文 20 if(kz==0) TR0=1。 /*开启定时器 0 中断 */ if(num==20) { num=0。 time++。 if(time==60) /*60 秒的计时 */ time=0。 } } } } void exter0() interrupt 0 /*外部中断程序 */ {EA=0。 l0=0。 if(k0==0) /*开关 0 按下 */ {d0=0。 qiangdanum=1。 B0=1。 }/* 1 号选手抢答成功,数码管显示 1,蜂鸣器响,第 1 个二极管亮 */ if(k1==0) /*开关 1 按下 */ {d1=0。 qiangdanum=2。 B0=1。 }/* 2 号选手抢答成功,数码管显示 2,蜂鸣器响,第 2 个二极管亮 */ if(k2==0) /*开关 2 按下 */ {d2=0。 qiangdanum=3。 B0=1。 }/* 3 号选手抢答成功,数码管显示 3,蜂鸣器响,第 3 个二极管亮 */ if(k3==0) /*开关 3 按下 */ {d3=0。 qiangdanum=4。 B0=1。 }/* 4 号选手抢答成功,数码管 显示 4,蜂鸣器响,第 4 个二极管亮 */ } void time0() interrupt 1 {num++。 青岛理工大学毕业论文 21 TH0=(6553650000)/256。 TL0=(6553650000)%256。 } /*1 秒定时函数 */ void delay(unsigned int z) {unsigned int x,y。 for(x=z。 x0。 x) for(y=110。 y0。 y)。 } /*延迟函数 */ void display(void) {shi=time/10。 ge=time%10。 P2=0xef。 P0=table[ge]。 delay(5)。 P2=0xf7。 P0=table[shi]。 delay(5)。 P2=0xFE。 P0=table[qiangdanum]。 delay(5)。 } /*显示函数:来显示 060 的计 数 */ 中断程序 什么是中断 中断是指由于某种随机事件的发生,计算机暂停现行的程序的运行,转去执行另一个程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。 有五种中断源:外部中断 0、外部中断 定时器中断 0、定时器中断 串行中断。 它们的描述如下图 431 所示: 青岛理工大学毕业论文 22 图 431 五种中断源 中断源符号 名称 终端引起的原因。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。