当前位置:文档之家› 液晶显示数字时钟(C语言)

液晶显示数字时钟(C语言)

液晶显示数字时钟(C语言)
液晶显示数字时钟(C语言)

唐山学院

毕业设计

设计题目:多功能液晶显示数字时钟的设计与实现

系别:

班级:

姓名:

指导教师:

2010年5月30 日

多功能液晶显示数字时钟的设计与实现

摘要

数字时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。另外,在生活和工农业生产中,也常常需要温度,这就需要数字时钟具有多功能性。

本设计主要为实现一款可正常显示时钟、日历、带有定时闹钟的多功能数字时钟。

本设计对当前数字时钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能数字时钟。本设计采用STC89C52RC单片机芯片作为中央处理器,外接DS1302时钟芯片提供时钟日历信息,星期通过编程计算自动生成,并利用液晶显示屏LCD1602来显示时钟、日历、星期、闹钟等信息,通过按键来设置或校准相关信息,并通过+5V电源为此系统供电,测试电路完成所有功能后制成样机。这种实现方法的优点是电路简单,性能可靠,实时性好,操作简单,编程容易。

该数字时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。

关键词:数字时钟单片机系统STC89C52RC DS1302 LCD1602

Design and Implementation of Multi-function

LCD Digital Clock

Abstract

Digital clock is using electronic technology to clock electronic, digital, with the clock precision, small size and friendly interface, scalability and strong performance characteristics, is widely used to live and work among. In addition, living and industrial and agricultural production, are often required temperature, which requires digital clock with versatility.

The key for the realization of a design can be displayed properly clock, calendar, alarm clock with multi-functional electronic time clock.

This article discusses the development of digital clock means were compared and analyzed finally determine the function of using SCM technology digital clock. This design uses STC89C52RC single chip as the CPU, external clock DS1302 clock chip to provide calendar information, automatically generated by programming a week, and use LCD1602 LCD displays clock, calendar, week, alarm clock and other information, through the button to set or calibration information, and through the +5 V power supply for this system. When all of the features produced after the completion of prototype .This method provides the advantage of simple circuit,reliable performance, real-time, simple operation, easy programming.

The digital clock can be applied to general life and work, can also be modified to improve performance,add new features to people's lives and work to bring more convenience.

Keywords: Digital Clock ;Microcomputer System; STC89C52RC; DS1302 ;LCD1602

目录

1引言 (1)

2基于单片机的数字时钟设计 (2)

2.1主要芯片选择 (2)

2.1.1 STC89C52RC单片机简介 (2)

2.1.2 STC89C52RC引脚简介 (3)

2.2时钟芯片DS1302 (4)

2.2.1 DS1302简介 (5)

2.2.2 DS1302引脚说明 (5)

2.2.3 DS1302的片内寄存器 (7)

2.3 LCD液晶显示器 (8)

2.3.1液晶显示器LCD1602简介 (8)

2.3.2 LCD的基本指令 (9)

3数字时钟硬件电路设计 (11)

3.1时钟电路设计 (11)

3.2显示电路 (11)

3.3按键电路设计 (12)

3.4闹铃电路设计 (13)

3.5复位电路设计 (14)

3.6电源的设计 (14)

3.6.1单相桥式整流电路介绍 (14)

3.6.2变压器和整流二极管的选择 (15)

3.6.3滤波电路 (15)

3.6.4滤波电容的选择 (16)

3.6.5稳压电路 (16)

4系统的软件设计 (17)

4.1 DS1302时钟模块 (17)

4.1.1宏定义DS1302中寄存器地址 (17)

4.1.2时钟芯片的单字节传送方式 (17)

4.1.3是否写保护寄存器操作 (18)

4.1.4时钟芯片的初始化 (18)

4.1.5时钟停止/启动走时 (18)

4.1.6数据信息的显示 (19)

4.2 LCD显示模块部分 (19)

4.2.1基本操作程序 (19)

4.2.2 RAM地址映射图 (19)

4.2.3状态字说明 (20)

4.2.4数据指针设置 (20)

4.2.5显示模式设置 (20)

4.2.6初始化设置 (21)

4.2.7其他设置 (21)

4.3主程序模块 (21)

4.3.1星期采用的算法 (21)

4.3.2中断声明 (21)

4.3.3校准时间函数 (22)

4.3.4设置闹钟函数 (22)

4.3.5 LCD显示程序设计 (22)

4.3.6主函数 (22)

5系统调试 (26)

5.1软件调试 (26)

5.1.1 Proteus 简介 (26)

5.1.2 Keil 简介 (26)

5.1.3 Proteus与Keil连接调试 (27)

5.2硬件调试 (29)

5.2.1焊接的注意事项 (29)

5.2.2单片机电路调试 (29)

5.2.3显示电路的调试 (29)

5.2.4 DS1302电路调试 (30)

5.2.5按键电路调试 (30)

6结论 (31)

谢辞 (32)

参考文献 (33)

附录一 (34)

附录二 (35)

附录三 (36)

外文资料 (56)

1引言

随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。而数字钟正是一种用数字电路技术与单片机技术实现计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用[1]。

数字时钟是指以微处理器为核心,充分利用数字技术和软件技术,与各类脉冲信号的传感器配合,记录时间等的智能仪表。数字时钟是日常生活、工业生产中常用的一种工具,社会拥有量和需求量都很大。功能上要求能够完成准确走时、调时,性能上要求抗干扰能力强,稳定可靠,同时在价格上具备竞争力[2]。

结合以上几点,设计了一款数字时钟,达到了可靠和经济的双重要求,同时易于与其它产品结合使用,是非常必要的。本设计主要着眼于数字钟的可靠性与实用性,把工业用单片机技术、与微型机技术应该在数字时钟设计中,开辟了单片机技术与现代计时方法相结合的一条新路。

该数字时钟设计工作原理为:单片机上电后,从芯片DS1302上讲读取时间数据,计时开始。通过按钮进行调时,上电复位进行校正时间,通过LCD显示其值。日常生活中对单片机数字钟的问题要求越来越高,本设计仅针对简单的数字钟进行研究,能够实现数字时钟的正确走时。

2基于单片机的数字时钟设计

本系统由控制时钟芯片DS1302、STC89C52RC单片机和字符点阵型LCD1602液晶显示器等器件构成。用DS1302产生时钟信号,再由单片机负责接收并且对其进行控制,然后通过编写程序实现具体的功能,如年、月、日、星期、时、分、秒,以及时间的校准、闹钟的设置等。再通过编写液晶器件的驱动程序,使其信息显示在LCD1602液晶显示器上,最后测试电路完成所有功能后制成样机,系统方框图如图2-1所示。

图2-1系统方框图

键盘是为了完成时钟、日历的校对和日历的显示功能。由于此电子时钟要求具有闹铃功能,所以设计有闹铃电路,进行声音响铃。

整个电路使用了两种电源,+5V电源将为整个电路供电。而+3V电源仅作为DS1302的备用电源。当+5V电源被切断后,DS1302启用+3V电源,可以保持DS1302继续工作。当+5V电源恢复供电,LCD依旧显示当前时间,而不会因为断电使系统复位到初始化时间,避免了重新校时的麻烦。

2.1主要芯片选择

2.1.1 STC89C52RC单片机简介

STC系列单片机是由STMicroelectronics 公司生产,并有宏晶公司做大陆代理的。STMicroelectronics即意法半导体公司是1987年6月在意大利的SGS微电子公司和法国的汤姆逊微电子公司合并后产生的。1998年5月,公司由原来的SGS汤姆逊(SGSTHOMSON)微电子公司改名为意法半导体公司(STMicroelectronics),简称ST公司[3]。

2.1.2 STC89C52RC引脚简介

STC89C52RC可以代替AT89C51,功能更强,速度更快,寿命更长,价格更低。将AT89C51中的程序直接烧录到STC89C52RC中后,STC89C52RC就可以代替AT89C51直接工作(一般都不需要做任何改动即可正常工作)。STC89C52RC的内核和AT51系列单片机一样,故引脚相同,外形及引脚排列也相同。

管脚说明:

VCC——供电电压。

GND——接地。

P0口——8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口——带内部上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口——带内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口——带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。在编程/校验时,P3口可接收某些控制信号。具体的P3口功能,如表2-1所示。

表2-1 P3口的特殊功能

引脚替代功能说明

P3.0 RXD 串行数据接收

P3.1 TXD 串行数据发送

P3.2 INT0 外部中断0申请

P3.3 INT1 外部中断1申请

P3.4 T0 定时器0外部事件计数输入

P3.5 T1 定时器1外部事件计数输入

P3.6 WR 外部RAM写选通

P3.7 RD 外部RAM读选通

RST——复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG——当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE 只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN——外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP——当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)[5]。

XTAL1——反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2——来自反向振荡器的输出。

2.2时钟芯片DS1302

在数字时钟设计中,常用的实时时钟芯片有DS12887、DS1216、DS1643、DS1302。每种芯片的主要时钟功能基本相同,只是在引脚数量、备用电池的安装方式、计时精度和扩展功能等方面略有不同。DS12887与DS1216芯片都有内嵌式锂电池作为备用电池;X1203引脚少,没有嵌入式锂电池,跟DS1302芯片功能相似,

表2-2 DS1302管脚的功能描述

管脚名 功能说明 X1,X2 32.768KHz 晶振管脚

GND 地 RST 复位脚 I/O 数据输入/输出引脚

SCLK 串行时钟 Vcc1,Vcc2

电源供电管脚

在编程过程中要注意DS1302的读写时序。DS1302是SPI 总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首要先了解DS1302的控制字。DS1302的控制字如表2-3。

控制字的作用是设定DS1302的工作方式、传送字节数等。每次数据的传输都是由控制字开始。控制字各位的含义和作用如下:

BIT7:控制字的最高有效位,必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

BIT 6:如果为0,则表示存取日历时钟数据,为1表示存取RAM 数据; BIT 5至BIT 1(A4~A0):用A4~A0表示,定义片内寄存器和RAM 的地址。 定义如下:

当BIT 6位=0时,定义时钟和其他寄存器的地址。A4~A0=0~6,顺序为秒、分、时、日、月、星期、年的寄存器。当A4~A0=7,为芯片写保护寄存器地址。当A4~A0=8,为慢速充电参数选择寄存器。当A4~A0=31,为时钟多字节方式选择寄存器。

当BIT 6=1时,定义RAM 的地址,A4~A0=0~30,对应各子地址的RAM ,地址31对应的是RAM 多字节方式选择寄存器。

BIT 0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。 控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK 时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK 脉冲的下降沿,读出DS1302的数据,读出的数

表2-3 DS1302控制字(即地址及命令字节)

BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 1

RAM

CK A4

A3

A2

A1

A0

RD

WR

据也是从最低位到最高位。

DS1302的数据读写方式有两种,一种是单字节操作方式,一种是多字节操作方式。每次仅写入或读出一个字节数据称为单字节操作,每次对时钟/日历的8字节或31字节RAM进行全体写入或读出的操作,称其为多字节操作方式。当以多字节方式写时钟寄存器时,必须按数据传送的次序依次写入8个寄存器。但是,当以多字节方式写RAM时,不必写所有31字节。不管是否写了全部31字节,所写的每一个字节都将传送至RAM。

为了启动数据的传输,RST引脚信号应由低变高,当把RST驱动至逻辑1的状态时,SCLK必须为逻辑0,数据在SCLK的上升沿串行输入。无论是读周期还是写周期,也无论送方式是单字节传送还是多字节传送,都要通过控制字指定40字节中的哪个将被访问。在开始8个时钟周期把命令字(具有地址和控制信息的8位数据)装入移位寄存器之后,另外的时钟在读操作时输出数据,在写操作时输入数据,所有的数据在时钟的下降沿变化。所有写入或读出操作都是先向芯片发送一个命令字节。对于单字节操作,包括命令字节在内,每次为2个字节,需要16个时钟;对于时钟/日历多字节模式操作,每次为7个字节,需要72个时钟;而对于RAM多字节模式操作,每次则为32字节,需要多达256个时钟。这里仅给出单字节读写时序。多字节操作方式与其类似,只是后面跟的字节数不止一个。

2.2.3 DS1302的片内寄存器

表2-4 日历、时间寄存器及其控制字

寄存器名称写操作读操作取值范围7 6 5 4 3 2 1 秒寄存器80H 81H 00~59 CH 10SEC SEC

分寄存器82H 83H 00~59 0 10MIN MIN

时寄存器84H 85H 00~23 12/24 10HR HR

日寄存器86H 87H 01~31 0 10DATE DATE 月寄存器88H 89H 01~12 0 0 10M MONTH 周寄存器8AH 8BH 01~07 0 0 0 0 DAY

年寄存器8CH 8DH 00~99 10YEAR YEAR

通过控制字对DS1302片内寄存器进行寻址之后,即可就所选中寄存器的各位进行操作。片内各寄存器及各位的功能定义如表2-4所示。

DS1302有关日历、时间的寄存器共有10个,时钟/日历包含在其中的7个写/读寄存器内,这7个寄存器分别是秒、分、小时、日、月、星期和年。

小时寄存器(85H、84H)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为12小时制式时,位5为“0”表示AM;为“1”表示PM。在24小

时制式下,位5是第二个10小时位(20~23时)。

秒寄存器(81H 、80H )的位7定义为时钟暂停标志(CH )。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。一般在设置时钟时,可以停止其工作,设定完之后,再启动其工作。

控制寄存器(8FH 、8EH )的位7是写保护位(WP ),其它7位均置为0。在任何片内时钟/日历寄存器和RAM ,在写操作之前,WP 位必须为0,否则将不可写入。当WP 位为1时,写保护位防止对任一寄存器的写操作。因此,通过置写保护位,可以提高数据的安全性。另外,还有慢速充电控制寄存器和RAM 寄存器。

慢速充电寄存器控制着DS1302的慢速充电特性。寄存器的BIT4~BIT7(TCS )决定是否具备充电性能:仅在编码为1010的条件下才具备充电性能,其他编码组合不允许充电。

2.3 LCD 液晶显示器

2.3.1液晶显示器LCD1602简介

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。本系统使用是是LCD1602液晶显示器,它可以显示两行,每行16个字符,采用单+5V 电源电,外围电路配置简单,价格便宜,具有很高的性价比[7]。LCD1602封装图如图2-3所示。

LCD1602采用标准的16脚接口,其中VSS 为地电源,VDD 接5V 正电源,VEE 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 的电位器调整对比度。RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW 为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和RW 共同为低电平时可以写入指令或者显示地址,当RS 为低电平RW 为高电平时可以读忙信号,当RS 为高电平RW 为低电平时可以写入数据。E 端为使能端,当E

端由高电平跳变

图2-3 LCD1602封装图

成低电平时,液晶模块执行命令。D0~D7为8位双向数据线。BLA背光源正极,BLK背光源负极。

2.3.2 LCD的基本指令

LCD1602液晶模块内部的控制器共有11条控制指令,具体的命令见表2-5所示。

表2-5 LCD1602控制指令

指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0

1 清屏0 0 0 0 0 0 0 0 0 1

2 光标复位0 0 0 0 0 0 0 0 1 *

3 光标和显示模式设置0 0 0 0 0 0 0 1 I/D S

4 显示开关控制0 0 0 0 0 0 1 D C B

5 光标或字符移位0 0 0 0 0 1 S/C R/L * *

6 置功能0 0 0 0 1 DL N F * *

7 置字符发生存贮器地

0 0 0 1 字符发生存贮器地址(AGG)

8 置数据存贮器地址0 0 1 显示数据存贮器地址(ADD)

9 读忙标志或地址0 1 BF 计数器地址(AC)

10 写入CGRAM/DDRAM 1 0 要写的数

11 读CGRAM/ DDRAM

1 1 读出的数据

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

1.清屏指令

功能:

(1) 清除液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码20H;

(2) 光标归位,即将光标撤回液晶显示屏的左上方;

(3) 将地址计数器(AC)的值设为0。

2.光标复位指令

功能:

(1) 把光标撤回到显示器的左上方;

(2) 把地址计数器(AC)的值设置为0;

(3) 保持DDRAM的内容不变。

3.光标和显示模式设置指令

功能:

设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。

4.显示开关控制指令

功能:

控制显示器开/关、光标显示/关闭以及光标是否闪烁。

5.设定显示屏或光标移动方向指令

功能:

使光标移位或使整个显示屏幕移位。

6.功能设定指令

功能:

设定数据总线位数、显示的行数及字型。

7.设定CGRAM地址指令

功能:

设定下一个要存入数据的CGRAM的地址。

8.设定DDRAM地址指令

功能:

设定下一个要存入数据的DDRAM的地址。

9.读取忙信号或AC地址指令

功能:

(1) 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;

(2) 读取地址计数器(AC)的内容。

10.数据写入DDRAM或CGRAM指令一览

功能:

(1) 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;

(2) 将使用者自己设计的图形存入CGRAM。

11. 从CGRAM或DDRAM读出数据的指令一览

功能:

读取DDRAM或CGRAM中的内容。

3数字时钟硬件电路设计

3.1时钟电路设计

系统时钟应用了时钟芯片DS1302,其连接如图3-1所示。该硬件电路设计简单,抗干扰能力强。

STC89C52RC单片机P1.2直接接DS1302的RST端,上电后,STC89C52RC 的P1.2脚自动输出高电平。P1.3作为串行时钟接口,P1.4作为时钟数据的I/O。DS1302采用双电源供电,平时由+5V电源供电,当+5V掉电之后,由图中BT1(+3V 备用电池)供电。

特别需要注意X1和X2两端连接的晶振,该晶振频率为32.768KHz。

图3-1系统时钟电路

3.2显示电路

系统的显示电路采用的是液晶显示方式。采用1602字符点阵型液晶模块,上一行显示日期,星期,下一行显示时间或是闹钟。使用起来比较灵活,操作简单,易控制,能够带来很大的方便。

在LCD1602液晶显示模块和单片机STC89C52RC相连接时的,具体的接法为:将VSS接地,VDD接高电平,VEE接入一个电位器来调整LCD1602的对比度。将RS接到P2.0口,R/W接到P2.1口,E接到P2.2口。D0~D7接到P0口来控制命令,输入及数据的输入/输出。具体的连接电路如图3-2所示。

图3-2 LCD1602液晶和单片机STC89C52RC接口电路

3.3按键电路设计

根据功能需要,本时钟需要设置以下功能键:时间校准键,加1操作键,减1操作键,闹铃校准键。

按照键盘与CPU的连接方式可分为独立式键盘和矩阵式键盘。独立式键盘是各个按键相互独立,每个按键占用一个I/O口线,每根I/O口线上的按键不会影响其他I/O口上按键工作状态。独立式键盘电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口,在按键数量较多时,I/O口线浪费较大,且电路结构复杂。矩阵式键盘适合按键较多时使用。由于本设计的电子钟最多需要4个按键,若采用矩阵式键盘时会有按键浪费,故采用的是独立式键盘。对于内置了上拉电阻的I/O 引脚来说,外接上拉电阻没有意义,如图3-3所示。

图3-3键盘电路

K1、K2、K3、K4键为自动复位按键,每次按下后,会自动弹出。单片机管脚只有在按键按下时为低电平,按键弹出后重新恢复高电平。

按键操作说明如下:

K1键:该键为自动复位键,在校对状态下,每次按动该键,都会使相应校对位进行减1操作。例如:校对小时状态,每按一下,小时位减1,当加至小时最高值23时,再按K1键,小时位回0。调分、秒、年、月、日与皆之相同,只是各位最高值不同。

K2键:该键为自动复位键,与K1键类似,不同之处是该键每次按下将使相应校对位进行加1操作。

K3键:该键为自动复位键,在正常显示时间状态下,第一次按下后,开始校对小时,以后每次按下都会分别进入对分、秒、年、月、日的校对状态。

K4键:该键为自动复位键,在正常显示时间状态下,第一次按下后,开始校对闹钟时、闹钟分的校对状态。

3.4闹铃电路设计

闹铃音乐可以直接采用蜂鸣器闹铃,如当前时刻与闹铃时间相同,单片机向蜂鸣器送出低电平,蜂鸣器发声。采用蜂鸣器闹铃结构简单,控制方便,但是发出的闹铃声音单一。也可以在编程的时候编写一段音乐程序,待闹铃时间到时,调用该音乐程序给扬声器,便响起音乐。不过该方法只能做一些简单音乐,并且音乐程序会占用很多单片机存储资源。

还有一种方法是采用录音放音芯片1420做闹铃,先对录放音设备录入一段音乐,当到设定时间时,单片机控制录放音设备放音。采用录放音电路,铃声可以是预先设定的一段自己喜欢的音乐,符合电器设备人性化的要求。且1420芯片可以分段录音,还具有语音报时功能。

另外,也可以购置一块音乐集成电路,加置在单片机和蜂鸣器之间,当单片机连接闹铃电路的管脚送出低电平时,音乐集成电路会给蜂鸣器特定脉冲,使蜂鸣器发声。此类集成电路体积较小,使用方便,不足的是音乐简单、单一。

闹铃的音乐不是本设计中的重点,故采用最简单的方法,占用单片机一根I/O 口P2.3,中间用PNP型三极管连接P2.3和蜂鸣器。当P2.3引脚为低电平时,三极管的发射极和集电极导通,使蜂鸣器发声。当响铃标志位为“1”时,P2.3送一定频率脉冲,使蜂鸣器发出声音,如图3-4所示。

图3-4闹铃电路

3.5复位电路设计

复位是单片机的初始化操作,以便使CPU 和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。除了进入系统的正常初始化之外,当单片机系统在运行出错或操作错误使系统处于死锁状态时,也可按复位键重新启动。如图3-5所示[8]。

3.6电源的设计

电子设备都需要稳定的直流电源。功率较小的直流电源大多数都是将50Hz 的 交流电经过变压、整流、滤波和稳压后获得。本设计所用电源电路如图3-6所示。

图 3-5复位电路

顺时针依次为D2、D3、D4。在变压器二次侧电压的负半周,电流从变压器副边线圈的下端流出,只能经过二极管D1 流向负载,再由二极管D3流回变压器,所以D1、D3正向导通,D2、D4反向截止。在负载上产生一个极性为上正下负的输出电压。在变压器二次侧电压的正半周,其极性与以上过程相反,电流从变压器副边线圈的上端流出,只能经过二极管D4流向负载,再由二极管D2流回变压器,所以D1、D3反向截止,D2、D4正向导通。电流流过负载时产生的电压极性仍是上正下负,与正半周时相同[9]。

综上所述,桥式整流电路巧妙地利用了二极管的单向导电性,将四个二极管分为两组,根据变压器副边电压的极性变化,将变压器副边电压的正极性端与负载电阻的上端相连,负极性端与负载电阻的下端相连,使负载上始终可以得到一个单方向的脉动电压。

桥式整流电路的优点是输出电压高,纹波电压较小,管子所承受的最大反向电压较低,同时因电源变压器在正、负半周内都有电流供给负载,电源变压器得到了充分的利用,效率较高。

3.6.2变压器和整流二极管的选择

1.变压器的选择

根据需要,因后续电路要用到+5V直流电压,而稳压块7805要求其输入的带有波动的电压要比输出的直流电压高3~5V,所以变压器选择初级电压为220V交流电,次级电压为8V~10V的变压器,在这里选用的是次级电压为12V的变压器。

2.整流二极管的选择

由于所选变压器为220V/12V的变压器,所以变压器的次级电压的峰值为122V≈16.9V。而桥式整流电路中的整流二极管所承受的最大反向电压为次级电压的峰值,流过整流二极管的电流的最大值约为0.2A,查电子工程师手册,选用2CZ11型整流二极管。

3.6.3滤波电路

滤波电路用来滤除整流后单向脉冲电压中的交流成分,变成平滑的直流电压。整流电路将交流电变为脉动直流电,但其中含有大量的交流成分(称为纹波电压)。为了获得平滑的直流电压,应在整流电路的后面加接滤波电路,以滤去交流部分。

此电路采用的是电容滤波电路,即在桥式整流电路输出端与负载之间并联一个大电容。滤波电容容量较大,因此一般采用电解电容,电容滤波电路利用电容的充、放电作用,使输出电压趋于平滑,最后加一个0.1μF小电容滤除电源中的高频分量。

51 数字时钟 89C52 单片机C语言程序

数字时钟89C52 单片机C语言程序 STC89C52| /************** 【数字时钟】****************/ /****【功能】1、时间显示2、秒表3、闹钟4、日期显示都可以设置****/ #include /*包含器件配置文件*/ #define uchar unsigned char /*宏定义字符型数据整型数据*/ #define uint unsigned int uchar code H[] = {0x0f, 0x07, 0x0b, 0x0d, 0x0e}; /*按键【P3】端口断码用于按键*/ char Code[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /*显示【0 1 2 3 4 5 6 7 8 9】数字的数码管的段码*/ uchar code C[] = {0x0, 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; /*列扫描控制LED1位2位3位4位5位6位7位8位*/ uchar MON[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; uchar A; uchar BIN=0; /* 【BIN】作为倒计时开始的标志*/ uchar hour = 0; /* 定义[时][分][秒] */ uchar min = 0; uchar sec = 0; uint shi=12; uint fen=30; uchar Mmin=0; uchar Msec=30; uchar M0=0; uchar m=0; uchar year=9; uchar month=7; uchar month2; uchar day=19; uchar set1 = 1; /* set1=1 是调节时分秒set1=2时时调节年月日set=3时事调节闹钟*/ uchar set2 = 1; /* set2=1时是调节【时】位set2=2时事调节【分】位*/ uint x = 0; /* x 每【0.01s】自加一*/ void Delay(uint k);

数字万年历简易C语言程序源代码

#include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit rs=P2^0; // lcd 控制端 sbit en=P2^2; // lcd 控制端 sbit all=P2^1; // lcd 控制端 sbit s0=P1^5; //时间调节 sbit s1=P1^6; sbit s2=P1^7; sbit voice=P2^7; int nt; sbit DQ=P2^6; sbit DS1302_CLK = P2^3; //实时时钟时钟线引脚sbit DS1302_IO = P2^4; //实时时钟数据线引脚sbit DS1302_RST = P2^5; //实时时钟复位线引脚sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; unsigned char time; #define ads_y 0 #define ads_mo 3 #define ads_d 6 #define ads_w 9 #define ads_h 65 #define ads_m 68 #define ads_s 71 #define DS1302_SECOND 0x80 //写入ds地址宏定义 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C

数字时钟c语言代码

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SECOND1 IS PORT(CLKS,CLR:IN STD_LOGIC; SECS,SESG:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT1:OUT STD_LOGIC); END SECOND1; ARCHITECTURE S OF SECOND1 IS BEGIN PROCESS(CLKS,CLR) V ARIABLE SS,SG:STD_LOGIC_VECTOR(3 DOWNTO 0); V ARIABLE CO:STD_LOGIC; BEGIN IF CLR='1' THEN SS:="0000";SG:="0000"; ELSIF CLKS'EVENT AND CLKS='1' THEN IF (SS="0101") AND (SG="1001") THEN SS:="0000";SG:="0000";CO:='1'; ELSIF SG<"1001" THEN SG:=SG+1;CO:='0'; ELSIF SG="1001" THEN SG:="0000";SS:=SS+1;CO:='0'; END IF; END IF;COUT1<=CO; SECS<=SS; SESG<=SG; END PROCESS; END S; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MIN1 IS PORT(CLKM,CLR:IN STD_LOGIC; MINS,MING:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); ENMIN,ALARM:OUT STD_LOGIC); END MIN1; ARCHITECTURE M OF MIN1 IS BEGIN PROCESS(CLKM,CLR) V ARIABLE MS,MG:STD_LOGIC_VECTOR(3 DOWNTO 0); V ARIABLE SO,ALM:STD_LOGIC; BEGIN IF CLR='1' THEN MS:="0000";MG:="0000";

模拟时钟行走 C语言程序

模拟时钟行走 课程设计总体要求 采用模块儿化程序设计; 鼓励可视化编程; 源程序中有足够的注释; 学生可自行增加新功能模块儿; 必须上机调试通过; 注重算法运用,优化存储效率与运算效率; 需提交源程序及相关文件; 目录 1 课程任务书 2 系统设计 3 模块设计 3.1 总体结构 3.2 流程图 3.3 使用的主要函数 4 调试及测试 1、调试过程中的问题 2、调试结果 5 设计总结 6 心得体会及致谢 7 答辩记录 8 教师意见

一、课程设计任务书 在屏幕上显示一个活动时钟;能模拟机械钟表行走;准确地利用数字显示日期和时间;按任意键时程序退出。 二、系统设计 总体结构:在绘图窗口中先画出表盘后获取系统的时间,利用得到的系统时间计算表针的位置,并将时间在屏幕上输出。每隔一秒读取一次时间,直到键盘有输入为止。 流程图 开始 初始化绘画窗口 画表盘 否 获取系统时间 结束 使用的主要函数: setlinestyle 设置画线 setcolor 设置颜色

line(int x1,int y1,int x2,int y2)画直线 circle(int x,int y,int r)画圆 outtextxy(int x,int y,char *textstring)在指定位置输出字符 initgraph(int x, int y); 初始化绘图窗口 setwritemode( ); 设置绘图模式 kbhit() 检查是否有键盘输入 GetLocalTime(&ti); 获取当前时间 sleep() 程序暂停若干时间 三、模块设计 主要模块功能、源代码及注释: 1.计算表针的位置并画出表针 void Drawzhizhen(int hour, int minute, int second) { double a_hour, a_min, a_sec; // 时、分、秒针的弧度值 int x_hour, y_hour, x_min, y_min, x_sec, y_sec; // 时、分、秒针的位置 a_sec = second * 2 * PI / 60; // 计算时、分、秒针的弧度值 a_min = minute * 2 * PI / 60 + a_sec / 60; a_hour= hour * 2 * PI / 12 + a_min / 12; x_sec = int(120 * sin(a_sec)); y_sec = int(120 * cos(a_sec)); ///计算时、分、秒针的位置 x_min = int(100 * sin(a_min)); y_min = int(100 * cos(a_min)); x_hour= int(70 * sin(a_hour)); y_hour= int(70 * cos(a_hour)); setlinestyle(PS_SOLID, NULL, 10); // 画时针 setcolor(BLUE); line(300 + x_hour, 240 - y_hour, 300, 240 );

基于C51单片机的数字时钟课程设计(C语言带闹钟)

单片机技术课程设计 数字电子钟 学院: 班级: 姓名: 学号: 教师:

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词: 电子钟 AT89C52 硬件设计软件设计

目录 NO TABLE OF CONTENTS ENTRIES FOUND. 一、数字电子钟设计任务、功能要求说明及方案介绍 1.1 设计课题设计任务 设计一个具有特定功能的电子钟。具有时间显示,并有时间设定,时间调整功能。 1.2 设计课题的功能要求说明 设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。 1.3 设计课的设计总体方案介绍及工作原理说明 本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:

51单片机数码管显示时钟(C语言)

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////以下是主文件main.c 的内容 /****************************************************************************** * * 实验名: 万年历实验 * 使用的IO : * 实验效果:1602显示时钟 * 注意: ******************************************************************************* / #include #include"ds1302.h" //数码管IO #define DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Num=0; unsigned int disp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f}; void LcdDisplay(); void Timer0Configuration(); /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main() {

钟表源程序代码

钟表源程序代码 采用了easyx图形库 作者:转角梦覃飞絮 #include #include #include #include #include #define PI 3.1415926 //自定义函数声明 void draw_biaozhen(int x,int y,int second,int minute,int hour);//画表针函数 void numbertime(int year,int month,int day,char week,int second,int minute,int hour);//显示数字时间 void draw_biaopan(int x,int y);//画表盘 void huaxian(); //画心形线 void main() { initgraph(640,480); srand((unsigned)time(NULL)); int x=320,y=240; //设定表盘圆心位置 SYSTEMTIME time; //定义变量保存当前时间 //画心形线 outtextxy(20,40,"稍后进入钟表界面..."); huaxian(); cleardevice(); setwritemode(R2_XORPEN); //设置XOR绘图模式 //画表盘 draw_biaopan( x, y); while(!kbhit()){ //有用户键就退出 GetLocalTime(&time); numbertime(time.wYear ,time.wMonth,time.wDay ,time.wDayOfWeek ,time.wSecond ,time. wMinute,time.wHour); //画指针 draw_biaozhen(x,y,time.wSecond ,time.wMinute ,time.wHour ); Sleep(1000); //擦表针

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书 数字电子钟 系、部:电气与信息工程学院 学生姓名: 指导教师:职称 专业: 班级: 完成时间:2013-06-07

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词电子钟;AT89S52;硬件设计;软件设计

ABSTRACT Clock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value. Key words Electronic clock;;AT89S52;Hardware Design;Software Design

时钟显示设计c语言

时钟显示设计 1 功能:实现时钟的实时显示与定时 2 基本要求: (1)画出表盘时钟,时、分、秒针填充不同的颜色(自选)。(2)数字同步显示时间信息。 (3)整点报时。 (4)通过键盘输入闹铃时间,实现闹铃功能。 3 相关知识:图形操作、按键操作、时间函数等 4 功能扩充:1)实现秒表功能 2)给出其它国家的时钟同步信息

目录 一、题目介绍: (3) 二、小组成员信息:........................................................................................... 错误!未定义书签。 三、总体设计: (3) 四、模块划分: (3) 五、算法说明: (3) 六、各模块函数功能及流程图: (1) 七、程序测试: (5) 八、结论: (9) 九、体会及建议:............................................................................................... 错误!未定义书签。 十、参考文献:................................................................................................... 错误!未定义书签。附录:源程序清单. (9)

题目介绍: 时钟显示设计可以实现时钟的实时显示与定时,并且具有整点报时与闹铃的功能,具有动态效果,能够激发学生学习c语言的兴趣与热情。在设计过程中会遇到没有学过的知识,这需要自己查阅资料来完成,所以还是有一定难度的。 总体设计: 本程序设计分为三步: 1 是对时钟程序做全面的分析,即对程序要使用的编写方法功能,运行方式进行分析,并做出正确的解决方案。 2 是程序的编写。由于该程序所涉及的信息比较广泛,所以程序的编写也有些复杂。程序编写是一项困难的任务,完成此项目必须运用大量的知识,而且要有清晰的思路和较强的语言组织能力。 3 是对程序的检查和系统的调用。当程序运行时,会显示出一个时钟,并且具有一定的功能。 模块划分: 1 计算时分秒针的弧度值和末端位置, 2 画时针,分针,秒针, 3 绘制表盘,刻度, 4 设定闹钟,整分钟报时功能, 5 画表针,擦表针。 算法说明: 主函数:运用for,if等语句,执行对应的函数。 Void DrawDial 函数:画表盘。 Void DrawHand 函数:画时针,分针,秒针。

基于51单片机的电子钟C语言程序

基于51单片机的电子钟C语言程序 #include #include #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF}; /*定义并初始化变量*/ uchar seconde=0; uchar minite=0; uchar hour=12; uchar mstcnt=0; sbit P1_0=P1^0; // second 调整定义 sbit P1_1=P1^1; //minite调整定义 sbit P1_2=P1^2; //hour调整定义 /*函数声明*/ void delay(uint k ); //延时子程序 void delay1(uchar h ); void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay1 (uchar h) { uchar j; while((h--)!=0) { for(j=0;j<125;j++) {;} } } void delay (uint k) { uint a,b,c; for(c=k;c>0;c--)

C语言模拟时钟转动课设报告-附代码

模拟时针转动程序 姓名: 学号: 完成日期:2012年12月

设计目的 加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。学会上机调试程序。熟悉C语言图形模式下的编程,掌握利用C语言相关函数开发电子时钟的基本原理。 能模拟机械钟表行走;要准确地利用数字显示时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致。 总体设计 电子时钟的功能描述

电子时钟流程图 模块描述 动画处理模块在屏幕上显示sin和cos型的动态函数图像,显示运动的问候语。 转时针动处理模块指针式的时钟表盘为椭圆形并且圆周上有分布均匀的12个刻度刻度显示清楚钟面上有长度不相同的指针即时针、分针、秒针指针的运动具有规律性为顺时针。 数字时钟处理模块数字钟显示时间的格式是年月日时分秒小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步且两个时钟所显示的时间与计算机的系统时间一致。 详细设计 time结构体 strume time { usigned char ti_min; usigned char ti_hour; usigned char ti_hud; usigned char ti_sec; }; time 结构体定义在dos.h文件中,可以保存系统的当前时间。

double h,m,s;这三个变量分别保存小时,分钟,秒。 double x,y,x1,y1,x2,y2;保存数字时钟中小时分钟秒在屏幕中显示的位置。 struct time t[1];定义一个time结构类型的数组。 函数功能的描述 1.def() 函数原型: void def() def()函数是用来输出一组彩带的,通过输入位置和颜色的变化来输出sin型的彩带,且在整个函数中保留结果。 2. abc() 函数原型: void abc() abc()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。 3 .digitclock() 函数原型:void digitclock() digitclock函数用于在(x,y)位置显示clock值,clock值为时分秒。 4. clockhandle() 函数原型:void clockhandle() clockhandle()函数用于完成时针转动和数字时钟的显示,包括时针转动角度的运算,还有对声音的输出。

C语言课程设计——图形时钟

《C语言程序设计》课程设计 实验报告 题目:图形时钟 班级:电气工程及其自动化1401 学号: 姓名: 指导教师: ——2015 .1 . 8

目录 §1. 系统功能要求﹣﹣﹣﹣P3 §2. 程序结构(画流程图) ﹣﹣﹣P3-4 §3. 概要设计﹣﹣﹣P4 §4. 试验结果﹣﹣﹣P6 §5.体会﹣﹣﹣P6 §6.参考文献﹣﹣﹣P6 §7.附录:源程序﹣﹣﹣P7-8

§1. 系统功能要求 在屏幕上显示一个图形时钟(用程序绘制一个与时钟样式相似即可),时间与系统时间一致,且要随着时间的走动准确的走动。 §2.程序设计

§3. 概要设计 (1)void init() /*划时钟边框函数*/ int i,l,x1,x2,y1,y2; circle(320,240,200);/*以(320,240)为圆心,200为半径画圆*/ circle(320,240,199);/*以(320,240)为圆心,199为半径画圆*/ circle(320,240,201);/*以(320,240)为圆心,201为半径画圆*/ circle(320,240,1,);/*以(320,240)为圆心,1为半径画圆*/ circle(320,240,2,)/*以(320,240)为圆心,2为半径画圆*/ circle(320,2403,);/*以(320,240)为圆心,3为半径画圆*/ for(i=0;i<60;i++) /*划钟点上的短线*/ { if(i%5==0) l=15; else l=5; x1=200*sin(i*6*pi/180)+320/*画线函数*/ y1=200*cos(i*6*pi/180)+240; x2=(200-l)*sin(i*6*pi/180)+320; y2=(200-l)*cos(i*6*pi/180)+240; line(x1,y1,x2,y2); } (2) void DrawHand 函数 /*画指针*/ void DrawHand(int x,int y,float th,int l,int color) { int x1,y1;

数字时钟c语言程序

本人为单片机初学者,这是本人制作的一个简单的数字时钟程序,程序比较繁琐,只适合初学者学习参考使用,因为程序都是一步步来的,没有跳跃。只要将此程序复制到keil,然后编译生成hex文件,连到单片机(实物)就可以直接显示了。希望对有些人有帮助 #include//头文件 #define uchar unsigned char #define uint unsigned int//宏定义 uchar count; uint hour,minute,second; uint hour1=0,minute1=0; sbit dula=P2^6; sbit wela=P2^7;

sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; sbit key5=P3^4; sbit key6=P3^5; sbit key7=P3^6; sbit BEEP=P1^2; uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d ,0x07,0x7f,0x6f,0x40};//0-9,横杆 uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f}; //扫描 void delay(uint z)//延时函数 { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void init()//初始化中断 { TMOD=0x10; //定时器1以方式1定时TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;//总中断打开 ET1=1;//打开定时中断 TR1=1;//打开定时器 } void time1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; count++; if(count==20)//1秒累加一次 { count=0; second++;

基于c语言的数字电子钟设计

一、功能要求 整体上要考虑:结构简单大方、布局美观合理、操作方便易懂、尽量避免各元器件之间的相互影响。 1、以AT89C51单片机进行实现秒分时上的正常显示和进位, 其中显示功能由单片机控制共阴极数码管来实现,数码管进行动态显示。 2、具有校时功能,按键控制电路其中时键、分键、秒键三个键分 别控制时分秒时间的调整。按秒键秒加1;按分键分加1;按时键时加1. 二、硬件设计 1、整体设计框图 2、管脚功能描述 (1)XTAL1(19 脚)和XTAL2(18 脚):振荡器输入输出端口,外接晶振电路。

(2)RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。 (3)P0口8个端口依次和LED显示器的A、B、C、D、E、F、G和Dp端口对应连接,实现对显示器的片选功能。 (4)P2.0~P2.5依次与LED显示器的1、2、3、4、5、6一一连接,实现对显示器的为选功能。 (5)P3.0~P3.2依次与按键电路的秒、分、时三个按键相连接。通过按键实现对时间的调试功能。 3、整体原理设计 其计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。整个设计图由晶振电路、复位电路、AT89C51单片机、键盘控制电路组成。 显示电路将“时”、“分”、“秒”通过七段显示器显示出来,6个数码管的段选接到单片机的P0口,位选接到单片机的P2口。数码管按照数码管动态显示的工作原理工作。 把定时器定时时间设为50ms,则计数溢出20次即得时钟计时最小单位秒,而20次计数可用软件方法实现,每累计60秒进1分,每累计60分钟,进1小时。时采用24进制计时器,可实现对一天24小时的累计。 校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整,时分秒三个控制键分别接单片机的p3.2、p3.1、p3.0进行控制。按一下秒键秒单元就加1 ,按一下分键分就加1,按一下时键时就加1。

基于C单片机的数字时钟课程设计C语言带闹钟

班级:姓名:学号:教师:

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用AT89C52单片 ,

目录 一、数字电子钟设计任务、功能要求说明及方案介绍 (4) 4 4 4 5 5 5 6 6 6 7 7 7 9 9 10 12 12 13 13

一、数字电子钟设计任务、功能要求说明及方案介绍 1.1 设计课题设计任务 设计一个具有特定功能的电子钟。具有时间显示,并有时间设定,时间调整功能。 1.2 设计课题的功能要求说明 设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。 1.3 设计课的设计总体方案介绍及工作原理说明 本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示: 图1-1总体设计方案图 本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。键盘采用

动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 二、设计课题的硬件系统的设计 2.1硬件系统各模块功能简要介绍 2.1.1 AT89C52简介 (1) 兼容MCS51指令系统; (2)8kB可反复擦写(大于1000次)Flash ROM; (3)32个双向I/O口; (4)256x8bit内部RAM; (5)3个16位可编程定时/计数器中断; (6)时钟频率0-24MHz; (7)2个串行中断,可编程UART串行通道; (8)2个外部中断源,共8个中断源; (9)2个读写中断口线,3级加密位; (10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能; (11)有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。 它的价格便宜,功能强大,能耗低。很大程度上减少总电路的复杂性,提高了所设计系统的稳定性。其芯片引脚图如图2-1所示。 图2-1 单片机AT89S52引脚图

单片机电子钟c语言程序

单片机电子钟程序设计实习报告 单片机LCD1602电子钟毕业论文 这次嵌入式系统综合实习已经结束了,哎..... 在网络发现很多计算机专业的毕业生都是以电子钟为题的毕业论文,个人感觉做一个电子钟程序设计的技术含量,技术水平都不高。呵呵个人还是比较偏向于软件开发的,比较喜欢vc++开发。 一、引言 1.1课题的背景及目的 随着计算机科学与技术的飞速发展,计算机的应用已经渗透到国民经济与人们生活的各个角落,正在日益改变着传统的人类工作方式和生活方式,而单片机技术又作为计算机技术中的一个独立分支,有着性价比高,集成度高,体积小,可靠性高,控制功能强大,低功耗,低电压,便于生产,便于携带等特点,所以得到越来越广泛的应用,特别是在工业控制和仪表仪器智能化中起极其重要的作用.本文利用单片机强大的控制功能和内部定时器重要部件,设计了一款自行对时间进行调整以及把时、分、秒用LCD显示的电子钟。 电子钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌

握各种组合逻辑电路与时序电路的原理与使用方法 1.2课题的内容要求及研究方法 ①时间以24小时为一个周期; ②显示时、分、秒; ③具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; 本文先按照设计的一般步骤,先选定用单片机实现的方案,了解设计要求,再分别从硬件系统设计和软件系统设计两个宏观方面着手.然后大量阅读相关资料,硬件方面,熟练单片机工作基本原理,查出相关元器件的参数,八个八段数码管,继电器等性能.然后画出系统框图和单元电路原理图,再对系统工作原理按照单元电路作简单的说明。软件方面,熟悉编程语言,查找相关子程序.熟悉使用Keil uVision2开发软件及STC-ISP下载软件.把原器件按电路原理图安装.最后再对硬件和软件系统进行调试和仿真。课题的内容是要求设计一款电子钟,而且要求计时准确,显示直观,清晰,时能够精确到秒。最后设计出来的产品,要求电路简洁,稳定性好。 二、课题设计 1、基本原理 本设计基于单片机技术原理,以单片机芯片A T89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个多功能数字时钟系统。单片机扩展的LCD显示器用来显示秒、分、时计数单元中的值。整个设计包括两大部分: 硬件部分和软件部分,

基于单片机的数字时钟C语言设计

基于单片机的数字时钟C 语言设计 樊清海 1,2 刘培培2 耿娟平 2 (1.河北工业大学,天津300130; 2.北华航天工业学院,河北廊坊065000) 摘 要:本文利用ST C89C52单片机的16位定时器做成电子时钟。单片机控制1602液晶器不仅能够准确显示年、月、日、星期、时、分、秒的数值,还能够实现时间校正、闹钟报警、断电自动保护数据的功能。关键词:时钟电路;单片机;C 语言 中图分类号:T P333 文献标识码:A 文章编号:1673-7938(2010)06-0004-03 收稿日期:2010-09-13 作者简介:樊清海(1964-),男,高级工程师,河北固安人,主要从事电子信息与通信传输研究。 0 引 言 随着科学技术的飞速发展,电子技术的产业结构调整,人们生活水平的提高,人们对具备报时、日历、闹钟等多功能的智能电子时钟的需求越来越大,传统时钟已不能满足人们的需求。现代的电子设计将数字电路、模拟电路、单片机技术相结合,增加了电子时钟的智能化功能。本文以51系列单片机芯片STC89C52为核心,设计了一个智能电子钟。单片机扩展的1602液晶显示器用来显示年、月、日、星期、时、分、秒计数单元中的数值,不仅能够准确的显示标准时间,还可以对时间进行校正、设置闹钟报警功能、实现断电自动保护显示数据的功能。 整个时钟系统的设计包括两大部分:硬件部分和软件部分。硬件部分是整个系统设计的基础,软件部分则要合理、充分地支持和使用系统的硬件资源,从而完成整个系统所要完成的任务[1] 。 1 数字时钟的硬件设计 整个时钟系统的硬件设计可分为:单片机主控制部分、晶振产生部分、复位电路部分、矩阵键盘、液晶显示、EEPROM 存储芯片、蜂鸣器报警等七部分内容。单片机芯片STC89C52作为控制核心部分,实现整个外围电路的控制。该系统模块结构框图如图1所示: 本系统的计时设计方案是:利用单片机STC89C52芯片的内部16位定时 计数器进行中断 定时,配合软件延时程序实现对数字时钟年、月、日、星期、时、分、秒的计时。整个系统的控制方案是:上电后系统自动进入初始液晶显示状态,然后从EEP ROM 芯片AT24C02中读取存储的数据,从存储的时间数据开始计时;通过按下时间功能选择键S1一次,系统停止计时,进入到时间设定状态,系统保持原有的显示,光标在秒的数值上闪烁;按下S1二次,光标在分数值处闪烁;按下S1三次,光标在时数值处闪烁;随着S1按键按下,光标接着顺序在星期、日、月、年处显示,当光标在不同位置闪烁时,可以设置数值增大键S2和数值减小键S3,分别对光标闪烁的不同位置的数值进行加减操作完成时间的校正,并将校正的时间存入到AT24C02中;当再次按下S1时(即第八次按下),系统重新在校正的时间上计时显示,光标也停止闪烁;再重新按下S1,按键功能按照上面的顺序依次循环下去;按下闹钟设置 启闹 停闹[2] S4键一次,进入闹钟设置状态,设置完闹钟时间后,按下S4键二次,启动定时闹钟功能,当定时时间一到,蜂鸣器就鸣叫,直到再次按下S4键闹钟停闹;系统扩展了EEPROM 存储芯片AT24C02实现断电自动保护显示数据的功能,随着每秒时间数值的更新以及校正时间的设置,存储到AT24C02中的数值也要不断更新,当断电后再次上电时,时钟会接着断电前的时间数据继续运行。 基于系统上述的控制要求,本文是在T X 1C 单片机开发板上完成的,时钟系统设计主要模块与STC89C52单片机芯片的硬件电路[3] 连接如图2所 示: 第20卷第6期 2010年12月 北华航天工业学院学报 Journal of North China Institute of Aerospace Engineer ing Vol 20No 6 Dec 2010

DS1302时钟C语言编程完整实例

1 DS130 2 简介: DS1302是美国D ALLAS 公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态R AM,采用S PI 三线接口与C PU 进行 同步通信,并可采用突发方式一次传送多个字节的时钟信号和R AM 数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~ 5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部 引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 图1 DS1302的外部引脚分配 图2 DS1302的内部结构 各引脚的功能为: V cc1:主电源;Vcc2:备份电源。当V cc2>Vcc1+0.2V 时,由Vcc2向D S1302供电,当V cc2< Vcc1时,由V cc1向D S1302供电。 SCLK:串行时钟,输入,控制数据的输入与输出; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE 开始控制字访问移位寄存器的控制逻辑;其次,

CE 提供结束单字节或多字节数据传输的方法。 DS1302有下列几组寄存器: ① D S1302有关日历、时间的寄存器共有12个,其中有7个寄存器 (读时81h ~8Dh ,写时80h ~8Ch ),存放的数据格式为 BCD 码形式, 如图3所示。 图 3 DS1302有关日历、时间的寄存器 小时寄存器(85h 、84h )的位7用于定义 D S1302是运行于12小时 模式还是24小时模式。当为高时,选择 12小时模式。在12小时模式时, 位5是 ,当为1时,表示 PM 。在24小时模式时,位5是第二个10小时 位。 秒寄存器(81h 、80h )的位7定义为时钟暂停标志(CH )。当该 位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为 0时,时钟开始运行。 控制寄存器(8Fh 、8Eh )的位7是写保护位(WP ), 其它7位均置 为0。在任何的对时钟和 R AM 的写操作之前,WP 位必须为0。当 WP 位为1时,写保护位防止对任一寄存器的写操作。 ②DS1302有关 R AM 的地址 DS1302中附加31字节静态 R AM 的地址如图4所示。 图4 ③ D S1302的工作模式寄存器 所谓突发模式是指一次传送多个字节的时钟信号和 R AM 数据。 突发模式寄存器如图5所示。

相关主题
文本预览
相关文档 最新文档