51单片机实验秒表设计
.
实验报告
一、实验名称
10秒计时的秒表设计
二、实验内容
精确到0.1秒的秒表
三、相关模块
led数码管、usb、独立键盘
四、实验代码
#include
eg52.h
//对数据类型进行声明定义typedef unsigned int u16; typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u16 s,sec;
unsigned int i;
资料Word
.
unsigned int j;
unsigned int a,b,c,d;
u8 mb[2];
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。TH0=0XFC; // 给定时器赋初值,定时1ms
TL0=0X18;
TR0=0;//打开定时器
}
void delay(u16 n)
{
while(n--);
}
void DigDisplay1(u16 i)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
资料Word
.
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
case(4):
LSA=0;LSB=0;LSC=1; break;
case(5):
LSA=1;LSB=0;LSC=1; break;
case(6):
LSA=0;LSB=1;LSC=1; break;
LSA=1;LSB=1;LSC=1; break;
}
if (i==1)
{
P0=smgduan[mb[i]]+0x80;//发送段码
}
else
{
P0=smgduan[mb[i]];
}
间隔一段时间扫描delay(1); //资料Word .
P0=0x00;//消隐
}
void DigDisplay2(u16 i)
{
i=i+3;
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
case(4):
LSA=0;LSB=0;LSC=1; break;
case(5):
LSA=1;LSB=0;LSC=1; break;
case(6):
LSA=0;LSB=1;LSC=1; break;
case(7): 资料Word
.
LSA=1;LSB=1;LSC=1; break;
}
if (i==4)
{
P0=smgduan[a]+0x80;
}
else
{
P0=smgduan[b];
}
delay(1);
P0=0x00;
}
void DigDisplay3(u16 i)
{
i=i+6;
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break; 资料Word
.
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break; case(4):
LSA=0;LSB=0;LSC=1; break; case(5):
LSA=1;LSB=0;LSC=1; break; case(6):
LSA=0;LSB=1;LSC=1; break;
case(7):
LSA=1;LSB=1;LSC=1; break; }