无线抢答器.docx

上传人:b****6 文档编号:8371273 上传时间:2023-01-30 格式:DOCX 页数:28 大小:572.89KB
下载 相关 举报
无线抢答器.docx_第1页
第1页 / 共28页
无线抢答器.docx_第2页
第2页 / 共28页
无线抢答器.docx_第3页
第3页 / 共28页
无线抢答器.docx_第4页
第4页 / 共28页
无线抢答器.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

无线抢答器.docx

《无线抢答器.docx》由会员分享,可在线阅读,更多相关《无线抢答器.docx(28页珍藏版)》请在冰豆网上搜索。

无线抢答器.docx

无线抢答器

无线抢答器

 

1.

系统功能要求

(1)可任意设定回答时间、抢答时间(0-999秒),时间可正计、倒计切换;

(2)可显示组号,显示时间;

(3)抢中或违规可自动语音播报出组号;

(4)内置喇叭,声音可调节;

(5)抢答时限规定:

01~999秒可调,答题时限规定:

01~999秒可调;

(6)建议使用PT2262/PT2272制作。

2.系统整体结构

2.1主控台框图

图2.1主控台框图

2.1.1数码管显示

数码管显示采用的是74HC573锁存、ULN2803驱动显示模块,通过锁存器控制位选、段选均使用P0口,使系统简单化。

2.1.2语音模块

语音模块采用较为容易控制的SYN6288模块,采用串行通信方式。

2.1.3无线收发模块

无线接收模块采用315MHzDF无线收发模块配套PT2272解码部分,形成控制命令,对显示、语音模块加以控制。

无线发送模块采用的是315MHzDF无线收发配套PT2262编码,此部分不与单片机相连。

2.1.4键盘控制

键盘、拨码开关部分通过对I/O口控制,实现主控命令。

2.2抢答端框图

图2.2抢答端框图

2.2.1数码管显示

数码管显示部分采用的是74HC595实现I/O口模拟串口,ULN2803驱动显示模块,74595实现了I/O口的大节约化,仅用三个口驱动段选。

2.2.2无线收发模块

无线发送模块采用的是315MHZ无线收发配套PT2262编码部分,此部分不与单片机相连。

无线接收模块采用315MHZ无线收发模块配套PT2272解码部分,形成控制命令。

3.系统硬件电路设计

3.1系统总电路

图3.1.1主控端原理图

图3.1.2抢答端原理图

3.2无线收发模块

图3.2.1无线发射模块原理图

图3.2.2无线发射模块原理图

DF无线模块的工作频率是315MHZ,采用省标谐振器SAW进行稳频,受环境温度的影响非常小,声表谐振器的频率稳定度仅次于晶体。

DF无线接收模块实际上是一个超再生接收电路,这是一个非常成熟的电路。

3.3PT2262/PT2272解码/编码芯片

图3.3.1PT2262原理图

PT2262发出的编码信号是由:

地址码、数据码、同步码组成一个完整的码字,解码芯片接收到解码信号时,其地址码经过两次比较核对后,VT标志位才会输出高电平,相应的数据码也会变成高电平,当发射机没有按键按下的时候,PT2262不接通电源,PT2262不工作,当有按键摁下的时候,其17管脚输出经调制的串行数据信号。

PT2272采用的是PT2272-M4,表示数据输出为四位的暂存性红外遥控接收芯片,采用此型号的芯片主要是为了配套语音模块的只刷新一遍,否则采用L4型号语音模块将不断刷新播报,采用四位数据输出因为四位数据输出的编码足够各种功能的组合。

3.474HC573、74HC595

图3.474HC573原理图

74HC573是器件的输入是和标准CMOS兼容的,具有高噪声抵抗特性的8路锁存器,恰好够数码管的8路输出。

74HC595是硅结构的CMOS器件,兼容低电压TTL电路,由串行输入8位并行输出的移位寄存器和一个存储器构成,因为移位寄存器和存储器是不同的时钟。

因此当输出8位数据时,通过控制两个时钟,当连接数码管时中间的移位状态不会显示,只会显示移位后的状态。

这也是74595相较于74164的优点。

3.5驱动芯片ULN2803

图3.5ULN2803原理图

ULN2803属于高电压、大电流的达林顿晶体管阵列。

他的驱动负载电流是500mA,驱动电压为50V。

适合驱动大数码管。

4.系统软件设计

4.1系统软件开发环境

采用KEIL开发环境,对STC89C51进行控制,通过单片机开发板将程序下载到单片机中。

具体步骤如下:

1、启动KEILC51。

2、新建一个工程。

Project菜单——NewProject,选择好要保存好的文件后,键入qiangda保存,接着弹出CPU的类型,选择STC89C51。

3、在工程中加入文件,新建一个文件,文件菜单File——New,我们再选择文件菜单File——Saveas,弹出对话框后,我们文件名框中键入qiangda.c,这样C文件就建立好了。

再把文件加入到工程中去。

点击Target1前面的+号键,右键单击SourceGroup1——选择AddFiletoGroupSourceGroup1,选择添加Add。

4、Project设置:

在Project——optionsforTarget(target1)——output将createHEX选中,这样编译后如果程序没有问题就可以生成单片机可以识别的HEX文件。

5、将程序下载到单片机中,打开STC-ISP,选择单片机的型号,打开程序文件,选择正确的com口,下载程序,给开发板上电,当显示下载成功后,就可以实现实现相应的功能。

图4.152系统开发板

4.2系统主要功能的实现流程

 

图4.2系统流程

4.3系统主要功能实现源代码

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitzhengdao=P3^2;//正倒计

sbitqidong=P3^3;//启动

sbitpan=P3^4;//抢答时间还是回答时间

sbitbaiadd=P3^5;//百位的按键

sbitshiadd=P3^6;//十位的按键

sbitgeadd=P3^7;//个位的按键

sbitzanting=P1^5;//暂停

sbitpan2=P1^7;//清屏

#defineKEYP1//定义用来检测按键的端口

sbitK0=P1^1;

sbitK1=P1^2;

sbitK2=P1^3;

sbitK3=P1^4;//程序代码为四个抢答端

sbitDUAN=P2^6;//定义锁存使能端口段锁存

sbitWEI=P2^7;//位锁存

sbitTTS_BUSY=P1^0;//检测SYN6288模块工作状态

#defineHEAD_LEN5//数据包头的长度

#defineLEN_OFFSET2//长度字节的偏移量(本例中长度不超过255字节,因此只使用1字节长度)

#defineBKM_OFFSET4//背景音乐命令偏移

#defineBKM_MAX15//背景音乐数量

//数据包头(0xFD+2字节长度+1字节命令字+1字节命令参数)

ucharcodehead[HEAD_LEN]={0xfd,0x00,0x00,0x01,0x00};

ucharnBkm=0x00;//背景音乐编号

staticucharbai2=0;shi2=0;ge2=0;//初始化

staticucharbai1=0;shi1=0;ge1=0;//初始化

uchacodeTAB[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

staticunsignedintsecond;

intm;

unsignedchartext[]={"[soundu]选手抢答犯规,组号"};

unsignedchartext1[]={"[soundu]选手抢答成功,组号"};

unsignedchartext2[]={"[soundu]选手抢答犯规,组号"};

#defineTEXT_LEN28//正文长度

#defineNUM_POS25

#defineNUM_MIN1

#defineNUM_MAX8

uintnNum=NUM_MIN;

staticucharcounter=0;second_1=0;second_0=0;second_2=0;

voiddelay(unsignedcharm);

voiddelayms(unsignedinti);

voiddisplay();

voidUART_InitBaud(void);

voidDelay1(uintn);

voidBkMusic(ucharnum);

voidSpeech(uchar*buf);

voidscankey2(void);

voidTimer0(void)interrupt1

{

ET0=0;

TH0=0X3C;

TL0=0XB0;

counter++;

if(counter==20)

{

counter=0;

if(zhengdao==1)

second++;

elsesecond--;

if(second==0||second==999)

{TR0=0;}

second_1=(second%100)/10;//shi

second_0=(second%100)%10;//ge

second_2=second/100;

}

ET0=1;

}

voiddelay(unsignedcharm)

{while(m--)

{

unsignedchari;

for(i=120;i>0;i--)

{}

}

}

voiddelayms(unsignedinti)

{

unsignedchara,b;

for(a=0;a

for(b=0;b<120;b++);

}

voiddisplay1(void)

{

P0=0Xfe;

WEI=1;//位锁存

WEI=0;

P0=TAB[bai1];

DUAN=1;//段锁存

DUAN=0;

delayms

(2);

P0=0Xfd;

WEI=1;//位锁存

WEI=0;

P0=TAB[shi1];

DUAN=1;//段锁存

DUAN=0;

delayms

(2);

P0=0Xfb;

WEI=1;//位锁存

WEI=0;

P0=TAB[ge1];

DUAN=1;//段锁存

DUAN=0;

delayms

(2);

P0=0Xf7;

WEI=1;//位锁存

WEI=0;

P0=TAB[bai2];

DUAN=1;//段锁存

DUAN=0;

delayms

(2);

P0=0Xef;

WEI=1;//位锁存

WEI=0;

P0=TAB[shi2];

DUAN=1;//段锁存

DUAN=0;

delayms

(2);

P0=0Xdf;

WEI=1;//位锁存

WEI=0;

P0=TAB[ge2];

DUAN=1;//段锁存

DUAN=0;

delayms

(2);

}

voidscankey1(void)

{

if(pan==1)

{

if(baiadd==0)

{

delayms(10);

if(baiadd==0)

{while(baiadd==0);

(bai1)++;

if((bai1)==9)

{(bai1)=0;}

}

}

if(shiadd==0)

{

delayms(10);

if(shiadd==0)

{while(shiadd==0);

(shi1)++;

if((shi1)==9)

{(shi1)=0;}

}

}

if(geadd==0)

{

delayms(10);

if(geadd==0)

{while(geadd==0);

(ge1)++;

if((ge1)==9)

{(ge1)=0;}

}

}

}

else

{

if(baiadd==0)

{

delayms(10);

if(baiadd==0)

{while(baiadd==0);

(bai2)++;

if((bai2)==9)

{(bai2)=0;}

}

}

if(shiadd==0)

{

delayms(10);

if(shiadd==0)

{while(shiadd==0);

(shi2)++;

if((shi2)==9)

{(shi2)=0;}

}

}

if(geadd==0)

{

delayms(10);

if(geadd==0)

{while(geadd==0);

(ge2)++;

if((ge2)==9)

{(ge2)=0;}

}

}

}

}

voiddisplay()

{

P0=0Xfe;

WEI=1;//位锁存

WEI=0;

P0=TAB[second_2];

DUAN=1;//段锁存

DUAN=0;

delay(3);

P0=0Xfd;

WEI=1;//位锁存

WEI=0;

P0=TAB[second_1];

DUAN=1;//段锁存

DUAN=0;

delay(3);

P0=0Xfb;

WEI=1;//位锁存

WEI=0;

P0=TAB[second_0];

DUAN=1;//段锁存

DUAN=0;

delay(3);

}

voidDelay1(uintn)

{

uchari=112;

while(n--)

while(i--);

}

//串口初始化

voidUART_InitBaud(void)

{

SCON=0xD8;//晶振为11.059MHZ时,设定串口波特率为9600bit/s,方式3

PCON=0x00;

TH1=0xFD;

TR1=1;

}

//串口发送数据

voidSendChar(ucharn)

{

SBUF=n;

while(TI==0);//发送数据

TI=0;

}

//背景音乐(参数为0表示关闭背景音乐)

voidBkMusic(ucharnum)

{

num%=BKM_MAX+1;

nBkm=num;

}

//发声程序

voidSpeech(uchar*buf)

{

uchari=0;//循环计数变量

ucharxor=0x00;//校验码初始化

ucharch=0x00;

ucharlen=0x00;

while(buf[len++]);//当数组buf的第len个值的内容不为0时执行下列程序

//发送数据包头(0xFD+2字节长度+1字节命令字+1字节命令参数)

for(i=0;i

{

if(i==BKM_OFFSET)

ch=nBkm<<3;//写入背景音乐

elseif(i==LEN_OFFSET)

ch=len+3;

else

ch=head[i];

xor^=ch;

SendChar(ch);

Delay1

(1);

}

//发送文字内容

for(i=0;i

{

xor^=buf[i];

SendChar(buf[i]);

Delay1

(1);

}

SendChar(xor);//发送校验位

Delay1(10);

while(TTS_BUSY);//等待语音结束

Delay1(10);

}

//键扫描

voidscankey2(void)

{

uchark;

KEY=0xff;//置位键端口以读取键值

if(KEY!

=0xff)//如果有键按下

{

k=KEY;//取键值

Delay1

(1);//消抖

if(K0==1)

nNum=1;

elseif(K1==1)

nNum=2;

elseif(K2==1)

nNum=3;

elseif(K3==1)

nNum=4;

elsereturn;

sprintf(text+NUM_POS,"%1d",nNum);//修改选手号码

Speech(text);//合成语音

Delay1(1000);//抢答间隔

return;

}

}

voidmain()

{

TMOD=0X21;

TH0=0X3C;

TL0=0XB0;

ET0=1;EA=1;

UART_InitBaud();//初始化串口为9600bps

Delay1(200);

BkMusic(4);//背景音乐4

Delay1(200);

Speech("[t5]欢迎大家参加竞赛,请[3]选手们做好准备");//欢迎词

BkMusic(0);//关闭背景音乐

Delay1(1000)

while

(1)

{

if(qidong==1)

{

if(zanting==0)

{

TR0=1;

for(m=0;m<28;m++)

{text[m]=text1[m];}

scankey2();

display();

if(K0==1&&K1==0&&K2==0)

{

P0=0Xf7;

WEI=1;

WEI=0;

P0=0X06;

DUAN=1;

DUAN=0;

delayms(4);

}

elseif(K0==0&&K1==1&&K2==0)

{

P0=0Xf7;

WEI=1;

WEI=0;

P0=0X5B;

DUAN=1;

DUAN=0;

delayms(4);

}

elseif(K0==0&&K1==0&&K2==1)

{

P0=0Xf7;

WEI=1;

WEI=0;

P0=0X4F;

DUAN=1;

DUAN=0;

delayms(4);

}

}

elseif(zanting==1)

{

TR0=0;

second=100*(bai2)+10*(shi2)+(ge2);

}

}

elseif(qidong==0)

{

for(m=0;m<28;m++)

{text[m]=text2[m];}

scankey2();

second=100*(bai1)+10*(shi1)+(ge1);

TR0=0;

if(pan2==1)

{

scankey1();

display1();

}

else

{

P0=0Xff;

WEI=1;

WEI=0;

P0=0X00;

DUAN=1;

DUAN=0;

if(K0==1&&K1==0&&K2==0)

{

P0=0Xf7;

WEI=1;

WEI=0;

P0=0X06;

DUAN=1;

DUAN=0;

delayms(4);

}

elseif(K0==0&&K1==1&&K2==0)

{

P0=0Xf7;

WEI=1;

WEI=0;

P0=0X5B;

DUAN=1;

DUAN=0;

delayms(4);

}

elseif(K0==0&&K1==0&&K2==1)

{

P0=0Xf7;

WEI=1;

WEI=0;

P0=0X4F;

DUAN=1;

DUAN=0;

delayms(4);

}

}

}

}

}

5.系统测试

5.1无线模块的测试

图5.1地址码和数据码的脉冲表示

其中,Ta=8个时钟宽度,Tb=1个时钟宽度,Tc=2个字码长度。

地址码和数据码都用宽度不同的脉冲来表示,两个窄脉冲表示“0”;两个宽脉冲表示“1”;一个窄脉冲和一个宽脉冲表示“F”也就是地址码的“悬空”。

图5.2pt2272的不同后缀功能

后缀的6和4表示有几路并行的控制通道,当采用4路并行数据时(PT2272-M4),对应的地址编码应该是8位,如果采用6路的并行数据时(PT2272-M6),对应的地址编码应该是6位。

图PT22622272编码信号波形

5.2显示数码管调试

经过一系列的调试,八英寸数码管已经可以完全实现可任意设定回答时间、抢答时间(0-999秒),时间可正计、倒计切换、清屏、显示抢答组号及分数的功能。

图5.2.1设定抢答时间、回答时间

图5.2.2抢答时间的正计/倒计

图5.2.3回答时间的正计/倒计

图5.2.4抢答组号显示

图5.2.5分数的加、减、清零及保持

6.课程建议

此门课程开的非常有意义,在以前觉得学接口什么的没有什么用处,觉得自己学的只是书本上的比较死的知识,但是通过这次实验,能够意识到一门课程只要学过了就一定能够用的上,这也是一个学习新的知识的过程,比如加深了我对高频知识的理解。

也让我理解了一个产品,他的系统的形成是一个不断优化的过程,要敢于突破,敢于创新。

通过电子实验,我们掌握应用基本理论和设计软件,设计电子电路的能力。

掌握电子电路的测试方法,熟练应用电子工程领域相关仪器、仪表和设备对电路的技术指标进行测试。

我们通过自主设计电路和软件来完成,解决一些实际问题。

而且开放性创新实验,给了我们一个完全自由发挥的平台。

在这里,我们利用所有资源实现自己的创意,提高了主动学习的积极性。

但是我觉得最好不要和学长学姐合作,容易产生依赖的心理。

并且产品的系统最好不是一方面的东西,不能直视软件方面的开发,或者只是模电知识。

7.参考文献

【1】康华光,邹寿彬.电子技术基础(数字部分)(第五版).高等教育出版社.2005

【2】康华光,邹寿彬.电子技术基础(模拟部分)(第五版).高等教育出版社.2005

【3】李朝青.单片机原理及接口技术[M].北京:

北京航空航天大学出版社.2005

【4】朱勇.单片机原理与应用技术.清华大学出版社.2006

【5】张毅刚,彭喜元等.新编MCS-51单片机应用设计(第二版).哈尔滨工业大学出版社.2006

【6】潭博学,苗江静.集成电路原理及应用.北京:

电子工业出版社.2003

【7】高峰.单片微机应用系统设计及实用技术[M].北京:

机械工业出版社.2004

【8】楼然苗,李光飞.51系列单片机设计实例.北京航空航天大学出版社.2006

【9】何书森,何华斌.实用电子线路设计速成[M].福州:

福建科学技术出版社,2006

【10】陈欢庆.电子制作理论与实践[M].浙江大学出版社.2005

【11】马淑华、王凤文、张美金.单片机原理及接口技术.北京邮电大学出版社.2005.10

【12】杨金岩,郑应强,张振仁.8051单片机数据传输接口扩展技术与应用实例.人民邮电出版社.2005

【13】王文杰 基于逻辑数字电路的抢答器设计-毕业论文(20

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

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1