基于Proteus和Keil的多功能数字钟的设计和实现

2016-07-15 09:54
常州信息职业技术学院学报 2016年3期

严 敏

(江苏联合职业技术学院扬州商务分院信息电子系 江苏扬州 225127)



基于Proteus和Keil的多功能数字钟的设计和实现

严敏

(江苏联合职业技术学院扬州商务分院信息电子系江苏扬州225127)

摘要:利用时钟芯片DS1302、温度传感器DS18B20等模块,以AT89C51单片机为系统控制核心设计多功能数字钟,用LCD1602液晶实时显示日期、时间、温度,通过按键模块设置闹钟、调整时间。在Proteus仿真平台中进行系统硬件设计,在Keil集成开发环境中采用C51语言进行系统软件设计,联合调试,实现了所述功能。

关键词:DS1302; DS18B20; LCD1602; Proteus; Keil

0引言

在日常生活中,数字钟的应用非常广泛,比如:家庭、学校、办公室、超市、商场等各类场所。与传统的机械时钟相比,它具有精度高、显示直观、寿命长等优点[1]。本文利用时钟芯片DS1302、温度传感器DS18B20等模块,以AT89C51单片机为系统控制核心设计多功能数字钟,用LCD1602液晶实时显示日期、时间、温度,通过按键模块设置闹钟、调整时间。在Proteus仿真平台中进行系统硬件设计,在Keil集成开发环境中采用C51语言进行系统软件设计,联合调试直至成功。

1系统硬件设计

1.1设计总体结构

本次设计的多功能数字钟具有日期和时间显示功能、温度显示功能、闹钟设置功能、调时功能。它以AT89C51单片机为控制核心,外围电路由DS1302时钟模块、DS18B20温度传感器采集模块、LCD1602液晶显示模块、独立按键模块以及闹钟模块组成,设计总体结构如图1所示。

1.2单片机主控模块

本次设计使用Atmel公司生产的AT89C51单片机芯片,它和Intel公司的8051系列单片机的指令系统和引脚完全兼容,共40个引脚,内部包含4个8位并行I/O口(P0口、P1口、P2口、P3口),一个全双工串行接口,两个16位的可编程定时/计数器,128字节的RAM和4 K字节的Flash ROM。在AT89C51的外围添加时钟电路、电源电路和复位电路就可以构成单片机最小系统,如图2所示。

图1 多功能数字钟的总体结构

图2 单片机最小系统电路原理图

1.3DS1302时钟模块

DS1302是一种高性能、低功耗、带RAM的实时时钟芯片,能够实现对年、月、日、周、时、分、秒的计时,且具有闰年补偿等多种功能[2]。它与单片机之间的通信联络仅需三条线,分别为RST(复位/片选线)、SCLK(时钟输入线)、I/O(数据输入输出线)。电路设计时,引脚RST、SCLK、I/O分别接单片机的P3.0、P3.1、P3.2。引脚VCC2是主电源,接5 V。引脚VCC1是后备电源,接3 V。当主电源掉电时,由备用电源供电以保证时钟的正常运行。引脚X1和X2是振荡源,外接32.768 KHz晶振,如图3所示。

图3 DS1302电路原理图

1.4DS18B20温度传感器模块

DS18B20是Dallas半导体公司生产的数字化温度传感器,它采用一线总线方式,即一根数据线实现数据的双向传输。DS18B20测量温度范围为-55oC~+125oC,测量分辨率为0.0625oC。用户可以在程序中设定9~12位的分辨率和报警温度,它们存储在EEPROM中,掉电也不丢失[3]。电路设计时,将引脚VCC接5 V电源,引脚GND接电源地,引脚DQ接4.7 KΩ的上拉电阻到单片机的P2.7口,如图4所示。

图4 DS18B20电路原理图

1.5LCD1602液晶显示模块

LCD1602是点阵字符式液晶模块,内置有192种字符、数字、字母、标点符号等可显示的字符点阵图像库,可显示两行,每行可显示16个5*7点阵字符。LCD1602带有背光光源,并行接口,可直接与单片机I/O口相连[4]。电路连接时,将第4引脚RS(数据/指令寄存器选择端)、第5引脚R/W(读写选择端)、第6引脚E(使能端)分别接单片机的P2.0、P2.1、P2.2。第7~14引脚DB0~ DB7(8位数据线)接单片机P0口,这里,需要连接上拉排阻以增加单片机的驱动能力。第1引脚VSS接电源地,第2引脚VDD接5 V电源,第3引脚VEE是液晶显示器对比度调节端,通过一个10 K的电位器调节对比度,接电源时对比度最低,接地时最高。见图5。

图5 LCD1602电路原理图

1.6按键和闹钟模块

按键模块用于闹钟设置和时间调整,采用四个独立式按键,分别为闹钟设置键K1、时间设置键K2、加键K3、减键K4,它们连接单片机的P1.0、P1.1、P1.2、P1.3。闹钟模块通过蜂鸣器实现,采用三极管驱动蜂鸣器,接单片机的P1.7,当P1.7输出高电平时,三极管截止,蜂鸣器不发声;当P1.7输出低电平时,三极管导通,蜂鸣器发出声音。见图6。

2系统软件设计

软件程序主要完成时钟和温度信息的读取、转换及显示等功能,采用模块化设计思路,包括系统初始化程序、DS18B20温度测量子程序、DS1302时钟子程序设计、LCD1602液晶显示子程序设计、按键扫描子程序设计、延时子程序等。

图6 按键和闹钟电路原理图

2.1DS1302时钟子程序设计

DS1302中有12个与时钟相关的寄存器,本设计中使用年、月、日、周、时、分、秒这7个寄存器,如表1所示,通过访问寄存器地址进行时间数据的读写,由于时间数据是以BCD码存放,而LCD1602液晶显示字符时使用ASCII码,因此需要进行码制转换。

表1 DS1302时钟寄存器

DS1302的控制字如表2所示,数据从控制字开始传输。单片机与DS1302数据传输时,首先将RST置高电平,在输入控制字的下一个SCLK时钟的上升沿到来时,数据从I/O最低位开始写入;在SCLK时钟的下降沿到来时,数据从I/O最低位依次读出;当数据传送完,RST置为低电平。

表2 DS1302控制字

2.2DS18B20温度测量子程序设计

测量温度时,单片机先初始化DS18B20,然后对其进行读时序、写时序操作,得到RAM中的2字节16位的温度数据(低位在前,高位在后),再进行数值变换和量程变换,最终得到实际温度。其部分代码设计如下所示:

void read_wendu()

{ init_ds18b20(); //初始化

writechar(0xCC); //跳过ROM操作

writechar(0x44); //启动温度转换

init_ds18b20();

writechar(0xCC);

writechar(0xBE); //读取温度

wl=readchar(); //温度低位

wh=readchar(); //温度高位

wh=wh*16;……}

……

2.3LCD1602液晶显示子程序设计

对于本次设计,1602液晶负责将要显示的时钟和温度信息送到对应的位置进行显示。其部分代码设计如下所示:

void lcd_display(uchar x,uchar y,uchar dispbuf)

//到指定的位置显示字符

{y&=0x01; //限制行数y不能大于1

x&=0x0f; //限制1行字符数x不能大于15

if(y==1) //如果在第二行则字符地址从0x40 x|=0x40;

x|=0x80; //设置地址指针

lcd_writecmd(x); //写地址码

lcd_writedata(dispbuf); //写数据 }

……

2.4按键扫描子程序设计

当有键按下时,首先确定是哪个键,再进行相关处理,其部分代码设计如下所示:

sbit K1=P1^0; //定义闹钟设置键

sbit K2=P1^1; //定义时间调整键

sbit K3=P1^2; //定义加键

sbit K4=P1^3; //定义减键

……

void keyscan() //按键处理子程序

{ P1=0x0f; //将P1口的低4位置高电平1

if ((P1&0x0f)!=0x0f) //判断有无按键按下

{ mdelay (10); //延时去抖

if ((P1&0x0f)!=0x0f) //再一次判断有无按键按下

{ if (K1==0) //闹钟设置键按下 ……}}}

3仿真与结果分析

将Proteus和Keil联合调试,就可以看到数字钟的仿真运行效果。最终的仿真结果如图7所示,可以看出,液晶实时准确显示了当前的日期、时间和温度。1602第一行显示的是年月日和星期,第二行显示的为时分秒和温度。

图7 多功能数字钟仿真图

当按下闹钟设置键K1一次,时位闪烁,按下两次,分位闪烁,按下三次,秒位闪烁。这时,如果按下加键K3,对应闪烁位加1,如果按下减键K4,对应闪烁位减1,再次按下闹钟设置键K1完成设置。闹钟时间到,蜂鸣器响,每响一声,次数减1,直至减为0,闹钟结束。

时间设置与闹钟设置类似,当按下时间设置键K2,年、月、日、周、时、分、秒位先后依次闪烁,按下加键K3/减键K4进行修改,再次按下时间设置键K2完成设置。

4结束语

本文基于单片机仿真软件Proteus和Keil开发环境设计了多功能数字钟,程序的开发和编译在Keil中进行,并在Proteus平台上仿真验证。这不仅提高了单片机系统设计的效率,降低了成本,缩短了周期,而且对于单片机系统的教学演示和实际设计都具有很大的应用价值。

参考文献:

[1]祝凤莲.LCD1602在数字钟中的应用[J].福建电脑,2012(10): 142-143.

[2]罗佳.基于单片机的数字电子钟及其实现[J].常州信息职业技术学院学报,2014(2): 153-154.

[3]石建平.基于PROTEUS的单片机温度采集系统设计与仿真[J].电子测试,2013(21): 70-72.

[4]安红霞.基于AT89S52单片机的1602型液晶屏显示技术研究[J].牡丹江师范学院学报,2014(3): 23-24.

收稿日期:2016-04-25

基金项目:江苏省职业技术教育学会职业教育课题(XHXS2015035)

作者简介:严敏(1982-),女,讲师,硕士,主要研究方向:单片机系统开发与设计

中图分类号:TN 791

文献标志码:A

文章编号:1672-2434(2016)03-0013-05

Design and Implementation of Multi-function Digital Clock Based on Proteus and Keil

YAN Min

(The Information Electronic Department ,Yangzhou Business Branch of Jiangsu Union Technical Institute, Yangzhou 225127, China)

Abstract:This paper designs multi- function digital clock with the AT89C51 as the system control core, using clock chip DS1302, temperature sensor DS18B20 and other modules. The clock can display date, time and temperature in real time by LCD1602 liquid crystal, set alarm clock and adjust time by button module. The hardware design of the system is carried out in the Proteus simulation platform, system software design using C51 language in Keil integrated development environment, debug until successful.

Key words:DS1302; DS18B20; LCD1602; Proteus; Keil