/*********************************/
/*項目名稱:數字式秒表的設計程序*/
/*設計者:*/
/*設計日期: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." */
}
}
|