当前位置:文档之家› LED数码管秒表制作

LED数码管秒表制作

LED数码管秒表制作
LED数码管秒表制作

应用工程学院

单片机应用技术实训报告

专业:应用电子

学号:1504150137

姓名:许林

日期:2016/12/24

项目二: LED数码管秒表制作

一、任务目的

1.了解并掌握数码管静态和动态显示原理。

2.掌握秒表计时原理与编程思想。

3.了解并掌握单个按键次数的识别。

二、任务要求

a)上电后数码管最右边显示自己学号。

b)按下功能键后,右边6个数码管上显示秒表定时初值,格式为00-00.0。

c)第二次按下功能键后,以一百毫秒为最小计时单位从0开始计时,第三

次按下功能键后暂停计时,第四次按下功能键后时间清0。

三、硬件电路设计

四、软件设计

#include

unsigned char sec,mmiao,miao,fen; sbit K=P3^2;

unsigned char a=0;

void delayms(unsigned int i)

{

unsigned char k;

while(i--)

for(k=0;k<120;k++);

}

void time1() interrupt 1

{

TH0=0x3c;

TL0=0xb0;

sec++;

if(sec==2)

{

mmiao++;

sec=0;

if(mmiao==10)

{

miao++;

mmiao=0;

if(miao==60)

{

fen++;

miao=0;

if(fen==60)

{

fen=0;

}}}}}

void time2() interrupt 0

{unsigned char n;

if(K==0)

for(n=0;n<1200;n++);

if(K==0)

{ while(K==0);

for(n=0;n<1200;n++);

a++;

switch(a)

{

case 1:mmiao=0;miao=0;fen=0;break;

case 2:TR0=1;break;

case 3:TR0=0;break;

case 4:mmiao=0;miao=0;fen=0;break;

case 5:P0=0x07;P2=7;a=0;break;

}

}

}

void main()

{

unsigned char

led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char

led1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=0;

ET0=1;

EX0=1;

IT0=1;

EA=1;

while(1)

{

if(a==0){P2=6;

P0= 0x4f;

delayms(1);

P2=7;

P0= 0x07;

delayms(1);}

else{

P2=7;

P0=led[mmiao%10];

delayms(1);

P2=6;

P0=led1[miao%10];

delayms(1);

P2=5;

P0=led[miao/10];

delayms(1) ;

P2=4;

P0=0x40;

delayms(1);

P2=3;

P0=led[fen%10];

delayms(1);

P2=2;

P0=led[fen/10];

delayms(1);

}}}

五、系统调试

仿真调试:首先检查各个线路是否连接正确,尤其是数码管是否

选择正确(共阴数码管)。

实物调试:

1)首先把电脑上生成的HEX文件下载到单机中。

2)按键观察现象是否符合要求。

出现问题:按键不灵,或者现象不符合要求。此时需要检查开发板是否存在问题(用两个开发板用相同操作看是否存在差异),如开发板没问题,检查程序是否在显示部分的程序是否存在错误。此项目需要读取按键次数,而按键抖动是主要问题,开发板做好没法硬件消抖,所以只有软件消抖,所以需要在按键识别程序里加按键延时消抖程序。

六、心得体会

通过项目二的学习,使我对这门课有了等多多新的了解,弥补了在课堂上学习的不足。首先,我学到了如何发现问题,以及如何解决这些问题。这些我想是我以后工作中重要的能力。

相关主题
文本预览
相关文档 最新文档