单片机课程设计报告

单片机课程设计报告
单片机课程设计报告

《单片机原理与应用》课程设计报告

课程设计:多电路数字抢答器

专业:计算机科学与技术

班级:13计科2班

学号:13070050

姓名:朱昕

成绩:

天津理工大学中环信息学院

电工电子教学训练中心

2016年 6 月31 日

目录

一、课程设计目的 (4)

二、设计任务 (4)

三、设计要求 (4)

四、实验内容与要求 (5)

4.1设计内容 (5)

4.1设计要求 (5)

4.2.1基本功能 (5)

4.2.2扩展功能 (5)

5.1第一种方案 (7)

5.2第二种方案 (7)

5.3第三种方案 (8)

六、硬件电路设计 (9)

6.1.时钟电路设计 (9)

6.2八路抢答按键输入电路设计 (10)

6.3复位按键输入电路设计 (10)

6.4设定时间、加减时间和开始电路设计 (11)

6.5 LED数码管显示电路设计 (12)

6.6声音电路 (12)

七、程序设计 (13)

7.1时间调整程序设计 (13)

7.2选手抢答程序设计 (15)

7.3定时中断服务程序的设计 (19)

八、软件设计 (21)

8.1软件设计思想 (21)

8.2软件逻辑结构图 (22)

九、硬件电路设计 (22)

参考文献 (23)

附件 (24)

电路总设计图 (24)

程序完整代码 (24)

一、课程设计目的

1.掌握Keil uVision2软件的使用

2.学会Keil C51应用程序编写方法

3.掌握单步执行程序,查看专用寄存器和单片机RAM的执行结果。掌握8051的寻址方式及常用指令的使用

方法。

4.掌握2位十进制数转八位二进制方法

5.学会利用KeiluVision软件建立项目工程

6.编写程序实现输入2位十进制数转化成为四位二进制方法,随机测试三组数据,并将结果分别送至片内RAM 40H单元,片外RAM E000H单元,P1端口

二、设计任务

根据已知条件,完成对多路数字定时抢答器的设计、装配与调试。

三、设计要求

①可同时供8名选手(或代表队)参赛,其编号分别是0到7,各用一个抢答按钮,按钮的编号与选手的编号相对应。

②给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答的开始。

③抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其它选手抢答。优先抢答选手的编号一直保持到主持人将系统清零为止。

④抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。当节目主持人启动“开始”键后,要求定时器立即进行减计时,并用显示器进行显示,同时扬声器发出短暂的声响,声响持续时间0.5秒左右。

⑤参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。

⑥如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统进行短暂的报警,并封锁输入电路,禁止选手超时后抢答,定时显示器上显示00。

⑦画出总体电路原理图。(选做:用EWB软件完成仿真)。按规定格式写出课程设计报告书。

四、实验内容与要求

4.1设计内容

设计一个抢答器,可供8位选手抢答,主持人可通过开关控制,具有抢答、计时、报警等功能。

4.1设计要求

4.2.1基本功能

1)设计一个抢答器,可以同时供8名选手或8个代表队参加比赛,他们的编号

分别是1、2、3、4、5、6、7、8,各用一个抢答按钮,按钮的编号与选手的编号相对应,也是1、2、3、4、5、6、7、8。

2)给节目主持人设置一个控制开关clear,用来控制系统的清零(编号显示数

码管灭灯)和抢答的开始。

3)抢答器具有数据锁存和显示功能。抢答开始,若有选手按动抢答按钮,编号

立即锁存,并在LED数码管上显示出选手的编号,同时扬声器给出音响提示。

此外要封存输入电路,禁止其他选手抢答。优先抢答选手的编号一直保持到系统清零为止。

4.2.2扩展功能

1)抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定,档节目

主持人按下“clear”按钮后,要求定时器立即倒计时,并在显示器上显示,同时扬声器发出短暂声响,声响持续0.5S左右。

2)参赛选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。如果定时抢答时间已到,却没有选手抢答,则本次抢答无效,系统短暂报警,并封存输入电路,

禁止选手超时后抢答,时间显示器上显示00。

五、实验内容与要求

5.1第一种方案

图5.1.1 第一种方案

抢答按钮连接控制电路,抢答开始,有选手按下抢答按钮后,控制电路是锁存器锁存各个抢答路的电平高低,从而锁存了第一位抢答者的抢答信号,同时切断其他抢答者的抢答信号,阻止其他选手的抢答。编码器将抢答结果译成二进制数送给下一级译码显示电路,译码显示电路显示抢答成功者的号码。

声响电路可以发出提醒声响,定时电路有定时抢答功能,并能显示倒计时的时间。

该方案满足设计的功能要求,但是用锁存器锁存抢答结果这一思路有缺陷,就是可能有两个选手抢答时间间隔很小,两路的抢答信号同时锁存了起来,导致编码器编码出错,下一级译码显示电路不能显示抢答结果。

5.2第二种方案

第二种方案流程图如下图2所示:

图5.2.1第二种方案

第二种方案的原理和第一种方案基本一样,只是在第一种方案上做了改进,在锁存器和抢答按钮之间增加了优先编码器,避免了多路的抢答信号同时被锁存,编码器编码出错,下一级译码显示电路不能显示抢答结果的情况。但是,电路过于复杂繁琐,不太方便。5.3第三种方案

该方案以STC89C52单片机为核心设计的八路抢答器,该抢答器能根据不同的八个不同按键输入抢答信号,经过单片机的控制处理并产生与按键相对应路数的输出信号,最后通过4位LED数码管显示相应的路数和答题时间等

图5.3.1第三种方案

该方案简单容易实现,而且单片机体积小,价格低,应用方便,稳定可靠。

因此,选用方案三。

六、硬件电路设计

6.1.时钟电路设计

CPU的操作需要精确的定时,可用一个晶体振荡器产生稳定的时钟脉冲来控制STC89C52单片机上的XTAL1和XTAL2分别为振荡电路的输入和输出,晶振频率选择11.0592MHZ。

图6.1.1晶振电路

6.2八路抢答按键输入电路设计

该电路有八个按钮分别接于P2.0~P2.7可实现:一是分辨出选手按键的先后并锁存有抢答者的编号,同时在LED 上显示相应选手编号;二是当有选手抢答成功时其他选手按键无效,具有锁存功能。(锁存功能由软件实现)

图6.2.1抢答电路

6.3复位按键输入电路设计 复位是计算机的一个重要工作状态。开始按钮和复位按钮分别接在P3.7和RST 口,在

单片机工作时,接电之前要复位,断电后也要复位。在抢答器中复位则为定时做铺垫,在抢答之前要复位,抢答完毕后也要复位。

6.4

相关反应。

6.5LED数码管显示电路设计

本设计所用的显示器为7段共阳极接法4位LED显示器,当某一发光二极管的阴极输入低电平时,则该段发光。段选通过一片74HC573与P0口相连,位选com1,com2,com3,com4通过74HC573分别与P1.3,P1.2,P1.1,P1.0口相连。此处芯片74HC573不起锁存数据的功能,做为驱动增加数码管的电流。

图6.5.1显示电路

6.6声音电路

用P3.6口和蜂鸣器相连,在抢答开始和抢答过程中有人抢答,则会给选手答题警示声。若定时时间已到,无人抢答则本次抢答无效,系统报警并禁止抢答,定时显示器上最终显示为0 00。

图6.6.1报警电路

七、程序设计

7.1时间调整程序设计

void ProcessAdjust(void)

{ time=30;

shi=time/10;

ge=time%10;

com3=5;

while(!state)

{

switch(KeyScan_3())

{ case 9://倒计时减

time--;

if(time<=0)

time=30;

shi=time/10;

ge=time%10;

break;

case 10://倒计时加

time++;

if(time>30)

time=1;

shi=time/10;

ge=time%10;

break;

case 11://状态转换

state=ANSWER;

break;

default:;

}

DisplayTime();//实时刷新倒计时,

//存在的问题:Keyscan()函数可能会占用一定时间,对数码管动态扫描显示有影响

//解决方案:可以把Keyscan函数分开,只检测key9,key10,key11三个按键,减少

}

KeyFree();

}

7.2选手抢答程序设计

void ProcessAnswer(void)

{

KeyFree();//按键释放,在抢答开始之前,确保所有按键都以释放,否则,发出报警声

flag=0;//结束标识复位

OpenInter();

SoundStart();

InitInter() ;//定时器初始化

while(flag==0)

DisplayTime();

switch(KeyScan_8())//swith()缺点:语句太多,程序长,但执行时间短{

case 1:

result=1;

flag=1;

break;

case 2:

result=2;

flag=1;

break;

case 3:

result=3;

flag=1;

break;

case 4:

result=4;

flag=1; break;

case 5: result=5; flag=1; break;

case 6: result=6; flag=1; break;

case 7: result=7; flag=1; break;

case 8: result=8; flag=1; break;

default:;

}

}

CloseInter();//抢答结束,关闭定时器time=10;//设置倒计时初值

if(flag==1)//有人抢答

{

SoundOver();

while(state)

{

DisplayResult();

if(KeyScan_1()==11)state=ADJUST;

}

}

else//无人抢答

SoundWarning();

while(state)

{

DisplayTime();

if(KeyScan_1()==11)state=ADJUST;

}

}

}

7.3定时中断服务程序的设计void Timer0(void)

interrupt 1

{ TH0=(65535-45872)/256;//重装初值

TL0=(65535-45872)%256;

num1++;

if(num1>=20)//一秒时间到

{ num1=0;

time--;

shi=time/10;

ge=time%10;

//刷新显示倒计时

if(time<=0)

{ //抢答时间到,关闭中断,封锁电路,设置time初值time=10;//倒计时初值为10

flag=2;

}

}

}

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