单片机课程设计电子时钟实验可定时调闹钟用LCD显示

合集下载

单片机_电子时钟(LCD显示)课程设计报告

单片机_电子时钟(LCD显示)课程设计报告

课程设计报告课程名称单片机题目电子时钟(LCD显示)学生指导教师年级 2018级专业计算机科学与技术二级学院信息工程学院信息工程学院2020年12 月23 日《单片机》课程设计任务书摘要本设计使用11.0592MHz晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用LCD1602的并行操作方式显示。

通过使用该单片机,实现将时间显示在LCD1602液晶上,并且按秒实时更新。

AT89C51单片机功耗小,电压可选用4~6V电压供电。

通过板子上的按键可随时调节时钟的时、分,按键设计4个有效按键,分别有开始设置键、设置小时键、设置分钟键、确认设置键盘,通过使用中断定时器进行计时,实现时间显示。

针对LCD液晶显示屏,设置了初始化函数,数据传送函数及指令传送函数,进而实现LCD液晶显示屏显示功能。

在每次的按键按下时,LCD液晶显示屏会随之改变,进而实现功能。

关键词:AT89C51 电子时钟数码管按键目录1 概述 (1)1.1方案设计 (1)1.2设计目的 (1)1.3设计内容 (1)2.硬件设计 (1)2.1 元器件 (1)2.2 硬件 (2)3 软件设计 (3)3.1 主设计流程 (3)3.2 初始化流程图 (3)3.3 时间显示主程序 (5)4 调试结果分析 (6)4.1运行结果 (6)4.2仿真分析 (7)5 总结 (8)参考文献 (9)附录 (10)1 概述1.1方案设计(1)单片机选型选用AT89C51单片机,指令简单,易学易懂,外围电路简单,硬件设计方便,IO 口操作简单,成本低,程序烧写简单,对于设计开发非常实用。

(2)显示方案LCD液晶显示器是一种功耗极低的显示器件,它不仅省电,还能显示文字、曲线、图形等大量的信息,易于彩色化,所以采用LCD显示器来显示时间。

(3)计时方案利用AT89C51内部定时/计数器进行中断定时,配合软件延时实现时分秒的计时。

该方案可以节省硬件成本。

(4)按键设计系统采用独立式按键,共设计了四个按键,分别是“当前时间”、“分钟+”、“小时+”,用来设置校时功能,这样可以使电路更简单。

C51单片机LCD电子时钟课程设计

C51单片机LCD电子时钟课程设计

中南大学《自动化工程训练》设计题目 LCD时钟程序设计指导老师设计者专业班级自动化级班号设计日期2016年9月目录一、设计任务要求分析 (1)1.1设计总体方案及其方案论证 (1)二、组成电路介绍 (1)2.1 复位电路: (1)2.2晶振电路: (1)2.3键盘控制系统设计: (2)2.4闹钟部分: (3)2.5显示电路设计 (3)2.5.1 LCD1602简介 (3)三、软件设计 (4)3.1程序主流程图 (5)3.2初始化流程图 (5)3.3延时中断子程序 (6)3.4时间设置子程序 (7)四、系统测试 (7)4.1 测试方法 (7)4.2 测试结果 (7)4.3 结果分析 (8)五、源程序 (8)一、设计任务要求分析本设计要实现的功能是:实时显示当前的时钟,并且可以设定闹铃,以蜂鸣器鸣响5秒的方式作为闹铃。

1.1设计总体方案及其方案论证按照系统的设计功能所要求的,液晶显示电子时钟原理图如图所示。

液晶显示电子时钟原理图本系统以AT89C51单片机为核心,该单片机可把数据进行处理,从而把数据传输到显示模块LCD1602液晶显示器,实现时间及日期的显示。

以LCD 液晶显示器为显示模块,把单片机传来的数据显示出来,并且显示多样化,还可以对时间和日期进行设置,主要靠按键来实现。

二、组成电路介绍2.1 复位电路:复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。

如图所示:2.2晶振电路:晶振电路如图所示:晶振模块原理图选取原则:电容选取22pF,晶振为12MHz。

1)电源:AT89S51单片机的供电电源是5V的直流电。

2)EA非/Vpp脚:我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。

2.3键盘控制系统设计:按键需要4个,分别实现为时间调整、时间的加、时间的减、闹钟调整四个功能。

用单片机的4个I/O口接收控制信号,其电路如图所示:按键调时电路通过控制键来控制所要调节的是时、分、还是秒。

单片机课程设计--智能电子钟(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实际末,电子技术获得了飞速的发展。

单片机课程设计电子时钟实验可定时调闹钟用LCD显示

单片机课程设计电子时钟实验可定时调闹钟用LCD显示

单片机实验报告姓名学号时间 2013.1.9实验题目电子数字钟一、实验目的与要求1.电子数字钟必须具有显示年、月、日和显示时、分、秒的功能。

(用LCD显示)。

2.具有按键时间校正功能。

3.具备设定闹钟和定时闹钟功能。

二、实验环境(硬件环境、软件环境)1.硬件环境:单片机开发板一个,计算机一台,单片机主机电源线及与计算机的连接线各一条。

2.软件环境:软件Keil C51和软件Flash Magic。

三、实验电路(P2口输入、P1口输出实验原理图)本次实验主要使用了开发板的4个板块,分别是单片机STC89C52(如图2所示)、矩阵键盘(如图2所示)、1206LCD显示器和蜂鸣器(如图3所示)。

其中单片机芯片通过P0口把总线和矩阵键盘连接;通过P2.2和蜂鸣器间接相连,因为蜂鸣器所在的电路已经连芯片ULN2003,因此用一根杜邦线把P2.2和芯片ULN2003的第一个输入口IN1连起来。

而键盘显示这一块,由于内部已经把键盘显示的电路和单片机芯片连接起来了,所以不需要借助杜邦线了。

图1为实物连线图。

图1 实物连线图图2 单片机机座和矩阵键盘图3 蜂鸣器和1602液晶显示器四、程序流程图主要算法:主函数中先定时中断初始化,利用定时器中断实现走时,调用LCD显示程序和按键处理子函数,再调用显示时间函数显示初始时间值。

同时,在主函数中判断当前的小时和分钟值是否等于闹钟设定的时间,若等于则让蜂鸣器响。

主函数算法的框图如图4所示。

按键处理函数算法:通过键盘扫描函数得到确定哪个键盘按下,得到键盘值,如果键0按下则暂停时钟走时;键1按下则在当前的光标所在的时间单元加1;键2按下则开闹钟;键3按下则实现当前的时间单元左移一位的功能;键4按下则在当前的光标所在的时间单元减1。

时间的年月日算法:通过定时器实现时钟的走时,秒满60,分钟加1;分满60,小时加1;小时满24,日加1;至于每个月的天数根据闰年和非闰年的表格确定当月天数。

基于单片机的电子时钟设计报告(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显示)课程设计说明书

目录1. 设计要求 (1)2. 时钟总体设计思路 (1)3. 系统硬件设计 (1)3.1单片机控制系统 (3)3.2 键盘控制系统设计 (3)3.3 显示电路 (4)3.4 硬件原理及说明 (4)3.5 主要性能参数 (5)4. 软件设计 (5)4.1 软件功能 (5)4.2软件设计 (6)4.3 汇编源程序 (5)5. Proteus仿真 (11)6. 课程设计总结 (12)参考文献 (13)1. 设计要求以AT89C51单片机为核心的时钟,在LED 显示器上显示当前的时间: 使用字符型LCD 显示器显示当前时间。

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

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

功能键K1~K4功能如下。

K1—设置小时。

K2—设置分钟。

K3—设置秒数。

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

单片机是一种集成电路芯片,采集超大规模集成电路技术把具有数据处理能力(如算数运算、逻辑运算、数据传送、中断处理)的微型处理器,随机存取数据存储器(RAM )、只读程序存储器(ROM )、输入/输出电路(I/O ),可能还包括定时/计数器、串行通信口(SCI )、显示驱动电路(LCD 或LED 驱动电路)、脉宽调制电路(PWM )、模拟多路转化器及A/D 转化器等电路集成到一片芯片上,构成一个最小而又完善的计算机系统。

这些电路能在软件的控制下准确、迅速、高效的完成程序设计者事先规定的任务。

2. 时钟的总体设计思路按照系统的设计功能要求,本时钟系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟的调整及显示。

图一 系统总原理图3. 系统硬件设计3.1 单片机控制系统本次设计时钟电路,采用了ATC89C51单片机芯片控制电路,这种单片机芯片比较简单,并且省去了很多复杂的线路,更容易表达和理解,通过按钮来调节电微型控制器 时钟电路数据显示 按键调时子钟的时、分、秒。

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

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

单片机的发展历程
1971年,Intel公司推出4004微处理器, 标志着单片机的诞生
1990年代,ARM公司推出ARM架构,成为现 代智能手机、平板电脑等设备的主流处理器
1976年,Intel公司推出8080微处理器, 成为第一个广泛使用的单片机
2000年代,RISC-V架构出现,成为开 源硬件领域的新宠
判断按键类型:根 据按键的状态,判 断按下的是哪个按 键
执行相应操作:根据按 键类型,执行相应的操 作,如设置闹钟时间、 调整闹钟音量等
更新显示内容:根据 按键操作,更新LCD 显示内容,如显示当 前时间、闹钟时间等
定时器和中断服务程序
定时器:用于定时触发中断服务程序 中断服务程序:用于处理定时器中断 定时器初始化:设置定时器参数,如定时器模式、定时器周期等 中断服务程序编写:编写中断服务程序,处理定时器中断,如更新LCD显示、控制闹钟等
通信设备:如手机、路由 器等
计算机外设:如打印机、 扫描仪等
定时闹钟的设计 思路
设计背景和意义
单片机课程设计:作为单片机课程的一部分,设计定时闹钟可以加深对单片机原理和应用的理解。 实际应用:定时闹钟在日常生活中具有广泛的应用,如提醒、定时等。 技术挑战:设计定时闹钟需要掌握单片机编程、电路设计、LCD显示等技术,具有一定挑战性。 创新性:设计带有LCD的定时闹钟,可以提高产品的用户体验,增加产品的市场竞争力。
功能:接收用 户按键输入, 控制闹钟功能
模块组成:按 键、电阻、电 容、单片机IO

工作原理:通过 按键按下,改变 电阻电容的电平, 从而改变单片机 IO口的电平,实
现按键输入
设计要点:按 键的布局、按 键的响应速度、 按键的防抖处

单片机课程设计实验报告lcd电子时钟

单片机课程设计实验报告lcd电子时钟

单片机原理与应用课程名称:单片机原理与应用设计题目:LCD电子钟院系:电子信息工程学院班级:自动化0706设计者:全宏宇指导教师:一,设计目标LCD显示电子钟的基本功能1,实现时钟功能;2,实现闹铃功能;3,实现秒表功能;4,具有一定的计时精度。

LCD显示电子钟的基本要求1,掌握单片机开发编程设计的基本流程;2,了解Keil及Proteus软件的基本使用;3,了解LCD的基本使用;4,学习单片机硬件制作。

二,具体实现1,软件平台1)Keil编程Keil 的开发工具的使用的基本过程:○1创建C 或汇编语言的源程序;○2编译或汇编源文件;○3纠正源文件中的错误;○4从编译器和汇编器连接目标文件;○5测试连接的应用程序。

2)Proteus仿真Proteus软件不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

在编译方面,它也支持IAR,Keil,PLAB等多种编译器。

2,硬件开发平台JD51开发板的基本资料○1LED 电路,8 只独立LED 发光管,可做指示或各种闪烁效果用。

○2数码管电路,4只共阳一体8 段数码显示管,可实现各种数据显示,如计数、时钟等。

○3蜂鸣器电路,可用于设计各种提示音、演奏音乐等。

○4键盘电路,学习按键控制相关编程。

○5LCD 显示电路,编程控制LCD 显示。

○6串口电路,学习编程实现JD51 和PC 或其他符合该通信协议的电路之间的通信。

○7红外电路,通过选配的红外遥控器,学习红外解码并可实现红外遥控JD51。

○8温度模块电路,采用一线式温度传感器实现温度的采集并可显示在数码管或者LCD 上,通过温度数据处理便可实现温度控制器功能。

○9除了以上提到的可编程电路本学习板还有一些常用的不可编程电路,包括电源电路、复位电路、晶振电路等。

本次LCD电子钟实验用到其中的蜂鸣器,按键,LCD显示接口。

3,总体设计1)基本资源的使用本次实验采用了89C52型单片机,1602LCD液晶显示屏,蜂鸣器。

单片机课程设计—带有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)、显示时-分-秒功能 (3)4、系统设计AT89C52单片机简介 (4)电路总体设计 (6)主程序流程图 (7)5、详细设计设计电路图 (7)程序代码 (12)5.2.1 时-分程序代码 (12)5.2.2 时-分-秒程序代码 (23)6、结论结果分析 (33)心得体会 (33)7、设计总结 (34)8、参考文献 (34)1、主要内容:本次课程设计的内容为设计一个以MCS51单片机为核心的带有LCD显示的定时闹钟,完成原理图设计,软件编制及设计报告。

设使用AT89C52单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LCD 选择有背光显示的模块,在夜晚或黑暗的场合中也可以使用。

带闹钟的智能电子时钟单片机课程设计

带闹钟的智能电子时钟单片机课程设计

微处理器综合设计实践报告题目:智能电子时钟的设计院系:电子与信息工程学院专业:电子科学与技术年级姓名:学号:指导老师:一、课程设计目的:综合应用所学的微处理器原理,汇编语言及相关硬件知识,设计一个具有一定功能的电路。

熟练掌握仿真器和编程器的使用。

二、课程设计要求:在面包板上搭建好硬件电路。

以单片机为核心器件,组成一个电子时钟系统。

系统显示用4位7段LED显示器,显示当前时间的小时和分。

能够通过按键实现对当前时间的调整,系统时间到整点后能够通过蜂鸣器报时,时间为1s;能通过按键设置闹钟时间,闹钟时间到后,通过蜂鸣器报时。

三、系统组成与工作原理:1、电路原理图2、工作原理(1)设计原理及思路本课程设计要求以AT89C52单片机为核心器件,组成一个电子时钟系统。

我们可以利用单片机自带的定时器功能来进行定时,再通过一些软件编程来构造出一个时钟,同时也可以利用软件的编程来实现所要求的其他功能。

通过四个按键开关来控制电子时钟的工作模式。

KEY1、KEY2分别对应时钟的调时和调分。

KEY3可以设置闹钟,进入闹钟模式后,KEY1、KEY2将转变成闹钟的调时和调分键。

此外,当按下KEY4就可以进入秒表模式,进入秒表模式以后,KEY1可以控制秒表的开始于暂停,KEY2可以对秒表清零,再次按下KEY4键便退出秒表模式。

程序运行时主程序一直在循环查询各按键的状态,并将当前时间与闹钟设定时间不断进行比较,如果时间相同则响铃,同时通过动态显示的方式将相应的时间显示在数码管显示器上。

与此同时,整个过程中时钟的时间都是由单片机的定时器进行计时的。

单片机的P0口负责输出段码,P2.0~P2.3对应四个数码管的位选端,分别为数码管1号、2号、3号、4号(由右至左编号);P1.0对应蜂鸣器;P2.4~P2.7对应四个按键4、3、2、1(由上至下编号)。

各个分电路:a.蜂鸣器电路当P1.0为低电平时,三极管导通,蜂鸣器开始工作b.上电复位电路在通电瞬间,电容C通过电阻R20充电,RST端出现正脉冲,用以复位。

带有LCD的电子闹钟课程设计

带有LCD的电子闹钟课程设计

带有LCD的电子闹钟课程设计一、课程目标知识目标:1. 学生能理解电子闹钟的基本工作原理,掌握LCD显示原理。

2. 学生能掌握闹钟设置、时间调整等基本操作,了解电子闹钟的功能特点。

3. 学生能了解电子闹钟中涉及的电子元件及其作用。

技能目标:1. 学生能运用所学知识,正确组装带有LCD的电子闹钟。

2. 学生能通过实际操作,掌握电子闹钟的调试与故障排除方法。

3. 学生能运用创新思维,对电子闹钟进行改进设计。

情感态度价值观目标:1. 学生通过动手实践,培养对电子技术的兴趣和热情。

2. 学生在合作学习中,培养团队协作能力和沟通表达能力。

3. 学生在学习过程中,增强对科技产品的理解和尊重,树立正确的科技价值观。

课程性质:本课程为实践性较强的课程,结合理论知识与动手操作,培养学生电子技术的实际应用能力。

学生特点:学生在本年级已具备一定的电子技术基础知识,具有较强的动手能力和探究精神。

教学要求:教师需引导学生将理论知识与实际操作相结合,注重培养学生的动手实践能力和创新思维。

通过课程学习,使学生在掌握基本技能的同时,提升情感态度价值观。

将课程目标分解为具体学习成果,以便进行教学设计和评估。

二、教学内容本课程教学内容主要包括以下几部分:1. 电子闹钟基本原理:介绍电子闹钟的工作原理,LCD显示原理,以及闹钟中涉及的电子元件及其作用。

2. 闹钟组装与调试:讲解闹钟的组装过程,包括电路连接、LCD显示、按键设置等,以及闹钟的调试方法与故障排除。

3. 闹钟功能特点:分析电子闹钟的功能特点,如闹铃设置、时间调整、背光显示等,并介绍相关操作方法。

4. 创新设计与改进:引导学生运用所学知识,对电子闹钟进行创新设计,提高闹钟的实用性和趣味性。

教学内容安排如下:第一课时:电子闹钟基本原理学习,了解LCD显示原理及闹钟中的电子元件。

第二课时:闹钟组装与调试,学生动手实践,掌握组装与调试方法。

第三课时:学习闹钟的功能特点,进行实际操作,熟悉各项功能。

LCD电子钟程序(广工单片机课程设计)

LCD电子钟程序(广工单片机课程设计)

LCD电子钟程序(广工单片机课程设计)第一篇:LCD电子钟程序(广工单片机课程设计)#include#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;sbit KEY_0 = P3^7;sbit KEY_1 = P3^6;sbit KEY_2 = P3^5;sbit KEY_3 = P3^4;bit new_s, modify = 0;char t0, sec = 0, min = 0, hour = 0;char code LCD_line1[] = “I LOVE U”;char code LCD_line2[] = “Timer: 00:00:00 ”;char Timer_buf[] = “00:00:00”;char a,b,c,k = 0;//--------------------void delay(uint z){uintx, 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_STR(Timer_buf);}//--------------------uchar read_key(void){ucharx1, 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 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_li ne1);W_LCD_STR(LCD_line2);TMOD = 0x01;//T0定时方式1TH0 = 0x4c;TR0 = 1;//启动T0 PT0 = 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();//写显示W_LCD_Com(0xc0 + 7);(x1 == 0x7f)return 0;W_LCD_Com(0xC0);//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){//分别处理四个按键case0: if(KEY_0){min++;min %= 60;W_BUFF();break;}case1: if(KEY_1){hour++;hour %= 24;W_BUFF();break;}case2: if(KEY_2){ a=sec;b=min;c=hour;sec = 0, min = 0, hour = 0;}case3: if(KEY_3){sec=a+sec;if(sec>60){sec=sec-60;min++;}min=b+min;if(min>60){min=min-60;hour++;}hour=c+hour;if(hour>24){hour=hour-24;} }} }} //--------------------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;} K0分加一 K1时加一 K2秒表开始K3秒表结束,恢复正常时间!第二篇:单片机课程设计电子钟课程设计任务书(指导教师填写)课程设计名称电子技术课程设计学生姓名专业班级设计题目数字钟一、课程设计的任务和目的任务:设计一台能显示“时”、“分”、“秒”的数字钟,周期为24小时;具有校时、正点报时功能。

LCD电子钟的设计单片机课程设计

LCD电子钟的设计单片机课程设计

摘要单片机,是集CPU、RAM、ROM、定时器、计数器和多种接口于一体的微控制器。

自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。

它体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。

本系统为基于DS1302的多功能电子钟,以AT89C51单片机作为主控芯,采用实时时钟芯片DS1302,使用LCD1602液晶作为显示输出。

该系统走时精确,具有显示时、分、秒的功能,本文将详细介绍AT89C51单片机和DS1302时钟芯片的基本原理,从软件和硬件电路的实现两大方面进行分析。

关键词:AT89C51单片机LCD液晶屏DS302时钟芯片目录第一章绪论 (3)1.1 AT89C51单片机概述 (3)1.2 LCD概述 (3)1.3 DS1302简介 (3)1.4 本设计任务 (4)第2 章总体方案论证与设计 (4)2.1 显示部分 (4)2.2 数字时钟 (4)2.3总体硬件组成框图 (5)第3章系统硬件设计 (6)3.1 AT89C51单片机最小系统 (6)3.2 时钟模块 (6)3.3LCD液晶显示模块 (7)3.4按键模块 (7)3.5整体电路 (8)第4章系统的软件设计 (9)4.1 主程序设计 (9)4.2 时间设定程序流程 (9)第5章系统调试与测试结果分析 (11)5.1 使用的仪器仪表 (11)5.2 系统调试 (11)5.2.1硬件调试 (11)5.2.3硬件软件联调 (11)5.3 测试结果 (11)设计心得体会 (13)参考文献 (14)附录程序 (15)第一章绪论在新的世纪我们已经步入了第二个十年,随着全球经济的复苏和发展,由于在世界范围内人类需求的巨大释放,以及消费结构的升级,同时传统能源的稀缺以及带来的环境的破坏,都将带来新一轮的科技革命的巨变。

因此,更适合人类社会协调、健康、可持续发展的新能源、新材料等便应运而生。

单片机与接口技术课程设计(LCD显示的电子钟、多功能多拓展)

单片机与接口技术课程设计(LCD显示的电子钟、多功能多拓展)

《单片机与接口技术》课程设计报告课题名称L C D显示的电子钟学院自动控制与机械工程学院专业机械设计制造及其自动化班级2010级(六)班姓名学号时间2013.1.7-2013.1.18摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。

将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。

本课程设计就是应用单片机强大的控制功能制作LCD智能电子钟,该电子钟包括三大功能:实时显示年、月、日、时、分、秒;实时监测环境温度(可根据需要启动高温报警功能);电子闹钟。

本设计采用的是AT89C52单片机,该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有8KB 的ROM,能够存储大量的程序。

计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时、分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。

温度检测采用DALLAS公司的数字化温度传感器DS18B20,该芯片采用的是独特的“一线总线”的方式与单片机进行通信,一线总线独特而且经济的特点,是用户可以轻松的组建传感器网络,为测量系统的构建引入全新的概念。

实时温度采用一线总线的方式传输大大提高了信号的抗干扰性,分辨率可通过软件设置,其小巧的体积为各种环境下测量温度提供了方便。

显示器件采用通用型1602液晶,可显示32个字符,如果使用数码管来做显示器件需消耗大量的系统资源,因此采用低功耗的1602液晶,该液晶显示方便,功能强大,完全能满足数字万年历的显示要求。

通过此次课程设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。

目录一、设计任务及要求 (3)1.设计任务 (3)2.设计要求 (3)二、设计的基本方案及步骤 (3)1.设计方案 (3)2.设计步骤 (5)三、系统硬件电路设计 (5)1、LCD液晶显示模块设计 (6)2、实时时间计算模块设计 (6)3、实时环境温度检测模块设计 (7)4、报警(闹铃)模块设计 (8)5、设置模块设计 (8)四、系统软件设计 (8)五、系统硬件仿真运行情况图 (11)结束语: (15)参考文献: (15)附录一:电路原理图 (16)附录二:源程序代码 (16)一、设计任务及要求1.设计任务基于AT89C51单片机,制作一个LCD显示的智能电子钟。

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

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

单⽚机课程设计—带有LCD的定时闹钟郑州轻⼯业学院软件学院单⽚机与接⼝技术课程设计总结报告设计题⽬:带有LCD的定时闹钟学⽣姓名:系别:专业:班级:学号:指导教师:2011年12⽉16⽇郑州轻⼯业学院课程设计任务书题⽬带有LCD的定时闹钟专业、班级学号姓名主要内容:设使⽤89C51单⽚机结合字符型LCD显⽰器设计⼀个简易的定时闹钟LCD 时钟,若LCD选择有背光显⽰的模块,在夜晚或⿊暗的场合中也可以使⽤。

基本要求:.字符型LCD(16*2)显⽰器.显⽰格式“时时分分”。

.由LED闪动来做秒计数表⽰。

.⼀旦时间到侧发动声响,同时继电器启动,可以扩充控制家电开启和关闭。

.程序执⾏后⼯作指⽰灯LED闪动,表⽰程序开始执⾏,LCD显⽰“00 00”,按下操作键K1-k4动作如下:(1)K1—设置现在的时间。

(2)K2—显⽰闹钟设置的时间。

(3)K3—设置闹铃的时间。

(4)K4—闹铃ON/OFF的状态设置,设置ON时连续三次发出“哗”的⼀声,off置为哗的⼀声。

设置当前时间或闹铃时间如下:(1)K1—时的调整。

(2)K2—分的调整。

(3)K3—设置完成。

(5)OFF发出“哗”K4---闹铃时间到时,发出⼀阵声响,按下本键可以停⽌声响。

除了显⽰当前时间的功能外,还可以扩充如下功能;.增加减计数功能。

.增加多组计数的功能。

参考⽂献郭天祥 51单⽚机C语⾔教程-⼊门。

余发⼭单⽚机原理及应⽤技术。

中国矿业⼤学出版社。

涂世亮,张友德。

单⽚微机控制技术。

清华⼤学出版社。

⼀.设计本电⼦定时闹钟的⽬的和意义以单⽚机为核⼼的数字时钟是很有社会意义和社会价值的。

钟表原先的报时功能已经原不能满⾜⼈们⽇益增长的要求,现代的电⼦时钟多带有类似⾃动报警、按时⾃动打铃、时间程序⾃动控制、定时⼴播、⾃动起闭路灯、通断动⼒设备、甚⾄各种定时电⽓的⾃动启⽤等功能。

1.1 本LCD电⼦闹钟的特点和功能介绍数字钟介绍时钟是将⼩时、分钟、秒钟显⽰于⼈的⾁眼的计时装置。

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

姓名学号时间 2013.1.9实验题目电子数字钟一、实验目的与要求1.电子数字钟必须具有显示年、月、日和显示时、分、秒的功能。

(用LCD显示)。

2.具有按键时间校正功能。

3.具备设定闹钟和定时闹钟功能。

二、实验环境(硬件环境、软件环境)1.硬件环境:单片机开发板一个,计算机一台,单片机主机电源线及与计算机的连接线各一条。

2.软件环境:软件Keil C51和软件Flash Magic。

三、实验电路(P2口输入、P1口输出实验原理图)本次实验主要使用了开发板的4个板块,分别是单片机STC89C52(如图2所示)、矩阵键盘(如图2所示)、1206LCD显示器和蜂鸣器(如图3所示)。

其中单片机芯片通过P0口把总线和矩阵键盘连接;通过P2.2和蜂鸣器间接相连,因为蜂鸣器所在的电路已经连芯片ULN2003,因此用一根杜邦线把P2.2和芯片ULN2003的第一个输入口IN1连起来。

而键盘显示这一块,由于内部已经把键盘显示的电路和单片机芯片连接起来了,所以不需要借助杜邦线了。

图1为实物连线图。

图1 实物连线图图2 单片机机座和矩阵键盘图3 蜂鸣器和1602液晶显示器四、程序流程图主要算法:主函数中先定时中断初始化,利用定时器中断实现走时,调用LCD显示程序和按键处理子函数,再调用显示时间函数显示初始时间值。

同时,在主函数中判断当前的小时和分钟值是否等于闹钟设定的时间,若等于则让蜂鸣器响。

主函数算法的框图如图4所示。

按键处理函数算法:通过键盘扫描函数得到确定哪个键盘按下,得到键盘值,如果键0按下则暂停时钟走时;键1按下则在当前的光标所在的时间单元加1;键2按下则开闹钟;键3按下则实现当前的时间单元左移一位的功能;键4按下则在当前的光标所在的时间单元减1。

时间的年月日算法:通过定时器实现时钟的走时,秒满60,分钟加1;分满60,小时加1;小时满24,日加1;至于每个月的天数根据闰年和非闰年的表格确定当月天数。

图4 主函数算法框图五、程序测试报告:(调试输入数据、结果数据或状态。

)1.输入:源代码1输出结果:(1)电子数字钟必须具有显示年、月、日和显示时、分、秒的功能。

(用LCD显示)(2)具有按键时间校正功能。

(3)具备设定闹钟和定时闹钟功能。

六、体会:(碰到的问题、如何解决、有何体会。

)1.深入了解如何运用高级语言,此次实验运用C语言进行编程,使单片机开发板实现电子时钟的功能,对汇编语言和高级语言在实现单片机功能的特点也加深了认识。

体会到C语言在编程时的灵活性和不用过多考虑硬件的方便。

2.该实验中主要用到几个板块,单片机控制,键盘运用,LCD显示,蜂鸣器。

掌握了键盘的工作方式和扫描的特点,懂得运用C语言进行编程键盘扫描的程序;掌握LCD显示的几种功能指令,尽管LCD显示的程序较多,但是工作原理弄清楚后就清晰很多;掌握如何把硬件和软件联系起来,特别是控制定时闹钟蜂鸣器的程序,由于该片单片机开发板的蜂鸣器是和步进电机等电路连在一起的,所以需要把控制蜂鸣器的连接端口找到,并用指令“sbit BEEP=P2^2”进行定义;对单片机的应用有了更深入的认识和了解。

3.蒋老师在实验过程中一直强调程序的排版格式,让我从细节上更注意排版,收获了一个美观处理文档的习惯。

在实验过程中遇到了调试失败的各种问题,除了得到老师的指导,自己也主动上网搜索发生错误的各种原因,培养了解决问题的能力。

七、源程序代码#include<reg52.h>#include<intrins.h>sbit BEEP=P2^2; //喇叭端口sbit RS = P2^4; //定义端口sbit RW = P2^5;sbit EN = P2^6;bit Al; //闹钟标志位#define DataPort P0#define KeyPort P1#define uint unsigned int#define uchar unsigned charuchar code table[]="0123456789";//转换成液晶显示的字符uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年uint i,j,k;uint n_hour,n_minu; //闹钟时,分uint sec,minu,hour,day,mon; //秒,分,时,日,星期uint count,key;unsigned long int year; //年uchar hs,hg,mis,mig,ss,sg;uchar nhs,nhg,nms,nmg;uchar ms,mg,ds,dg;uchar yq,yb,ys,yg;uchar i_,j_,k_;/*------------------------------------------------mS延时函数,这里使用单片机的晶振为12MHz------------------------------------------------*/void DelayMs(uchar i_){for(j_=i_;j_>0;j_--)for(k_=500;k_>0;k_--)}/*------------------------------------------------判忙函数-----------------------------------------*/bit LCD_Check_Busy(void){DataPort= 0xFF;RS=0;RW=1;EN=0;_nop_();EN=1;return (bit)(DataPort & 0x80);}/*------------------------------------------------写入命令函数------------------------------------------------*/ void LCD_Write_Com(uchar com){RS=0;RW=0;DataPort=com;DelayMs(5);EN=1;DelayMs(5);EN=0;}/*------------------------------------------------写入数据函数------------------------------------------------*/ void LCD_Write_Data(uchar Data){//while(LCD_Check_Busy()); //忙则等待DelayMs(5);RS=1;RW=0;EN=1;DataPort= Data;DelayMs(5);EN=0;}/*------------------------------------------------清屏函数------------------------------------------------*/ void LCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*------------------------------------------------写入字符串函数------------------------------------------------*/ void LCD_Write_String(uchar x,uchar y,uchar *s){if (y == 0){ LCD_Write_Com(0x80 + x); }else{ LCD_Write_Com(0xC0 + x); }while (*s){ LCD_Write_Data( *s); s ++; }}/*------------------------------------------------写入字符函数------------------------------------------------*/void LCD_Write_Char(uchar x,uchar y,uchar Data){if (y == 0){ LCD_Write_Com(0x80 + x); }else{ LCD_Write_Com(0xC0 + x); }LCD_Write_Data( Data);}/*------------------------------------------------初始化函数------------------------------------------------*/void LCD_Init(void){LCD_Write_Com(0x38); /*显示模式设置*/LCD_Write_Com(0x08); /*显示关闭*/LCD_Write_Com(0x01); /*显示清屏*/LCD_Write_Com(0x06); /*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C); /*显示开及光标设置*/}/*------------------------------------------------按键扫描函数,返回扫描键值------------------------------------------------*/ unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法{unsigned char cord_h,cord_l;//行列值中间变量KeyPort=0x0f; //行线输出全为0cord_h=KeyPort&0x0f; //读入列线值if(cord_h!=0x0f) //先检测有无按键按下{DelayMs(10); //去抖if((KeyPort&0x0f)!=0x0f){cord_h=KeyPort&0x0f; //读入列线值KeyPort=cord_h|0xf0; //输出当前列线值cord_l=KeyPort&0xf0; //读入行线值while((KeyPort&0xf0)!=0xf0);//等待松开并输出return(cord_h+cord_l);//键盘最后组合码值}}return(0xff); //返回该值}/*------------------------------------------------ 按键值处理函数,返回扫键值------------------------------------------------*/ unsigned char KeyPro(void){switch(KeyScan()){case 0x7e:return 0;break;//0 暂停键case 0x7d:return 1;break;//1 加case 0x7b:return 2;break;//2 闹钟case 0x77:return 3;break;//3 左移case 0xbe:return 4;break;//4 减case 0xbd:return 5;break;//5case 0xbb:return 6;break;//6case 0xb7:return 7;break;//7case 0xde:return 8;break;//8case 0xdd:return 9;break;//9case 0xdb:return 10;break;//acase 0xd7:return 11;break;//bcase 0xee:return 12;break;//ccase 0xed:return 13;break;//dcase 0xeb:return 14;break;//ecase 0xe7:return 15;break;//fdefault:return 0xff;break;}}/*------------------------------------------------键盘控制时间函数(0键-暂停键,1键-加1键,2键-开闹钟,3键-左移键,4键-减1键)------------------------------------------------*/void jianpan(){key=KeyPro();if(key!=0xff){if(key==0) //关中断,暂停时钟{EA=~EA;}if((EA==0)&&(Al==0)) //若闹钟关且时间暂停,则可以改动时间{if(key==3) // 左移,i为改动标志位,按顺序改动秒分时日月年{if(i<6){i++;}else{i=0;}}else if((key==1)) //加1,根据i增加对应的数值{switch(i){case 0:if(sec<59){sec++;}else{sec=0;};break;case 1:if(minu<59){minu++;}else{minu=0;};break;case 2:if(hour<23){hour++;}else{hour=0;};break;case 3:if(day<31){day++;}else{day=0;};break;case 4:if(mon<12){mon++;}else{mon=0;};break;case 5:year++;break;}}else if((key==4)) //减1,根据i减少对应的数值{switch(i){case 0:if(sec>0){sec--;}else{sec=60;};break;case 1:if(minu>0){minu--;}else{minu=60;};break;case 2:if(hour>0){hour--;}else{hour=23;};break;case 3:if(day>1){day--;}else{day=31;};break;case 4:if(mon>1){mon--;}else{mon=12;};break;case 5:if(year>0)year--;break;}}}if(key==2) //闹钟开关{Al=~Al;}if(Al==1) //闹钟开,显示闹钟,允许设定闹钟if(key==3) //左移,设定标志位{if(j<1){j++;}else{j=0;}}else if(key==1) //加1,根据l增减设定{switch(j){case 0:if(n_hour<24)n_hour++;break;case 1:if(n_minu<60)n_minu++;break;}} else if(key==4)//减1{switch(j){case 0:if(n_hour>0)n_hour--;break;case 1:if(n_minu>0)n_minu--;break;}}}else if(Al==0){LCD_Write_Char(15,0,' ');LCD_Write_String(10,1," ");}}/*------------------------------------------------时间的年月日算法(考虑闰年和非闰年)------------------------------------------------*/ void time() //计时函数{if(sec==60){sec=0;minu++;if(minu==60){minu=0;hour++;if(hour==24){ hour=0;day++;if(year%4==0&&year%100!=0||year%400==0) //闰年{if(day==table1[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}else //非闰年{if(day==table2[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}}}}}/*------------------------------------------------ 定时器中断控制时钟走动------------------------------------------------*/ void time0_to()interrupt 1{TH0=(65536-49872)/256;TL0=(65536-49872)%256;count++;if(count==20) //中断20次为一秒{count=0;sec++;time();}}/*------------------------------------------------时间显示函数------------------------------------------------*/void DISPLAY(){uchar KeyPro();yq=year/1000;yb=(year/100)%10;ys=(year/10)%10;yg=year%10;hs=hour/10; //时分秒HH.MM.SShg=hour%10;mis=minu/10;mig=minu%10;ss=sec/10;sg=sec%10;ms=mon/10; //月日-星期MM.DD.-W mg=mon%10;ds=day/10;dg=day%10;nhs=n_hour/10; //闹钟定时HH.MM.SS nhg=n_hour%10;nms=n_minu/10;nmg=n_minu%10;//年显示LCD_Write_Char(0,0,table[yq]); LCD_Write_Char(1,0,table[yb]); LCD_Write_Char(2,0,table[ys]);LCD_Write_Char(3,0,table[yg]); LCD_Write_Char(4,0,'-');//月显示LCD_Write_Char(5,0,table[ms]); LCD_Write_Char(6,0,table[mg]); LCD_Write_Char(7,0,'-');//日显示LCD_Write_Char(8,0,table[ds]);LCD_Write_Char(9,0,table[dg]);//时显示LCD_Write_Char(1,1,table[hs]);LCD_Write_Char(2,1,table[hg]);LCD_Write_Char(3,1,':');//分显示LCD_Write_Char(4,1,table[mis]);LCD_Write_Char(5,1,table[mig]);LCD_Write_Char(6,1,':');//秒显示LCD_Write_Char(7,1,table[ss]);LCD_Write_Char(8,1,table[sg]);if(Al==1) //闹钟开,显示闹钟,允许设定闹钟{LCD_Write_Char(15,0,'*');LCD_Write_Char(10,1,table[nhs]);LCD_Write_Char(11,1,table[nhg]);LCD_Write_Char(12,1,':');LCD_Write_Char(13,1,table[nms]);LCD_Write_Char(14,1,table[nmg]);}}/*------------------------------------------------主函数------------------------------------------------*/ void main(void){EA=1; //开中断ET0=1;TR0=1;TMOD=0x01;TH0=(65536-45872)/256;TL0=(65536-45872)%256; //定时器赋初值hour=23;minu=59;sec=49; //赋初值:11点59分49秒n_hour=18;n_minu=10; //闹钟赋初值18点10分year=2014;mon=1;day=1; //年月日赋初值LCD_Init();LCD_Write_Com(0x0F); //光标开,光标闪烁开DelayMs(750); //延时0.75秒LCD_Clear();while(1){jianpan(); //扫描键盘DISPLAY(); //显示时间if((Al==1)&&(n_hour==hour)&&(n_minu==minu)){DelayMs(1);BEEP=!BEEP;}//闹钟响}}。

相关文档
最新文档