单片机课程设计数字式秒表.docx
《单片机课程设计数字式秒表.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字式秒表.docx(23页珍藏版)》请在冰豆网上搜索。
![单片机课程设计数字式秒表.docx](https://file1.bdocx.com/fileroot1/2023-1/29/8e6eb172-8a9f-4ce8-8b44-2b59ddcd9e36/8e6eb172-8a9f-4ce8-8b44-2b59ddcd9e361.gif)
单片机课程设计数字式秒表
湖南工学院
单片机课程设说明书
数字式秒表
**********************
系部:
电气与信息工程系
**********************
专业:
自动化
班级:
自本1001班
完成时间:
2012年12月18号
第1章数字式秒表的设计介绍
1.1设计任务及功能要求
由单片机接收小键盘控制递增计时,由LED显示模块计时时间,显示格式为00-59(分)00-59(秒).00-99(毫秒),精确到0.01s的整数倍。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
使用单片机AT89S52作为主要控制芯片,以四位一体共阳极数码显示管通过三极管驱动作为显示部分,设计一个具有特定功能的数字式秒表。
该数字式秒表上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该数字式秒表通过按键控制可实现开始计时、暂停计时、连续计时、清零和停止功能。
1.2数字式秒表的方案介绍及工作原理说明
使用AT89S52单片机作为核心控制部件,采用12M晶体振荡器及微小电容构成振荡电路;采用S8550作为数码管的驱动部分;用两个四位一体共阳极或共阴极数码显示管作为显示部分,构成数字式秒表的主体结构,配合独立式键盘和复位电路完成此秒表的复位、计时、连续、清零、停止各项功能。
键盘部分方案:
键盘控制采用独立式按键,每个按键的一端均接地,另一端直接和P1口相连,在按键和P1口之间通过10K电阻与+5V电源相连。
键盘通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单,比较适合按键较少或操作速度较高的场合,这种独立式接口的应用很普遍。
显示部分方案:
显示部分采用动态显示。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
事实上,显示器上任何时刻只有一个数码管有显示。
由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。
为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。
本设计可采用P0口直接驱动八段数码管显示。
此电路采用单片机的P0口作为数码显示管的段控,采用P2口作为数码管的位控。
8个独立式键盘分别接在单片机的P1口上,以及其他部分构成数字式秒表的硬件电路。
通过编写程序使用单片机的定时计数器,以及软件延时,中断资源来实现秒计时和相关控制。
此数字式秒表的硬件整体结构如图1-1所示。
图1-1数字秒表硬件电路基本原理图
第二章数字式秒表硬件系统的设计
2.1AT89S52芯片的介绍
(1)与MCS-51产品相兼容;
(2)具有8KB可改写的Flash内部程序存储器,可写/擦1000次;
(3)256字节内部RAM;
(4)32根可编程I/O口;
(5)3个16位定时器/计数器。
(6)8个中断源;
(7)可编程中串行口;
(8)低功耗空闲和掉电方式。
它的价格便宜,功能强大,能耗低。
很大程度上减少总电路的复杂性,提高了所设计系统的稳定性。
其芯片引脚图如图2-1所示。
图2-1单片机引脚图
2.2时钟电路的介绍
时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路。
输入端为芯片引脚XTAL1,输出端为引脚TXAL2,在芯片的外部通过这两个引角跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
此电路采用12MHz的石英晶体。
时钟电路如图2-2所示。
图2-2时钟电路
2.3复位电路的介绍
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。
RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
复位操作有上电自动复位和按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。
按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的。
在本设计中采用了按键电平复位方式,其复位电路如图2-3所示:
图2-3复位电路
2.4键盘电路的介绍
本设计使用独立式键盘接在单片机的P1口上但通过软件赋予其中三个按键功能,其中S2是计时开始按键,S3为停止按键,S4为计时暂停按键,S5为继续计时按键,S6是清零按键。
注意使用时只有在暂停状态下才能继续计时,只有在停止状态下才能清零,在停止时不能继续计时,在暂停时不能清零。
键盘电路如图2-4所示:
图2-4键盘电路
2.5驱动及显示电路的介绍
数码管实际上是由二极管构成发光二级管正常工作时,其两端正向压降约为
1.6v,正向电流约为10mA,为了使数码管达到一定的亮度而又不至于由于电流过大而损坏,我们使用三极管S8550作为数码管的驱动,同时在P0口和P2口上串上470欧姆的电阻。
此处使用四位一体共阴极数码管,由于驱动电路决定了此处共阴极数码管和共阳极数码管均可以采用而且均采用共阳极代码来编写显示程序,具体电路如图2-5所示。
图2-5数码管驱动及显示电路图
2.6单片机下载口电路
下载口主要是一个十芯的座子,如图2-6所示。
可以通过使用USB下载线对单片机进行程序下载。
方便整个软件的设计,也能让我们使用起来更加方便。
图2-6单片机下载口电路图
第三章数字式秒表软件系统的设计
3.1数字式秒表使用单片机资源情况
本次电子钟设计除了了使用单片机工作所必须的硬件资源(如连接晶振的引脚XTAL1和XTAL2,复位引脚RESET)外,对单片机的硬件资源还做了具体的安排。
P0口:
P0.0-P0.7作为数码管显示器的段控。
P1口:
P1.0、P1.2、P1.3、P1.4(由于自己的P1.1口所接的按键不怎么灵敏所以不用P1.1口)作为独立式键盘的输入端。
P2口:
P2.0-P2.7分别控制数码管LED0-LED7的位控码驱动。
3.2主程序流程图
图3-2主程序的流程图
3.3秒表的工作流程图
图3-3秒表工作的流程图
3.4显示程序流程图
图3-4显示程序流程图
3.5按键扫描流程图
3-5按键扫描流程图
3.6软件系统程序清单
按照流程图应用软件keil,使用C语言编程实现秒表功能。
程序见附录C。
第4章设计结果及误差分析
4.1数字式秒表的设计结论及使用说明
通过设计和调试,数字式秒表能顺利完成各项功能。
上电或复位后显示“P.”提示符,此时按key1键便可开始计时。
在计数状态下,按下key2键即可实现暂停,再次按下key3键即可实现继续计数,在计数状态下按下key5键,实现计数停止,在停止状态下按下key4键,便可实现计数清零。
4.2调试软件介绍
本电子钟的设计用的pretues仿真软件设计电路并仿真。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
因为pretues仿真软件中所有的情况都是在理想想的条件下,但是与实际电路的工作还是有很大的差别,所以我们必需考虑到实际情况应接入驱动限流等电路它才能被实际所应用。
4.3程序仿真与结果
我们是在Keil软件里编写程序并编译通过才能被硬件电路所应用。
Keil的功能比较强大但还是有一定的缺点。
他编译过程中他只能检查出所编写的语法错误,所以我们一步一步的去在硬件电路里仿真去达到我们所设计要求的功能。
经仿真修改和完善均已达到设计要求显示学号,电子钟准备状态与电子钟自动运行状态的仿真如下图所示。
(1).学号显示仿真如图4-3-1所示。
4-3-1秒表运行图
(2)显示系统提示符“P.”仿真如图4-3-2所示。
图4-3-2系统提示符“P.”的显示图
(3)秒表的运行状态仿真如图4-3-3所示。
图4-3-3秒表运行状态图
(4)秒表的清零仿真如图4-3-4所示。
图4-3-4秒表的清零图
4.4KEILuVision3简介
KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。
C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision3的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision3IDE可为它们提供单一而灵活的开发环境。
4.5proteus的简介
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
③提供软件调试功能。
支持第三方的软件编译和调试环境,如Keil3等软件。
④具有强大的原理图绘制功能。
本章介绍ProteusISIS软件的工作环境和一些基本操作。
图4-5protuesISIS集成环境
4.5误差分析及解决方法
我们可以发现数字式秒表计数一段时间的我们的标准时间相比较出现了误差,所设计的数字式秒表比我们的标准时间要慢,而且相比较的时间越长他的时差越大。
经过分其主要原因与硬件和软件都有关。
软件原因:
我们从外部中断请求有效到转向中断区入口地址所需的机器周期数来计算中断时间,51系列单片机最短响应时间为3个机器周期。
在一般情况下中断响应时间通常无需考虑,但在精确定时的应用场合需知道中断响应时间,以保证定时的精确控制。
硬件原因:
单片机的时钟信号是由外部的振荡电路所提供,在芯片的外部通过接XATL1与XATL2这两个引角跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
因为电子原件不可以就有我们所设计的那么理想(电容的容量,振晶的输出频率)所以会造成我们的时间准确。
针对这样的问题我们就能只能从上述两个方面入手去解决。
软件方面我们可以通过计算设计子程序去减少响应的时差。
硬件部分我们可以采用一些稳定,精确度比较高的电子元件去完善,但是在最后调试出的还是有误差但我尽可能的减少差误差接近理想。
第五章数字式秒表的设计体会及课程教学建议
5.1秒表的课程设计体会
这次的秒表课程设计从制作硬件“最小系统板”到写数字式秒表的程序调试到上板,可以说是苦多过甜啊!
首先,拿制作“最小系统板”来说吧!
从刚开始用protel的画原理图到画PCB图每天疯狂的看有关于protel的书籍那一个星期可以说是个疯狂的星期,每天一上课回来就是画图,PCB图导入导的一遍又一遍,最后面到制作板子,打磨--印上板--去铜--焊元件。
到最后竟然导入程序没有显示,蜂鸣器还一直嗡嗡作响,自己折磨了两天还是没出原因,最后面是去问了老师才把这个问题解决,原来是自己的封装错误了,按键和单片机的P1口没有连接上,最后只能是从按键飞了八根口线到P1口,单片机最小系统板才能正常使用。
到写秒表的程序,参考书籍选用最佳的设计方案,根据课程设计的要求一个模块一个模块的写,虽然秒表的程序很简单但是涉及到的内容很多是一个很好的学习机会。
通过这次单片机课程设计,让我对整个单片机程序的设计,C51语言有了一个比较深的理解。
还有就是增强了自身的动手能力,由原来的单纯地书本学习转向创新思考,把以前书本上讲的或是没有讲的,通过一次课程设计具体的实施,很自己的团队合作精神真正得到锻炼。
例如:
检查和排除故障的能力。
本次课程设计,也培养了我们小组的合作精神,所谓团结就是力量,就是一个再好不过的解释。
它不仅为我以后的课程设计打下基础,而且还培养了我们的合作精神和分析问题的能力。
5.2课程教学建议
在吴乐老师的严格要求与耐心指导下,经过一个学期对单片机技术这门课程的学习,使我对单片机这一技术的应用有了一定的了解,并对单片机的学习产生了浓厚的兴趣。
通过这次数字式秒表的课程设计以及一个学期的听课向吴乐老师的提出几点教学意见:
首先吴老师讲课有时候太快了,跨度有点大没有很好的连接前面的知识点最好是再上新课的开始时要复习一下上节课所讲的内容。
其次吴老师可以多介绍些与单片机相关的资料书给学生,培养学生查阅资料书的能力;最后一点,吴老师不要上课要我们写你临时想到的问题感觉老师的思路也不是很清晰这样我们听了就更加蒙了。
参考文献
[1]李朝青.单片原理及接口技术(第3版).北京:
电子工业出版社.2010
[2]单片机实用教程.北京:
北京航空航天大学出版社.2000
[3]何立民.单片机应用技术选编.北京:
北京航空航天大学出版社.1997
[4]马忠梅.单片机的C语言Windows环境编程宝典[M].北京:
北京航空航天大学出版社.2003
[5]李光飞.单片机C程序设计指导[M].北京:
北京航空航天大学出版社.2003
[6]李光飞.单片机课程设计实例指导[M].北京:
北京航空航天大学出版.2004
[7]李广弟.单片机基础(第3版).北京:
北京航空航天大学出版社.2011
附录A原理图
图A-1单片机最小系统原理图
附录BPCB图、布局图、实物图
图B-1单片机最小系统PCB图
图B-2元器件布局图
图B-3单片机最小系统实物图
附录C程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uchari,j,k,l,n,m,o,p;
ucharcode[]={0xa4,0xc0,0x90,0xc0,0xb0,0xbf,0xf9,0x90};
uchardm1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
charweikong[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
voiddelay0(uinti)//延时1毫秒子程序
{
ucharj;//定义局部变量j
while(i--)//每循环一次,变量减一,为零返回
{
for(j=0;j<123;j++);//循环123次
}
}
/*清零操作函数*/
voidq0()
{k=0;n=0;m=0;l=0;o=0;p=0;}
/*显示程序函数*/
voiddisplay()
{j=0xfe;
P2=j;P0=dm1[m];delay0
(1);j=_crol_(j,1);
P2=j;P0=dm1[n];delay0
(1);j=_crol_(j,1);
P2=j;P0=dm1[10];delay0
(1);j=_crol_(j,1);
P2=j;P0=dm1[k];delay0
(1);j=_crol_(j,1);
P2=j;P0=dm1[l];delay0
(1);j=_crol_(j,1);
P2=j;P0=dm1[10];delay0
(1);j=_crol_(j,1);
P2=j;P0=dm1[o];delay0
(1);j=_crol_(j,1);
P2=j;P0=dm1[p];delay0
(1);j=_crol_(j,1);}
//*秒表工作程序*//
voidmb()
{for(p=0;p<6;p++)
{
for(o=0;o<10;o++){
for(l=0;l<6;l++){
for(k=0;k<10;k++)
{
for(n=0;n<10;n++)
{if(P1==0xdf){break;}
else
{
for(m=0;m<10;m++)/*判断延时10ms是否达到*/
{
if(P1==0xfb)/*暂停功能是否执行*/
{
while(P1==0xf7)/*连续功能是否执行*/
{
if(P1==0xef){q0();}/*清零功能是否执行*/
else{display();}/*暂停时显示*/
}
}
else{display();}/*正常工作时显示*/
}
}
}
}
}}
}}
/*主程序*/
voidmain()
{
for(l=0;l<200;l++)
{j=0;k=0;
while(j<8)
{P2=weikong[j];P0=code[k];delay0
(1);j++;k++;}/*显示学号*/
}
While
(1)
{if(P1==0xfe){mb();}/*是否开始工作*/
else{P2=0XFE;P0=0X0C;}/*系统提示符"P."*/
}
}
附录D元器件清单
元器件名称
型号
数量
单片机
AT89S52
1片
芯片座
40脚
1个
四位一体数码管
共阳极/共阴极
2个
晶振
12M
1个
瓷片电容
33pf
2
蜂鸣器
5V
1个
电阻
4.7K
1个
电阻
1K
3个
电阻
470
24个
电阻
200
1个
电容
22uf
1个
三极管
S8550
9个
排阻
10K
2个
LED指示灯
红
9个
单排插针
8脚
4排
下载口
10针
1个
温度传感器
18B20
1个
六脚开关
1个
图D-1元器件清单