- 3
- 0
- 约4.4千字
- 约 10页
- 2019-11-28 发布于湖南
- 举报
单片机原理 课程结业报告
题目(12) 8位竞赛抢答器的设计
学号
姓名
1 设计要求
1、以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。
2、设置一个系统清除和抢答控制开关S,开关由主持人控制。
抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并把优先抢答选手的编号一直保持到主持人将系统清除为止。
抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
3、当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。
提示:参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00
2 设计原理
通过键盘改变抢答的时间,原理与闹钟时间的设定相同,将定时时间的变量置为全局变量后,通过键盘扫描程序使每按下一次按键,时间加1(超过30时置0)。同时单片机不断进行按键扫描,当参赛选手的按键按下时,用于产生时钟信号的定时计数器停止计数,同时将选手编号(按键号)和抢答时间分别显示在LED上。
3 设计电路图
4 核心代码设计思路及程序流程图
按键发声
按键发声
显示抢答号,剩余时间
停止键按下?
抢答键按下?
停止键按下?
开始键按下?
程序初始化
倒计时显示
倒计时开始
按键发声
准备状态,显示FFF
倒计时大于5s?
显示法规号码
按键发声
非法抢答?
停止键按下?
提醒发声
倒计时结束?
Y
N
N
Y
N
N
N
N
N
Y
Y
Y
Y
Y
流程图
5 Proteus仿真图
6 Keil核心源代码
#includereg51.h
#define uchar unsigned char
#define uint unsigned int
uint x,y,m,n,shi,ge,host,haoma,f1,f3,ready;
//共阴数码管0-9编码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;*/
sbit keyzhu=P3^0;
sbit clean=P3^1;
sbit keyf=P3^7; //蜂鸣器
sbit wei1=P2^0; //位选端口
sbit wei3=P2^2;
sbit wei4=P2^3;
//延时函数
void delay(uint xms)
{
uint i,j;
for(i=xms;i0;i--)
{
for(j=120;j0;j--)
{
}
}
}
//初始化函数
void init()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1; //开中断
ET0=1; //定时/计数器T0中断允许
TR0=0; //T0不工作
ET1=1; //定时/计数器T1中断允许
TR1=0; //T1不工作
x=15;
y=0;
m=30;
n=0;
shi=0;
ge=0;
haoma=0;
host=0;
f1=0;
f3=0;
keyf=1;
}
//显示函数
void display(uint shi,uint ge,uint haoma)
{
wei3=0;
P0=table[shi];
delay(5);
wei3=1;
wei4=0;
P0=table[ge];
delay(5);
wei4=1;
wei1=0;
P0=table[haoma];
delay(5);
wei1=1;
}
//扫描键盘
void keyscan()
{
if(ready==1)
{
if(host==0)
{
switch(P1)
{
case 0xfe:
delay(10);
if(P1==0xfe)
{
TR0=0;
host=1;
haoma=1;
TR1=1;
keyf=0;
原创力文档

文档评论(0)