单片机秒表设计课程设计报告

更新时间:2024-04-10 20:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单 片 机 课 程 设 计

单片机课程设计报告

一、实验题目

秒表系统设计——用两个数码管来显示秒表数据,一个显示秒,另一个显示十分之一秒。 二、系统总体功能

用两个数码管来显示秒表数据,一个显示秒,另一个显示十分之一秒。有一个按键来启动秒表的开始和结束。增加一个清零按钮,计时结束后可以清零。 三、实验目的

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

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

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

4、 通过本次试验,增强自己的动手能力。认识单片机在日

共9页 第1页

单 片 机 课 程 设 计

常生活中的应用的广泛性,实用性。 四、系统设计方案

本实验利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位!

其中有两个数码管用来显示数据,一个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0-9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。计秒数码管采用两位的数码管,当计数超过范围是所有数码管全部清零重新计数。

五、试验设计所需硬件(模拟硬件)

Atmel89C51单片机芯片一个、LED数码显示管三个,低压电源、开关(按钮)两个、电阻、电容及导线若干。

由于条件限制本实验采用软件模拟硬件系统,采用proteus软件进行模拟设计及调试工作。

共9页 第2页

单 片 机 课 程 设 计

图1 七段数码管引脚图

2 Atmel89C51单片机外部引脚图

六、试验设计原理图

共9页 第3页

单 片 机 课 程 设 计

图3 试验设计电路图

七、软件设计分析 程序流程图:

共9页 第4页

单 片 机 课 程 设 计

开始 程序开始 对定时器/计数器初始化始化 开中断并 启动定时器 定时器溢出中断 对定时器重新赋值 进行加一操作后重新计算时间 往P0口和P2口送显示时间 数码管显示 判断P0^4口是否有低电平信号 否 否 判断P0^7口是否有低电平信号 是 开始、暂停或者继续 是 计数置零 中断返回主函数

共9页 第5页

单 片 机 课 程 设 计

实验程序:

#include {

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,

/*声明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()

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

共9页 第6页

单 片 机 课 程 设 计

{ second10++;

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

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

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

second1=0;

second2++; /*同时秒计时十位加一*/ if(second2==6) second2=0;

} }

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

void dispact() {

P3=0xfe; P0=table1[second1]; delay(); P3=0xfd;

P0=table1[second2]; delay();

P2=table0[second10]; }

/*以下是设置时间函数和输数据函数被此函数调用实现,利用定时器中断*/ /*十分之一秒刷新一次,实现十分之一秒进一*/

共9页 第7页

单 片 机 课 程 设 计

Timer0 () interrupt 1 using 1 {

TH0 = (65535 - 50000)/256; TL0 = (65535 - 50000)%6; if(flag) setTime(); dispact(); }

void main(void) {

TMOD = 0x01;

TH0 = (65535 - 50000)/256; /* TL0 = (65535 - 50000)%6; flag = 0;

EA = 1; /*cpu TR0 = 1; /* ET0 = 1; /* do {

if(!sta_end) {

if(flag == 0) flag = 1; else flag = 0; }

if(!reset) /* {

flag = 0;

定时器赋初值*/ 开中断*/ 利用定时器0*/ 外部中断允许*/ 复位设置,全部清零*/ 共9页 第8页

单 片 机 课 程 设 计

second10 = 0; second1 = 0; second2 = 0; }

}while(1); }

八、实验总结

通过这次的试验设计,我对一些专业知识和电子设计有了更深的了解,同时也尝试着去应用自己的所掌握的知识。本次电子课程设计主要是对已学习的模拟电子技术、数字电子技术和单片机的综合应用。

单片机课程设计给我们提供了一个很好的展现应用自己所掌握的知识的平台。但在设计的过程中我们也不可避免的遇到了很多的问题,通过这次的课程设计,我也发现了不少自己不会的知识,通过查询各方面资料进步了很多,学会了很多上课时没掌握的东西。

共9页 第9页

本文来源:https://www.bwwdw.com/article/o5ur.html

Top