三路抢答器课程设计报告

三路抢答器课程设计报告
三路抢答器课程设计报告

单片机综合设计汇报

专业:电气工程及其自动化

年级:20XX 级

学号:20XX2213112

姓名:刘伟

成绩:

指导老师:陈勇

三路路抢答器

1.内容概述

抢答器是一个应用很广泛设备,在多种竞赛、抢答场所中,它能快速、客观地分辨出最先取得讲话权选手。现在大多数抢答器均使用单片机和数字集成电路。本设计利用C51单片机及外围接口实现多路抢答系统,利用单片机定时器/计数器定时和记数原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使液晶屏能够正确地显示计时时间。

现在电视节目日益丰富,其中竞赛步骤也越来越多,其中抢答器是不可或缺器材。它能正确、公正、直观地判定出第一抢答者。此次设计用STC12C5A60S2单片机作为关键控制元件,设计一个简易抢答器,并经过利用KeilC软件编辑程序,仿真验证。使系统能够完成多路抢答,且系统实用性强,判定正确,操作简单。2.设计方案及原理

此次设计抢答过程关键分为准备抢答,开始抢答,开始答题三个阶段。本方案以STC12C5A60S2单片机作为主控关键,和晶振、液晶屏等组成三路抢答器,利用了单片机电源电路、按键复位电路、时钟电路、定时电路等。具体系统设计方框图图1所表示。

图1 系统原理方框图

三抢答器由三个按键控制,程序一致判定是否有按键按下,若没有按键按下则循环判定,直到有按键按下后,立即把经过按键输入信号储存起来然后对3路输入信号进行扫描判定,发光二极管亮闪,液晶显示器显示抢答到人,表示抢答成功。软件设计利用中止系统基础组成原理编写中止服程序,其信号由按键电路提供,由CPU响应中止,并输出响应。用到了定时器模块、显示时间模块、计数器模块等。程序步骤图图2所表示。

图2系统步骤图

3.原理分析

在抢答中,只有要求开始后抢答才有效,假如在开始抢答前抢答为无效;液晶屏能够显示是哪位选手有效抢答,抢答时间和回复问题时间倒计时显示在液晶屏上。若选手回复完成,主持人按下准备按钮,液晶屏清零,能够进入下一提抢答。P3.0为主持人按键,提醒选手开始抢答,此时三极管D1闪亮。P3.1-P3.3为三路抢答输入,为选手抢答按键。P3.0为主持人提醒开始抢答倒计时按键,此时液晶屏倒计时。P1.1-P1.3为选手对应提醒灯按下即闪亮,反复按下无效。

4.程序设计:

#include

#define uint unsigned int

#define uchar unsigned char

uchar num,s1num,count,shijian;

sbit d1=P1^0;//zhuchi

sbit d2=P1^1;//xuanshou1

sbit d3=P1^2;

sbit d4=P1^3;

sbit d5=P1^4;

sbit k1=P3^3;//zhuchi

sbit k2=P3^2;//xuanshou1

sbit k3=P3^1;

sbit k4=P3^0;

uchar code table[]="ANSWER 2"; uchar code table3[]="ANSWER 1"; uchar code table4[]="ANSWER 3"; uchar code table1[]="PLEASE DA TI"; uchar code table2[]="JINGA";

sbit lcden=P2^0;

sbit lcdrs=P2^2;

sbit lcdrw=P2^1;

sbit beep=P2^6;

void delay(uint z)

{

uint x,y;

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

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

}

void di()

{

beep=0;

delay(100);

beep=1;

}

void write_com(uchar com)

{

lcdrs=0;

lcden=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_date(uchar date)

{

lcdrs=1;

lcden=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_sfm(uchar add,uchar date) {

uchar shi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+0x40+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

void init()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

lcden=0;

lcdrw=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<13;num++)

{

write_date(table1[num]);

delay(50);

}

write_sfm(0,shijian);

}

void keyscan()

{

相关主题
相关文档
最新文档