10S秒表制作报告

10S秒表制作报告

一、  设计作品名称:10S秒表

二、制作材料:STC89C52、10K电阻、排阻、22PF瓷片电容、10UF电解电容、12兆晶振、一位7段共阴极数码管、开关。

三、设计思想与原理:本设计利用单片机的定时计数器和计数的原理,结合集成电路芯片,led 数码管以及按键来设计计时器。将软、硬件有机的结合起来,使得系统能够正确地进行计时,数码管能够正确的显示时间。本设计包括硬件电路的设计和系统程序的设计,其硬件电路主要有主控制,显示电路,启动暂停复位电路等。主控制器采用单片机STC89C52,显示电路采用一个1位7段共阴极LED数码管显示时间,数码管显示段码由P0、P2端口输出,显示时间为0.0~9.9,加一个按键来负责开始,暂停与复位。计时采用定时器T0中断完成,定时溢出中断周期为50ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对0.1s计数单元进行加一,达到10次就对秒位加一,以此类推,直到9.9秒后显示9.9。

四、设计流程图:

五、设计电路图及程序

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit K1=P3^7;

uchar i,Second_Counts,Key_Flag_Idx;

bit Key_State;

uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void DelayMS(uint ms)

{

uchar t;

while(ms--)

for(t=0;t<120;t++);

}

void Key_Event_Handle()

{

if(Key_State==0)

{

Key_Flag_Idx=(Key_Flag_Idx+1)%3;

switch(Key_Flag_Idx)

{

case 1:

EA=1;ET0=1;TR0=1;break;

case 2:

EA=0;ET0=0;TR0=0;break;

case 0:

P0=0x3f;P2=0x3f;i=0;Second_Counts=0;

}

}

}

void main()

{

P0=0x3f;

P2=0x3f;

i=0;

Second_Counts=0;

Key_Flag_Idx=0;

Key_State=1;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

while(1)

{

if(Key_State!=K1)

{

DelayMS(10);

Key_State=K1;

Key_Event_Handle();

}

}

}

void DSY_Refresh() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

if(++i==2)

{

i=0;

Second_Counts++;

P0=DSY_CODE[Second_Counts/10];

P2=DSY_CODE[Second_Counts%10];

if(Second_Counts==100)

Second_Counts=0;

}

}

六、参考资料:

七、成果展示:

八、心得体会:在作品的制作过程中,我明白了51和52的区别,知道了实物单片机、数码管引脚的接法,学会了电路图中各种元件的相关测量以及深刻体会到了单片机接电源220V的严重后果。虽然在制作过程中遇到的问题及学到的知识,老师大多数都在课堂上讲解过,但我都没什么印象,翻书才知道曾经有这么回事。但经过这次亲身制作后,我对作品中所涉及的一些知识有了更深的印象。

 

第二篇:8051实现10s秒表

8051实现10s秒表

8051实现10s秒表

8051实现10s秒表

8051实现10s秒表

相关推荐