智能仪器课程设计.docx
- 文档编号:27733646
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:23
- 大小:125.09KB
智能仪器课程设计.docx
《智能仪器课程设计.docx》由会员分享,可在线阅读,更多相关《智能仪器课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
智能仪器课程设计
课程设计
姓名:
学号:
班级:
目录
一、设计题目……………………………………………………………2
二、功能说明……………………………………………………………2
三、系统设计……………………………………………………………2
四、相关知识……………………………………………………………2
五、元器件清单…………………………………………………………2
六、硬件设计和软件设计………………………………………………3
七、总电路图与程序……………………………………………………7
八、设计心得…………………………………………………………16
一、设计题目
抢答器的设计
二、功能说明
(1)抢答器可同时供8名选手或8个代表队比赛,每名选手或代表队使用一个按钮,8个按钮分别用1-8号表示。
(2)设置系统复位和抢答开始控制开关,该开关由主持人控制。
(3)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定(如30s)。
当主持人启动“开始”键后,显示器显示抢答时间倒计时,同时扬声器发出短暂的提示声响,声响持续的时间为0.5s左右。
(4)参赛选手在设定的时间内进行抢答,抢答有效,显示器上显示选手的编号和限答的时间倒计时,并保持到主持人将系统复位为止。
(5)可以通过按键操作修改答题限制时间和抢答限制时间。
(6)如果抢答时间已到,无人抢答,本次抢答无效,系统复位。
三、系统设计
本系统采用80C51单片机作为控制器,主要由电源电路、时钟电路、复位电路、选手按键电路、数码显示电路、声音提示电路组成。
四、相关知识
(1)80C51单片机工作原理
(2)复位电路工作原理及电路设计
(3)时钟电路工作原理及电路设计
(4)按键电路的设计
(5)蜂鸣器驱动电路的设计
(6)数码显示的原理及应用
(7)优先锁存程序的设计及调试方法
五、元器件清单
控制器
单片机80C51
时钟电路
晶体振荡器12MHz,电容30pF
复位电路
电解电容22Uf/10V,电阻1k欧
声音提示电路
晶体管2N5088,喇叭0.5W/8欧,电阻100欧,
电阻3.3欧
选手按键
按键SW-PB
主持人按键
按键SW-PB
数码显示
LED数码管,四联共阴,排阻8千欧*8
六、硬件设计和软件设计
(1)复位模块
图1.复位模块电路图
while(!
Key_stop);
while
(1)//在显示选手回答倒计时时只有在stop按键按下时,才可按复位键
{
display(num,Answer_time);//显示选手编号和回答倒计时
}
if(Key_restart==0)
{
delay(10);
if(Key_restart==0)//热复位键,从头开始下一轮
{
beep();
gotoTop;
}
}
(2)时钟模块
图2.时钟模块电路图
voidinit()//初始化函数
{
EA=1;//开总中断;
TMOD=0x11;//定时器工作方式1,16位定时计数器
TH0=(65536-50000)/256;//50us
TL0=(65536-50000)%256;
ET0=1;//开定时器0中断(暂时不启动定时器)
TH1=(65536-50000)/256;//50us
TL1=(65536-50000)%256;
ET1=1;//开定时器0中断(暂时不启动定时器)
EX0=1;//启动外中断0
EX1=1;//启动外中断1
P1=0x00;//读P1口的数据要先置1准备
count_0=0;//定时器中的计数清零
count_1=0;
}
(3)声音提示模块
图3.声音提示模块电路图
voidbeep()
{
laba=1;
delay(100);
laba=0;
}
voidbeep_last()
{
laba=1;
delay(500);
laba=0;
}
(4)数码显示模块
图4.显示模块电路图
voiddisplaySet(ucharSettime)
{
Settime--;
P2=0xfd;//10111111
P0=table[Settime%10];//时间的个位
delay(10);
P2=0xfd;//10111111
P0=0x00;//消余辉
delay(10);
P2=0xfe;//01111111
P0=table[Settime/10];//时间的十位
delay(10);
P2=0xfe;//01111111
P0=0x00;//消余辉
delay(10);
}
voiddisplay(ucharnum,uchartime)//显示数字的函数
{
P2=0xfe;
P0=table[num];
delay(10);
P2=0xfe;//01111111
P0=0x00;//消余辉
delay(10);
time--;
P2=0xf7;//11101111
P0=table[time%10];//时间的个位
delay(10);
P2=0xf7;//11101111
P0=0x00;//消余辉
delay(10);
P2=0xfb;//11011111
P0=table[time/10];//时间的十位
delay(10);
P2=0xfb;//11011111
P0=0x00;//消余辉
delay(10);
}
(5)按键模块
图5.按键模块电路图
if(Key_start==0)
{
Button=P1;
if(Key_start==0)//主持人按下抢答键,抢答正式开始!
{
Race_time=Race_time_temp;
Answer_time=Answer_time_temp;
beep();
TR1=1;//抢答时间开始倒计时
}
while
(1)//查询是否有按键按下,进入抢答循环
{
display(12,Race_time);//显示抢答倒计时
if(Race_time==0)
{
beep();
TR1=0;//关闭定时器1
break;
}
Data=P1;//把P1口的数据送给变量
if(Data!
=0xff)//有按键按下
{
delay(10);
if(Data!
=0x00)//确定有按键按下
{
Button=Data;//传递数据扫描值
TR0=1;//启动定时器0
TR1=0;//关闭定时器1
break;//不再进行查询是否有按键按下了
}
}
}
switch(Button)
{
case0x01:
num=1;beep();break;//1号选手case0x02:
num=2;beep();break;//2号选手
case0x04:
num=3;beep();break;//3号选手
case0x08:
num=4;beep();break;//4号选手
case0x10:
num=5;beep();break;//5号选手
case0x20:
num=6;beep();break;//6号选手
case0x40:
num=7;beep();break;//7号选手
case0x80:
num=8;beep();break;//8号选手
}
七、总电路图与程序
图6.八路抢答器总电路图
总程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitKey_add=P3^4;//时间+
sbitKey_subtract=P3^5;//时间-
sbitKey_start=P3^0;//开始键,
sbitKey_stop=P3^1;//停止键
sbitKey_set_R=P3^2;//抢答时间设置键
sbitKey_set_A=P3^3;//回答时间设置键
sbitKey_restart=P3^1;//复位键
sbitlaba=P3^6;//蜂鸣器
voiddisplaySet(ucharSettime);
ucharcodetable[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,~0xbf,~0xff,~0xc6,~0xf0,~0xb6};//段码表
voiddelay(uintz);//延时函数声明
voiddisplay(ucharnum,uchartime);//显示数字函数声明
voidbeep();//蜂鸣器函数
voidbeep_last();
voidinit();
ucharRace_time,Answer_time,Race_time_temp=20,Answer_time_temp=30;//抢答时间、回答时间变量
ucharcount_0,count_1;//定时中计数
ucharButton,Data,num;
voidmain()
{
init();
Top:
if(Key_start==0)
{
Button=P1;
if(Key_start==0)//主持人按下抢答键,抢答正式开始!
{
Race_time=Race_time_temp;
Answer_time=Answer_time_temp;
beep();
TR1=1;//抢答时间开始倒计时
}
while
(1)//查询是否有按键按下,进入抢答循环
{
display(12,Race_time);//显示抢答倒计时
if(Race_time==0)
{
beep();
TR1=0;//关闭定时器1
break;
}
Data=P1;//把P1口的数据送给变量
if(Data!
=0xff)//有按键按下
{
delay(10);
if(Data!
=0x00)//确定有按键按下
{
Button=Data;//传递数据扫描值
TR0=1;//启动定时器0
TR1=0;//关闭定时器1
break;//不再进行查询是否有按键按下了
}
}
}
switch(Button)
{
case0x01:
num=1;beep();break;//1号选手case0x02:
num=2;beep();break;//2号选手
case0x04:
num=3;beep();break;//3号选手
case0x08:
num=4;beep();break;//4号选手
case0x10:
num=5;beep();break;//5号选手
case0x20:
num=6;beep();break;//6号选手
case0x40:
num=7;beep();break;//7号选手
case0x80:
num=8;beep();break;//8号选手
}
TR0=1;//启动定时器0(在这里启动比在前面好)
while
(1)
{
display(num,Answer_time);//显示选手编号和回答倒计时
if(Answer_time==0)
{
TR0=0;//关闭定时器0
}
if(Key_stop==0)
{
delay(30);
if(Key_stop==0)//停止键按下
{
beep();
TR0=0;//关闭定时器0,选手开始回答
while(!
Key_stop);
while
(1)//在显示选手回答倒计时时只有在stop按键按下时,才可按复位键
{
display(num,Answer_time);//显示选手编号和回答倒计时
}
if(Key_restart==0)
{
delay(10);
if(Key_restart==0)//热复位键,从头开始下一轮
{
beep();
gotoTop;
}
}
}
}
}
}
}
voidbeep()
{
laba=1;
delay(100);
laba=0;
}
voidbeep_last()
{
laba=1;
delay(500);
laba=0;
}
voiddisplaySet(ucharSettime)
{
Settime--;
P2=0xfd;//10111111
P0=table[Settime%10];//时间的个位
delay(10);
P2=0xfd;//10111111
P0=0x00;//消余辉
delay(10);
P2=0xfe;//01111111
P0=table[Settime/10];//时间的十位
delay(10);
P2=0xfe;//01111111
P0=0x00;//消余辉
delay(10);
}
voiddisplay(ucharnum,uchartime)//显示数字的函数
{
P2=0xfe;
P0=table[num];
delay(10);
P2=0xfe;//01111111
P0=0x00;//消余辉
delay(10);
time--;
P2=0xf7;//11101111
P0=table[time%10];//时间的个位
delay(10);
P2=0xf7;//11101111
P0=0x00;//消余辉
delay(10);
P2=0xfb;//11011111
P0=table[time/10];//时间的十位
delay(10);
P2=0xfb;//11011111
P0=0x00;//消余辉
delay(10);
}
voidinit()//初始化函数
{
EA=1;//开总中断;
TMOD=0x11;//定时器工作方式1,16位定时计数器
TH0=(65536-50000)/256;//50us
TL0=(65536-50000)%256;
ET0=1;//开定时器0中断(暂时不启动定时器)
TH1=(65536-50000)/256;//50us
TL1=(65536-50000)%256;
ET1=1;//开定时器0中断(暂时不启动定时器)
EX0=1;//启动外中断0
EX1=1;//启动外中断1
P1=0x00;//读P1口的数据要先置1准备
count_0=0;//定时器中的计数清零
count_1=0;
}
voidT0_time()interrupt1//定时器0中断函数_回答时间
{
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;//马上重装初值,以免有误差
if(count_0==20)
{
count_0=0;
Answer_time--;
if(Answer_time<=5)
{
if(Answer_time==0)
{
beep_last();//最后一声特殊警告
}
beep();
}
}
count_0++;
}
voidT1_time()interrupt3//定时器1中断函数_抢答时间
{
TH1=(65536-50000)/256;//50us
TL1=(65536-50000)%256;//马上重装初值,这样在后面调用beep()函数时就不会影响定时器的准确计时了
if(count_1==20)
{
count_1=0;
Race_time--;
if(Race_time<=5)
{
if(Race_time==0)
{
beep_last();//最后一声警告
}
else
beep();
}
}
count_1++;
}
voiddelay(uintz)//1ms基准延时
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidEX0_set_Race_time()interrupt0//外中断0,设置抢答时间
{
delay(10);//消抖一下
if(Key_set_R==0)
{
beep();
while
(1)
{
display(11,Race_time_temp);
delay(100);//闪动效果
if(Key_add==0)//时间+1键
{
delay(10);
if(Key_add==0)
{
Race_time_temp++;
if(Race_time_temp==100)
{
Race_time_temp=1;
}
}
}
while(!
Key_add);//等待按键释放
else
if(Key_subtract==0)//时间-1键
{
delay(10);
if(Key_subtract==0)
{
Race_time_temp--;
if(Race_time_temp==0)
{
Race_time_temp=99;
}
}
Race_time=Race_time_temp;
}
while(!
Key_subtract);//等待按键释放
else
if(Key_restart==0)
{
if(Key_restart==0)
{
beep();
break;
}
}
if(Key_restart==0)
{
if(Key_restart==0)
{
beep();
break;
}
}
}
}
}
voidEX1_set_Answer_time()interrupt2//外中断1,设置回答时间
{
delay(10);//消抖一下
if(Key_set_A==0)
{
beep();
while
(1)
{
display(11,Answer_time_temp);
delay(100);//闪动效果
if(Key_add==0)//时间+1键
{
delay(10);
if(Key_add==0)
{
Answer_time_temp++;
if(Answer_time_temp==100)
{
Answer_time_temp=1;
}
}
}
while(!
Key_add);//等待按键释放
else
if(Key_subtract==0)//时间-1键
{
delay(10);
if(Key_subtract==0)
{
Answer_time_temp--;
if(Answer_time_temp==0)
{
Answer_time_temp=99;
}
}
Answer_time=Answer_time_temp;
}
while(!
Key_subtract);//等待按键释放
else
if(Key_restart==0)
{
if(Key_restart==0)
{
beep();
break;
}
}
}
}
}
八、设计心得
经过近一个星期的努力,在老师和同学的讨论和帮助下,我成功地完成了八路抢答器的设计,通过此次课程设计,我重新认识到了对书本上的知识要独立运用的道理。
在抢答器设计过程中,发现了很多细节性的问题,也出现了很多错误,例如:
在复位电路的设计中,由于一根连线连接不到位,导致复位按键不起作用,在仿真过程中,一直卡住,后来经过和同学们研究、商讨最后都解决,感觉团队协作能力是非常有必要的!
通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识和C语言的编程,也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设中可能会存在着一些不足,如:
时间的设置上,只能实现调整的功能,重新复位开始后,还是按照原来的时间进行,另外存在的其他一些问题,希望老师和同学能够提出并指正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 仪器 课程设计