多功能数字钟设计报告毕业设计论文.docx
《多功能数字钟设计报告毕业设计论文.docx》由会员分享,可在线阅读,更多相关《多功能数字钟设计报告毕业设计论文.docx(20页珍藏版)》请在冰豆网上搜索。
多功能数字钟设计报告毕业设计论文
目录
绪论-----------------------------------3
一、实验目的-------------------------------4
二、实验任务及要求-------------------------4
三、设计方案简述----------------------------5
1、方案比较与设计----------------------------------5
2、详细设计
1)系统设计-----------------------------------------6
2)方案实现-----------------------------------------7
四、设计结果与分析------------------------------------9
1、理论分析与设计---------------------------------9
2、测试方法与调试---------------------------------9
五、元器件清单-------------------------------------15
六、电路制板与焊接---------------------------------16
七、实物调试--------------------------------------16
八、总结-------------------------------------------18
绪论
近年来随着计算机在社会各领域的渗透和大规模集成电路的发展,单片机的应用正不断的走向深入。
单片机是一种集成在电路里的芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
单片机自诞生于20世纪70年代末,最早应用于工业领域。
随着单片机的不断发展,现已应用领域十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
多功能数字钟的控制核心是单片机(STC89C52),采用蜂鸣器、液晶显示器(LCD1602)、电源电路及其他电路构成。
实现了时间设置、闹铃设置、闹铃开和关的功能;LCD显示小时、分钟,有AM、PM指示灯,闹钟就绪灯,闹钟到点蜂鸣器报警,220V供电基本功能。
通过对多功能时钟的设计,加深对单片机的更深层次的理解,熟悉单片机的内部硬件资源,掌握单片机的编程方法,学会对单片机各部分硬件资源的控制方法。
此外,还要学会怎么利用所学单片机知识独立设计系统的能力,达到学于致用的目的,要学会发创设计编程思想,要学会开发系统的一般过程,并不不断创新.
一实验目的
1.在了解数字钟的原理的前提下,运用刚刚学过的数电知识设计并制作数字钟,而且通过数字钟的制作进一步了解各种在制作中用到的中小规模集成电路的作用及其使用方法。
2.由于数字电子钟包括组合逻辑电路和时序电路,通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法,从而实现理论与实践相结合,增强实验设计能力和动手操作能力。
3.通过本次试验是对我们电子线路知识和电子线路设计能力的一次训练,并为后继课程的学习和毕业设计打下一定的基础。
二实验任务及要求
1实验任务
设计一种简易数字钟,该数字钟具有基本功能,包括准确计时,以数字形式显示时、分,以二极管显示秒的时间和校时功能。
2实验要求
基本要求:
(1)具有时间设置(小时、分钟、秒、日期)。
(2)数字显示小时、分钟,有AM、PM指示器。
发挥部分:
(1)闹钟就绪灯,蜂鸣器。
(2)闹钟时间设置、闹钟开、闹钟关功能。
(3)其他发挥部分。
三、设计方案简述
一、方案比较与设计
1.数字时钟控制部分的选择
方案一:
采用AT89S52单片机。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器
方案二:
采用STC89C52单片机。
STC89C52具有功耗低,抗干扰能力强,利用IAP功能进行在系统运行时编程,电路简单,只要所使用的单片机系统具有232串口通信功能即可。
方案二要比方案一的通信方式更加方便,烧录程序更加方便,在其他的方面也没有太多的区别,所以最终选择方案二。
2.数字时钟显示器的选择与控制
方案一:
采用5只7段共阴极数码管,分别显示小时、’—’及分钟(如23-30),P0口连接数码管的段选端(a、b、c、d、e、f、g),P2口(0-4端)控制数码管位选端(cs1-cs5)。
方案二:
采用一块液晶显示器(LCD1602),显示内容多,可以显示AM(PM)、小时、“:
”、分钟及秒钟(如PM23:
30:
30),另外控制也较为方便,只用两个控制线(lcdrs、lcden)。
方案三:
编程较简单,但硬件电路较乱;方案二编程与硬件电路实现都较为方便。
考虑到本设计的需求与要求,采用方案二。
3.按键的选择与控制
方案一:
采用4只轻触按键完成各项功能的设置,分别为功能键、增加键、减少键、开关闹铃键,采用按键复用的设计思路。
此种方案硬件简单,软件实现困难。
方案二:
采用6只轻触按键完成各项功能的设置,分别为设置时间、设置闹铃、调整小时、调整分钟、开闹铃、关闹铃,采用分模块的设计思路。
此种方案比第一种只多2只按键,软件实现较为方便。
所以采用方案二。
4.传感器的选择与控制
方案一:
采用热敏电阻作为温度传感器。
热敏电阻传感器是利用半导体的电阻值随温度变化的特性制成的测温原件。
热敏电阻的阻值随温度的变化呈非线性。
方案二:
采用DS18B20作为温度传感器。
DS18B20是数字输出型集成温度传感器,,可把温度信号直接转换成串行数字信号供计算机处理。
DS18B20提供9位温度读数,构成多点温度检测系统而无需任何外围硬件。
所以采用方案二。
1.详细设计
1)系统设计
电路说明:
ØAM、PM、闹铃就绪LED指示灯部分,三只LED发光二极管分别作为AM、PM、闹铃就绪指示灯。
ØLCD1602液晶显示器部分,作为本系统的显示器,显示时间、闹钟与温度。
Ø蜂鸣器、温度传感器、红外接收部分,分别用来闹铃到点报警,显示现场温度及非接触式停止闹铃。
Ø键盘部分,作为本系统的控制部分,用来设置时间、闹铃与显示温度。
二方案实现
1)电源电路
本系统采用5V直流电源作为整个电路的供电模块,电路如下:
2)系统电路图。
除电源模块外和串口通信模块,由单片机复位电路,单片机晶振电路,LED指示灯电路,温度传感器(DS18B20),蜂鸣器,LCD1602,红外接收电路,键盘接口电路组成。
系统整体电路如下图所示
3)系统电路说明:
ØLED指示灯电路:
分别用3只发光二极管作为AM、PM和闹铃就绪的指示的灯。
ØLCD1602液晶显示器接口电路:
将单片机的P2.7和P2.6分别连接LCD的RS和EN端,P0口接LCD的数据端(DB0-DB7)。
LCD1602显示时间、闹铃、温度。
Ø蜂鸣器接口电路:
通过一个PNP三极管放大电路,将单片机的P3.6与三极管的基极相接,实现单片机控制蜂鸣器发声。
Ø键盘接口电路:
本系统共用6只接触式按键,分别与单片机的P2.0-P2.5相连,实现单片机控制键盘。
4)键盘功能说明:
Ø本系统共用到6只按键,分别用来设置时间、设置闹铃、调整小时、调整分钟、开闹铃、关闹铃。
Ø实时时间显示在LCD的第二行。
Ø设置时间与设置闹铃处于同一优先级,不可同时有效。
当设置完闹铃时,闹钟时间在第一行消隐掉。
Ø调整小时与调整分钟必须在设置时间或设置闹铃按下时才有效。
Ø开闹铃与关闹铃相对独立,不受其他按键的影响。
Ø调整小时的按键作为切换显示温度的开关,当他作为第二功能用时,设置时间与设置闹铃的功能无效。
四.设计结果和分析
一、理论分析与计算
1、时间的控制与计算。
用定时器实现单片机的时间走动,定时器0定时50ms,经20次中断就过了1s,每过1s在中断服务程序中,通过软件编程让秒、分、时显示在LCD上。
单片机不停的扫描键盘,当有按键按下时,就进入相应的服务程序。
如:
当设置时间键按下时,时间停止,进入调整时间状态,通过调时与调分两个按键可调整时间,再按下设置时间键就推出设置,时间继续。
2、蜂鸣器报警的设计。
当闹铃到点时,蜂鸣器就发出“滴滴”的声音以报时。
软件实现方法就是:
当闹钟的时间与实施时间对应相等就代表闹铃到点。
若不打开闹铃,蜂鸣器就不发声;在蜂鸣器发声的过程中,若关掉闹铃,蜂鸣器就停止发声。
二、测试方法与调试
1.测试方法
本系统为多功能数字钟,一切功能的测试均通过6只按键来完成。
可分别设置时间、设置闹铃、调整小时、调整分钟、开闹铃、关闹铃。
本程序较大,采用C51语言编写。
先调试各功能模块,再调试整个系统。
程序见附页。
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitlcdrs=P3^5;
sbitlcdwe=P3^4;
sbitdelu=P2^6;
sbitwala=P2^7;
sbits1=P3^0;
sbits2=P3^1;
sbits3=P3^2;
sbitBEEP=P2^3;
sbitrd=P3^7;
ucharcodetable[]="2010-10-3MON";
charshi,fen,miao;
ucharcount,num1,num;
voiddelay(uintmao)
{
uinta,b;
for(a=mao;a>0;a--)
for(b=110;b>0;b--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
lcdwe=0;
P0=com;
delay(5);
lcdwe=1;
delay(5);
lcdwe=0;
}
voidwrite_date(uchardate)
{
lcdrs=1;
lcdwe=0;
P0=date;
delay(5);
lcdwe=1;
delay(5);
lcdwe=0;
}
voidwrite_sfm(ucharadd,uchardate)
{
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
voiddi()
{
BEEP=0;
delay(100);
BEEP=1;
}
voidinit()
{
ucharnum;
lcdwe=0;
rd=0;
P1=0xff;
delu=0;
wala=0;
shi=0;
fen=0;
miao=0;
count=0;
num1=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40+6);
write_date('-');
delay(5);
write_com(0x80+0x40+9);
write_date('-');
delay(5);
write_sfm(10,miao);
write_sfm(7,fen);
write_sfm(4,shi);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidkeyscan()
{
if(s1==0)
{
delay(5);
if(s1==0)
{
num1++;
while(!
s1);
di();
if(num1==1)
{
TR0=0;
write_com(0x80+0x40+10+0);
write_com(0x0f);
}
if(num1==2)
{
write_com(0x80+0x40+7);
}
if(num1==3)
{
write_com(0x80+0x40+4);
}
if(num1==4)
{
num1=0;
write_com(0x0c);
TR0=1;
}
}
}
if(num1!
=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!
s2);
di();
if(num1==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10+0);
}
if(num1==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(num1==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!
s3);
di();
if(num1==1)
{
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10+0);
}
if(num1==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(num1==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(4,fen);
write_com(0x80+0x40+4);
}
}
}
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);
}
}
2.具体调试过程
问题一:
初次电源电路焊接错误。
问题二:
烧录程序后发现液晶发光但是不显示任何数字,这个问题困惑了我们很久,我们通过测试发现软件是完全正确的,最后终于确定是硬件的问题,是液晶2号引脚忘记虚焊的问题。
问题三:
调试后发现液晶数字不是很清楚,后来在同学帮助下我们对液晶可变电阻的部分做了修改,使之能够调节对比度。
②软件部分
问题一:
我们把所有的自定义的函数都放在了主函数之前,并且DS18B20温度传感器的应用程序放在一开始,原认为Keli软件中应当有DS18B20的头文件,但发现没有,为了方便我们没有在工程下面建头文件,而是直接到Keli软件本身的库函数去添加了一个头文件,从而解决了温度传感器的问题。
五、元器件清单
这次实验的器件经过不断的改进电路,器件也相应的减少,即节约了成本,也使电路版显得更加美观。
我所需的器件如下表:
序号
名称
型号
数量
1
液晶显示器
1602
1
2
电容
10uf
1
3
电容
1000uf
1
4
电容
0.1uf
1
5
电容
100uf
1
6
电阻
4.7K
1
7
电阻
10K
2
8
电阻
电阻
1
9
四脚开关
7
10
晶振
1
11
蜂鸣
1
12
九脚排阻
10K
1
13
单片机
AT89s52
1
14
导线
若干
六.焊接
焊接时,根据时钟电路的具体构造,选择合适的万孔板,节约资源和资金,经过观察,本实验选择的是那HX13089小型万孔板。
另外,根据个人喜好,选择0.08mmd的焊锡,要注意焊接时,不小心粘一起的可用吸锡器吸掉,重新焊接。
要仔细考虑电路的布局,焊完后,仔细检查焊脚,确保没有虚焊。
七实物调试
焊接好各个器件,将每种芯片都接到管脚,插上电源,调节电位器来控制脉冲快慢,倘若二极管和液晶管不亮,则检查电路和接线,如此不断修改调适,直到无误。
下图就是我们设计出来的成果
通电以后的显示界面
实物正面
八、总结
Ø此课题的收获:
本次电子产品设计与制作让我们收获颇丰。
这次电子作品的设计与制作是每三个人一组,其中这三人都有自己的工作,我们各个分工。
本次作品我们三人齐心协力共同完成了设计与制作的全过程。
我们第一次负责本次电子产品制做、安装、编程、调试、检测的全过程,虽然我们心理难免紧张,但我们最终都克服了这些困难。
我们刚决定制作电子钟时,都很茫然,但经过我们三人一起讨论后我们有了方向和目标,我们一起就去图书馆借来有关电子作品制作方面的书籍和上网查看有关电子网,进行在网上询问一些网友关于电子制作技术和经验及去请教学长。
最后,我们根据原理图列出元件清单,做了个种元件的性价比,我们就拿来有关这个数字电子钟电路的资料,分析这个电路的工作原理,弄清它怎么工作,我们进行了以下做法:
一、根据实际情况,我们对1602液晶部分的原理图做了部分修改。
二、对每个元器件查有关书籍资料或上网查找元器件的工作原理。
三、上网查找有关元器件的型号不同但功能相同或相似的替代品。
例如,数字电子钟用到的AT89S51以及液晶显示器,到底用AT98S51好还是AT89C51好呢,,我们三人进行了讨论。
经过我们三人一起讨论之后,最终决定了上述方案。
通过这次对数字电子钟的设计,让我们受益非浅。
首先深入的了解了设计电路的程序。
当我们接手一个课题或项目的时候,不是马上就动手搞。
而是应该先进行可行性论证。
首先提出几套方案,然后对各个方案进行对比。
即要在性能上面比较,又要在是否经济合算上面对比。
假如我们设计了一个性能很好的产品。
但是其中的某个元器件却很难买到,或者价格很高。
那么,我们就应该要考虑是否采用这个设计的方案。
Ø本实验的存在的一些不足和可以改进的地方:
1.焊接过程中用了不少的跳线,使整个实物图看上去有点乱,以后要有所改进,比如用杜邦线代替部分导线等。
2.可以考虑用红外模块控制电路,使控制更加方便。
3.本时钟还可以考虑添加温度模块,使之实用功能进一步增强。
最后感谢各位学长及同学们的支持与帮助,感谢他们的意见和建议,使这次的设计与制作少走了弯路,非常感谢!
2012.3.19