八路抢答器概要.docx

上传人:b****5 文档编号:29044622 上传时间:2023-07-20 格式:DOCX 页数:18 大小:272.44KB
下载 相关 举报
八路抢答器概要.docx_第1页
第1页 / 共18页
八路抢答器概要.docx_第2页
第2页 / 共18页
八路抢答器概要.docx_第3页
第3页 / 共18页
八路抢答器概要.docx_第4页
第4页 / 共18页
八路抢答器概要.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

八路抢答器概要.docx

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

八路抢答器概要.docx

八路抢答器概要

微处理器原理与接口课程设计

设计题目:

八路抢答器

学院:

电子工程学院

年级:

专业:

姓名:

学号:

指导教师:

 

年月日

 

目录

课程设计项目八路抢答器的设计2

1设计内容及意义2

1.1设计内容概述2

1.2设计意义概述2

2整体设计原理及方案2

2.1整体设计原理2

2.2单片机方案选择3

2.3编程环境方案选择4

2.4键盘数码管控制方案选择6

3硬件电路图9

3.1总体硬件框图9

3.2硬件电路图9

4程序设计流程图10

4.1程序设计概述10

4.2程序流程图11

5实验结果及数据12

5.1结论12

问题及心得12

附录13

课程设计项目八路抢答器

1设计内容及意义

1.1设计内容概述

本项目利用按键及LED数码管实现由1名主持人和8个参赛队组成的8路抢答器系统。

具体功能:

当主持人按下抢答按键,参赛队在10秒钟内可以抢答。

如超过10秒则不能抢答。

如抢答成功,则显示抢答的队号。

如抢答成功必需在60秒内回答完成。

如超过时间则抢答无效,且显示无效指示。

如在60秒内回答完成(抢答队再次按下抢答按键表示回答完成)则抢答正确成功,且显示有效。

当主持人按下复位按键时,系统回到初始状态。

1.2设计意义概述

当今的社会竞争日益激烈,选拔人才,评选优胜,知识竞赛类的活动愈加频繁,在竞赛中往往分为几组参加。

为了准确、公正、直观的判断出第一抢答者,这就要有一种抢答设备作为裁判员,抢答器就是首选。

抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观的分辨出最先获得发言权的选手。

随着科技的发展,现在的抢答器有着数字化、智能化的方向发展,大多数抢答器均使用单片机或数字集成电路,并增加了许多新功能,如选手号码显示、抢按前或按后的计时、选手得分显示等功能。

2整体设计原理及方案

2.1整体设计原理

通过8051单片机对8279数码管键盘芯片进行控制和读取数据,接收8279的数据口地址以读取键盘键值,9键作为开始键,当9键按下时,则显示十秒倒计时进行抢答计时,当1-8键无人按下则代表无人抢答;当1-8键中有一键按下则代表选手抢答,显示选手号,延时两秒后,进入六十秒倒计时,利用外部中断回到初始状态,当60秒内没有利用外部中断,则代表抢答失效;当60秒内利用外部中断,则代表抢答成功。

2.2单片机方案选择

8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔公司于1981年制造。

INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,如Atmel、飞利浦、深联华等公司,相继开发了功能更多、更强大的兼容产品。

8051单芯片是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号,用以来产生各种动作周期及同步信号。

在8051单片机中已内建时钟产生器,在使用时只需接上石英晶体谐振器(或其它振荡子)及电容,就可以让系统产生正确的时钟信号。

8051单元

1)、微处理器:

i80c31,它的P1口、P3口皆对用户开放,供用户使用。

2)、时钟频率:

6.0MHz

3)、存储器:

程序存储器与数据存储器统一编址,最多可达64k,板载ROM(监控程序27C256)12k;RAM1(程序存储器6264)8k供用户下载实验程序,可扩展达32k;RAM2(数据存储器6264)8k供用户程序使用,可扩展达32k。

(RAM程序存储器与数据存储器不可同时扩至32k,具体与厂家联系)。

(见图1-1:

存储器组织图)。

在程序存储器中,0000H----2FFFH为监控程序存储器区,用户不可用,4000H----5FFFH为用户实验程序存储区,供用户下载实验程序。

数据存储器的范围为:

6000H----7FFFH,供用户实验程序使用。

注意:

因用户实验程序区位于4000H-----5FFFH,用户在编写实验程序时要注意,程序的起始地址应为4000H,所用的中断入口地址均应在原地址的基础上,加上4000H。

例如:

外部中断0的原中断入口为0003H,用户实验程序的外部中断0的中断程序入口为4003H,其他类推,见表1-1。

4)、可提供的对8051的基本实验

为了提高微机教学实验质量,提高实验效率,减轻主讲教师和实验教师的劳动强度,在该系统的实验板上,除微处理器外、程序存储器、数据存储器外,还增加了8255并行接口、8250串行控制器、8279键盘、显示控制器、8253可编程定时器、A/D、D/A转换、单脉冲、各种频率的脉冲发生器、输入、输出电路等模块,各部分电路既相互独立、又可灵活组合,能满足各类学校,不同层次微机实验与培训要求。

可提供的实验如下:

(1)、8051P1口输入、输出实验

(2)、简单的扩展输入、输出实验

(3)、8051定时器/计数器实验

(4)、8051外中断实验

(5)、8279键盘扫描、LED显示实验

(6)、8255并行口输入、输出实验

(7)、8253定时器/计数器实验

(8)、8259中断实验

(9)、串行口通讯实验

(10)、ADC0809A/D转换实验

(11)、DAC0832D/A转换实验

(12)、存储器扩展实验

(13)、交通灯控制实验

(14)、串行EEPROM读写实验

(15)、硬件看门狗电路实验

2.3编程环境方案选择

KeilC集成工具简介:

KeilC的编译器和链接器包括C51、A51、L51和BL51。

C51是C语言编译器,其功能是将C源代码编译生成可重新定位的目标模块;A51是汇编语言编译器,其功能是将汇编源代码编译生成可重新定位的目标模块;L51是链接/定位器,其功能是将汇编源代码和C源代码生成的可重定位的目标模块文件(.OBJ),与库文件链接、定位生成绝对目标文件;BL51也是链接/定位器,除了具有L51所有的功能之外,可以链接定位大于64KB的程序,还可用于RTX51实时多任务操作系统,而且具有代码域及域切换功能。

KeilC的LIB51库管理器可以把由汇编器、编译器创建的目标文件构建成目标库(.LIB),这些库是按规定格式排列的目标模块,可在以后被链接器所使用[]。

3.2.2KeilC的应用

在KeilC中,文件的管理采用的是项目(也叫工程)方式,而不是以前的单一文件方式。

工程管理器的功能:

对C51源程序、汇编源程序、头文件等文件统一管理;可以对文件进行分组。

如图3-2所示。

工程管理窗口内容及分布,与Windows的资源管理器相似。

图3-2KeilC51的工程管理器

1.项目的建立

(1)建立项目

选择Project菜单下的NewProject命令,创建新工程,在对话框中设定新工程的位置,输入新工程名字保存即可。

(2)选择CPU

在出现的为新工程选择CPU的界面,在“database”栏下选择所使用的CPU。

确定后,会弹出一“CopyStandard8051StartupCodetoProjectFolderandAddFiletoProject”信息,一般选择“是”即可。

2.给项目加入程序文件

加入的文件可以是C文件,也可以是汇编文件。

加入程序文件的过程如下。

(1)在项目管理器窗口中展开Target1文件夹,可以看到SourceGroup1。

(2)向SourceGroup1添加文件。

在SourceGroup1点击鼠标右键,会弹出一菜单,其中有一“AddFilestoGroup‘SourceGroup1’”命令,点击后会弹出一对话框,选择需要加入的程序文件,并且一次可以加入多个文件。

(3)移走项目:

在欲移走的文件上点击鼠标右键,会弹出一菜单,执行其中的“RemoveFile‘***’”命令即可。

(4)对文件分组:

可以按功能对项目管理器中的文件分成组,如图3-2所示。

先使用图3-3中的“ManageComponents”命令建立组,然后用鼠标直接在组之间移动文件即可。

图3-3项目添加文件和组件命令

3.项目的编译链接

设置输出.hex文件:

在Target1上点击鼠标右键,出现类似图4-9所示的菜单,点击执行“OptionsforTarget‘Target1’”命令,在弹出的会话界面选择“Output”标签,选中“CreateHEXFile”项即可。

编译链接方法:

使用Project菜单下的Buildtarget命令或RebuildalltargetFiles命令,或者直接点击工具栏中对应的按钮。

编译链接结果:

若有错误则不能通过,并且会在信息窗口给出相应的错误信息。

编译链接通过后,会产生xxx.hex目标文件。

2.4键盘数码管控制方案选择

8279是可编程的键盘、显示接口芯片.它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。

8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。

该芯片能自动消抖并具有双键锁定保护功能。

显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。

(1)可同时进行键盘扫描及文字显示;

(2)键盘扫描模式(ScannedKeyboardMode);

(3)传感器扫描模式(ScannedSensorMode);

(4)激发输入模式(StrobeInputEntryMode);

(5)8乘8键盘FIFO(先进先出);

(6)具有接点消除抖动,2键锁定及N键依此读出模式;

(7)双排8位数或双排16位数的显示器;

(8)右边进入或左边进入。

16位字节显示存储器。

8279引脚说明

编辑

<1>DB0~DB7:

双向数据总线。

在CPU与8279间做数据与命令传送。

<2>CLK:

8279的系统时钟,100KHz为最佳选择。

<3>RESET:

复位输入线。

输入HI时可复位8279。

<4>CS:

芯片选择信号线。

当这个输入引脚为低电平时,可将命令写入8279或读取8279的数据。

<5>A0:

缓冲器地址选择线。

A0=0时,读写一般数据;A0=1时,读取状态标志位或写入命令。

<6>RD:

读取控制线。

RD=0时,8279输送数据到外部总线。

<7>WR:

写入控制线。

WR=0时,8279从外部总线接收数据。

<8>IRQ:

中断请求。

平常IRQ为LO,在键盘模式下,每次读取FIFO/SENSORRAM的数据时,IRQ变为HI,读取后转为LO;在传感器模式下,只要传感器一有变化,就会使IRQ变为HI,读取后转为LO。

<9>SL0~SL3:

扫描按键开关或传感器矩阵及显示器,可以是编码模式(16对1)或解码模式(4对1)。

<10>RL0~RL7:

键盘/传感器的返回线。

无按键被按时,返回线为HI;有按键被按时,该按键的返回线为LO。

在激发输入模式时,为8位的数据输入。

<11>SHIFT:

在键盘扫描模式时,引脚的输入状态会与其它按键的状态一同储存(在BIT6),内部有上拉电阻,未按时为HI,按时为LO。

<12>CNTL/STB:

在键盘扫描模式时,引脚的输入状态会与SHIFT以及其它按键的状态同一储存,内部有上拉电阻,未按时为HI,按时为LO。

在激发输入模式时,作为返回线8位数据的使能引脚。

<13>OUTA0~OUTA3:

动态扫描显示的输出口(高4位)。

<14>OUTB0~OUTB3:

动态扫描显示的输出口(低4位)。

<15>BD:

消隐输出线。

8279有三种工作方式:

键盘方式、显示方式和传感器方式。

(1)键盘方式

8279在键盘工作方式时,可设置为双键互锁方式和N键循回方式。

双键互锁方式:

若有两个或多个键同时按下时,

不管按键先后顺序如何,只能识别最后一个被释放的键,并把该键值送入FIFORAM中。

N键循回方式:

一次按下任意个键均可被识别,按键值按扫描次序被送入FIFORAM中。

(2)显示方式

8279的显示方式又可分为左端入口和右端入口方式。

显示数据只要写入显示RAM,则可由显示器显示出来,因此显示数据写入显示RAM的顺序,决定了显示的次序。

左端入口方式即显示位置从显示器最左端1位(最高位)开始,以后显示的字符逐个向右顺序排列;右端入口方式即显示位置从显示器最右端1位(最低位)开始,已显示的字符逐个向左移位。

但无论左右入口,后输入的总是显示在最右边。

(3)传感器方式

传感器方式是把传感器的开关状态送入传感器RAM中。

当CPU对传感器阵列扫描时,一旦发现传感器状态发生变化就发出中断请求(IRQ置1),中断响应后转入中断处理程序。

3硬件电路图

3.1总体硬件框图

3.2硬件电路图

8279硬件电路图如图所示:

4程序设计流程图

4.1程序设计概述

首先将8279初始化,允许外部中断0,然后判断键值是否为9,如果键值为9视为开始键,进入十秒倒计时,如果期间没有选手抢答,第一个红灯亮;如果期间有选手抢答,则显示选手号,显示两秒后,进入选手答题阶段,六十秒倒计时开始,倒计时完成后,会到初始状态,若期间不能完成答题,则第一个红灯亮,代表答题无效;若期间完成答题,则由外部中断给出信号,回到初始状态,并且第一个和第二个灯同时亮,代表答题成功。

4.2程序流程图

5实验结果及数据

首先数码管在初状态显示0,再按下开始键9键之后,开始10秒倒计时,十秒之内选手进行抢答,抢答失败则亮灯,抢答成功则显示选手号,进入六十秒倒计时,选手进行回答问题,如果回答正确,则按外部中断回到初状态,两灯均亮表示答题成功,如果六十秒结束没有回答完成,则回到初状态,红灯亮,答题无效。

5.1结论

此次设计完成了基本要求中的当主持人按下抢答按键,参赛队在10秒钟内可以抢答。

如超过10秒则不能抢答。

如抢答成功,则显示抢答的队号。

如抢答成功必需在60秒内回答完成。

当主持人按下复位按键时,系统回到初始状态。

 

问题及心得

此次设计,我研究与设计的课题为八路多功能抢答器,通过查资料和搜集有关的文献,培养了我的自学能力和动手能力。

由原先的被动的接受知识转换为主动的寻求知识,是我学习方法上的一个很大的突破。

在以往的传统的学习模式下,我可能会记住很多的书本知识,但是通过这次实验,我学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。

把握重点、攻克难关。

在设计过程中由于时间仓促有很多的地方存在一些不足之处,自己的实践经验还是比较缺乏,理论联系实际的能力还需要提高。

这次实验对于提高我们的素质和科学实验能力非常有益,为以后从事电子电路方面的设计,研制电子产品打下基础。

在此,我要感谢我的老师的指导和同学们的帮助,在老师的启发和指导下,我才能顺利完成这次的设计。

 

附录

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitP1_0=P1^0;

uintCON8279=0xCfE9;//8279控制口地址

uintDATA8279=0xCFE8;//8279数据口地址

ucharLED[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码表0~9

Ucharcode

keyval[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x10,0x11,0x12,0x13,0x18,0x19,0x1a,0x1b};

Ucharcode

SEG[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

chari;

intk,r=0;

inta;

voidinit_8279()

{

XBYTE[CON8279]=0x00;//设置8279工作方式

XBYTE[CON8279]=0xD1;//清除8279

while(XBYTE[CON8279]&0x80);//等待清除结束

XBYTE[DATA8279]=0x34;//设置8279分频系数

}

ucharReadKey()

{

if(XBYTE[0xCFE9]&0x07){

XBYTE[0xCFE9]=0x40;

i=XBYTE[0xCFE8];

}

return0;

}

voidDisplay(uchary)

{

XBYTE[0xCFE9]=0x80;

XBYTE[0xCFE8]=SEG[y];

}

voiddelay()

{

for(k=0;k<8000;k++)

{};

}

voiddelay1(uinttem)

{

uintii,jj;

for(ii=0;ii

{

for(jj=0;jj<100;jj++);

}

}

voidDisplay60()

{

XBYTE[CON8279]=0x90;

XBYTE[DATA8279]=LED[1];

XBYTE[DATA8279]=LED[0];

init_8279();

XBYTE[CON8279]=0x90;

XBYTE[DATA8279]=LED[6];

XBYTE[DATA8279]=LED[0];

delay1(1000);

XBYTE[CON8279]=0x90;

for(k=5;k>=0;k--){

for(i=9;i>=0;i--){

XBYTE[CON8279]=0x90;

XBYTE[DATA8279]=LED[k];

XBYTE[DATA8279]=LED[i];

if(r==1)break;

delay1(900);

}if(r==1)break;

}

}

 

intDisplay10()

{

a=0;

XBYTE[CON8279]=0x90;

XBYTE[DATA8279]=LED[1];

XBYTE[DATA8279]=LED[0];

init_8279();

XBYTE[CON8279]=0x90;

XBYTE[DATA8279]=LED[0];

for(i=9;i>=0;i--){

XBYTE[CON8279]=0x90;

XBYTE[DATA8279]=LED[i];

if(XBYTE[0xCFE9]&0x07)

break;

delay1(900);

}if(i<=1)

a=1;

returna;

}

 

voidjianpan(){

Display(0);

}

voidmain(){

EX0=1;

IT0=1;

EA=1;

loop:

init_8279();

while

(1){

 

jianpan();

while(XBYTE[0xCFE9]&0x07)

{

jianpan();

ReadKey();

i=i-191;

while(i==9)

{P1=0xff;

Display10();

if(a==1){jianpan();P1=0xfe;a=0;gotoloop;}else

break;}

ReadKey();

i=i-191;

Display(i);

delay1(2000);

Display60();

if(r==0){jianpan();P1=0xfe;r=0;gotoloop;}else

r=0;

P1=0x00;

delay1(3000);

gotoloop;

}

}

}

 

intinterruptEx0()interrupt0

{

r=1;

}

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

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

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

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