找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4138|回复: 1
收起左侧

单片机0~9.9S秒表程序设计与仿真 课程设计报告书

[复制链接]
ID:365908 发表于 2018-7-5 21:52 | 显示全部楼层 |阅读模式
电子设计与仿真
课程设计报告书
课题名称
秒表设计


计算机电子系
电子
指导教师

  • 设计任务及要求:
  • 用单片机AT89C51设计一个8LED数码显示秒表,显示时间为0S~9.9S。每秒自动加一。
  • 设计一个“开始”按键,“复位”按键和一个“暂停”按键。
  • 接通电源后,从00.00开始计时一直到99.99再回到00.00结束或继续循环。
4)采用proteus\protel软件仿真电路,给出并分析仿真结果。
指导教师签名:
   2018年1月  日     

二、指导教师评语:



指导教师签名:
               2018年1月  日



三、成绩

指导教师签名:

                                                          2018年 1 月   日                                          



目录
1、概述            
2、课题方案设计            
  2.1系统设计目的
2.2 系统总体设计要求            
2.3系统模块结构论证            
3、系统硬件设计            
3.1总体设计            
3.2单片机运行的最小系统            
  3.2.1  51单片机最小系统电路介绍            
  3.2.2单片机的振荡电路与复位电路            
3.3 数码管介绍            
4、软硬件联调及调试结果            
4.1软硬件调试中出现的问题及解决措施            
5、结束语            
参考文献            
附录            
附录1:proteus仿真图            
  附录2:主要仪器与设备
  附录3:程序
1.概述
21世纪是一个电子技术和电子元件有更大发展的世纪。作为一个电子专业的大学生,我们不但要有扎实的基础知识、课本知识,还应该有较强的动手能力。现实也要求我们既精通电子技术理论,更要掌握电子电路设计、实验研究和调试技术。课程设计就是一个理论联系实际的机会。
    本次设计主要完成具备基本功能的电子秒表的理论设计,电子秒表是重要的记时工具,广泛运用于各行各业中。作为一种测量工具,电子秒表相对其它一般的记时工具具有便捷、准确、可比性高等优点,不仅可以提高精确度,而且可以大大减轻操作人员的负担,降低错误率。
在设计中应用到数码管,数码管主要用于楼体墙面,广告招牌、高档的DISCO、酒吧、夜总会、会所的门头广告牌等。特别适合应用于广告牌背景、立交桥、河、湖护栏、建筑物轮廓等大型动感光带之中,可产生彩虹般绚丽的效果。 用护栏管装饰建筑物的轮廓,可以起到突出美彩亮化建筑物的效果。
2.课题方案设计
2.1系统设计目的
  • 熟悉集成电路的引脚安排
    2)掌握各芯片的逻辑功能及使用方法。
    3)了解秒表的组成及工作原理。
    5)熟悉秒表的设计与制作。

(6)熟练掌握仿真软件的设计方法的流程。

2.2系统总体设计要求

1)用单片机AT89C51设计一个8位LED数码显示秒表,显示时间为0S~9.9S。每秒自动加一。
2)设计一个“开始”按键,“复位”按键和一个“暂停”按键。
3)接通电源后,从00.00开始计时一直到99.99再回到00.00结束或继续循环。
4)采用proteus\protel软件仿真电路,给出并分析仿真结果。
2.3系统模块结构论证
1.单片机模块选择:
方案一:选用飞思卡尔单片机,飞思卡尔单片机功能强大,但是价格相对要高,而且对此不熟悉。
方案二:采用STC89系列单片机,其架构简单,相对熟悉,价格便宜,对设计功能已经足够,焊接也是比较容易。
因此,选择方案二。
2.显示模块选择:
方案一:采用8段发光二级管作为显示模块核心。
方案二:采用LCD液晶显示器作为显示模块核心。
发光二级数码管节能环保,显示直观。因此选择方案一。
3.系统硬件设计
3.1总体设计
   利用单片机定时器/计数器中断设计秒表,从而实现秒的计时。用8段发光二级管来显示秒表数据。增加一个清零按钮,计时结束后可以清零。通过采用proteus仿真软件来模拟实现。模拟利用AT89C51单片机、数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位。数码管用来显示数据,一位数码管显示个位1~9,满十进一后显示十位的数码管的数字加一,并且个位显示清零重新从零计数。计秒数码管采用两位的数码管,当计数超过范围是所有数码管全部清零重新计数。
软硬件设计是设计中不可缺少的,为了满足功能和指标的要求,资源分配如下:
   晶振采用11.0592MZ的外部晶振频率
   内存分配:
P0口与数码管个位和十位数据输入端相连,控制其段选信号,输出1~9不同字型。
P3口的P3.1、P3.2分别与秒表个位和十位数码管位选连接,控制秒表的计数以及计数的开启/暂停/继续与复位清零。
本设计包含有单片机最小系统、复位模块、发光二级数码管显示模块。
其中最小系统模块由STC89C51、电阻、电容和晶振电路等主要硬件组成。
复位模块由二极管、电阻和复位开关组成。
发光二级数码管显示模块由四位八段数码管组成。
3.2单片机运行最小系统
最小系统模块由STC89C51、电阻、电容和晶振电路等主要硬件组成。
3.2.1  51单片机最小系统电路介绍
1.  51单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。
2.  51单片机最小系统晶振Y1也可以采用11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。
3.  51单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好
4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。
标识符号 地址 寄存器名称
P3 0B0H I/O口3寄存器
PCON 87H 电源控制及波特率选择寄存器
SCON 98H 串行口控制寄存器
SBUF 99H 串行数据缓冲寄存器
TCON 88H 定时控制寄存器
TMOD 89H 定时器方式选择寄存器
TL0 8AH 定时器0低8位
TH0 8CH 定时器0高8位
TL1 8BH 定时器1低8位
TH1 8DH 定时器1高8位
89C51管脚说明:
  VCC:供电电压。
  GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
  P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
  P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
  P3口也可作为AT89C51的一些特殊功能口,如下表所示:
  口管脚 备选功能
  P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
  P3.2 /INT0(外部中断0)
  P3.3 /INT1(外部中断1)
  P3.4 T0(记时器0外部输入)
  P3.5 T1(记时器1外部输入)
  P3.6 /WR(外部数据存储器写选通)
  P3.7 /RD(外部数据存储器读选通)
  P3口同时为闪烁编程和编程校验接收一些控制信号。
  RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
  PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
  XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
  XTAL2:来自反向振荡器的输出。
3.2.2单片机的振荡电路与复位电路
  • 振荡电路
      采用内部时钟方式时,如图所示。片内的高增益反相放大器通过XTAL1、XTAL2外接作为反馈元件的片外晶体振荡器(呈感性)与电容组成的并联谐振回路构成一个自激振荡器,向内部时钟电路提供振荡时钟。振荡器的频率主要取决于晶体的振荡频率,一般晶体可在1.2~12MHz之间任选,电容C1、C2可在5~30pF之间选择,电容的大小对振荡频率有微小的影响,可起频率微调作用。
本电路选用的是内部振荡器方式,。选用内部振荡器比选用外部时钟电路简单并且易于实现。最重要的是此电路易于调试,而且精度高。
2. 复位电路                                   
复位电路可分为上电复位和外部复位两种方式。
通过某种方式,使单片机内各寄存器的值变为初始状态的操作称为复位。 MCS—51单片机在时钟电路工作以后,在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作(一般复位正脉冲宽度大于10ms)。复位分为上电复位和外部复位两种方式。

(a)上电复位电路   (b)上电/外部复位电路
上电复位是在单片机接通电源时,对单片机的复位。上电复位电路如图(a)所示。在上电瞬间RST/VPD端与VCC电位相同,随着电容上电压的逐渐上升,RST/VPD端电位逐渐下降。上电复位所需的最短时间是振荡器振荡建立时间加2个机器周期。复位电路的阻容参数通常由实验调整。图(a)参考电路中,电路参数C取22uF,R取1Kq,可在RST/VPD端提供足够的高电平脉冲,使单片机能够可靠地上电自动复位。
图(b)为既可进行上电自动复位,也可外部手动复位的电路示意图,R1可取200q左右。当需要外部复位时,按下复位按钮即可达到复位目的。
本文采用的是上电/外部复位电路,如图(b)所示。上电/外部复位电路比上电复位电路在应用上更加直观、方便、易于实现及切换。

  振荡器特性:
  XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3.3 数码管介绍

                             八段数码管引脚图
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示)数码管的8个显示笔划"a,b,c,d,e,f,g,dp";按能显示多少个“8”可分为1位、2位、4位等等数码管;
发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。
4.软硬件联调及调试结果
4.1软硬件调试结果中出现的问题及解决措施
   1.在运行时发现我的秒表走的有点慢,五秒过去了只显示到四,那就是程序的问题了,再反过来检查程序,再经过一番计算,修改了一些延时参数,最终可以准确的以秒运行。
    2.一开始做好实验步骤后开始连线到最后结果显示不出来,就开始一遍遍筛选出错的地方发现有的地方线路接错了,并且少了一个软件。最后重新连了一遍,成功仿真了结果。
5.结束语
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。
    回顾起此次单片机课程设计,我仍感慨颇多,从理论到实践,可以说是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机C语言掌握得不好……通过这次课程设计后,一定把以前所学过的知识重新温故。
参考文献
[1] 穆兰,单片微型计算机原理与接口技术[M].北京机械工业出版社
[2] 张毅刚,等.MSC-51单片机应用设计[M].哈尔滨工业大学出版社
[3] 蒋智勇,等.单片微型计算机原理与应用[M].沈阳辽宁科技出版社
附录
附录一:proteus仿真图

附录2:基于单片机的秒表设计元器件目录表
元件名称
数量
备注
AT89C51单片机
一块
附底座
晶振
一块

八段发光二级数码管
一块

按钮开关
三个

极性电容
三支

电阻
一个、三个

  发光二极管
一个

排阻
一个


  1. #include <reg52.h>
  2. code unsigned char
  3. tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};        //共阴数码管0-9
  4. code unsigned char
  5. tab1[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};     //共阴数码管0-9带小数点
  6. sbit key1=P1^0;           //开始、暂停
  7. sbit key2=P1^1;           //清零
  8. static unsigned char ms,sec;
  9. static unsigned char Sec[8],Ms[8];
  10. static int i,j;
  11. void delay(unsigned int cnt)
  12. {
  13. while(--cnt);
  14. }
  15. void main()
  16. {
  17.   unsigned char key3_flag=0, key4_flag=0;
  18. TMOD=0x01;                //定时器0,10ms定时
  19. TH0=0xd8;
  20. TL0=0xf0;
  21. ET0=1;
  22. TR0=0;

  23. TMOD=0x10;                //定时器1,用于动态扫描
  24. TH1=0xF8;
  25. TL0=0xf0;
  26. ET1=1;
  27. TR1=1;
  28. EA=1;

  29. sec=0;                     //初始化
  30. ms=0;
  31. P1=0xff;
  32. i=0;
  33. j=0;
  34. start:
  35. while(1)
  36. {
  37.   //开始、暂停
  38.   if(!key1)                 //判断是否按下
  39.   {
  40.    delay(50);               //去抖,延时50ms
  41.    if(!key1)
  42.    while(!key1)             //等待按键释放
  43.    {;}
  44.    TR0=!TR0;
  45.   }
  46. //清零

  47. if(!key2)
  48. {
  49.   delay(50);
  50.   if(!key2)
  51.     while(!key2)
  52.    {;}
  53.    TR0=0;
  54.    ms=0;
  55. sec=0;
  56.    for(i=0;i<8;i++)
  57.     {
  58.      Sec[i]=0;Ms[i]=0;
  59.      }
  60.     i=0;
  61.       }
  62. }
  63. }
  64. /************************************/
  65. /*            定时中断1            */
  66. /***********************************/
  67. void time1_isr(void) interrupt 3 using 0          //定时器1用来扫描
  68. {
  69.   static unsigned char num;
  70.   TH1=0xF8;
  71.   TL1=0xf0;
  72.   switch(num)
  73.    {
  74.     case 0:P2=0xfe;P0=tab[sec/10];break;     //显示秒十位
  75.     case 1:P2=0xfd;P0=tab1[sec%10];break;   //显示秒个位
  76.     case 2:P2=0xfb;P0=tab[ms/10];break;     //显示十位
  77.     case 3:P2=0xf7;P0=tab1[ms%10];break;   //显示个位
  78.     default:break;
  79.    }
  80. num++;
  81. if(num==4)
  82. num=0;
  83. }
  84. /************************************/
  85. /*            定时中断0            */
  86. /***********************************/
  87. void tim(void) interrupt 1 using 1
  88. {
  89. ……………………

  90. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整的Word格式文档51黑下载地址:
秒表.docx (307.63 KB, 下载次数: 39)
回复

使用道具 举报

ID:435069 发表于 2018-11-28 16:30 | 显示全部楼层
想要稍微改变一下此程序怎么改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表