八路抢答器设计.docx

上传人:b****5 文档编号:7757713 上传时间:2023-01-26 格式:DOCX 页数:24 大小:561.57KB
下载 相关 举报
八路抢答器设计.docx_第1页
第1页 / 共24页
八路抢答器设计.docx_第2页
第2页 / 共24页
八路抢答器设计.docx_第3页
第3页 / 共24页
八路抢答器设计.docx_第4页
第4页 / 共24页
八路抢答器设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

八路抢答器设计.docx

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

八路抢答器设计.docx

八路抢答器设计

基于C51单片机的抢答器的设计

1引言2

1.80C51单片机基本工作原理3

2.51单片机外部引脚说明5

3.RST引脚7

451单片机定时/计数器基础7

2.八路抢答器的设计12

1设计要求12

2.2硬件电路图12

2.3编程和调试14

3.心得体会与总结25

3.1心得体会25

3.2从八路抢答器可以看80C51要如下特点:

26

4.参考文献26

 

基于C51单片机的抢答器的设计

学生姓名:

刘义冬指导老师:

周克辉

摘要本课程设计进行了C51单片机的抢答器的设计,首先介绍了抢答器的特点,其次详细分析了其原理,以8路抢答器为例,进行了抢答器电路的设计,最后在C51开发板平台上进行了软件实现,结果达到了抢答器的目标。

本次课程设计的系统开发平台为WindowsXP,课程设计软件采用的是KeiluVision2、AltiumDesigner6。

关键词仿傎;89C51;中断;定时

 

1引言

本次课程设计主要是解决在C51开发板平台上的抢答器的设计,加深对单片机应用的了解。

由于C51开发板平台已经为我们提供了基本的模块,所以不必设计单独模块的电路,但这要求我们要非常熟悉KeiluVision2环境。

随着生活水平的提高,大家为对智力游戏公平起见,以及在时间上争分夺秒,所以对设计的电路要求大大提高,使生活越来越充满了色彩。

1.80C51单片机基本工作原理

51单片机的内部结构框图如上图所示。

51单片机组成结构中包含运算器、控制器、片内存储器、4个I/O口、串行口、定时器/计数器、中断系统、振荡器等功能部件。

1)I/O端口

PORT0DRIVERS,PORT0LATCH端口0驱动器与锁存器

PORT1DRIVERS,PORT1LATCH端口1驱动器与锁存器

PORT2DRIVERS,PORT2LATCH端口2驱动器与锁存器

PORT3DRIVERS,PORT3LATCH端口3驱动器与锁存器

通过这些端口,数据可以输出到单片机外,也可以从单片机外输入到单片机。

2)存储器

RAM,RAMADDRREGISTER片内随机存储器与随机存储器的地址寄存器,51单片机具有128字节的片内RAM,用于保存变量、中间运算结果等,部分RAM具有位寻址能力。

FLASH片内ROM,用于保存代码等片内ROM采用FLASH存储器构成,具有ISP功能,容量随型号不同而不同,对于AT89S51单片机,ROM容量为4k。

STACKPOINTER栈指针,堆栈是保存工作现场数据、地址、指令等的寄存器,栈指针用于指向堆栈的栈顶。

3)算术与逻辑运算

BREGISTER用于乘除等操作的寄存器,常作为运算的第2操作数。

ACC累加器,大部分单操作数指令均以ACC作为其操作数,多数双操作数指令也以累加器作为第一个操作数,通常操作结果也保存在累加器中。

TMP1、TMP2暂存器,用于暂时保存数据

ALU8位算术逻辑单元ALU,用于处理各种算术运算和逻辑运算,在12MHz时钟时,多数指令的执行时间为1μs。

PSW程序状态字,用于记录与控制程序运行的的相关信息,可以位寻址。

4)指令处理

PROGRAMADDRESSREGISTER程序地址存储器

BUFFER总线缓冲器

PCINCREMENTER程序计数器加1处理

PROGRAMCOUNTER保存下一条指令的16位地址寄存器,可寻址范围为64k。

DUALDPTR双数据指针,DPTR为两个8位缓存器(DPH和DPL)组成的16位缓存器,主要功能是存储16位地址,作为存取ROM和RAM的地址指针用,读写RAM用MOVX指令,读写ROM用MOVC指令。

5)时序控制与指令寄存

TIMINGANDCONTROL定时与控制单元

INSTRUCTIONREGISTER指令寄存器

WATCHDOG看门狗

OSC时钟振荡器,与外接晶体一起组成时钟振荡器

6)ISP部分

ISPPORTISP端口,通过该端口与PC通信,实现ISP

PROGRAMLOGIC编程逻辑,控制ISP操作

 

2.51单片机外部引脚说明

1)主电源引脚

VCC(40脚):

接+5V电源正端。

VSS(20脚):

接+5V电源地端。

电源电压范围是4~5.5V,最高电源电压为6.6V。

任何引脚对地的电压范围是-1V~7V。

2)外接晶体引脚

石英晶体与内部的反相器组成Pierce振荡器,接线如图1-2所示。

1-1

XTAL1(19脚):

接外部石英晶体的一端,在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。

当采用外部时钟时,该引脚作为外部振荡信号的输入端。

XTAL2(18引脚)接外部石英晶体的另外一端。

在单片机内部,它是反相放大器的输出端。

 

 

 

1-2

3)输入/输出引脚

(1)P0口(P0.0~P0.7)引脚39~32:

具有漏极开路结构,作为输出端使用,需要外接上拉电阻(在作为I/O口使用时,T1管夹断);

若作为输入端使用,需要先将“1”写入端口(使T2管夹断);

P0口可作为地址总线(AB0-AB7),也可作为数据总线(DB0-DB7);

P0可驱动8个LSTTL,其它P口可以驱动4个LSTLL。

(1个LSTTL负载为0.4mA)。

如1-3

1-3

3.RST引脚

该引脚为单片机的上电复位引脚,高电平有效。

当单片机电源电压达到单片机工作电压、同时单片机振荡器正常工作后,该引脚上必须持续两个机器周期的高电平,就可实现复位操作,使单片机恢复到初始状态。

如1-4

 

 

 

1-4

451单片机定时/计数器基础

51单片机内有两个16位定时/计数器,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的/定时计数工作方式。

1.4.1定时器T0由计数器TL0(低8位)和TH0(高8位)构成,定时器T1由计数器TL1(低8位)和TH1(高8位)构成。

特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志。

为使定时/计数器满足程序需要,程序开始时需对TL0、TH0、TL1和TH1进行初始化编程,以确定它们的工作方式并控制T0和T1如何工作。

框图如1-8

 

 

1-8

1)定时/计数器的方式控制寄存器TMOD,字节地址为89H,其格式如下:

GATE位:

GATE=1时,INT0引脚控制计数器0的时钟端,INT1控制计数器1的时钟端,这时,外中断引脚的高电平将引起计数器计数,计数器所计数值乘以计数时钟周期就是外中断引脚高电平的时间。

GATE=0时,计数器时钟不受外部中断引脚控制。

C/T位:

C/T=0时,计数器时钟脉冲来自经过12分频的晶体振荡器,因此时钟周期与机器周期相同。

计数器的计数值乘以时钟周期就是时间,所以C/T=0时为定时工作模式。

C/T=1时,计数器时钟脉冲来自外引脚P3_4(T0)或是P3_5(T1),在外引脚的下降沿,计数器计数,允许计数频率为晶体频率的1/24。

所以C/T=1时为计数工作模式。

M1、M0位:

是4种工作方式选择位:

2)定时器控制寄存器TCON,字节地址为88H,位地址为88H—8FH,其格式如下:

TF1位:

T1计数器溢出标志位

TF1=1时,说明计数器发生溢出,向CPU申请中断,该位在响应中断后,自动清零。

TF1=0时,说明计数器未发生溢出。

TR1位:

T1计数器激活位,软件置“1”或清“0”

TR1=1时,使计数器计数

TR1=0时,禁止计数器计数

TF0位:

T0计数器溢出标志位

TF0=1时,说明计数器发生溢出,向CPU申请中断,该位在响应中断后,自动清零。

TF0=0时,说明计数器未发生溢出。

TR0位:

T0计数器激活位,软件置“1”或清“0”

TR0=1时,使计数器计数

TR0=0时,禁止计数器计数

3)TR1、GATE1和INT1三个变量之间的关系

如1-9所示的是计数器时钟端控制信号CONTROL的逻辑图,按照该逻辑图可以得到时钟端控制信号CONTROL的逻辑表达式为:

由该表达式可以知道,TR1=1同时GATE=0时,或是TR1=1同时INT1=1时,CONTROL=1,计数器的时钟端连接时钟信号或是外输入信号T1,可以计数。

1-9

1)工作方式1

定时/计数器1的工作方式1逻辑框图如图1-9所示(定时/计数器0与定时/计数器1的情况完全一致),这时定时/计数器1为13位计数器,由TH1的全部8位和TL1的低8位构成。

定时工作模式(C/T=0):

多路开关连接时钟脉冲的12分频输出,16位计数器进行计数。

计数工作模式(C/T=1)

多路开关接通外计数引脚(T1),当外计数脉冲发生负向跳变时,计数器加1。

当TL的低8位溢出时,都会向TH进位,而全部16位计数器溢出时,则会使计数器溢出标志位TF1=1。

如1-10。

1-10

若C/T=0同时TR1=1:

若是GATE=0,则计数器对单片机时钟计数,由于时钟周期为已知,则计数值乘以时钟周期就是定时时间,也就是GATE=0期间的时间。

若是GATE=1,则信号控制计数器,在INT1=1时计数器计数,因为时钟周期已知,所以计数器的数值乘以时钟周期就是定时时间,也就是INT1=1期间的时间。

若C/T=1同时TR1=1:

若是GATE=0,则计数器对外引脚T1输入的脉冲计数,计数值是GATE=0期间的外输入脉冲数。

若是GATE=1,则信号控制计数器,在INT1=1时计数器计数,计数值INT1=1期间的外输入脉冲数。

TF1是定时/计数器的溢出标志位,溢出时TF1=1,TF1溢出中断被CPU响应时,转入中断服务时由硬件清“0”,但也可由软件查询和清“0”。

当GATE=0时,定时器/计数器的启动或停止由TR1控制,只要用软件置TR1=1,定时/计数器就开始工作;置TR1=0,定时/计数器停止工作。

当GATE=1,同时TR1=1时,定时器/计数器的启动或停止还可以由INT1控制,中断输入引脚INT1控制定时器/计数器是否工作,当INT1=1时,开始定时,INT0=0时停止定时。

定时/计数器的时钟源由C/T选择,当C/T=0时,选择时钟源,C/T=1时选择外引脚P3.4。

2.八路抢答器的设计

1设计要求

功能如下所要求:

1抢答器同时供8名选手比赛,分别用8个按钮S1,S2,S3,S4,S5,S6,S7,S8表示。

2设置一个系统清除和抢答控制开关S9,S10,该开关由主持人控制。

3抢答器判断选手和显示功能。

即选手按动按钮,并在数码管上显示,同时扬声器发出报警声响提示,同时其它选在按下按钮无效,抢答选手的编号一直保存到主持人件系统清除为止。

4抢答器具有定时抢答功能,且一次抢答时间由主持人设定(如30秒)。

当主持人启动”开始”按键后,计时器进行减计时,同时当小于5s时峰鸣器发出短暂的声响,声响持续的时间0.5秒左右。

5参赛选手在设定(60s)的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答器的时间,并保持到主持人将系统清除为止;如果选手在设定的时间内没有回答正确本次抢答无效,同时当小于5s时峰鸣器发出短暂的声响,声响持续的时间0.5秒左右。

6如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时器显示00。

2.2硬件电路图

由设计要求可以道要有八个输入信号、一个启动信号和一个复位信号。

同时要显示还需要三位七段LED进行显示选手号码和时间,还有报警需要一个峰鸣器,因单片机的输出口驱动能力是有限的,所以要加4PNP开关三极管做驱动电路(单片机一上电所要I/O输出都是高电平如果用NPN管相应一些电路会动作),在设计时要注意P0要接上拉电阻。

要想单片机正常工作需要满足三个条件:

1)提供电源,本电路图的电源由USB电源直接提给;2)复位电路;3)石英晶振起振产生所需要的频率。

电路图如下。

2.3编程和调试

流程图

1)根据流程图和硬件电路可以编写程序和下:

#defineuintunsignedint

ucharcodetalbe[]={

0x3F,0x06,0x5B,0x4F,

0x66,0x6D,0x7D,0x07,

0x7F,0x6F,0x00,0x7C,

0x39,0x5E,0x79,0x71};

ucharaa,sum,shi,ge,ok,haoma;

sbitdula=P2^0;

sbitwela=P2^1;

sbitstart=P3^4;

sbits1=P1^0;

sbits2=P1^1;

sbits3=P1^2;

sbits4=P1^3;

sbits5=P1^4;

sbits6=P1^5;

sbits7=P1^6;

sbits8=P1^7;

sbittemp=P2^7;

sbitret=P3^5;

//延时程序

voiddelay(uintz)

{

uintx,y;

for(x=110;x>0;x--)

for(y=z;y>0;y--);

}

//初始化程序

voidinit()

{

TMOD=0x01;

TL0=(65536-50000)%256;

TH0=(65536-50000)/256;

EA=1;

ET0=1;

//TR0=1;

sum=30;

ok=1;

haoma=10;

}

//显示程序

voiddisp()

{

shi=sum/10;

ge=sum%10;

wela=1;

P0=0xfd;

wela=0;

P0=0xff;

dula=1;

P0=talbe[ge];

dula=0;

delay(3);

wela=1;

P0=0xfe;

wela=0;

P0=0xff;

dula=1;

P0=talbe[shi];

dula=0;

delay(3);

wela=1;

P0=0x7f;

wela=0;

P0=0xff;

dula=1;

P0=talbe[haoma];

dula=0;

delay(3);

}

//键盘扫描程序

voidkey()

{

if(start==0)

{

delay(10);

if(start==0)

{

TR0=1;

while(start==0);

templay();

ok=0;

}

}

if(ok==0)

{

if(s1==0)

{

templay();

haoma=1;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ok==0)

{

if(s2==0)

{

templay();

haoma=2;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ok==0)

{

if(s3==0)

{

templay();

haoma=1;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ok==0)

{

if(s4==0)

{

templay();

haoma=2;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ok==0)

{

if(s5==0)

{

templay();

haoma=1;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ok==0)

{

if(s6==0)

{

templay();

haoma=2;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ok==0)

{

if(s7==0)

{

templay();

haoma=1;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ok==0)

{

if(s8==0)

{

templay();

haoma=2;

TR0=0;

sum=60;

TR0=1;

ok=1;

}

}

if(ret==0)

{

templay();

TR0=0;

sum=0;

haoma=10;

}

}

//峰鸣器程序

voidtemplay()

{

temp=0;

delay(20);

temp=1;

}

//定时器/计数器0中断服务程序

voidtime0()interrupt1

{

TL0=(65536-50000)%256;

TH0=(65536-50000)/256;

aa++;

}

//主程序

voidmain()

{

init();

while

(1)

{

if(aa==20)

{

aa=0;

sum--;

}

if(sum==0)

{

sum=0;

TR0=0;

}

if(sum==5)

{

templay();

}

disp();

key();

}

}

2)调试与分析:

秒表程序时要满足下列条件:

(1)设定初值;

(2)开中断(总中断和定时器中断)

(3)开计数器;

(4)设定初值;

在设计定时器程序时,往往都是忘记开计数器和中断,走的程序总是走,还有时间不准确是由于初值没有设定正确所倒至。

倒计时程序是在秒表程序的改进,只要给设定倒计时时间,它就会自动每到一秒减一。

在倒时程序中最容易出错的就是减到0的时候忘记在设定倒计时时间。

当按下启动按钮时倒计开始显示,当时间到0秒时有要重新设定倒计时间。

在按电路中总是会出现按下去时灵时不灵的现象,这是由于机械开关在接通和松时都会产生抖动,影响按钮的误动,在设计要注意消抖。

按下启动按钮开始30秒倒计时,同时判断是否有选手按下,如果有60秒倒计时,判断选手是否在设定的时间内把问题回答正确。

在调试启动和选手按钮时,要注意把选手铵钮的判断有放到启动按钮的外面,否则会出按启动按钮可以30秒倒计时,但是所要选手按钮不起作用,这是因为你把选手按钮的判断放在启动按钮里面去判断了,所以我们在写程序时要注意放到外面来判断。

当选手回答问题完时,我们要对它进行复位,等待主持人下一按下启动按钮时才可以下一次的抢答。

3.心得体会与总结

3.1心得体会

从本次设计中可以看我对一些基础知识还是不够了解,在一个是对现在的一些新的技术了解很,对C语言编程还要一些提高,所以在今后的习学中应该加强。

3.2从八路抢答器可以看80C51要如下特点:

⑴有优异的性能价格比。

⑵集成度高,体积小,可靠性好。

⑶控制能力强。

⑷低功耗,低电压,便于生产便携式产品。

⑸易扩展。

 

4.参考文献

[1]王幸之,钟爱琴,王雷,王闪,AT89系列单片机原理与接口技术,北京:

北京航空航天大学出版社,2004

[2]求是科技,单片机典型模块设计实例导航,北京:

人民邮电出版社,2004

[3]李广弟,朱月秀,王秀山,单片机基础(修订版)。

北京:

北京航空航天大学出版社2001

[4]LeonardSB.ElementaryCinearCircuitAnalysis.London;Holt,RinnchartAndwinstons,1981

[5]Chua.LO,DesoerCA,KuhES.LinearandNonlinearCircuits,McGraw-Hill,1987.

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

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

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

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