/*********************************/
/*项目名称:数字式秒表的设计程序*/
/*设计者:*/
/*设计日期:2020年11月8日*/
/*设计功能说明:系统默认提示符为“p.”;
实现功能:按下S2键启动秒表;按下S3键暂停秒表;按下S4键秒表继续工作;按下S5键秒表清零,按下S6键停止秒表。
/*****************************/
/* crystal=12Mhz */
/* P2口位控口,P0口段控口 */
#include<reg51.h>
#include"math.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char code duanma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF}; //共阴数码管
uchar wk[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar dm1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
uchar dm2[1]={0xbf}; /*显示横线*/
sbit P1_0=P1^0; /*开始*/
sbit P1_1=P1^1; /*暂停*/
sbit P1_2=P1^2; /*继续*/
sbit P1_3=P1^4; /*清零*/
sbit P1_4=P1^3; /*停止*/
uchar i,j,k,l,n,m,o,p;
/*延时函数*/
void ys()
{
IE=0X00;
TMOD=0X01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
do{}while(!TF0);
TF0=0;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256; }
/* 清零操作函数 */
void q0()
{ k=0; n=0; m=0; l=0; o=0; p=0; }
/* 显示程序函数 */
void display()
{ j=0;
P2=wk[j]; P0=dm1[m]; ys(); j++;
P2=wk[j]; P0=dm1[n]; ys(); j++;
P2=wk[j]; P0=dm2[0]; ys(); j++;
P2=wk[j]; P0=dm1[k]; ys(); j++;
P2=wk[j]; P0=dm1[l]; ys(); j++;
P2=wk[j]; P0=dm2[0]; ys(); j++;
P2=wk[j]; P0=dm1[o]; ys(); j++;
P2=wk[j]; P0=dm1[p]; ys(); j++;
}
/*主函数*/
void main()
{
for(;;)
{ if(P1_0==0) /* 是否开始工作 */
{ for(p=0;p<6;p++) /* 判断延时10min是否达到 */
{
for(o=0;o<10;o++) /* 判断主延时1min是否达到 */
{
for(l=0;l<6;l++) /* 判断延时10s是否达到 */
{
for(k=0;k<10;k++) /* 判断延时1s是否达到 */
{
for(n=0;n<10;n++) /* 判断延时100ms是否达到 */
{ if(P1_3==0) { break; } /* 停止功能是否执行 */
else
{
for(m=0;m<10;m++) /* 判断延时10ms是否达到 */
{
if(P1_1==0) /* 暂停功能是否执行 */
{
while(P1_2==1) /* 连续功能是否执行 */
{
if(P1_4==0) { q0(); } /* 清零功能是否执行 */
else { display( ); } /* 暂停时显示 */
}
}
else
{ display(); } /* 正常工作时显示 */
}
}
}
}
}
}
}
}
else
{ P2=0XF7;P0=0X0C; } /* 系统提示符"P." */
}
}
|