数字钟说明书.docx

上传人:b****7 文档编号:9577224 上传时间:2023-02-05 格式:DOCX 页数:26 大小:225.34KB
下载 相关 举报
数字钟说明书.docx_第1页
第1页 / 共26页
数字钟说明书.docx_第2页
第2页 / 共26页
数字钟说明书.docx_第3页
第3页 / 共26页
数字钟说明书.docx_第4页
第4页 / 共26页
数字钟说明书.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数字钟说明书.docx

《数字钟说明书.docx》由会员分享,可在线阅读,更多相关《数字钟说明书.docx(26页珍藏版)》请在冰豆网上搜索。

数字钟说明书.docx

数字钟说明书

信息与电气工程学院

课程设计说明书

(2008/2009学年第二学期)

 

课程名称:

单片机课程设计

题目:

数字钟

专业班级:

信电学院电气06-3班

学生姓名:

学号:

指导教师:

设计周数:

两周

设计成绩:

2009年7月2日

目    录

1、课程设计目的………………………………………………………………..2

2、课程设计具体要求…………………………………………………………..2

3、课程设计正文………………………………………………………………..2

3.1硬件设计…………………………………………………………………..2

3.1.1方案设计……………………………………………………………...3

3.1.2电路设计……………………………………………………………...3.

3.1.3原理图…………………………………………………………….….7

3.1.4PCB图………………………………………………………………...8

3.1.5制板…………………………………………………………….….…8

3.1.6系统调试……………………………………………………….….…8

3.2软件设计…………………………………………………………………9

3.2.1系统分析……………………………………………………………..9

3.2.2系统设计及程序…………………………………………………….11

3.2.3系统实施…………………………………………………………….18

4、课程设计总结…………………………………………………………….....19.

5、参考文献………………………………………………………………….…19

1、课程设计目的

(1)了解数字钟的原理,从而学会制作数字钟。

(2)通过数字钟的制作进一步的了解在制作中用到的各种中小规模集成电路的作用及使用方法。

(3)学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。

(4)学习并掌握单片机的使用和编程方法。

2、课程设计要求

可调整时间的数字时钟。

只显示分、秒,采用动态显示模式。

通过按键可对时钟进行选位和加减的时间调整,调整时选中位进行闪烁。

可实现时间暂停和重新启动。

计时精确。

3、课程设计正文

3.1硬件设计

3.1.1方案设计

数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。

标准的频率时间信号必须做到准确稳定,通常使用石英晶体振荡电路构成数字钟。

本次课程设计的内容是设计一个数字钟,由单片机通过编辑的程序控制电路,实现显示秒、分的一个电子时钟。

并且可以通过按键选择调整时钟时间,以及暂停的功能。

电路方框图

现示单元

 

控制单元

按键输入单元

 

图3-1电路方框图

3.1.2电路设计

1、概述

本次设计中使用的主要元器件有AT89S52、CD4511、三极管数、码管、晶体振荡器、按键、LED指示灯、万能电路板等。

电路设计上本数字钟主要由电源电路、单片机控制电路、晶体振荡电路、译码电路、显示电路等组成。

2、功能电路

(1)电源电路

数字钟采用外接5V直流电源驱动其运行。

电源电路采用10uf和0.1uf的两个滤波电容来滤除电网的高次、低次谐波保护电路正常工作。

另外时用一个发光二极管来指示电源的通断。

 

(2)晶体振荡电路

电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了震荡器的功能。

由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。

 

(3)单片机控制电路

数字钟的核心原件为AT89S51,配合程序对整个电路进行控制。

P1口输出时钟显示的数字,P0口对数码管进行片选,P0口时用需接上拉电阻和三极管,P2口接受按键信号,通过中断来实现对数字钟的时间的调整。

复位按键可对单片机进行复位。

图3-4单片机电路

图4单片机控制电路

(4)译码和显示电路

采用CD4511对单片机输出的显示数字进行译码,将单片机输出的二进制数字信号转换成驱动数码管的段码信号,然后再将段码信号传送给数码管显示。

CD4511能提供较大的驱动电流,可直接驱动LED显示器。

输出端接上限流电阻就可正常工作。

数码管共阴极接单片机P0口输出的片选信号选择点亮的数码管,从而达到了显示输出动态显示的效果。

由于CD4511的驱动电流,数码管共阴极不用外加三极管或者74LS245等装置驱动数码管。

 

 

表3-1CD4511真值表

输        入

输        出

LE

BI

LI

D

C

B

A

a

b

c

d

e

f

g

显示

X

X

0

X

X

X

X

1

1

1

1

1

1

1

8

X

0

1

X

X

X

X

0

0

0

0

0

0

0

消隐

0

1

1

0

0

0

0

1

1

1

1

1

1

0

0

0

1

1

0

0

0

1

0

1

1

0

0

0

0

1

0

1

1

0

0

1

0

1

1

0

1

1

0

1

2

0

1

1

0

0

1

1

1

1

1

1

0

0

1

3

0

1

1

0

1

0

0

0

1

1

0

0

1

1

4

0

1

1

0

1

0

1

1

0

1

1

0

1

1

5

0

1

1

0

1

1

0

0

0

1

1

1

1

1

6

0

1

1

0

1

1

1

1

1

1

0

0

0

0

7

0

1

1

1

0

0

0

1

1

1

1

1

1

1

8

0

1

1

1

0

0

1

1

1

1

0

0

1

1

9

0

1

1

1

0

1

0

0

0

0

0

0

0

0

消隐

0

1

1

1

0

1

1

0

0

0

0

0

0

0

消隐

0

1

1

1

1

0

0

0

0

0

0

0

0

0

消隐

0

1

1

1

1

0

1

0

0

0

0

0

0

0

消隐

0

1

1

1

1

1

0

0

0

0

0

0

0

0

消隐

0

1

1

1

1

1

1

0

0

0

0

0

0

消隐

1

1

1

X

X

X

X

锁       存

锁存

在程序中我们就用到了0~9以及0x0a消隐来使相应位亮灭闪烁

 

图3-5译码与显示电路

 

各种功能电路相互结合组成实现设计功能要求的数字钟电路,配合根据电路编写的程序以实现设计要求的全部功能。

3.1.3原理图

图3-6数字钟原理图

使用protel绘制全部电路的原理图,网络标号的使用可以让图看起来简洁清楚,方便绘图人的操作。

 

3.1.4PCB图

图3-7数字钟PCB图

3.1.5制板

根据原理图在万用版上使用导线将各种器件连接成电路板。

3.1.6系统调试

(1)电气检查

使用万用表对制作好的电路板进行电气检查,确保没个引脚的连接都符合原理图的设计,没有出现虚焊、漏焊或者短路的情况。

(2)上电检查

通电状态下检查各器件的工作电压是否正常。

3.2软件设计

3.2.1系统分析

通过单片机来实现数字钟的功能。

流程图如下

 

图3-8主程序流程图

 

图3-10闪烁中断流程图

3.2.2系统设计

程序如下

/************************************************************/

/***************数字钟**************************/

/**用P1口控制4只段码管,用两位数码管进行分针**/

/**时间显示,用两位数码管进行秒针时间显示,**/

/**********有四个时钟调整及控制按键***************/

#include"reg51.h"

#defineucharunsignedchar

uchardatatimedata[4]={0x00,0x00,0x00,0x00};//计时单元数据初值

ucharcodescancode[4]={0xfe,0xfd,0xfb,0xf7};//扫描代码

uchardatadisplaydata[6]={0x00,0x00,0x00,0x00,0x0a,0x00};//显示单元数据初值

uchardatadisplaycode[11]={0,1,2,3,4,5,6,7,8,9,0x0a};//显示代码

uchardataflag_1s=0x00;//1s标志

uchardataflag=0x00;//按键调时标志

uchardataflag_04s=0x00;//闪烁标志

uchardataflag_inter=0x00;//暂停标志

sbitkey0=P2^0;//位选调时按键

sbitkey1=P2^1;//加1按键

sbitkey2=P2^2;//减1按键,暂停按键复用

sbitkey3=P3^2;//暂停按键

/*=================1ms延时程序=====================*/

delay1ms(intt)

{

inti,j;

for(i=0;i

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

}

/*=================键扫描程序=====================*/

keyscan()

{

EA=0;

if(key0==0)//调时键是否按下

{

delay1ms(10);

while(key0==0);//未按下等待

if(displaydata[flag]==10)//显示单元[0]秒单元=10

{

displaydata[5]=displaydata[flag];//与闪烁有关把低位的a送出消隐,已//达到闪烁目的

displaydata[flag]=displaydata[4];

displaydata[4]=displaydata[5];

}

flag++;//进位标志加1

TR0=0;//启动T0计时,关闭T1

TR1=1;

ET0=0;

ET1=1;

if(flag>=4)//进位标志满4时

{

flag=0;//进位标志清0

TR0=1;//启动T0计时,关闭T1

TR1=0;

ET0=1;

ET1=0;

}

}

if(flag!

=0)//

{

if(key1==0)//加1按键是否按下

{

delay1ms(10);

while(key1==0);//未按下等待

switch(flag)

{

case1:

{

timedata[flag]++;//按下,计时单元[0]加1

if(timedata[flag]>=6)//计时单元[0]满6

{

timedata[flag]=0;//计时单元[0]清0

}

displaydata[flag]=timedata[flag];

displaydata[4]=0x0a;

break;

}

case2:

{

timedata[flag]++;//按下,计时单元[0]加1

if(timedata[flag]>=10)//计时单元[0]满10

{

timedata[flag]=0;//计时单元[0]清0

}

displaydata[flag]=timedata[flag];

displaydata[4]=0x0a;

break;

}

case3:

{

timedata[flag]++;//按下,计时单元[0]加1

if(timedata[flag]>=6)//计时单元[0]满6

{

timedata[flag]=0;//计时单元[0]清0

}

displaydata[flag]=timedata[flag];

displaydata[4]=0x0a;

break;

}

default:

break;

}

}

}

if(flag!

=0)//

{

if(key2==0)//未按下等待

{

delay1ms(10);

while(key2==0);//按下,计时单元[0]减1

switch(flag)

{

case1:

{

if(timedata[flag]==0)//计时单元[0]减为0时

{

timedata[flag]=0x05;//计时单元[0]置初值5

}

else

{

timedata[flag]--;//未减为0时,减1

}

displaydata[flag]=timedata[flag];

displaydata[4]=0x0a;

break;

}

case2:

{

if(timedata[flag]==0)//计时单元[0]减为0时

{

timedata[flag]=0x09;//计时单元[0]置初值9

}

else

{

timedata[flag]--;//未减为0时,减1

}

displaydata[flag]=timedata[flag];

displaydata[4]=0x0a;

break;

}

case3:

{

if(timedata[flag]==0)//计时单元[0]减为0时

{

timedata[flag]=0x05;//计时单元[0]置初值5

}

else

{

timedata[flag]--;//未减为0时,减1

}

displaydata[flag]=timedata[flag];

displaydata[4]=0x0a;

break;

}

default:

break;

}

}

}

if(flag_inter!

=0)

{

if(key2==0)

{

TR0=1;//启动T0计时

flag_inter--;

}

}

 

EA=1;

}

/*===================扫描显示程序====================*/

voidscan()

{

uchark,i;

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

{i=displaydata[k];

P1=displaycode[i];

P0=scancode[k];

delay1ms(3);

P1=0xff;

}

}

/*=================初始化程序=================*/

init()

{

uchari;

for(i=0;i<4;i++)

{

displaydata[i]=timedata[i];

}

EX0=1;

IT0=0;

TMOD=0x11;//工作方式1

ET0=1;

TR0=1;

TH0=0x3c;//计时初值

TL0=0xb0;

TH1=0x3c;//计时初值

TL1=0xb0;

EA=1;

}

/*=====================主程序=================*/

main()

{

init();

while

(1)

{

keyscan();

scan();

}

}

/*==================1s中断处理程序=============*/

voidtime_intt0(void)interrupt1

{

ET0=0;

TR0=0;

TH0=0x3c;

TL0=0xb0;

TR0=1;

EA=1;

flag_1s++;

if(flag_1s==20)

{

flag_1s=0x00;

timedata[0]++;

if(timedata[0]>=10)

{

timedata[0]=0x00;

timedata[1]++;

if(timedata[1]>=6)

{

timedata[1]=0;

timedata[2]++;

if(timedata[2]>=10)

{

timedata[2]=0x00;

timedata[3]++;

if(timedata[3]>=6)

{

timedata[3]=0x00;

timedata[4]++;

if(timedata[4]>=10)

{

timedata[4]=0;

timedata[3]=0;

}

}

}

}

}

displaydata[0]=timedata[0];

displaydata[1]=timedata[1];

displaydata[2]=timedata[2];

displaydata[3]=timedata[3];

}

ET0=1;

}

/*================0.4s闪烁中断程序================*/

voidtime_initt1(void)interrupt3

{

EA=0;

TR1=0;

ET1=1;

TH1=0x3c;

TL1=0xb0;

TR1=1;

flag_04s++;

if(flag_04s==8)

{

flag_04s=0x00;

displaydata[5]=displaydata[flag];

displaydata[flag]=displaydata[4];

displaydata[4]=displaydata[5];

}

EA=1;

}

//**************外部中断0*****************

//**************暂停时钟******************

voidint00(void)interrupt0

{

delay1ms(10);

if(key3==0)

{

TR0=0;

flag_inter++;

}

}

3.2.3系统实施

经检查电路板没问题后,把程序烧入单片机,上电后,时钟便从0000开始每秒加1计时,按下调时按键,进入调时状态,按加按键,秒十位闪烁幷加1,再按下调时按键准备调分个位且闪烁,按加按键或减按键经行时间设定,调时按键按下4次后,时钟重新进入运行状态。

当按下暂停按键时,时钟暂停显示当时的时间,此时在按下启动按键(与减按键复用)时钟重新启动运行。

经以上调试所要求的功能均以实现。

材料清单

 

表2材料清单

器件名称

数量

备注

AT89S51

1

单片机

CD4511

1

7段码译码器

晶振

1

12MHZ

电解电容

2

10uf

无极性电容

3

30pf

(2),0.1uf(滤波)

(1)

绿色发光二极管

1

电源指示灯

按键

5

数码管

4

共阴极

三极管

4

NPN

电阻

17

510(7),10K(5),300

(1),4.7K(4)

插座

2

 

4、课程设计总结或结论

两周过去了,经过近两周的努力,紧张而充实。

在这两周的时间里,我学到了很多,对单片机有了更深刻的认识,也对自己的不足有了清醒的认识。

虽然我在平时也学过这方面的内容,也画过PCB图,但真到用的时候还是不熟练,出了不少错误。

在焊接过程中,由于粗心大意也弄错了几根线。

通过这次的课程设计,使我注意到了以上几点,应在以后的学习中加以注意。

通过这次机会不但练习了编程,而且还对51单片机又加深了一些认识,练习了定时器,中断等。

更重要的是我体会到了团队的力量。

在整个过程中,同学给予的帮助很重要,团队合作是我们成功的关键,尤其在焊接时,一个人很容易疏忽大意,而我们一起时,轻松愉快也不容易出问题,再就是遇到困难时,比如调试出问题时,我们一起思考找问题,问题的顺利解决是我们团队配合的结果。

在设计过程中,老师给予了我们很多帮助,原理图设计时,我们不确定各个电阻的的阻值如何选取,就去问老师。

老师不仅告诉我们选取什么阻值,还告诉选取的理由,当调试失败出问题时,老师帮助我们找问题,他们有经验有学识,对我们帮助很大。

非常感谢老师的帮助。

课程设计很快就这样过去了。

我们每个人都学。

到了很多东西,同时也感觉到了自己的不足,它将对我们以后参加工作有很大的帮助,有利于我们以后走上工作岗位。

 

5、参考文献

【1】单片机原理及应用/张毅刚主编.-北京:

高等教育出版社

【2】51系列单片机设计实例/楼然苗等编著.-2版.-北京:

北京航空航天大学出版社,2006.2

【3】80C51单片机原理与应用技术吴炳胜等编冶金工业出版社

【4】单片机原理及接口技术梅丽凤等编清华大学出版社

【5】电子线路设计.实验.测试(第三版)谢自美 主编 华中科技大学出版社

 

 

课程设计

评语

课程设计

成绩

指导教师

(签字)

年月日

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1