51单片机秒表程序 00-99秒
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <>
#define uchar unsigned char //宏定义用uchar代替 unsigned char
#define uint unsigned int
sbit START=P1^0; //开始、停止键低电平有效
sbit RST=P1^1; //复位键
sbit SMGGW=P1^2; //用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定
sbit SMGSW=P1^3;
uchar tt;
uint time; //此变量为时间
uchar code table[]={ //此为数码管字模,对应 0--9
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
void Delay(uint ms) //延时子函数
{
u int i,j;
f or(i=ms;i>0;i--)
for(j=500;j>0;j--);
}
void Display() //显示子函数
{
u char ge,shi;
s hi=time/10;
g e=time%10;
P0=table[ge];
S MGGW=0;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定本程序为低电平数码管亮
S MGSW=1;
D elay(2);
P0=table[shi];
S MGGW=1;
S MGSW=0;
D elay(2);
}
void main()
{
P1=0xff;
E A=1;
E T0=1;
T MOD=0x01;
T H0=0x4c; //晶振若用12Mhz晶振则改为 TH0=0x3c;Tl0=0xb0;
T L0=0x00;
T R0=0;
w hile(1)
{
if(START==0) //开始、停止
{
Delay(8);
if(START==0)
{
TR0=!TR0;
while(!START) Display();
}
}
if(RST==0) //复位
{
Delay(8);
if(RST==0)
{
time=0;
while(!RST)Display();
}
}
if(tt==20)
{
tt=0;
time++;
if(time==99)
{
time=0;
}
}
Display();
}
}
void timer0() interrupt 1
{
T H0=0x4c; //晶振若用12Mhz晶振则改为 TH0=0x3c;Tl0=0xb0; T L0=0x00;
t t++;
}