51单片机实验 秒表设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

一、实验名称

10秒计时的秒表设计

二、实验内容

精确到0.1秒的秒表

三、相关模块

led数码管、usb、独立键盘

四、实验代码

#include "reg52.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;

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;

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;

}

if (i==1)

{

P0=smgduan[mb[i]]+0x80;//发送段码

}

else

{

P0=smgduan[mb[i]];

}

delay(1); //间隔一段时间扫描

P0=0x00;//消隐

}

void DigDisplay2(u16 i)

{

i=i+3;

switch(i)

{

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):

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;

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;

}

if (i==7)

{

P0=smgduan[c]+0x80;

}

else

{

P0=smgduan[d];

}

delay(1);

P0=0x00;

}

void key1()

{

delay(10);

if(k1==0)

{

TR0=!TR0;

while(!k1);

}

}

void key2()

{

delay(10);

if(k2==0)

{

s=0;

sec=0;

while(!k2);

}

}

void key3()

{

delay(10);

if(k3==0)

{

if (j==0) j=1;

else j=0;

if (j==1)

{

a=mb[1];

b=mb[0];

}

if (j==0)

{

c=mb[1];

d=mb[0];

相关文档
最新文档