内容正文:
项目4 设计制作9.9秒表
项目3 设计制作9.9秒表
1
本项目学习目标
1)巩固C51指数组应用;
2)熟悉MCS-51系列单片机定时/计时器工作 方式;
3)掌握MCS-51系列单片机定时器的应用;
4)进一步熟练C51程序设计;
5)巩固数码管显示技术
项目3 设计制作9.9秒表
项目描述
1.项目名称
设计制作9.9秒表
2.项目要求
1)用KeilC51、Proteus作开发工具;
2)用AT89C51单片机作控制;
3)数码管作显示;
4)能以0.1秒为单位进行计时,秒表从 “9.9”秒,开始倒计时,当9.9秒到,数码管显示“0.0”。
5)发挥扩充功能:计时到“0.0”后以闪烁方式提示。
项目3 设计制作9.9秒表
3.设计制作任务
项目描述
1)拟定总体设计制作方案;
2)设计硬件电路;
3)编制软件流程图及设计相应源程序;
4)仿真调试秒表;
5)安装元件,制作秒表,调试功能指标;
6)完成项目报告。
项目3 设计制作9.9秒表
相关知识
1 .定时/计数器作定时器使用
1)定时/计数器方式寄存器TMOD设置
TMOD为T1、T2的工作方式寄存器,其格式如下:
例如,设置T1工作于方式1、作定时器用、且与外部中断无关,则M1=0、M0=1,C/(/T)=0、GATE=0,则高4位应为0001;T0未用,一般将其设为0000,TMOD赋值语句为: TMOD=0x10;
项目3 设计制作9.9秒表
相关知识
2)定时器/计数器控制寄存器TCON设置
TCON的作用是控制定时器/计数器的启动、停止,标志定时器的溢出和中断情况。其中与定时器/计数器相关的位如下:
TR0:T0运行控制位。当GATE=1,/INT0为高电平时,TR0置1启动T0;当GATE=0时,TR0置1启动T0。
TF0:T0溢出标志位。当T0计数满产生溢出时,由硬件自动置TF0=1。
项目3 设计制作9.9秒表
在中断允许时,向CPU发出T1的中断请求,进入中断服务程序后,由硬件自动清0。在中断屏蔽时,TF0可作查询测试用,此时只能由软件清0。
TR1:T1运行控制位。其功能及操作同TR0。
TF1:T1溢出标志位。其功能及操作况同TF0。
TCON的字节地址为88H,可位寻址,例如:TR1=0;启动T1计数。
相关知识
项目3 设计制作9.9秒表
相关知识
作定时器使用时,计数器对内部机器周期计数,每过一个机器周期,计数器加1。计满溢出时,若计数值为N,定时器的定时时间为:
t=Tc(机器周期)×N。
MCS-51单片机的一个机器周期由12个振荡脉冲组成,则机器周期为:
Tc=12/ fosc
如果单片机系统采用12M晶振,则计数周期(即机器周期)为:
Tc=12/(12×106)=1us
若计数值为N,则定时N微秒。
2. 计数初值的计算
项目3 设计制作9.9秒表
相关知识
定时/计数器T0和T1是加法计数器,每来一个计数脉冲,计数器的值加1,加满则溢出(溢出值即计数最大值,常用M表示),如果要计N个单位就溢出,则首先应向计数器值初值X。
X=M(最大计数值)- N(计数值)
项目3 设计制作9.9秒表
相关知识
3 作定时器的初始化
在作定时器使用时,必须确定工作方式、中断允许、定时计数初值,这个过程称为定时器初始化。
确定工作方式——对TMOD赋值。
预置定时或计数的初值——将初值写入TH0、TL0或TH1、TL1。
根据需要开启定时器/计数器中断——直接对IE寄存器赋值。
启动定时器/计数器工作——将TR0或TR1置“1”。
项目3 设计制作9.9秒表
案例:编程输出周期20ms方波。
主程序流程图
中断服务程序流程图
项目3 设计制作9.9秒表
相关知识
#include<reg51.h>
sbit CLK=P3^3;
/**********T1初始化函数**********/
void T1_Init (void)
{
TMOD=0x10;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
TR1=1;
}
项目3 设计制作9.9秒表
相关知识
/*T1溢出中断初始化函数*/
void T1_int_init (void)
{
EA=1;
ET1=1;
}
/***T1中断函数***/
void T1_int(void) interrupt 3 using 0
{
TH1=(65536-100)/256;
TL1=(65536-100)%256;
CLK=!CLK; }
项目3 设计制作9.9秒表
/***************主函数***************/
main()
{
T1_Init ();
T1_int_init();
while(1)
{
;
}
}
相关知识
项目3 设计制作9.9秒表
相关知识
/**********定时器中断服务函数*********/
void time_t0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
count--;
}
项目3 设计制作9.9秒表
项目实施
1. 9.9秒表总体设计思路
基本功能实现思路是:
用AT89C51单片机作控制,12MHz时钟,用AT89C51内的一个定时/计数器作定时器,定时10ms产生中断,10次中断即0.1秒。每秒0.1秒,让9.9秒减1,实现倒计时,倒计时数据经处理后用数码管显示,总体框图如图4-3所示总体结构框图如图所示。
项目3 设计制作9.9秒表
项目实施
9.9秒表总体结构框图
项目3 设计制作9.9秒表
项目实施
2.设计硬件原理图
用AT89C51单片机作控制,系统时钟12MHZ,采用上电复位方式,3位一体的共阴极数码管作显示,AT89C51的一个I/O口(P1)作显示数据输出端口,一个I/0口(P2)作数码管位选控制端口,T0作频率测试输入端,参考电路如图所示。
项目3 设计制作9.9秒表
项目实施
2.设计硬件原理图
项目3 设计制作9.9秒表
项目实施
3.设计9.9秒表程序
1)程序设计思路
定时计数器工作于定时状况,12MHz时钟下,机器周期为1us,定时器T0工作于方式1,初值为65536-10000,每计10000个机器周期,定时器中断1次,耗时10ms,中断10次则耗时0.1s。在中断服务程序让中断次数加1,每中断10次。秒数从初值“9.9”秒开始减0.1秒即可实现倒计时。当秒数为0,则停止计数,数码管显示亮、灭交替可实现闪烁显示“0.0”。参考主程序流程图,中断服务程序如图所示。
项目3 设计制作9.9秒表
项目实施
3.设计9.9秒表程序
项目3 设计制作9.9秒表
项目实施
4.主要参考程序
/************************
函数名称:延迟函数
***********************/
void delay(unsigned char time)
{
unsigned char i,j;
for(i=0;i<time;i++)
for(j=0;j<120;j++)
;
}
/************************
函数名称:定时器初始化函数
***********************/
void T0_init(void)
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
}
项目3 设计制作9.9秒表
项目实施
/************************
函数名称:中断初始化函数
***********************/
void int_init(void)
{
EA=1;
ET0=1;
}
/************************
函数名称:数据处理函数
***********************/
void dat_change(unsigned char dat)
{
dat_display[1]=dat/10;
dat_display[0]=dat%10;
}
项目3 设计制作9.9秒表
项目实施
/**************************************
函数名称:显示函数
*************************************/
void display(unsigned char SEG_dat,unsigned char bit_code,bit fg)
{
P1 =0x00;
if(fg)
P1 =SEG_dat|0x80;
else
P1 =SEG_dat;
P2 =bit_code;
delay(5);
}
/**************************************
函数名称:0.1秒判断函数
*************************************/
void seconds_01(void)
{
if(count==10)
{
count=0;
seconds--;
}
}
项目3 设计制作9.9秒表
项目实施
/**************************************
函数名称:9.9秒判断函数
***************************************/
void seconds_99(void)
{
if(seconds==0)
{
TR0=0;
}
}
/*************定时器t0中断服务函**********/
void time_t0()interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
count++;
}
项目3 设计制作9.9秒表
项目实施
4.调试仿真频率计
(1)利用keil uVisison2的调试功能,根据错误提示,双击提示找到错误代码,排除各种语法错误。
(2)通过对端口、寄存器、存储空间赋值,存储空间或、端口、寄存器观察,单步运行调试子程序和主程序。
(3)编译成hex文件。
(4)用Proteus按设计原理图,添加电阻(RES)、电容(CAP)、晶振(CRYSTAL)、AT89C51、2位数码(7SEG-MPX2-CA)管等元件、仿真信号源。设计仿真模型。设置好元件属性,以仿真信号源提供测试信号,进行仿真调试。
项目3 设计制作9.9秒表
项目实施
项目3 设计制作9.9秒表
项目实施
5.安装元器件,烧录、调试样机
(1) 仿真调试成功后,按原理图把元件安装焊接在实验板上,并进行动态和静态检测。
(2)烧录hex文件,运行程序,如不能运行,先排除各种故障(供电、复位、时钟,内外存储空间选择、软硬件端口运用一致等)。
项目3 设计制作9.9秒表
项目实施
(3)测试9.9秒表,观察计时时间和标准秒表运行的时间是否一致,分析是否达到性能指标。
(4)如没有达到性能指标,根据性能指标,调整电路或元件参数、优化程序,重新调试、编译、下载、运行程序,测试性能指标。
项目3 设计制作9.9秒表
项目四 结束
谢 谢!
项目3 设计制作9.9秒表
$$