C单片机课程设计之秒表设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这里可以加学校L O G A L
2011.12.23
目录1课程设计的目的和任务
2
3
3.3课程设计效果
4 心得体会
5 相关查阅资料
1. 课程设计的目的和任务
1.1单片机秒表课程设计的概述
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.3.2 设计要求
①画出电路原理图(或仿真电路图);
②软件编程与调试;
③电路仿真与调试;
2.软件与硬件设计
2.1系统硬件方案设计
单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
图2系统硬件结构框
2.2软件方案设计
此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图 3所示:
3
3.1 源程序及注释
/*-----------------------------------------------
名称:数码管显示,按键控制秒表
论坛:
编写:shifang
日期:2009.5
修改:无
内容:中断按键控制,数码管显示,中断0控制计时和停止,中断1清零
------------------------------------------------*/
#include
unsigned int msecond,second;//定义全局变量
bit GoFlag;//定义停止,计时标志
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表示边沿触发
}
}
/*------------------------------------------------
显示函数,用于动态扫描数码管
输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显
示
如输入0表示从第一个显示。
Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num) {
static unsigned char i=0;
i=0;
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
}
{
num++;
if(num==5)
{
num=0;
msecond++;
if (msecond==100)//100进1
{
msecond=0;
second++;//秒加1
if(second==100)
second=0;
}
}
}
{
}
//主循环中添加其他需要一直工作的程序 }