当前位置:
文档之家› 基于stc89c51单片机的秒表设计
基于stc89c51单片机的秒表设计
uchar count=0,time=0,K1num=0;
uchar seg_date[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //共阳极数码管段码表
sbit K1=P3^0;
sbit K2=P3^1;
uchar ge=0,shi=0;
基于stc89c51单片机的秒表
//基于stc89c51单片机的秒表
//应用定时器和中断的知识。
//两个按键。K1是启动/暂停按键。K2是复位按键。
//显示数
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
if( K1num==2 ) {TR0=0;K1num=0; }
}
}
if(K2==0)//K2键功能
{
delay(1) ;
if (K2==0)
{
while (!K2);
TR0=0;
time=0;
TR0=1;
}
}
}
void main ()//主函数
{
TMOD=0x01; //设定定时器工作方式
TH0=0x4c;TL0=0x00; //设定定时器初值
delay(1);
P2=0x02;
P1=seg_date[shi];//显示十位
delay(1);
}
void key()//键盘处理程序
{
if( K1==0 )//K1键功能
{
K1num++; delay(1);
if( K1==0 )
{
while(!K1);
if( K1num==1 ) {TR0=1; }
{
time=0;
}
}
void delay(uint xms) //简单延时程序
{
uint i,j;
for (i=xms;i>0;i--)
for(j=115;j>0;j--);
}
void display()//显示程序
{
shi=time/10; //分离十位
ge=time%10;//分离个位
P2=0x01;
P1=seg_date[ge];//显示个位
EA=1;ET0=1;
TR0=0;
while (1)
{
key();
display();
}
}
void timer0() interrupt 1//中断程序
{
TH0=0x4c;TL0=0x00;//设定定时器初值
count++;
if(count==20)
{
count=0;
time++;
}
if(time==100)