单片机~~~~~~~~~~不可调lcd时钟显示

合集下载

单片机课程设计--智能电子钟(LCD显示)

单片机课程设计--智能电子钟(LCD显示)

课程设计课程名称_ 单片机原理与接口技术题目名称多功能数字时钟学生学院_ 材料与能源学院专业班级_ 电子材料及元器件方向学号_ _学生姓名_ ____________ 指导教师_2013 年 1 月16 日广东工业大学课程设计任务书题目名称多功能数字时钟学生学院材料与能源学院专业班级姓名学号一、课程设计的内容用AT89C52单片机制作一个时钟:1.设计并绘制硬件电路图;2.布置元件并焊接好元器件;3.编写程序并将调试好的程序固化到单片机中。

4.增加温度测试功能。

二、课程设计的要求与数据单片机采用STC89C52芯片,时钟芯片采用DALLAS 公司的DS1302,即涓流充电时钟芯片,它内含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM 指示决定采用24 或12 小时格式,DS1302 与单片机之间能简单地采用同步串行的方式进行通信。

同时用选DS18B20 传感器将采集的室内温度显示于LCD上。

按此要求设计硬件和软件以实现这些功能。

三、课程设计应完成的工作1. 完成下载线的制作,为程序下载到单片机芯片中做好准备;2. 完成软件、硬件的设计,并进行硬件的焊接制作,并将调试成功的程序固化到单片机中,最后进行硬件与软件的调试;3.撰写设计说明书。

四、课程设计进程安排摘要随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的液晶显示温度和时钟设计,时间可由键盘调整。

主要用到的芯片有单片机STC89C52.液晶1602LCM模块.时钟芯片DS1302.温度传感器DS18B20等。

关键词:单片机STC89C52,1602LCM模块,DS1302.,DS18B20目录1 系统需求分析 (1)1.1 电子时钟研究的背景和意义 (1)1.2 系统实用功能分析 (1)2 设计要求与方案 (2)2.1 设计要求 (2)2.1.1 基本要求 (2)2.1.2发挥部分 (2)2.2 系统基本方案选择 (2)2.2.1 芯片的选择 (2)2.2.2 显示模块选择方案 (2)2.2.3 时钟信号的选择方案 (3)2.3 电路设计最终方案决定 (3)3 系统的硬件设计与实现 (3)3.1 数字钟电路设计框图 (3)3.2 系统硬件概述 (4)3.3 硬件电路结构的设计 (4)3.3.1 单片机主控制模块的设计 (4)3.3.2 显示模块的设计 (4)3.3.3 LCD原理说明 (5)3.3.4 开关模块说明 (6)4 系统的软件设计 (7)4.1 程序流程框图 (7)4.2 LCD的初始化与及显示程序 (7)5 系统调试 (9)5.1软件调试 (9)5.2硬件调试 (9)参考文献 (10)附录 (11)1 系统需求分析1.1 电子时钟研究的背景和意义20实际末,电子技术获得了飞速的发展。

基于51单片机时钟LCD显示

基于51单片机时钟LCD显示
write_date(0x30+ge);
}
void keyscan()//键盘扫描
{
if(k0==0)
{
if(k0==0)//k0按下,进入选择模式
{ delay(8);
k0num++;
while(!k0);
if(k0num==1)//修改秒
{
TR0=0;
write_com(0x80+0x40+10);
TR0=1;
}
}
if(k0num!=0)
{
if(k1==0)//修改秒
{
delay(40);
if(k1==0)
{delay(40);
while(!k1);
delay(40);
if(k0num==1)
{delay(40);
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
2
AT89C51 LCD1602 12M晶振独立按键电容排阻
三硬件设计
1.
2
四软件设计
1.
2.
2.1
2.2

本设计实现了时钟时,分,秒准确计时和显示。由于时间仓促,设计仍有不足,主要是还不能对星期的自动调节,还需要进一步研究LCD1602datasheet的字库,来实现这一功能。
附程序代码:
#include<reg52.h>
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void write_sfm(uchar add,uchar date)//时钟数据显示

基于单片机和LCD的数字钟设计

基于单片机和LCD的数字钟设计

毕业设计课题名称:基于单片机的数字钟设计院系名称专业班级学生姓名学号指导教师完成日期:摘要多功能数字钟的应用非常普遍,由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。

本设计具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LCD显示器动态显示“时”、“分”、“秒”、“年”、“月”、“日”的现代计时装置。

另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。

关键词:多功能、AT89C51、LCDAbstractThe application of multi-function digital clock very general, by single chip microcomputer as the core controller, digital clock through its clock signal timing function, will realize its time data SCM outputs, using monitors displayed. This design has the timing, reset function of digital clock, is single-chip microcomputer AT89C51 as the core element also adopts LCD display dynamic display "hour"" minutes" and "second", "year", "month", "day" modern timing device. Another is reset function, stopwatch function, and timer function, using the microcomputer digital clock with programming flexible, facilitate function expansion, etc.Keywords: multi-function, AT89C51, LCD目录摘要 (2)Abstract (2)目录 (3)一、设计意义和方案 (3)1.1 任务要求 (3)1.2 设计意义 (4)1.3 设计方案 (4)二、硬件设计 (4)2.1 单片机的介绍及特点 (4)2.2 单片机选择 (5)2.1.1 单片机的引脚说明 (6)2.1.2 定时/计数器 (9)2.2 显示方案 (9)2.3 时钟电路 (10)2.4 复位电路 (10)三、软件设计 (11)四、仿真原理图 (12)五、系统测试 (12)5.1 硬件测试 (12)5.2 软件测试 (13)六、总结 (13)参考文献 (14)附录 (14)程序完整代码 (14)一、设计意义和方案1.1 任务要求⑴通过单片机内定时器控制走时,准确持续走时,调时不影响走时。

基于单片机的LCD电子时钟设计

基于单片机的LCD电子时钟设计

基于单片机的LCD电子时钟设计随着科技的不断发展,单片机已经成为现代电子设备中的重要组成部分。

其中,LCD电子时钟的设计与应用更是受到广泛。

基于单片机的LCD电子时钟设计具有精度高、稳定性好、体积小、耗电量低等优点,被广泛应用于家居、办公、交通运输等领域。

一、设计原理基于单片机的LCD电子时钟设计主要由单片机、时钟电路和LCD显示模块组成。

其中,单片机作为主控制器,负责读取时钟信号并控制LCD显示模块。

时钟电路则产生一个高精度的实时时钟信号,LCD显示模块则负责将时间信息显示出来。

二、硬件设计1、单片机选择:单片机是整个系统的核心,负责读取时钟信号、处理数据并控制LCD显示模块。

常见的单片机型号包括STM32、PIC、AVR等。

根据实际需求,选择合适的单片机型号。

2、时钟电路:时钟电路是整个系统的核心部分,它产生高精度的实时时钟信号。

常见的时钟电路包括石英晶体振荡器、GPS模块等。

根据实际需求,选择合适的时钟电路。

3、LCD显示模块:LCD显示模块负责将时间信息显示出来。

常见的LCD显示模块包括字符型LCD和图形型LCD。

根据实际需求,选择合适的LCD显示模块。

三、软件设计软件设计是整个系统的重要组成部分,它需要实现读取时钟信号、处理数据并控制LCD显示模块的功能。

具体的软件设计流程如下:1、初始化:初始化单片机、时钟电路和LCD显示模块。

2、读取时钟信号:通过时钟电路读取实时时钟信号。

3、处理数据:对读取的时钟信号进行处理,提取出年、月、日、时、分、秒等信息。

4、控制LCD显示模块:将处理后的时间信息通过LCD显示模块显示出来。

5、循环执行:重复执行上述步骤,实现LCD电子时钟的实时更新。

四、调试与优化完成硬件和软件设计后,需要对系统进行调试和优化。

具体的调试和优化步骤如下:1、通电测试:将系统通电,检查各部分是否正常工作。

2、精度测试:检查时钟电路的精度是否满足要求。

3、LCD显示测试:检查LCD显示模块是否能正确显示时间信息。

基于单片机的电子时钟设计报告(LCD显示)

基于单片机的电子时钟设计报告(LCD显示)

单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。

显示格式为“时时:分分:秒秒”。

用3个功能键操作来设置当前时间。

功能键K1~K4功能下。

K1—设置小时。

K2—设置分钟。

K3—设置秒。

程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。

2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。

3、参考电路硬件设计电路图如下图所示:硬件电路原理图单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。

显示格式为“时时:分分:秒秒”。

用3个功能键操作来设置当前时间。

功能键K1~K4功能下。

K1—设置小时。

K2—设置分钟。

K3—设置秒。

程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。

2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。

3、参考电路硬件设计电路图如下图所示:硬件电路原理图基于AT89C51单片机的电子时钟设计报告一、设计要求与目的1)设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间。

2)、使用字符型LCD显示器显示当前时间。

显示格式为“时时:分分:秒秒”。

3)、用3个功能键操作来设置当前时间。

4)、熟悉掌握proteus编成软件以及keil软件的使用二、本设计原理本设计以AT89C51单片机为核心,通过时钟程序的编写,并在LCD显示器上显示出来。

单片机--电子时钟(LCD显示)

单片机--电子时钟(LCD显示)

单片机--电子时钟(LCD显示)单片机综合实验报告题目:电子时钟(LCD)显示班级: 0310405班学号: 031040514学生姓名:张金龙指导老师:高林2013年 6 月 17 日一、实验内容:以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:●使用字符型LCD显示器显示当前时间。

●显示格式为“时时:分分:秒秒”。

●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。

功能键K1~K4功能如下。

●K1—进入设置现在的时间。

●K2—设置小时。

●K3—设置分钟。

●K4—确认完成设置。

程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。

二、实验电路及功能说明1)单片机主控制模块以AT89C51单片机为核心进行一系列控制。

2)时钟显示模块用1602为LCD显示模块,把对应的引脚和最小系统上的引脚相连,连接后用初始化程序对其进行简单的功能测试。

测试成功后即可为实验所用,如图:3)时间调整电路用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。

功能键K1~K4功能如下。

K1—进入设置现在的时间。

K2—设置小时。

K3—设置分钟。

K4—确认完成设置。

如图:三、实验程序流程图:主程序:时钟主程序流程子程序:保护设置计1S (40H )0 (40H )+1(41H )+1 (46H )0 ()恢返N N中 断 服 务 流 程 图(41H )0 (43H )0 (43H )+1(44H )+1 (44H )0(46H )+1(47H )(46H )+1NN(46H )0 (47)+1NN四、实验结果分析实验结果及分析:单片机的晶振可以根据要求设定。

6MHZ为和现实时间显示相同。

实验采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。

当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这里为了更明显观察显示数据变化把起始值设为23:59:50 运行后显示,K1为进入现在设置时间,当按下K1后显示,和实验要求相比较,实现了按下K1进入现在时间设置,按下K4确认完成时间设置的功能;不同之处: 当进入时间设置时在按下K1设置小时,再次按下K1是设置分钟。

单片机控制LCD显示电子时钟设计方案

单片机控制LCD显示电子时钟设计方案

单片机控制LCD显示电子时钟设计方案基于单片机控制LCD显示电子时钟设计摘要本设计使用11.0592MHZ晶振与单片机AT89C52相连接,以AT89C52芯片为核心,采用1602的并行操作方式显示。

通过使用该单片机,实现把时间和温度显示在1602液晶上,并且按秒实时更新。

STC89C52单片机是由深圳宏晶科技公司推出的,功耗小,电压可选用4~6V电压供电。

通过板子上的按键可随时调节时钟的年、月、日、星期、时、分、秒,按键设计3个有效按键,分别有功能选择键、数值增大键、数值减小键。

在每次的按键按下时,蜂鸣器有“滴”的提示声。

再利用DS12887设计实现断电自动保护显示数字的功能,当下次上电时会接着上次上电前的时间继续运行。

本设计的+5V电源采用LM1117电压转换元件,将电源适配器转换得到的12V电压直接变成5V电压供系统使用。

通过软硬件结合达到最终目的。

关键词:单片机AT89C52。

1602液晶。

电子时钟。

DS12887芯片1 / 32AbstractThe design uses a 11.0592MHz crystal with AT89C52 microcontroller is connected to the AT89C52 chip as the core, and 1602 parallel operation. Byusing the microcontroller, the time is displayed in 1602, and updated in real time in seconds. STC89C52 microcontroller is launched by the Shenzhen-Hong Crystal Technology, Inc., low power consumption, voltage can be used to 6V voltage power supply. Through the keys on the board can always adjust theclock of the year, month, day, week, when, minutes, seconds, button design 3 effective keys, function selection key, increase the value of the key, key decreases the value. Each time the button is pressed, the buzzer tone \the display number, then the last time before the power to continue running whenthe next power. The design of the 5V power supply using LM1117 voltage conversion device, power adapter converted directly into 12V voltage 5Vvoltage for system use. Through a combination of hardware and software to achieve the ultimate objective.Keywords:Microcontroller AT89C52。

基于单片机的lcd电子时钟设计

基于单片机的lcd电子时钟设计

基于单片机的lcd电子时钟设计随着科技的发展,电子产品逐渐成为人们生活中必不可少的部分。

其中,电子时钟是人们生活中经常使用的一种电子产品。

电子时钟通过精准的电子元件来测量时间,比传统时钟计时更为准确、实用。

在这篇文档中,我将介绍一种基于单片机的LCD电子时钟设计。

一、设计原理该电子时钟的核心是单片机AT89C51,其运行频率为12MHz。

另外,该时钟使用4位7段LCD显示器来显示时间。

由于该LCD显示器需要保持常电流状态,因此电子时钟配备了LM324运算放大器,用于调整电流并实现显示。

当单片机初始化时,它会将当前的时间读取到内部存储器中,至此时钟启动。

单片机读取内部存储器将获取到各种时间信息,包括秒、分、时、日、月和年。

接下来,单片机通过CPU时钟中断,每秒钟更新一次时间,同时在LCD显示区域更新时间数据。

二、硬件设计该电子时钟需要一些硬件设备才能正常运行。

我们需要以下电子设备:1. 单片机AT89C512. 4位7段LCD3. 若干电容4. 数量不定的电阻5. LM324运算放大器6. 晶体7. LED灯通过以上硬件部件的搭配,我们可以实现一个完整的电子时钟设备。

三、软件设计在开发电子时钟硬件之后,我们需要写一些软件来控制它的运行。

在本例中,我们使用C语言编写时钟控制程序。

基本的程序控制框架如下:1. 初始化单片机,设置相关校准参数2. 读取系统时间,并将其存储到内部存储器中3. 每秒钟更新时间信息4. 对时钟时间进行格式化,以便在LCD显示屏幕上显示5. 在LCD显示区域显示格式化数据6. 不断循环执行上述步骤以上步骤需要编写正确的代码才能正常工作。

在编写C程序时,需要注意单片机的内部存储器、寄存器、I/O端口等的使用,同时还需要考虑程序执行速度、指令优化以及机器资源分配等各个方面。

四、总结在本文中我们介绍了基于单片机的LCD电子时钟的设计,并分别阐述了其硬件和软件设计的基本原理。

作为一种基于电子、精准、实用的时间计算设备,电子时钟在现代社会中得到了广泛应用。

基于单片机控制LCD显示电子时钟设计

基于单片机控制LCD显示电子时钟设计

基于单片机控制LCD显示电子时钟设计电子时钟可以说是现代社会不可或缺的电子产品之一,准确显示时间,为人们提供时间信息,是人们日常生活的重要组成部分。

本文将介绍一种基于单片机控制LCD显示电子时钟设计的方法。

该电子时钟设计基于单片机芯片,并通过LCD显示屏来实现时间的显示。

其主要原理是通过单片机芯片内部的定时器,不断进行时间的计时,然后将计时结果通过串行通信协议发送给LCD显示屏,LCD显示屏将计时结果显示出来。

具体设计步骤如下:1.硬件设计:a.选择适合的单片机芯片:根据设计要求选择适合的单片机芯片,一般选择具有定时器功能的芯片,如51系列单片机。

b.连接LCD显示屏:将单片机与LCD显示屏连接,一般是通过串行通信协议,如I2C或SPI协议来进行数据传输。

c.添加电源模块:为单片机和LCD显示屏提供合适的电源,一般是通过稳压电源芯片来提供稳定可靠的电源。

d.添加按键模块:添加按键模块可以实现对时间的设置和调整功能,一般通过矩阵按键的方式来实现。

2.软件设计:a.初始化单片机芯片:在程序开始时,进行单片机的初始化,初始化定时器、串行通信模块等相关硬件。

b.设置时间计时器:通过定时器模块来进行时间的计时,可以选择合适的时钟频率和计时周期,从而实现精确计时。

d.实现按键功能:通过检测按键状态来进行按键功能的触发,如修改时间、调整亮度等功能。

以上就是基于单片机控制LCD显示电子时钟的设计方法。

通过单片机芯片的计时功能和串行通信协议实现时间的显示,通过按键模块实现对时间的设置和调整功能。

设计好电路和编写好相应的程序后,就能够实现一个简单而准确的电子时钟。

单片机课程设计—带有LCD的定时闹钟

单片机课程设计—带有LCD的定时闹钟

设计总说明这次课程设计的任务是是利用MCS51系列单片外加必要的辅助电路从而设计一个带有LCD显示的定时闹钟。

该闹钟应具有的功能是:当定时闹钟到了人为设定好的时间后,它就发出声音,并且在LCD显示器上显示出你所设定的闹钟时间以及当前时间,并能够随时调整时间。

本课设所用器件有:AT89C52单片机、LCD显示器(LM016L)、上拉电阻(Respack-8)、晶振电路、复位电路(带有复位键)以及四个控制键。

1、在控制时分电路设计中,分别设置了四个键:K1键-用来设置当前时间以及在设置中用来设置时钟K2键-显示闹钟时间以及在设置中用来设置分钟K3键-设置闹钟时间K4键-控制闹铃的开关2、在控制时分秒电路的设计中,分别设置了五个键,即在1的基础上增加了一个控制秒的按键。

当然本课程设计中所用到的元器件还可以应用其他的一些器件。

比如AT89C52完全可以用AT89C51来代替,LM016L型号的LCD显示器可以用LM017L型号的LCD显示器来代替(其他一些显示器也可以用),上来电阻也可以用分电阻来表示。

初次做课程设计,肯定会有许多不足之处,希望老师们指点!关键字: AT89C52单片机 LCD显示器闹钟目录1、主要内容 (3)2、目的和意义 (3)3、基本要求 (3)3.1、显示时-分功能 (3)3.2、显示时-分-秒功能 (3)4、系统设计4.1 AT89C52单片机简介 (4)4.2 电路总体设计 (6)4.3 主程序流程图 (7)5、详细设计5.1 设计电路图 (7)5.2 程序代码 (12)5.2.1 时-分程序代码 (12)5.2.2 时-分-秒程序代码 (23)6、结论6.1 结果分析 (33)6.2 心得体会 (33)7、设计总结 (34)8、参考文献 (34)1、主要内容:本次课程设计的内容为设计一个以MCS51单片机为核心的带有LCD显示的定时闹钟,完成原理图设计,软件编制及设计报告。

基于单片机的多功能LCD时钟

基于单片机的多功能LCD时钟

基于单片机的多功能LCD时钟
该时钟的设计思路是通过单片机控制液晶显示器,实时更新时间、日期、温度等信息;同时,结合外部输入信号,实现闹钟功能。

首先,该时钟通过单片机内部定时器实现时间的计时。

通过精确定时器,可以实现秒、分、时的显示和更新。

单片机内部具有RTC(Real-
Time Clock)模块,可实现对日期和时间的实时监控。

其次,该时钟通过温度传感器获取环境温度,并通过单片机控制液晶
屏实时显示。

温度传感器可以是热敏电阻、热敏电容等。

另外,该时钟具有闹钟功能,用户可以设置闹钟时间。

当时间到达设
定的闹钟时间时,时钟会发出报警声音,提醒用户。

此外,该时钟还可以显示日历。

通过单片机计算当前日期,并显示在
液晶屏上。

时钟基于单片机的控制,具有灵活性高、功能强大、可靠性较好等优点。

其通过外设接口与用户进行交互,使得用户操作简单、方便。

整个时钟的设计和制作过程分为硬件设计和软件设计两个部分。

其中,硬件设计包括电路原理图设计、PCB布局设计、外设选型等;软件设计则
包括单片机程序设计、液晶显示程序设计、闹钟功能实现等。

总结起来,基于单片机的多功能LCD时钟是一种功能强大的电子时钟,通过单片机控制液晶显示器实现时间、日期和温度的显示和更新,同时结
合闹钟功能,提供给用户全方位的时间与日期信息。

基于单片机实现的LCD定时电子闹钟课程设计

基于单片机实现的LCD定时电子闹钟课程设计

摘要本设计是采用单片机技术的电子定时闹钟,近年来集成电路技术的出现和应用,是推动了人类文明的突飞猛进。

基于集成电路技术的单片机产品更是方便了人们的生活和工作,目前以单片机技术的应用为核心的产品种类非常丰富。

应用我们所学过的知识和查阅相关资料,我制作了这个单片机技术为基础的LCD 可校时可定时电子闹钟,这是一个简单的实用的单片机电子设计产品。

本“LCD定时电子闹钟’设计采用AT89C51为主控芯片。

在充分理解了设计的要求后,准确的定位了设计的目的,然后构思了总体的方案。

在选择和合适的硬件完成了电路的设计后,又进行了软件的设计和调试。

本系统的硬件组成以及工作原理都有详细的图文说明,所应用的软件技术和各个模块设计的功能及工作过程也有详细的介绍,最后的部分则详细描述了了软件仿真及调试过程。

本电子钟设计是以单片机技术为核心,采用了中小规模集成度的单片机制作的功能较为完善的电子闹钟。

硬件设计应用了成熟的数字钟电路的基本设计方法以,并详细介绍了系统的工作原理。

硬件电路中使用了除AT89C51外,另外还有LCD、晶振、电阻、电容、发光二极管、开关、喇叭等元件。

在硬件电路的基础上,软件设计按照系统设计功能的要求,运用所学的汇编语言,实现的功能包括‘时时-分分-秒秒’显示、设定和修改定时时间的小时和分钟、校正时钟时间的小时、分钟和秒、定时时间到能发出一分钟的报警声。

最后应用‘伟福’及‘Proteus’等软件将硬件电路和软件系统链接在一起对各个部分及整体进行仿真并调试构成了整个完整的电子闹钟的设计。

最后通过反复的实际仿真和测试表明,该系统能够实现所有要求的功能包括:(1)能显示‘时时-分分-秒秒’。

(2)能够设定定时时间、修改定时时间及时钟。

(3)定时时间到蜂鸣器能发出铃声,另外还在此基础上实现了其他的附加功能比如万年历。

当然这个系统仍然是属于比较简单的单片机应用系统,要设计功能更强的更复杂的系统还需要我进一步的学习。

基于51单片机的用 LCD1602 显示时钟的程序

基于51单片机的用 LCD1602 显示时钟的程序

用LCD1602 显示的时钟2012-04-30 15:04有这样一个题目:求一个为51 单片机编写的LCD 电子时钟的设计,简单就好!希望说一下怎么设计这个时钟,都需要些什么东西,最重要的——把这个设计需要的程序写出来。

设计的任务:以单片机控制的时钟,在LCD 显示器上显示当前的时间。

设计的基本要求:1.使用文字型LCD 显示器显示当前时间。

2.显示格式为“时时:分分:秒秒”。

3.用4个功能键操作来设置当前时间。

各个功能键的功能如下:K1:进入设置现在的时间。

K2:设置小时。

K3:设置分钟。

K4:确认完成设置。

4. 程序执行后工作指示灯LED 闪烁,表示程序开始执行,LCD 显示“00:00:00”,然后开始计时。

题目链接:/question/416705477.html//==================================================提到设计时钟,很多人都想到了时钟芯片DS1302,都说它简单、准确。

其实,这是个误区。

仅仅使用一般的单片机,简单的编程,达到相同DS1302 的准确度,并不是难事。

如果不要求计算平闰年、不要求分清大小月、不要求计算星期几,只是要求一个简单的时钟(及日历),用DS1302,就是自寻烦恼。

大家可以打开题目链接,看看其中的一些答案,就可以看出使用DS1302 是多么的繁琐了,简直就是一场噩梦。

做而论道以前就使用普通的单片机和LCD1602 设计过《时钟与日历》,程序设计的非常合理,时间精度就完全取决于晶振的精度。

设计出来的时钟,几个月都差不上一秒。

针对这个题目,做而论道翻出了以前的设计,删节了一些不需要的功能,设计出了符合题目要求的时钟,用PROTEUS 仿真截图如下:程序用C 语言编写,全部代码如下://---------------------------------------------------#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define KEY_IO P3#define LCD_IO P0sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;sbit SPK = P1^2;sbit LED = P2^4;bit new_s, modify = 0;char t0, sec = 50, min = 59, hour = 23;char code LCD_line1[] = "Designed by ZELD"; char code LCD_line2[] = "Timer: 00:00:00 "; char Timer_buf[] = "23:59:50";//---------------------------------------------------void delay(uint z){uint x, y;for(x = z; x > 0; x--) for(y = 100; y > 0; y--);//---------------------------------------------------void W_LCD_Com(uchar com) //写指令{LCD_RS = 0; LCD_IO = com; // LCD_RS和R/W都为低电平时,写入指令LCD_EN = 1; delay(5); LCD_EN = 0; //用EN输入一个高脉冲}//---------------------------------------------------void W_LCD_Dat(uchar dat) //写数据{LCD_RS = 1; LCD_IO = dat; // LCD_RS为高、R/W为低时,写入数据LCD_EN = 1; delay(5); LCD_EN = 0; //用EN输入一个高脉冲}//---------------------------------------------------void W_LCD_STR(uchar *s) //写字符串{while(*s) W_LCD_Dat(*s++);}//---------------------------------------------------void W_BUFF(void) //填写显示缓冲区{Timer_buf[7] = sec % 10 + 48; Timer_buf[6] = sec / 10 + 48;Timer_buf[4] = min % 10 + 48; Timer_buf[3] = min / 10 + 48;Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48;W_LCD_Com(0xc0 + 7); W_LCD_STR(Timer_buf);}//---------------------------------------------------uchar read_key(void){uchar x1, x2;KEY_IO = 255;x1 = KEY_IO;if (x1 != 255) {delay(100);x2 = KEY_IO;if (x1 != x2) return 255;while(x2 != 255) x2 = KEY_IO;if (x1 == 0x7f) return 0;else if (x1 == 0xbf) return 1;else if (x1 == 0xdf) return 2;else if (x1 == 0xef) return 3;else if (x1 == 0xf7) return 4;}return 255;//---------------------------------------------------void Init(){LCD_RW = 0;W_LCD_Com(0x38); delay(50);W_LCD_Com(0x0c);W_LCD_Com(0x06);W_LCD_Com(0x01);W_LCD_Com(0x80); W_LCD_STR(LCD_line1);W_LCD_Com(0xC0); W_LCD_STR(LCD_line2);TMOD = 0x01; //T0定时方式1TH0 = 0x4c;TR0 = 1; //启动T0PT0 = 1; //高优先级, 以保证定时精度ET0 = 1;EA = 1;}//---------------------------------------------------void main(){uint i, j;uchar Key;Init();while(1) {//-------------------------------if (new_s) { //如果出现了新的一秒, 修改时间new_s = 0; sec++; sec %= 60;if(!sec) { min++; min %= 60;if(!min) { hour++; hour %= 24;}}W_BUFF(); //写显示//-------------------------------if (!sec && !min) { //整点报时for (i = 0; i < 200; i++) {SPK = 0; for (j = 0; j < 100; j++);SPK = 1; for (j = 0; j < 100; j++);} }}//-------------------------------Key = read_key(); //读出按键switch(Key) { //分别处理四个按键case 0: modify = 1; break;case 1: if(modify) {min++; min %= 60; W_BUFF(); break;}case 2: if(modify) {hour++; hour %= 24; W_BUFF(); break;}case 3: modify = 0; break;} }}//---------------------------------------------------void timer0(void) interrupt 1 //T0中断函数, 50ms执行一次{TH0 = 0x4c;t0++; t0 %= 20; //20, 一秒钟if(t0 == 0) {new_s = 1; LED = ~LED;}if(modify) LED = 0;}//===================================================呵呵,全部程序,也不过120 行左右。

C52单片机LCD1602显示时钟

C52单片机LCD1602显示时钟

/**********LCD1602液晶屏显示:时-分-秒,D0-D7对应P0口P0_0-P0_7************/#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P3^4; //使能端:en=1,读取;en=下降沿,执行指令sbit lcdrs=P3^5; //数据/指令选择端:rs=1,为数据;rs=0,为指令。

sbit lcdrw=P3^6; //读写控制端:rw=1,读;rw=0,写int W1,W2,W3,W4,W5,W6,W7;/***********延时函数******************/void delayms(uint time){uint i;for(;time>0;time--){for(i=0;i<124;i++){;}}}/*******************lcd写入指令子函数********************/void lcd_wcom(uchar com){lcdrs=0; // rs=0,指令lcdrw=0; // rw=0,写入P0=com; // 把指令送入P0口delayms(5); //延时一小会,让1602准备接收数据--------代替忙检测函数lcden=1; //使能端下降沿,把指令送入1602的8为数据口delayms(2);lcden=0;}/************************lcd写入数据函数************************/void lcd_wdata (uchar dat){lcdrs=1; // RS=1,数据lcdrw=0; // rw=0,写入P0=dat; // 把要显示的数据送入P0口delayms(5); //延时一小会,让1602准备接收数据--------代替忙检测函数lcden=1; //使能端下降沿,把指令送入1602的8为数据口delayms(2);lcden=0;}/******************LCD初始化子函数****************************/void lcd_init() //初始化,写入指令{lcdrw=0; //rw=0,写lcden=1;lcden=0; //下降沿,执行指令lcd_wcom(0x38); //写指令,8位数据,双列lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位lcd_wcom(0x01); //清屏}/**********************LCD显示子函数****************************/void lcd_display(int i,int j){lcd_wcom(0x80+i-1);switch(j){case 0: lcd_wdata('0');delayms(2); break;case 1: lcd_wdata('1');delayms(2); break;case 2: lcd_wdata('2');delayms(2); break;case 3: lcd_wdata('3');delayms(2); break;case 4: lcd_wdata('4');delayms(2); break;case 5: lcd_wdata('5');delayms(2); break;case 6: lcd_wdata('6');delayms(2); break;case 7: lcd_wdata('7');delayms(2); break;case 8: lcd_wdata('8');delayms(2); break;case 9: lcd_wdata('9');delayms(2); break;default: lcd_wdata(':');delayms(2); break;}}/***************定时器T0初始化子函数**********************/void initTimer0 (void){TMOD = 0x01; //模式1,16位T0,定时10msTH0 = 0xD8; //初值TL0 = 0xF0;EA = 1; //开总中断ET0 = 1; //允许T0中断TR0 = 1; //启动T0}/*****************************定时器T0中断子程序****************************/ void Timer0 (void) interrupt 1{int time;int a;time++;a=time;W1=a%10;a/=10;W2=a%10;a/=10;W3=a%6;a/=6;W4=a%10;a/=10;W5=a%6;a/=6;W6=a%10;a/=10;W7=a%10;a/=10;}/**************************主函数*******************************/void main(){initTimer0(); //初始化lcd_init();while(1){//lcd_display(10,W1);//lcd_display(9,':');lcd_display(8,W2);lcd_display(7,W3);lcd_display(6,':');lcd_display(5,W4);lcd_display(4,W5);lcd_display(3,':');lcd_display(2,W6);lcd_display(1,W7);}}。

基于单片机的LCD数字电子钟

基于单片机的LCD数字电子钟

长春工业大学智能仪表综合训练设计说明书题目:基于单片机的LCD数字电子钟学生姓名:学号:专业:测控技术与仪器班级:指导教师:摘要数字电子钟是采用电子电路实现对年、月、日、时、分、秒数字显示的计时装置,由于数字集成电路的发展和石英晶体震荡器的广泛应用,使得数字电子钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,成为人们日常生活中不可缺少的必需品。

本文介绍了基于单片机的多功能数字电子钟设计。

系统以STC89C52RC为核心,具有时间和日期的显示及设置功能。

硬件电路包括STC89C52RC单片机小系统电路、数字显示电路、时钟日期电路几部分模块。

再通过C语言编程对各模块进行调试,最后达到设计要求的效果。

这种实现方法的优点是电路简单,性能可靠,实时性好,时间和日期精度高,操作简单,编程容易。

关键词:STC89C52RC单片机;LCD1602液晶显示器;时间设置;日期设置目录第1章前言 (4)1.1课题研究的现实性意义 (4)1.2国内外研究现状 (4)1.3课题基本要求 (5)第2章总体方案设计 (6)2.1方案原理 (6)2.2 硬件选择 (6)2.2.1单片机选择 (6)2.2.2显示器选择 (6)2.2.3晶振的选择 (7)第3章硬件设计 (8)3.1键盘电路 (8)3.2复位电路 (8)3.3晶振电路 (9)3.4 LCD显示电路 (10)第4章软件设计 (11)4.1 Protel 99SE (11)4.2程序主流程图 (11)4.3初始化流程图 (12)4.4延时中断子程序 (12)4.5时间设置子程序 (13)总结 (14)参考文献 (15)附录A:数字电子钟硬件原理图 (16)附录B :C语言源程序 (17)第1章前言1.1课题研究的现实性意义20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<reg51.h> //包含单片机寄存器的头文件#include<stdlib.h> //包含随机函数rand()的定义文件#include<intrins.h> //包含_nop_()函数定义的头文件#include "LCD1602.h"unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字unsigned char code string[ ]={"BeiJing Time:"}; //定义字符数组显示提示信息unsigned char count; //定义变量统计中断累计次数unsigned char s,m,h; //定义变量储存秒、分钟和小时/******************************************************************************函数功能:显示小时******************************************************************************/ void Display_Hour(){unsigned char i,j;i=h/10; //取整运算,求得十位数字j=h%10; //取余运算,求得各位数字Write_Addr(0x44); //写显示地址,将十位数字显示在第2行第5列Write_Data(digit[i]); //将十位数字的字符常量写入LCDWrite_Data(digit[j]); //将个位数字的字符常量写入LCD}/******************************************************************************函数功能:显示分钟******************************************************************************/ void Display_Minute(){unsigned char i,j;i=m/10; //取整运算,求得十位数字j=m%10; //取余运算,求得各位数字Write_Addr(0x47); //写显示地址,将十位数字显示在第2行第8列Write_Data( digit[i] ); //将十位数字的字符常量写入LCDWrite_Data(digit[j]); //将个位数字的字符常量写入LCD}/******************************************************************************函数功能:显示秒******************************************************************************/ void Display_Second(){unsigned char i,j;i=s/10; //取整运算,求得十位数字j=s%10; //取余运算,求得各位数字Write_Addr(0x4a); //写显示地址,将十位数字显示在第2行第11列Write_Data(digit[i]); //将十位数字的字符常量写入LCDWrite_Data(digit[j]); //将个位数字的字符常量写入LCD}/*********************************************************************main 主函数***********************************************************************/ void main(void){unsigned char i;Init_LCD1602(); //调用LCD初始化函数TMOD=0x01; //使用定时器T0的模式1TH0=(65536-50000)/256; //定时器T0的高8位设置初值TL0=(65536-50000)%256; //定时器T0的低8位设置初值EA=1; //开总中断ET0=1; //定时器T0中断允许TR0=1; //启动定时器T0count=0; //中断次数初始化为0s=0; //秒初始化为0m=0; //分钟初始化为0h=0; //小时初始化为0Write_Addr(0x03); //写地址,从第1行第4列开始显示i=0; //从字符数组的第1个元素开始显示while(string[i]!='\0') //只要没有显示到字符串的结束标志'\0',就继续{Write_Data(string[i]); //将第i个字符数组元素写入LCDi++; //指向下一个数组元素}Write_Addr(0x46); //写地址,将第二个分号显示在第2行第7列Write_Data(':'); //将分号的字符常量写入LCDWrite_Addr(0x49); //写地址,将第二个分号显示在第2行第10列Write_Data(':'); //将分号的字符常量写入LCDwhile(1) //无限循环{Display_Hour(); //显示小时Delay(5); //给硬件一点反应时间Display_Minute(); //显示分钟Delay(5); //给硬件一点反应时间Display_Second(); //显示秒Delay(5); //给硬件一点反应时间}}/*******************************************************函数功能:定时器T0的中断服务函数********************************************************/void Time0( ) interrupt 1 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器{count++; //每产生1次中断,中断累计次数加1if(count==20) //如果中断次数计满20次{count=0; //中断累计次数清0s++; //秒加1}if(s==60) //如果计满60秒{s=0; //秒清0m++; //分钟加1}if(m==60) //如果计满60分{m=0; //分钟清0h++; //小时加1}if(h==24) //如果计满24小时{h=0; //小时清0}TH0=(65536-50000)/256; //定时器T0高8位重新赋初值TL0=(65536-50000)%256; //定时器T0低8位重新赋初值}lcd1602.h:#ifndef _LCD1602_H_#define _LCD1602_H_sbit RS=P1^0; //寄存器选择位,将RS位定义为P1.0引脚sbit RW=P1^1; //读写选择位,将RW位定义为P1.1引脚sbit EN=P1^2; //使能信号位,将E位定义为P1.2引脚sbit Busy=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚/*****************************************************函数功能:延时1ms***************************************************/ void Delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}/***************************************************** 函数功能:延时若干毫秒入口参数:n***************************************************/ void Delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)Delay1ms();}/***************************************************** 函数功能:判断液晶模块的忙碌状态返回值:result。

result=1,忙碌;result=0,不忙***************************************************/ void Busy_Test(){P0=0xff;do{RS=0;RW=1;EN=0;EN=1;}while(Busy==1);EN=0;}/***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/ void Write_Cmd (unsigned char Dictate){Busy_Test(); //如果忙就等待EN=0;P0=Dictate;RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"_nop_();_nop_(); //空操作两个机器周期,给硬件反应时间//将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间EN=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间EN=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/void Write_Data(unsigned char x){Busy_Test();EN=0;P0=x;RS=1; //RS为高电平,RW为低电平时,可以写入数据RW=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"//将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间EN=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间EN=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:指定字符显示的实际地址入口参数:x***************************************************/void Write_Addr(unsigned char x){Write_Cmd(x|0x80); //显示位置的确定方法规定为"80H+地址码x"}/*****************************************************函数功能:对LCD的显示模式进行初始化设置***************************************************/void Init_LCD1602(){Delay(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间Write_Cmd(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口Delay(5); //延时5msWrite_Cmd(0x0c); //显示模式设置:显示开,有光标,光标闪烁Delay(5);Write_Cmd(0x06); //显示模式设置:光标右移,字符不移Delay(5);Write_Cmd(0x01); //清屏幕指令,将以前的显示内容清除Delay(5);}#endif。

相关文档
最新文档