89C51单片机课程设计之秒表设计实验报告

这里可以加学校LOGAL 

单片机课程设计报告

院系: 12级物信系

班别:光信息科学与技术7

课程名称:  秒表设计

 姓名:龚俊才   欧一景

 学号: 1210407033    1210407041

指导老师:张涛

2011.12.23

目录

1课程设计的目的和任务

1.1 单片机秒表课程设计的概述

1.2课程设计思路及描述

1.3 课程设计任务和要求

2硬件与软件的设计流程

2.1系统硬件方案设计

2.2软件方案设计

3 程序编写流程及课程设计效果

3.1源程序及注释

3.2原理图分析

3.3课程设计效果

4 心得体会

5 相关查阅资料

1. 课程设计的目的和任务

1.1单片机秒表课程设计的概述

一、课程设计题目

秒表系统设计——用STC89C52RC设计一个4位LED数码显示“秒表”,显示时间为00.00~99.99秒,每10毫秒自动加一,每1000毫秒自动加一秒。

二、增加功能

增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。

三、课程设计的难点

单片机电子秒表需要解决三个主要问题,一是有关单片机定时器的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程。

四、课程设计内容提要

本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本课程设计有两个开关按键:其中key1按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key2按键按下去时数码管清零,复位为“00.00”.

课程设计的意义

1)        通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。

2)        掌握定时器、外部中断的设置和编程原理。

3)        通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

4)        该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义

课程设计仪器

a) 集成电路芯片8051,七段数码管,89C51单片机开发板

b) MCS-51系列单片机微机仿真课程系统中的软件(Keil uvision2)。

1.2课程设计思路及描述

该课程设计要求进行计时并在数码管上显示时间,则可利用MCS-51系列单片机的芯片AT89C52的P3.2,P3.5作为按键的入口;定时器T1作为每0.01秒加一的定时器。其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。

方框图如下图1:

   图1数字秒表设计导向

1.3 课程设计任务和要求

1.3.1 设计指标

了解8051芯片的的工作原理和工作方式 ,使用该芯片对LED数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并能用按钮实现秒表起动、停止、99秒、清零等功能,精确到0.01秒。

要求选用定时器的工作方式,画出使用单片机控制LED数码管显示的电路图,并实现其硬件电路,并编程完成软件部分,最后调试秒表起动、停止、清零等功能。

1.3.2 设计要求

①     画出电路原理图(或仿真电路图);

②     软件编程与调试;

③     电路仿真与调试;

2.软件与硬件设计

2.1系统硬件方案设计

单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。

在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。

 在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED指示灯就可以进行处理了。在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。

       图2系统硬件结构框

2.2软件方案设计

此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图 3所示:

 

3 程序编写的流程及课程设计效果

3.1 源程序及注释

/*-----------------------------------------------

  名称:数码管显示,按键控制秒表

  论坛:www.doflye.net

  编写:shifang

  日期:2009.5

  修改:无

  内容:中断按键控制,数码管显示,中断0控制计时和停止,中断1清零

------------------------------------------------*/

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

unsigned int msecond,second;//定义全局变量

bit GoFlag;//定义停止,计时标志

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

sbit LATCH1=P2^2;//定义锁存使能端口 段锁存

sbit LATCH2=P2^3;//                 位锁存

sbit KEY=P3^2;

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码

unsigned char TempData[8]; //存储显示值的全局变量

void DelayUs2x(unsigned char t);//函数声明

void DelayMs(unsigned char t);

void Display(unsigned char FirstBit,unsigned char Num);

void Init_Timer0(void);

void CLR(void);

/*------------------------------------------------

                    主函数

------------------------------------------------*/

void main (void)

{

unsigned char num=0;                 

 

  EX0=1;         //外部中断0开

  IT0=1;         //IT1=0表示边沿触发

  EX1=1;         //外部中断1开

  IT1=1;         //IT1=1表示边沿触发

  Init_Timer0();

while (1)         //主循环

  {

       TempData[0]=dofly_DuanMa[second/10];//分解显示信息,如要显示68,则68/10=6  68%10=8 

       TempData[1]=dofly_DuanMa[second%10];

       TempData[2]=0x40;// "-"

       TempData[3]=dofly_DuanMa[msecond/10];//分解显示信息,如要显示68,则68/10=6  68%10=8 

       TempData[4]=dofly_DuanMa[msecond%10];

   

     //主循环中添加其他需要一直工作的程序

   

  }

}

/*------------------------------------------------

 显示函数,用于动态扫描数码管

 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示

 如输入0表示从第一个显示。

 Num表示需要显示的位数,如需要显示99两位数值则该值输入2

------------------------------------------------*/

void Display(unsigned char FirstBit,unsigned char Num)

{

      static unsigned char i=0;

     

       DataPort=0;   //清空数据,防止有交替重影

       LATCH1=1;     //段锁存

       LATCH1=0;

       DataPort=dofly_WeiMa[i+FirstBit]; //取位码

       LATCH2=1;     //位锁存

       LATCH2=0;

       DataPort=TempData[i]; //取显示数据,段码

       LATCH1=1;     //段锁存

       LATCH1=0;

      

       i++;

       if(i==Num)

          i=0;

}

/*------------------------------------------------

                    定时器初始化子程序

------------------------------------------------*/

void Init_Timer0(void)

{

 TMOD |= 0x01;      //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响         

 //TH0=0x00;        //给定初值

 //TL0=0x00;

 EA=1;            //总中断打开            (总中断控制开关)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

 ET0=1;           //定时器中断打开       (允许中断0的发生)

 TR0=1;           //定时器开关打开       (定时器T0开始工作)

}

/*------------------------------------------------

                 定时器中断子程序

------------------------------------------------*/

void Timer0_isr(void) interrupt 1

{

 static unsigned char num;

 TH0=(65536-2000)/256;         //重新赋值 2ms

 TL0=(65536-2000)%256;

 Display(0,8);

 if(GoFlag)

   {

   num++;

  if(num==5)

    {

    num=0;

   msecond++;

   if (msecond==100)//100进1

     {

     msecond=0;

     second++;//秒加1

     if(second==100)

       second=0;

     }

   }

  }

}

/*------------------------------------------------

              外部中断0程序

------------------------------------------------*/

void ISR_INT0(void) interrupt 0

{

if(!KEY)  //如果检测到低电平,说明按键按下

    {

     DelayMs(20); //延时去抖,一般10-20ms

     if(!KEY)     //再次确认按键是否按下,没有按下则退出

       {

      

          GoFlag=!GoFlag; //利用外部中断打开和关闭定时标志 用于开始和停止计时

            }

       }

     //主循环中添加其他需要一直工作的程序

   

  }

/*------------------------------------------------

              外部中断1程序

------------------------------------------------*/

void ISR_INT1(void) interrupt 2

{

if(GoFlag==0)//停止时才可以清零

   CLR();

}/*------------------------------------------------

              数值清零

------------------------------------------------*/

void CLR(void)

{

 second=0;      //利用外部中断清零

 msecond=0;

}

void DelayUs2x(unsigned char t)

{  

 while(--t);

}

void DelayMs(unsigned char t)

{

    

 while(t--)

 {

     //大致延时1mS

     DelayUs2x(245);

     DelayUs2x(245);

 }

}

3.2原理图分析

                    

                         

图4按键原理图

             图5显示电路

图6电源电路原理图

3.3课程设计效果

通过最后软件对程序的编译,组建,执行,还有最终生成.hex文件,把.hex下载到TX-1C开发板的STC89C52RC单片机上的最终效果图如下:

下图:  开始运行,执行自动加1

下图:下图为复位后的显示

下图:“开始自加”运行,一直加到99秒

4 心得体会

  以下是我在设计这个秒表过程中所总结的心得,整个过程主要是:设计程序----修正程序 ----扩展功能----完善程序,经过自己的独立思考与查阅相关知识,最终完成这个作品.

5 相关资料查阅

【1】孙育才编著.MCS-51系列单片微型计算机及其应用.东南大学出版社.2009.12

【2】郭天祥编著.51单片机C语言教程-入门、提高、开发、拓展全攻略.电子工业出版社.2010.05

【3】刘刚编著.Protel DXP 20## SP2原理图与PCB设计.电子工业出版社.2009.07

【4】丁峻岭主编.C语言程序设计.中国铁道出版社.2009.12

 

第二篇:秒表单片机课程设计修改版

本文由tung214贡献

doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 单片机技术课程设计说明书

数字式秒表

系 、 部: 学生姓名: 指导教师: 专 班 业: 级:

电气与信息工程系

职称 讲师

完成时间: 学 号:

2010 年 12 月 10 日

第 I 页

摘要

本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成数字 式秒表的硬件电路的。 电子秒表电路主要由 AT89S52 单片机最小系统电路、 七段数码管 动态显示电路和控制电路组成,它能实现八位数码显示和多次计时,能通过控制电路能 控制时间的暂停和开始,能够最少十次计时,查询计时时间。 关键字: 关键字:AT89S52 数码管 最小系统

Abstract The design of the finished product is based on the SCM system to increase the minimum display circuit and control circuit to complete the digital watches of the hardware circuit. Stopwatch circuit mainly by the minimum system AT89S52 microcontroller circuit, seven segment LED display circuit and control the dynamic circuit, it can achieve eight digital display and multiple time, through the control circuit to control the suspension and the beginning of time, to at least ten Second time, the query time. Keywords: Keywords AT89S52 digital minimum system 目

??1 1 总体设计方案简介?? ?? ?? ??1 设计课题任务?? 1.1 设计课题任务?? ?? ?? ?? ?? 1.2 系统分析 ?? ?? ?? 1 ?? ?? 1.3 系统方案 ?? ?? ?? 1 1.3.1 1.3.1 方案设计 ?? ?? ?? ?? 1

1.3.2 ?? ??2 1.3.2 方案论证 ?? ?? ??2 系统硬件设计 ?? ?? ?? ??3 2 系统硬件设计 ?? ?? ?? ??3 控制芯片的介绍?? ?? ??3 2.1 控制芯片的介绍?? ?? ??3 2.2 单片机最小系统 ..4 ?? ?? ?? ..4 ??4 ??4 ??

振荡电路―― ――让单片机活起来的心脏 2.2.1 振荡电路――让单片机活起来的心脏 复位电路―― ――恢复初始状态值 ?? ..4 2.2.2 复位电路――恢复初始状态值 ?? ?? ..4 2.2.3 程序下载接入电路 ?? ?? ?? 4

?? ??5 2.3 电源电路设计 ?? ?? ??5 ?? ?? ??6 2.4 显示电路设计 ?? ?? ??6 控制电路设计?? ?? 2.5 控制电路设计?? ?? ??6 总体电路设计?? ?? ??7 2.6 总体电路设计?? ?? ??7 ?? ??7 2.7 元件清单 ?? ?? ??7 系统软件设计 ?? 3 系统软件设计 ?? ?? ?? 8 程序设计思路?? 3.1 程序设计思路?? ?? ?? 8 流程图?? 3.2 流程图?? ?? ?? 9 源程序?? ??11 3.3 源程序?? ?? ??11 仿真结果?? ??18 3.4 仿真结果?? ?? ??18 ??19 4 课程设计体会 ?? ?? ??19 ?? ?? 致谢?? ??20 ?? ?? ??21 附录 1?? ?? ??21 ?? ?? ??22 附录 2?? ?? ??22 参考文献?? 参考文献?? 23 文献??

第 III 页

1 总体设计方案简介

1.1 设计课题任务

设计一个具有特定功能的数字式秒表。 该数字式秒表上电或按键复位后能自动显示 系统提示符“P.” ,进入准备工作状态。该数字式秒表应具有开始、暂停、连续、清零和 停止功能

1.2 系统分析

设计的电路主要是能多次记时和查询时间,记时的多少通过显示电路显示出来,每 一次计时可以通过控制电路查询出来。设计框图如图一所示;

1.3 1.3 系统方案

1.3.1 方案设计 1.3.1 方案一:利用分分离门电路和集成块电路设计数显定时器;可分为五个功能模块: 秒脉冲发生器、计数器、译码显示电路、时序控制电路。秒脉冲发生器:555 振荡器振 荡周期 T=0.693(R5+2R6)C=0.72, 频率 f=1.39Hz; 计数器和控制电路是系统的主要部分, 计数器是用可加(减)的计数方法,它是十进制计数的方式,选用 74LS192,计时器完 成计时功能;控制电路具有直接控制计数器的启动计数、暂停/连续计数、查询所计数、 译码显示电路显示等功能。设计框图如二所示;

方案二:利用 AT89S52 单片机设计数显定时器和定时器。此方案采用 AT98S52 单 第 1 页

湖南工学院《单片机应用技术》课程设计报告

片机系统来实现。单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和 逻辑控制。单片即系统可用数码管显示秒表的值,能用键盘输入暂停,并可实现报捷。 本方案选用了 AT98S52 芯片(内部含有 8KB 的 EEPROM) ,不需要外扩展存储器,可 使系统整体结构更为简单。设计框图如图三所示;

1.3 1.3.2 方案论证 方案一是电子式,时间走的很准时,也能达到报警的功能实现,显示时间是现代式 的数码管显示,但要做好是有很大的难度的,线非常之多,元件分散、多,容易把线接 错;我采用了方案二以 AT98S52 芯片为中心控制系统,可实现显示、键盘控制、报警等 功能,大大提高了系统的智能化,也使得系统所测结果精度大大提高。故经过对三种方 案的比较本设计及制作采用了。

第 2 页

湖南工学院《单片机应用技术》课程设计报告

2 硬件设计

2.1 控制芯片的介绍 控制芯片的介绍

AT89S52(与 AT89S51 相同)单片机的外型如图四所示。 单片机可分为通用型和专用型, 种类繁多。 这里我们主要介绍 AT89S52 单片机是属 于典型代表的 MCS-51 系列单片机, 它是一种能处理 8 位数据的通用型单片机。 Atmel 以 公司生产的具有 CMOS 工艺、低功耗、高性能的 AT89S52 为例,介绍单片机的工作原 理、控制程序的编写及开发应用。AT89S52 是一个高性能 CMOS 8 位单片机,芯片内集 成了通用 8 位中央处理器, 片内含 8k Bytes 的可反复擦写 1000 次的 Flash 只读程序存储 器(ROM), 支持 ISP(In-system programmable)功能。 AT89S52 内部有 128 bytes 的随机存 取数据存储器(RAM) 5 个中断优先级 2 层中断嵌套中断,2 个 16 位可编程定时计数 , 器,2 个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。兼容标准 MCS-51 指令系统及 80C51 引脚结构。

图四

图五 AT89S52 引脚图

AT89S52 有 40 个引脚,32 个外部双向输入/输出(I/O)口。该芯片还具有 PDIP40、

TQFP44 和 PLCC44 三种封装形式,以适应不同产品的需求。外型和封装形式如图四所 示。从外观上看单片机就是一块集成电路,它与在模拟电路和数字电路中学习过的集成 电路电路最主要的区别是:普通集成电路电路的引脚功能基本上固定的,而单片机的一 些引脚的功能是可以通过编程进行控制,一些引脚既可作输入又可作输出。 单片机广泛用于工业控制、智能仪器仪表、计算机设备及网络、通信领域、家用电 器、医用设备、军用设备等各个方面。对于单片机这样的集成电路,要设计让它完成一

第 3 页

湖南工学院《单片机应用技术》课程设计报告

个特定的工作任务,除完成设计相关的硬件电路外,还要设计相应的控制软件,才能使 整个电路按照设计要求自动地进行工作。 所以, 电子电路学习到单片机这个知识层次时, 除要学习相关硬件知识,还学习相关软件设计知识,才能对单片机进行控制和应用。单 片机的开发和应用,是利用硬件和软件的结合来实现的。由于单片机的功能强大,充分 理解各引脚功能,灵活编写控制程序去控制引脚功能,完成各种需要的设计。

2.2 单片机最小系统

振荡电路―― ――让单片机活起来的心脏 2.2.1 振荡电路――让单片机活起来的心脏 AT89S52 是内部具有振荡电路的单片机, 只需在 18 脚和 19 脚之间接上石英晶体 (如 图六中所示) ,给单片机加上工作所需直流电源,振荡器就开始振荡起来。振荡电路就 为单片机工作提供了所需要的时钟脉冲信号,使单片机的内部电路,单片机的内部程序 (若有)开始工作起来。振荡电路不工作,整个单片机电路都不能正常工作。AT89S52 常外接 6MHz、 MHz 的石英晶体, 12 图中接入的是 12MHz 的石英晶体, 最高可接 24MHz 石英晶体。 18 脚和 19 脚分别对地接了一个 20P 的电容,目的是防止单片机自激。 如果从 18 脚输入外部时钟脉冲,则 19 脚接地。 复位电路――恢复初始状态值 2.2.2 复位电路――恢复初始状态值 复位电路就是在 RST 端 脚) (9 外接的一个电路, 目的是当单片机上电开始工作时, 内部电路从初始状态开始工作, 或者在工作中要想人为的让单片机重新从初始状态开始 工作。 在时钟工作的情况下, 只要 AT89S52 的复位引脚高电平保持两个机器周期以上的 时间,AT89S52 便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设 成已知状态,并且从地址 0000H 处开始读入程序代码而执行程序。 具体电路如图六所示, C1 和 R2 构成上电自动复位电路, 实现手动开关复位。 由 S17 2.2.3 程序下载接入电路 图六中有一个下载线接口 J13,J13 的 1 脚接 5 伏电源,2、3、4 脚接单片机的 P1 口 的 P1.5、P1.6、P1.7 三个引脚,5 脚接复位引脚,6 脚接地。在计算机中编写好的程序 通过数据下载线连接到单片机实验电路插接口(J13) ,实现从计算机将程序下载到单片 机的程序存储器中,完成单片机的程序写入工作。

第 4 页

湖南工学院《单片机应用技术》课程设计报告

VCC J13

下下 下数 数

VCC

1 2 3 4 5 6 CON6

P1. 5 P1. 6 P1. 7

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 ReSet

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

P10/T P11/T P12 P13 P14 P15 P16 P17 RESET RXD TXD INT0 INT1 T0 T1 WR RD X1 X2 GND

U1 AT89S51

P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27 VCC EA/VP ALE/P PSEN

39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 40 31

D00 D01 D02 D03 D04 D05 D06 D07 P20 P21 P22 P23 P24 P25 P26 P27

复数 复复

S17

C1 4.7u ReSet

P30 P31 P32 P33 P34 P35 P36 P37

晶 晶

R2

10K

X1 19 11.0592MHz C6 20p X2 18 20 C7 20p

VCC

30 ALE 29

图六

单片机最小系统

由于 AT89S51 不仅象 89C51 支持程序的并行写入,而且支持 ISP 在线可编程的串 行写入,利用下载线将计算机将原程序编译后进行串行写入到 AT89S51,速度快、稳定 性好,同不时需要 VPP 烧写高压,只要 4~5V 供电即可完成写入。所以,本书主要介 绍用串行写入方式将程序到单片机。

电源电路设计 2.3 电源电路设计

电源电路如图 1-10 所示。通过 J15 电源插座接入大于 6~9 伏的直流电压,经 7805 稳压后给整个电路提供 5 伏直流电压。R11和 D10 为电源指示电路,通电后 D10 亮。 为了有效消除干扰,接入了几只 0.01μF 的电容器(电路图中没有) 。

J15 2 1

电 数 电 数

D9 1 Vin

U4

7805 GND Vout 3 R11 1K C9 100uF

VCC C10 104

C8 220uF

2

D10 LED

图七

第 5 页

湖南工学院《单片机应用技术》课程设计报告

2.4 显示电路设计

实验电路设计了一组数码管显示电路, 电路如图八所示。 八只数码管可以单只驱动, 也可动态驱动显示八位数码管。通过插接口 J6 接数码管七段显示段码输入端,通过插 接口 J10 接每位数码管的驱动信号。 单板机在输出七段显示码到 J6 的同时, 提供哪一位 数码显示的控制信号也输到 J10 的某一脚上,二者共同作用实现数码管的显示。

1 2 3 4 5 6 7 8 9 1 1 R1 排 1 02 排

共共 数数 数

VCC

J6 1 2 3 4 5 6 7 8 5 3 g 6 cm o3 h Q8 R10 1K 数 数 数 数 数 数 数

1 0

1 1

7

2

5

3

7

b

d

g

h

b

2

d

a

c

e

a

c

e 8

f

1 0 cm o2 f

4

1

4

cm o0

cm o1

cm o2

cm o3

cm o0

1 2

1 2

9

8

6

Q1

Q2

Q3

Q4

Q5

Q6

9

cm o1

1

Q7

R3 1K

R4 1K

R5 1K

R6 1K

R7 1K

R8 1K

R9 1K

8

7

6

5

4

3

2

数 数 数 数 数 数 数 数 数

图八

2.5 控制电路设计

控制电路主要由五个独立的按键组成,我们可以用按键来控制计时的开始、暂停、 清零和查询。所有按键的一端接地,另一端与单片机的 P2 口的几个引脚相连。具体电 路如下图九所示。

图九

第 6 页

1

J10

湖南工学院《单片机应用技术》课程设计报告

2.6 总体电路设计 2.6 总体电路设计

将上面的各个单元电路连在一起组成的实验电路,其如图十所示。

图十

2.7 2.7 元件清单

元件名 AT89S52 八段数码管 NPN 三极管 10K 电阻 无极性电容(30PF) 电解电容 排针 7805 整流二极管 发光二极管 1K 排阻 按键 12M 晶振 电源插座 下载线

第 7 页

数量 1 2 8 9 2 3 1 1 1 1 1 8 1 1 1

湖南工学院《单片机应用技术》课程设计报告

3 软件设计

程序设计思路 3.1 程序设计思路

在硬件的基础上,可以通过软件完成数字式秒表的设计。我先用了矩阵键盘上的任 意三个独立按键作为控制键。用一个键去控制计时的开始;用一个键控制暂停;用一个 键作计计时的清零按键。用按键扫描的方法判断按键是否按下。用动态显示的方法扫描 秒表的计数,显示所计下的数。用中断方法来进行计时加 1,每 10ms 中断一次进行重 新赋值并加 1,当 10ms 单元达到 10,就令该单元赋 0,并让 100ms 单元加 1,以此类 推。

第 8 页

湖南工学院《单片机应用技术》课程设计报告

3.2 3.2 流程图

1、 主程序流程图 程序开始 R1=R1+1 程序初始化 开各中断 R1=?#0ah hhhh ? R1=#00H 2、 加一子程序流程图

P1.0=?1

关定时器 0,1 调用显示子程序

R2=R2+1

R2=?#0ah

P1.0=?0

R2=#00H

开定时器 0,1

30H=R1 31H=R2

3、 INT0 中断子程序 INT0 入口地址

开定时器 0

中断返回

第 9 页

湖南工学院《单片机应用技术》课程设计报告

4、数码显示流程图 P2=#FEH 置数码管个数 R0=30H 置首地址

5、 定时器 T0 子程序

定时器 T0 入口地址

R6=#08H 置数码管个数 A=@R0 A=@A+DPTR

置初值

R3-1=?0 A 循环左 移 P3.3 清零 P3.0=C P3.1 置位 R6-1=?0

调用加一子程序

调用数码显示子程序 R3=#20H 重置循环次数

R0=R0-1 中断返回 R7-1=?0

返回

第 10 页

湖南工学院《单片机应用技术》课程设计报告

3.3 3.3 源程序

;**************************************************************************************************** ;课题名称:数字式秒表 ;**************************************************************************************************** ;30H-37H 显示缓冲区 30H 十毫秒位 31H 百毫秒位,32H 横杠,33H 秒位 从右到左显示

;**************************************************************************************************** ORG 0000H AJMP START ORG 000BH LJMP T0_INT ;定时中断 0 10ms 中断一次

ORG 0030H START:MOV SP,#60H SETB ET0 SETB EA MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H AA: MOV @R0,#00H INC R0 CJNE R0,#38H,AA MOV P2,#00H MOV P0,#0CH ACALL DL ;AJMP LOOP ;**************************************************************************************************** ;下面实现按键功能,P1.0 启动,P1.1 暂停,P1.2 清零

FIRST:ACALL KEY S0: JNB ACC.0,S1 ACALL DIR LJMP KEY1 ;启动键 ;输出 P. ;10MS 12MHZ ;显示缓冲区初始化 ;允许定时中断 0

S1:

JNB ACC.1,S2 CLR TR0

;暂停键 ;暂停定时

第 11 页

湖南工学院《单片机应用技术》课程设计报告

ACALL DIR SETB P3.1 AJMP FIRST ;蜂鸣器停止响

S2:

JNB ACC.2,FIRST MOV R0,#30H

;清零键

AA1: MOV @R0,#00H INC R0 CJNE R0,#38H,AA1

;显示缓冲区清零

MOV 32H,#10111111B;横杠 MOV 35H,#10111111B;横杠 ACALL DIR SETB P3.1 AJMP FIRST ;蜂鸣器停止响

;**************************************************************************************************** ;键处理子程序 KS: MOV A,P1 CPL A ANL A,#07H RET KEY: ACALL KS JNZ AGAIN MOV A,20H AJMP EXTI AGAIN:MOV 20H,A ACALL DIR ACALL KS JNZ LKP MOV A,20H AJMP EXTI ;第二次判断无键闭合,则转向,暂时保留不写 ;两次判断有键闭合,则转向按键键值判断 ;延时八毫秒 ;无键闭合则转向 ,暂时保留不写 ;有键闭合则转向再次判断 ;屏蔽高五位

LKP:PUSH ACC 第 12 页

湖南工学院《单片机应用技术》课程设计报告

LK: ACALL DIR ACALL KS JNZ LK POP ACC EXTI:RET

;**************************************************************************************************** ;启动键,启动定时子程序 KEY1: SETB TR0 LOOP: ACALL DIR AJMP FIRST

;**************************************************************************************************** ;中断服务程序 T0_INT:

MOV TH0,#0D8H MOV TL0,#0F0H MOV A,40H

INC 30H MOV A,30H CJNE A,#0AH,ADD_END ;判断是否到 10

CPL P3.1 MOV 30H,#00H INC 31H MOV A,31H CJNE A,#0AH,ADD_END ;判断是否到 10 第 13 页

湖南工学院《单片机应用技术》课程设计报告

CPL P3.2 MOV 31H,#00H INC 33H MOV A,33H CJNE A,#0AH,ADD_END ;判断是否到 10 MOV 33H,#00H INC 34H MOV A,34H CJNE A,#0AH,ADD_END MOV 34H,#00H INC 36H CJNE A,#0AH,ADD_END INC 37H CJNE A,#0AH,ADD_END ADD_END:RETI ;****************************************************************************************************; 数码管显示程序 DIR: MOV P2,#11111110B ;位控制 MOV DPTR,#TAB MOV R0,#30H N1: MOV A,@R0 MOVC A,@A+DPTR MOV P0,A ACALL DL ;判断是否到 10 ;判断是否到 10 ;判断是否到 10

N2:

INC R0 MOV A,P2 RL A MOV P2,A MOV A,@R0 MOVC A,@A+DPTR MOV P0,A ACALL DL 第 14 页

湖南工学院《单片机应用技术》课程设计报告

N3:

INC R0 MOV A,P2 RL A MOV P2,A MOV A,@R0 MOV P0,#10111111B ACALL DL ; 横杠线

N4:

INC R0 MOV A,P2 RL A MOV P2,A MOV A,@R0 MOVC A,@A+DPTR MOV P0,A ACALL DL N5:

INC R0 MOV A,P2 RL A MOV P2,A MOV A,@R0 MOVC A,@A+DPTR MOV P0,A ACALL DL N6:

INC R0 MOV A,P2 RL A MOV P2,A MOV A,@R0 MOV P0,#10111111B ACALL DL ; 横杠线

N7:

INC R0 MOV A,P2 第 15 页

湖南工学院《单片机应用技术》课程设计报告

RL A MOV P2,A MOV A,@R0 MOVC A,@A+DPTR MOV P0,A ACALL DL N8: INC R0 MOV A,P2 RL

A MOV P2,A MOV A,@R0 MOVC A,@A+DPTR MOV P0,A ACALL DL DIR_END: RET

;**************************************************************************************************** ;延时一毫秒函数 DL: MOV R7, R6, R6, DL2 DL1 #02H #0FFH DL1: MOV DL2: DJNZ

DJNZ R7, RET

;**************************************************************************************************** ;段码表 TAB: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 99H DB 92H DB 82H 第 16 页 ;共阳

湖南工学院《单片机应用技术》课程设计报告

DB 0F8H DB 80H DB 90H DB 88H DB 83H DB 0C6H DB 0A1H DB 86H DB 8EH DB 0FFH END ;灭 ;A(10) ;B(11)

第 17 页

湖南工学院《单片机应用技术》课程设计报告

3.4 3.4 仿真结果

图十一 秒表运行图

图十二 秒表清零图

第 18 页

湖南工学院《单片机应用技术》课程设计报告

4 课程设计体会

在这次课程设计中收获很多,学会了查找相关资料,分析数据,提高了自己的分析 判断能力,得到了许多经验,资料的获得是前人不懈努力的结果。同时,仍有很多课题 需要去努力去完善。 通过这次做课程设计发现自己的看法有点太片面。 课程设计不仅是对前面所学知识 的一种检验,而且也是对自己能力的一种提高。通过这次课程设计使我明白了自己原来 知识还比较欠缺。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东 西都懂,有点眼高手低。通过这次毕业设计,我才明白学习是一个长期积累的过程,在 以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。 总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如 何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过 应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以 我认为只有到真正会用的时候才是真的学会了。

第 19 页

湖南工学院《单片机应用技术》课程设计报告

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远 远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为 社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问 题, ,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对 以前所学过的知识理解得不够深刻,掌握得不够牢固。 这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后翻阅各种 书籍,终于迎刃而解。同时,在吴乐老师的身上我们学也到很多实用的知识,在次我们 表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢! 此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错 的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能 扛的起并高质量的完成项目。 在此,感谢于吴乐老师的细心指导,也同样谢谢其他各组同学的无私帮助!

第 20 页

湖南工学院《单片机应用技术》课程设计报告

附录 1

单片机最小系统开发板原理图

第 21 页

湖南工学院《单片机应用技术》课程设计报告

附录 2

元件清单

元件名 AT89S52 八段数码管 NPN 三极管 10K 电阻 无极性电容(30PF) 电解电容 排针 7805 整流二极管 发光二极管 1K 排阻 按键 12M 晶振 电源插座 下载线 数量 1 2 8 9 2 3 1 1 1 1 1 8 1 1 1

第 22 页

湖南工学院《单片机应用技术》课程设计报告

参考文献

[1]李广弟 朱越秀 冷祖祁 单片机基础(第三版) 北京:北京航空航天大学出版社,2007.

[2]胡宴如.高频电子线路.北京:高等教育出版社.2007. [3]杨志忠.数字电子技术.北京:高等教育出版社.2007. [4]胡宴如.模拟电子技术.北京:高等教育出版社.2007. [5]谢自美 罗杰.电子线路设计·实验·测试.北京:电子工业出版社.2007.

第 23 页

1

相关推荐