多功能数字钟设计报告毕业设计(论文)
目录
绪论-----------------------------------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)、小时、“:”、分钟及秒钟(如PM 23: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 和闹铃就绪的指示的灯。 L CD1602液晶显示器接口电路:将单片机的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
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P3^5;
sbit lcdwe=P3^4;
sbit delu=P2^6;
sbit wala=P2^7;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit BEEP=P2^3;
sbit rd=P3^7;
uchar code table[]=" 2010-10-3 MON";
char shi,fen,miao;
uchar count,num1,num;
void delay(uint mao)
{
uint a,b;
for(a=mao;a>0;a--)
for(b=110;b>0;b--);
}
void write_com(uchar com)
{
lcdrs=0;
lcdwe=0;
P0=com;
delay(5);
lcdwe=1;
delay(5);
lcdwe=0;
}
void write_date(uchar date) {
lcdrs=1;
lcdwe=0;
P0=date;
delay(5);
lcdwe=1;
delay(5);
lcdwe=0;
}
void write_sfm(uchar add,uchar date) {
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void di()
{
BEEP=0;
delay(100);
BEEP=1;
}
void init()
{
uchar num;
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
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;
}
void keyscan()
{
if(s1==0)
{
delay(5);
if(s1==0)
{
num1++;
while(!s1);
di();
if(num1==1)
{
TR0=0;
write_com(0x80+0x40+10+0);