电子时钟设计单片机需求分析.docx

上传人:b****7 文档编号:15822089 上传时间:2023-07-08 格式:DOCX 页数:11 大小:177.01KB
下载 相关 举报
电子时钟设计单片机需求分析.docx_第1页
第1页 / 共11页
电子时钟设计单片机需求分析.docx_第2页
第2页 / 共11页
电子时钟设计单片机需求分析.docx_第3页
第3页 / 共11页
电子时钟设计单片机需求分析.docx_第4页
第4页 / 共11页
电子时钟设计单片机需求分析.docx_第5页
第5页 / 共11页
电子时钟设计单片机需求分析.docx_第6页
第6页 / 共11页
电子时钟设计单片机需求分析.docx_第7页
第7页 / 共11页
电子时钟设计单片机需求分析.docx_第8页
第8页 / 共11页
电子时钟设计单片机需求分析.docx_第9页
第9页 / 共11页
电子时钟设计单片机需求分析.docx_第10页
第10页 / 共11页
电子时钟设计单片机需求分析.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

电子时钟设计单片机需求分析.docx

《电子时钟设计单片机需求分析.docx》由会员分享,可在线阅读,更多相关《电子时钟设计单片机需求分析.docx(11页珍藏版)》请在冰点文库上搜索。

电子时钟设计单片机需求分析.docx

电子时钟设计单片机需求分析

 

电子钟

 

一、需求分析

1.功能描述

该电子钟能实现基本的时钟显示,还能调时。

调时可以对分时秒的每个位(即个位和十位)调整。

2.其他要求

当时钟的时间小于10—00-00时,时的十位为零,不显示.(如显示时间:

9—45-00)

二、总体设计

1.设计思路

用89C51单片机实现控制和数据输出,8位7段LED数码管作为显示器件。

时间的调整通过外加独立按键来控制。

2.器件选型

89C51单片机、LED数码管、独立按键。

三、硬件设计

1.硬件框图

2.硬件模块

因该设计非常简单,硬件模块很少,只有显示模块和按键模块。

3.硬件电路图

硬件电路如下图所示:

四、软件设计

1.软件框图

2.软件流程图及其程序代码

2.1主程序

1。

初始化:

将数字编码放在数组dis_7[11]中,位选数据放在scan_con[8]中,分、时、秒的个位和十位放在dis_[8]中,分时秒的初始数据放在timedata[3]中。

2。

键盘扫描:

判断key0~key3中哪些键按下,

当key3未按下时:

1。

key0按下,则key0每按下一次,秒加1。

2。

key1按下,则key0每按下一次,分加1。

3。

key2按下,则key0每按下一次,时加1.

当key3按下时:

1。

key0按下,则key0每按下一次,秒的十位加1(即秒加10).

2。

key1按下,则key0每按下一次,分的十位加1。

3。

key2按下,则key0每按下一次,时的十位加1。

3。

显示:

通过P2口控制位选,使8个数码管依次被选中。

P0口作为数据的输出口,循环输出分、时、秒的各位数据,当P0口输出某位的数据后,P2口控制位选将给位数码管选中,从而使该位显示。

同时当时的十位为零时,使p2口输出为0,使该位不显示。

(即当hour〈10时,时的十位不显示0)

4。

定时中断:

采用方式1,定时50ms.20次就构成1秒,每20次,秒就加1

主程序流程图

主程序代码:

main()

{TH0=0x3c;

TL0=0xb0;

TMOD=0x01;

ET0=1;

TR0=1;

EA=1;

for(;;)

{display();//显示子程序

keyscan();//键盘扫描子程序

2.2键盘扫描子程序

键盘扫描流程图

键盘扫描子程序代码

keyscan()

{if(key3==1)

{if(key0==0)

{delay1ms(10);

while(key0==0);

timedata[0]++;

if(timedata[0]==60)

{timedata[0]=0;

timedata[1]++;

if(timedata[1]==60)

{timedata[1]=0;

timedata[2]++;

if(timedata[2]==24)

timedata[2]=0;

}

if(key1==0)

{delay1ms(10);

while(key1==0);

timedata[1]++;

if(timedata[1]==60)

{timedata[1]=0;

timedata[2]++;

if(timedata[2]==24)

timedata[2]=0;

}

if(key2==0)

{delay1ms(10);

while(key2==0);

timedata[2]++;

if(timedata[2]==24)

timedata[2]=0;

}}

else

{if(key0==0)

{delay1ms(10);

while(key0==0);

timedata[0]+=10;

if(timedata[0]〉=60)

{timedata[0]=0;

timedata[1]++;

if(timedata[1]=60)

{timedata[1]=0;

timedata[2]++;

if(timedata[2]==24)

timedata[2]=0;

}

}}

if(key1==0)

{delay1ms(10);

while(key1==0);

timedata[1]+=10;

if(timedata[1]〉=60)

{timedata[1]=0;

timedata[2]++;

if(timedata[2]==24)

timedata[2]=0;

}

if(key2==0)

{delay1ms(10);

while(key2==0);

timedata[2]+=10;

if(timedata[2]〉=24)

timedata[2]=0;

2。

3显示子程序

显示子程序流程图

显示子程序代码

display()

{chark;

dis[7]=timedata[0]%10;

dis[6]=timedata[0]/10;

dis[4]=timedata[1]%10;

dis[3]=timedata[1]/10;

dis[1]=timedata[2]%10;

dis[0]=timedata[2]/10;

//通过模10计算,取出分时秒的个位和十位的值

if(dis[0]==0)

P2=0x00;//时个十位为零时,不显示

else

{P0=dis_7[dis[0]];

P2=scan_con[0];

delay1ms

(1);

P2=0x00;

for(k=1;k〈8;k++)

//循环选中每个数码管,并输出其显示值,从而实现时钟显示

{P0=dis_7[dis[k]];

P2=scan_con[k];

delay1ms

(1);

P2=0x00;

}

 

五、测试效果

经过软件仿真,测试效果良好,上述功能都能实现。

效果如下图:

六、问题分析

1、实现过程中遇到的问题及解决方法分析。

因为我本科时学习单片机都是用汇编写程序,没有用过C语言写单片机程序,所以本实验开始时,我是用汇编写的程序,这个程序虽然能实现基本的时钟显示,但存在很多问题。

并且汇编使用起来很麻烦,可读性也很差.最后,我决定试着用C语言写单片机程序。

经过好几天的摸索,最后总算是用C语言把程序写好了。

最后,经过仿真,该设计虽能达到预期的要求,但也存在不足之处。

仿真发现:

调时时,当有按键按下时,数码管显示会出现闪烁的情况。

经过分析得知,在电路中加入锁存器,该问题可以得到解决。

2收获与体会。

经过本次实验设计的学习,收获颇丰.首先,对单片机有更进一步的了解,同时锻炼了我的动手能力。

其次,我学习了用C语言写单片机程序,基本学会了用C语言写单片机程序.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2