单片机计分器设计.docx
- 文档编号:4957776
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:24
- 大小:1.86MB
单片机计分器设计.docx
《单片机计分器设计.docx》由会员分享,可在线阅读,更多相关《单片机计分器设计.docx(24页珍藏版)》请在冰豆网上搜索。
单片机计分器设计
湖南工程学院
课程设计
课程名称单片机原理与应用
课题名称比赛计分器设计
专业电子科学与技术
班级0802班
学号200801180220
姓名罗亚运
指导教师汪超、周向红、李世军等
2011年7月8日
湖南工程学院
课程设计任务书
课程名称单片机原理与应用
课题比赛计分器设计
专业班级电子科学与技术0802班
学生姓名罗亚运
学号200801180220
指导老师汪超、周向红、李世军
审批李晓秀
任务书下达日期2011年6月27日
任务完成日期2011年7月8日
设计内容与设计要求
设计内容:
设计一个甲,乙两队用的比赛计分器,要求实现以下功能:
1、给甲,乙两队分别设置1个加分按钮,按一下能分别实现加一分。
2、给甲,乙两队分别设置1个减分按钮,按一下能分别实现减一分。
3、设置一个清零按钮,按一下能实现清零
4、设置预置分按钮。
5、设置一个加减一分、两分和三分的切换按钮。
设计要求:
1、设计方案要合理、正确;
2、系统硬件设计及焊接制作;
3、系统软件设计及调试;
4、系统联调;
5、写出设计报告。
主要设计条件
1、MCS-51单片机实验操作台1台;
2、PC机及单片机调试软件;
3、单片机应用系统板1套;
4、制作工具1套;
5、系统设计所需的元器件。
说明书格式
1.封面
2.课程设计任务书
3.目录
4.系统总体方案设计
5.系统硬件设计
6.软件设计(包括流程图)
7.系统的安装调试说明
8、总结
9、参考文献
10、附录(源程序清单及硬件原理图等);
11、课程设计成绩评分表。
进度安排
设计时间为两周
第一周
星期一、上午:
布置课题任务,讲课及课题介绍
下午:
借阅有关资料,总体方案讨论
星期二、确定总体设计方案
星期三、硬件模块方案设计
星期四、软件模块方案设计
星期五、设计及调试
第二周
星期一、设计及调试
星期二、设计及调试
星期三、总调
星期四、写说明书
星期五、上午:
写说明书,整理资料下午:
交设计资料,答辩
参考文献
[1]、《微型计算机原理及应用》许立梓编机械工业出版社2002
[2]、《微型计算机接口技术及应用》刘乐善编华中理工大学出版社2000
[3]、《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社2000
[4]、《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社2000
[5]、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社2001
[6]、《微型计算机接口技术》邓亚平编清华大学出版社2001
[7]、《单片机原理及及应用》王迎旭编机械工业出版社2001
[8]、《单片机应用程序设计技术》周航慈著北京航空航天大学出版社2002
[9]、《单片机实用技术问答》谢宜仁主编人民邮电出版社2002
目录
第1章系统概述1
1.1系统功能1
1.2设计内容及要求1
1.2.1设计内容:
1
1.2.2设计要求:
1
1.3按钮设置2
第2章总体方案设计3
2.1总体系统框图3
2.2系统组成3
第3章系统硬件设计5
3.1控制电路设计5
3.1.1复位电路5
3.1.2矩阵按钮电路5
3.2数码管显示电路设计6
第4章软件设计8
4.1主程序设计8
4.2各子程序设计8
4.2.1延时子程序8
4.2.2初始化子程序9
4.2.3交换按钮程序9
4.2.4状态部分程序10
4.2.5加减部分程序11
第5章实物连接图12
5.1交换分值12
5.2发光二极管指示13
5.3清零13
5.3软件调试结果13
设计总结14
参考文献15
附录A:
源程序清单16
附录B:
总体硬件实物图21
电气信息学院课程设计评分表22
第1章系统概述
1.1系统功能
设计一个甲、乙两队比赛计分器,主要用于各种体育比赛记录分数。
采用矩阵式键盘作为输入。
基于以上思路,本次设计使用80C51实现一基于单片机的电子计分器的设计,其主要具有如下功能:
(1)用户可分别对两队比分进行加1、加2、加3和减1,减2,减3操作。
(2)比分通过6个8段共阴极数码管显示器进行显示,每队比分显示三位,可以交换两队的比分。
(4)具有复位功能,通过复位键实现。
(5)预置分可通过加或减分按钮实现。
1.2设计内容及要求
1.2.1设计内容:
(1)给甲乙两队分别设置一个分数控制按钮,此按钮有7种状态,分别为+1、+2、+3、-1、-2、-3,+10(置数)。
(2)设置一个切换状态按钮,可以分别切换每一种状态,然后每一种状态会有相应的发光二极管点亮以区别是哪种状态。
(3)设置一个复位按钮,按下实现甲、乙队总分回到初试分及显示
(4)设置一个交换分按钮,用于交换甲乙比分。
1.2.2设计要求:
方案合理、正确,系统稳定、可靠。
软件设计要求尽可能精练、简短和运行可靠。
硬件电路要求简单明了,以节约成本。
1.3按钮设置
本设计的宗旨是用最少的按键实现最多的功能。
设计中一共用到了5个按钮,分别为:
清零按钮、甲的加分减分按钮,乙的加分减分按钮,切换状态按钮和交换比分按钮。
每个按钮的功能如下:
控制甲的按钮:
实现+1、+2、+3、-1、-2、-3,+10(置数)功能;
控制乙的按钮:
实现+1、+2、+3、-1、-2、-3,+10(置数)功能;
切换按钮:
实现甲乙的各种状态的切换;
减缓比分按钮:
交换甲乙的比分;
清零按钮:
实现甲乙比分清零;
第2章总体方案设计
2.1总体系统框图
此次设计80C51单片机为核心,配以一定的外围电路和软件,以实现比赛计分器的功能。
利用6个8段共阴级数码管显示器.采用动态显示输出比分,用户信息输入则采用4×4矩阵式键盘,起状态切换用发光二极管的状态表示。
用一片单片机可满足本设计的输入输出。
系统设计方案的硬件电路设计框图如图2-1所示。
图2-1硬件电路设计
2.2系统组成
系统由硬件部分和软件部分组成。
硬件电路由复位按钮、80C51单片机、矩阵键盘和7个发光二极管,6个数码管等组成。
软件部分主程序主要由系统初始化段、键盘识别、键值处理、8段共阴极LED显示器扫描显示子程序组成。
软件设计主要分为四个部分:
信息输入、信息处理、显示输出。
信息输入时采用矩阵式键盘来实现,所以需要检测键盘有无按键的子程序;信息处理需要对用户通过键盘输入的不同信息进行辨别并执行相应的处理;显示输出考虑到成本和电路体积,决定采用动态输出,从而达到设计的目的。
第3章系统硬件设计
3.1控制电路设计
3.1.1复位电路
如图3-1所示,按钮与单片机的RST引脚相连,当每次按下该按钮后,系统将通过软件实现对计分回到初始值功能。
图3-1复位控制接口电路
3.1.2矩阵按钮电路
键盘的读取方式:
行与列各有4条线档其中一个按键被按下后,它所在的行列线就导通了,所以如果一条线上是低电平,那么按键的另一条线也是低电平。
先给第一行送一个低电平,读取列值,就可以判定第一行上是否有按键按下,如果有按键,那么列线里面就有一条线为低电平。
如果都为高电平,说明第一行上没有按键被按下,接着给第二行送低电平,重复上述步骤,就可以读取按键了。
也可以用另外一种方法:
先给行线全部写“0”,然后看列线是否有为低电平的,如果有说明那一列上有键被按下,让后要确定按键所在的行的,给所有列线写“0”,读取行线的值就可以确定按键的具体位置了,让后将两次读取的值,组成一个值j就得到了键值。
图3-2矩阵键盘的接口电路
3.2数码管显示电路设计
显示器采用8段共阴极数码管显示器,来实现显示器的动态扫描,八个二极管连接一个阴极的结构,只要另一段为高电平,二极管就会发光,从而形成一段。
将八段顺序排列后就成为具有一定编码的共阴显示器了。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。
显示电路如图4所示。
图3-3数码管显示电路
数码管显示采用8个8段数码管显示器,来实现显示器的动态扫描显示采用动态扫描显示方法,即由显示器扫描显示子程序控制显示器逐个循环从左至右依次点亮各个显示器。
由单片机的P0口控制显示。
第4章软件设计
4.1主程序设计
主程序主要由系统初始化段、键盘识别、键值处理、6个8段共阴极LED显示器扫描显示子程序组成。
通过对以上各段和子程序的结合,以实现系统功能。
该系统主程序流程图如下图所示。
图4-1系统主程序流程图
4.2各子程序设计
4.2.1延时子程序
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
此段程序是根据实验板各硬件的参数具体设置的。
4.2.2初始化子程序
voidinit()
{
cnt=0;
num=0;
wela=0;
dula=0;
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
初始化程序是用来对各定义的变量初始化的,每一次主程序执行之前都要先执行初始化程序以保证变量的值为初值。
4.2.3交换按钮程序
if(key4==0)//当交换键按下
{
delay(10);
if(key4==0)
{
m=bai;
bai=aa;
aa=m;
n=shi;
shi=bb;
bb=n;
p=ge;
ge=cc;
cc=p;
while(!
key4);//去抖
delay(10);
while(!
key4);}
}
此程序就是当交换按键按下时,利用中间变量改变甲乙的每一位的数值,这样就能实现交换甲乙两队的比分,然后再给电路去抖动,就不会出现问题了。
4.2.4状态部分程序
for(i=0;i<4;i++)
{if(key3==0)
{if(key3==0)
{num++;
if(num==7)
num=0;
delay(5);
switch(num)
{case0:
cnt=-3;d7=0;d6=1;break;
case1:
cnt=10;d1=0;d7=1;break;
case2:
cnt=1;d2=0;d1=1;break;
case3:
cnt=2;d3=0;d2=1;break;
case4:
cnt=3;d4=0;d3=1;break;
case5:
cnt=-1;d5=0;d4=1;break;
case6:
cnt=-2;d6=0;d5=1;break;}
}
while(!
key3);
delay(10);
while(!
key3);}
}
该程序是主函数里面的部分程序,当切换分按钮按下时利用switchcase语句来实现甲乙各种状态之间的切换,并且同时控制了7个发光二极管的显示来表明当前处于什么状态。
切换到相应的状态时在执行显示扫描程序将实现切换功能。
4.2.5加减部分程序
if(key1==0)//甲控制按钮按下
{delay(10);//延时
if(key1==0)
{temp=temp+cnt;//实现加减运算
if(temp==256)
temp=0;}
while(!
key1);//去抖
delay(10);
while(!
key1);
bai=temp/100;//分离处百位
shi=temp%100/10;
ge=temp%10;
}
该程序是通过前段调用一个变量cnt来作为本次运算的加数,然后通过切换状态来做不同的运算。
这样就免去了很多不必要的程序,直接调用实现,简化了程序。
第5章实物连接图
单片机语言程序是基于KeiluVision2编程软件编写的。
在keil内建立工程后建立汇编文件,编写MCS-51程序。
然后进行单步和断点调试,将运行结果和实验现象与预定值进行比较,再适当修改程序以达到要求。
最后通过软件下载到单片机即可看到相关的实验结果。
5.1交换分值
图5.1比赛分值
图5.2交换分值
当按下交换分值按钮过后甲乙两队的比分将交换,如上面实物图所示。
5.2发光二极管指示
图5.3切换按钮指示灯
5.3清零
图5.4比分清零
5.3软件调试结果
调试结果记录如下:
按照键盘分布说明按键,可以给甲、乙加或者减1分,2分,3分,显示器跟踪显示出总分,然后模拟比赛细节,均达到预期效果。
在甲、乙均有一定总分的情况下,按复位按钮,显示结果复位。
重复进行上面操作,结果均符合设计要求。
可以通过切换按钮选择不同的状态,将会实现不同的功能。
还可以通过比分交换按钮交换双方的比分,这点是非常实际化的,在现实比赛中也有这样的功能,完全实现了比赛的要求。
设计总结
这次的课程设计是做一个计分器,主要是以MCS-51单片机为出发点,结合KeiluVision2编程软件和Proteus调试软件的一门计算机语言,通过指令来控制相应硬件的运行状态,虽然这次设计只有短短的两周时间,但我深刻体会到了其中的苦与乐,感悟甚是深切,总觉得从书本上接受的东西不如操作和实践来的那么深刻。
在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种检验,也是对自己能力的一种提高,通过这次课程设计使自己明白了原来的那点知识是非常欠缺的,要学习的东西还很多,通过这次课程设计,明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质,并将理论与实际相结合,学以致用,不再是纸上谈兵,。
对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。
在这次课程设计中,我在整个设计过程中懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力,使自己充分体会到了在设计过程中的成功喜悦。
虽然这个设计做的不是很理想,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我受益良多。
课程设计是结束了,不过学习单片机知识的过程还没有终结,探索学习的奥妙,培养学习的兴趣,养成良好的学习习惯对我们来说才是最重要的。
与此同时我感受到了老师对学生的那种悔人不卷的精神,每天的固定时间,老师都来给我们指导,使我们少走弯路,顺利完成实习任务,感谢汪老师一路以来对我们的关心与帮助。
参考文献
[1]《单片机原理与应用》王迎旭编机械工业出版社
[2]《51系列单片机原理与接口技术实验指导》周向红编湖南工程学院
[3]《微型计算机原理及应用》许立梓编机械工业出版社2002
[4]《微型计算机接口技术及应用》刘乐善编华中理工大学出版社2000
[5]《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社2000
[6]《16位微型计算机原理接口及其应用》周佩玲编中国科技大学出版社2000
[7]《微型计算机原理与接口技术》吴秀清编中国科学技术出版社2001
[8]《微型计算机接口技术》邓亚平编清华大学出版社2001
[9]《单片机原理及及应用》王迎旭编机械工业出版社2001
[10]《单片机应用程序设计技术》周航慈著北京航空航天出版社2002
[11]《单片机实用技术问答》谢宜仁主编人民邮电出版社2002
附录A:
源程序清单
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitd1=P1^7;//定义发光二极管
sbitd2=P1^6;
sbitd3=P1^5;
sbitd4=P1^4;
sbitd5=P1^3;
sbitd6=P1^2;
sbitd7=P1^1;
uchartemp,temp1,bai,shi,ge,aa,bb,cc,num,cnt,i,m,n,p;
sbitdula=P2^6;
sbitwela=P2^7;
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddisplay(ucharbai,ucharshi,ucharge,ucharaa,ucharbb,ucharcc);
voiddelay(uintz);
voidinit();
voidmain()
{
init();//初始化子程序
while
(1)
{
if(key4==0)//
{
delay(10);
if(key4==0)
{
m=bai;
bai=aa;
aa=m;
n=shi;
shi=bb;
bb=n;
p=ge;
ge=cc;
cc=p;
while(!
key4);//交换键
delay(10);
while(!
key4);
}
}
for(i=0;i<4;i++)
{
if(key3==0)//切换键
{
if(key3==0)
{
num++;
if(num==7)
num=0;
delay(5);
switch(num)//选择切换状态
{
case0:
cnt=-3;d7=0;d6=1;break;
case1:
cnt=10;d1=0;d7=1;break;
case2:
cnt=1;d2=0;d1=1;break;
case3:
cnt=2;d3=0;d2=1;break;
case4:
cnt=3;d4=0;d3=1;break;
case5:
cnt=-1;d5=0;d4=1;break;
case6:
cnt=-2;d6=0;d5=1;break;
}
}
while(!
key3);
delay(10);
while(!
key3);
}
}
if(key1==0)//甲的控制按钮按下
{
delay(10);
if(key1==0)
{
temp=temp+cnt;
if(temp==1000)
temp=0;
}
while(!
key1);
delay(10);
while(!
key1);
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
}
if(key2==0)//乙控制按钮按下
{
delay(10);
if(key2==0)
{
temp1=temp1+cnt;
if(temp1==1000)
temp1=0;
}
while(!
key2);
delay(10);
while(!
key2);
aa=temp1/100;
bb=temp1%100/10;
cc=temp1%10;
}
display(bai,shi,ge,aa,bb,cc);//显示每一位
}
}
voiddelay(uintz)//延时
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(ucharbai,ucharshi,ucharge,ucharaa,ucharbb,ucharcc)
{
dula=1;//显示各位的值
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay
(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay
(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay
(1);
dula=1;
P0=table[aa];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay
(1);
dula=1;
P0=table[bb];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay
(1);
dula=1;
P0=table[cc];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay
(1);
}
voidinit()//初始化程序
{
cnt=0;
num=0;
wela=0;
dula=0;
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
附录B:
总体硬件实物图
图5.5总体实物硬件图
电气信息学院课程设计评分表
项目
评价
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 计分 设计