基于51单片机的秒表设计

 

         

      单片机课程设计

课程题目:基于51单片机的秒表设计

专业:电气工程及其自动化

班级:电气111

学号:                       

姓名:                       


目录

第一章 题要求内容及目的……………………………… 2

 1.1 单片机课题内容…………………………………… 2

 1.2 单片机课题要求…………………………………… 2

 1.3 单片机课题目的…………………………………… 3

第二章 硬件设计………………………………………… 3

 2.1 AT89C51单片机简介………………………………  4

 2.2设计思路………………………………………………4

第三章 软件设计………………………………………… 5

3.1 软件程序……………………………………………… 5

3.2 设计实验电路图……………………………………  11

第四章 实验设计总结……………………………………12

第五章 参考文献…………………………………………13

                                                                           


1 课题内容要求及目的 

1.1课题内容 

用AT89C51设计一个秒表,该秒表课可显示0.0~99.9秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。  本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计位!其中有三位数码管用来显示数据,显示秒(两位)和十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。计秒数码管采用三位的数码管,当计数超过范围是所有数码管全部清零重新计数。

1.2课题要求

 本课题是基于单片机的秒表系统设计,它的具体要求有以下几点: 

(1)用单片机AT89C51实现;

(2)以0.1秒为最小单位进行显示; 

(3)秒表量程为0.0-99.9秒,用 LED显示;

(4)有清零、开始、停止功能。

1.3课题目的

 通过课程设计,进一步熟悉和掌握AT89C51单片机的结构及工作原理,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。通过完成一个包括电路设计和程序开发的完整过程,进一步了解开发一单片机应用系统的全过程,通过此综合训练,为以后毕业设计打下一定的基础。

(1)利用单片机定时器计数器中断设计秒表,从而实现秒、十分之一秒的计时。

(2)综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力,加深对单片机课程的全面认识。

(3)通过本次课程设计能够对程序进行编辑,校验。

(4)通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。

 (5)通过本次系统设计,增强自己的动手能力。认识单片机在日常生活中的应用的广泛性,实用性。

(6)该实验通过单片机的软件延时设计,设计简单的计时器系统,能正确的计时。 

                                                                                                    2.硬件设计 

2.1 AT89C51单片机简介 

 AT89C51是一种低功耗、高性能的片内含有4KB快闪可编程/擦除只读存储 器(FPEROM-Flash Programmable and Eraseable Read Only Memory)的8位CMOS微控制器,使用高密度、非易失存储技术制造,并且与89C51引脚和指令系统完全兼容。引脚分别如图2.1所示。  

                         图2.1 

 图2.1所示的单片机是引脚双列直插封装方式,电源引脚40脚与接地脚20。 P0口作输入口使用时,应先向口锁存器写入1。P1口是一个带有内部上拉电阻的8 位双向I/O端口。P1的输出缓存可驱动4个TTL输入。P2口是一个带有内部上拉电阻的8位双向I/O端口。P3口也是一个带有内部上拉电阻的8位双向I/O端口, P3端口还用于一些复用功能。

2.2设计思路  

这次的试验要求进行计时并且在数码管上显示时间,先要基本了解硬件内在结构,确定用p2并行端口进行数码管控制输入,使用P1.6,P1.5,P1.4进行选择0.1秒位,秒位,十位秒位,以P3.0为开始控制,P3.1为停止控制,P3.2为清零控制。本次实验设计的基本思路是要求借助AT89C51单片机做出一个0-99.9秒表从十位秒到0.1位秒数这些计时的位数是存在一个内嵌的结构, 就是0.1秒位满足条件然后进行跳位使秒位加一的过程,当0.1s到0.9s时该位自动清零并且秒位加一,秒位达到9时也自动清零并向十秒位加一。当计数超过范围是所有数码管全部清零重新计数。其次开始控制,停止控制,清零控制等功能,我们采用蜂鸣器进行提示,该信号由P1.0输出由7406非门与外加电源驱动,通过一个延时子程序加以控制。最后就是根据硬件的条件进行编程,要求软硬件相互兼容。这也是设计的关键之处。

3.软件设计

3.1软件程序

根据课题内容,可作出主流程序树状图如图3.1所示:

 流程图体现着设计程序的思路程序,开始后首先进行数据初始化然后是条件判断满足条件或不满足则进行对应的处理,如首先依次判断

                     图3.1

,然后十分之一秒计数,再判断是否进位。

 实验程序清单:

 #include <reg51.H>

{

sbit sta_end=P3^4;

sbit reset=P3^7;

unsigned char code table0[]={0x3f,0x06,0x5b,0x4f,0x66,

                            0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,

                    0x92,0x82,0xf8,0x80,0x90};

/*声明second10用于计数十分之一秒变化,second1用于记录秒的个*/       /*位,second2用于记录秒的十位*/

unsigned int second10,second1,second2;

bit bdata flag;

/*以下是设置延时功能的函数*/

void delay()                    

{

  unsigned char i,j;

  for(i=90;i>0;i--)

  for(j=200;j>0;j--);

}

}

/*以下是设置时间的函数*/

void  setTime()  

{               

  second10++;

  if(second10==10)             /*当十分之一秒计数到十后从零重新计时*/

  {

  second10=0;                 /*同时秒计时个位加一*/

  second1++;

  if(second1==10)             /*当秒计数个位到十后从零重新计时*/

  {

     second1=0;

     second2++;               /*同时秒计时十位加一*/

     if(second2==10)

       second2=0;

  }

  }

}

/*以下是向LED管输数据并使之显示的函数*/

void dispact()                                      

{

  P3=0xfe;                     

  P0=table1[second1];     

  delay();

  P3=0xfd;

  P0=table1[second2];

  delay();

  P2=table0[second10];  

}

/*以下是设置时间函数和输数据函数被此函数调用实现,利用定时器中断*/

/*十分之一秒刷新一次,实现十分之一秒进一*/

Timer0 () interrupt 1 using 1       

{

  TH0 = (65535 - 50000)/256;

  TL0 = (65535 - 50000)%256;

  if(flag)

    setTime();

  dispact();

}

void main(void)                  

{

  TMOD = 0x01;

  TH0 = (65535 - 50000)/256;         /*定时器赋初值*/

  TL0 = (65535 - 50000)%256;

  flag = 0;

  EA = 1;                            /*cpu开中断*/

  TR0 = 1;                           /*利用定时器0*/

  ET0 = 1;                           /*外部中断允许*/

  do

  {

    if(!sta_end)

  {

     if(flag == 0)

       flag = 1;

     else flag = 0;

  }

 

if(!reset)                            /*复位设置,全部清零*/

  {

    flag = 0;

    second10 = 0;

    second1 = 0;

    second2 = 0;

  }

  }while(1);

}

3.2设计实验电路图

设计的实验原理图如下所示:         

4.实验设计总结      

   通过这两周程设计,我对一些专业知识和电子设计有了更深的了解,同时也尝试着去应用自己的所掌握的知识。本次电子课程设计主要是对已学习的模拟电子技术、数字电子技术和单片机的综合应用,同时加上电路等知识,设计完成了利用软件模拟的秒表。经过几天的奋战,我感受很深.

我们一小组四个人一块儿讨论设计了此次试验,在设计过程中深感自己在培养动手能力这方面还需很大的努力。同时,通过这次我们积极的通过网络,书籍等资源,在同学的帮助下,把这个课程设计作为一次锻炼,为以后生活学习中培养善于动手,乐于动手的习惯。 单片机课程设计不仅给我们提供了一个良好的应用自己所掌握的知识的平台,又是检验自己所学知识的一次考核。 我们运用各自在各方面的优势中和起来,形成了一个团队.通过团队力量,才使设计得以完成.可以说,我们三个人是一个不可或缺的整体,少了任何一个人都是无法完成任务的。

在设计的过程中我们也不可避免的遇到了很多的问题。尤其是在调试过程中,会因为某些原因出不来结果,或三个人之间出现了意见分歧,但在最后都达成一致。通过这次的课程设计,我们也发现了不少自己不会的知识,通过查询各方面资料,我们也进步了很多,有学会了很多上课时没掌握的东西, 最后在调试结果出来后,我们更是无比的兴奋,无比的自豪。总之,通过这次电子课程设计,我不仅对自己的知识有了更好的掌握和应用,更了解到团队精神的力量.在以后的学习和生活中受用终身。

5.参考文献

【1】.张红兰等主编.单片机原理及应用.机械工业出版社.2012.7

【2】.百度文库相关材料

                                         



 

 

第二篇:51单片机课程设计秒表源程序

                    

相关推荐