LCD液晶多功能数字时钟设计

合集下载

C51 LCD(LM044L)多功能可调时钟设计

C51 LCD(LM044L)多功能可调时钟设计

1、LCD(LM044L)多功能可调时钟设计设计思路:利用单片机的定时器定时,产生时钟的时、分、秒,年、月、日,用LCD(LM044L)显示出时间的时、分、秒,年、月、日,并用英文显示“星期几”。

具有百分之一秒,秒,分,跑表功能。

一键开始并记录4组结果。

使用若干个按键调整时间,一个用于选择调整的时间位,一个用于调整时间。

也可以使用多个键,用于调整各自的时间位。

首先在proteus上绘制电路,编程模拟运行实现。

运行效果代码#include<reg51.h> //包含单片机寄存器的头文件#include<stdlib.h> //包含随机函数rand()的定义文件#include<intrins.h> //包含_nop_()函数定义的头文件sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚unsigned char code table[]="2011-12-01"; //初始化液晶显示10 unsigned char code table1[]=" 12:00:55"; //12 unsigned char code table2[]="week 3 00:00:00"; //15 unsigned char code table3[]="00:00:00 00:00:00 00:00:00 00:00:00"; unsigned char count,s1num,s5num;char second,minute,hour,day,month,year,week;char ms,sec,minu;sbit s1=P1^0; //功能键sbit s2=P1^1; //加键sbit s3=P1^2; //减键sbit s4=P1^3; //保存并退出sbit s5=P1^4; //秒表void delay1ms() //计算延迟1ms{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。

LCD显示电子时钟设计

LCD显示电子时钟设计

LCD显示电子时钟设计LCD显示电子时钟是一种以液晶显示技术为基础的电子时钟设计。

液晶显示器(Liquid Crystal Display,简称LCD)是指通过操控液晶分子的取向和透光性来显示图像的显示器,具有薄、轻、便携、低功耗、对环境光适应性强等特点,因此被广泛应用于各种电子设备中。

设计一个LCD显示电子时钟的目的是为了制作一个精确显示时间的时钟装置,并且通过液晶显示器来实时显示时间。

具体的设计思路如下:1.显示屏设计:选择一款适用的液晶显示屏,通过与微控制器连接来实时显示时间。

可以选择有背光功能的液晶显示屏,以便在光线较暗的环境中也可以清晰显示。

2.微控制器选择:选择一款适用的微控制器,来控制液晶显示器的驱动和时间的计算。

常用的微控制器有PIC、AVR等,可以根据需求选择性能和功能适配的型号。

3.时钟电路设计:通过时钟电路提供准确的时间信号,并连接到微控制器中,用于计时和更新时间。

时钟电路可以通过晶振或者RTC(实时时钟芯片)实现。

4.按键输入设计:设计一组按键接口,用于调整和设置时间。

通过按键,可以实现时间的调整、闹钟设置、12/24小时制切换等功能。

5.动态电源设计:由于时钟是一个长时间运行的装置,因此需要设计一个适合的动态电源电路,以保证电源的稳定和可靠性。

可以选择使用电池供电,以应对停电等特殊情况。

6.温度补偿设计:由于液晶显示器的性能受环境温度的影响较大,可以采用温度传感器来感知环境温度,并通过微控制器对温度进行补偿,以提高LCD显示器的准确性。

7.其他功能设计:根据实际需求,可以增加其他功能模块,如闹钟、报时、温湿度检测、闪烁灯效果等。

总结起来,设计一个LCD显示电子时钟需要考虑液晶显示屏、微控制器、时钟电路、按键输入、动态电源、温度补偿等方面的因素。

通过合理的设计和电路连接,可以实现一个功能齐全、精确显示时间的电子时钟。

液晶 lcd电子钟设计论文_本科论文

液晶 lcd电子钟设计论文_本科论文

液晶LCD电子钟设计姓名:余兴强、林贞涛、林环宇专业:光电子专业技术与科学辅导教师:张育钊、刘伟、陈邦完成日期:2013 年8 月 2 日目录引言、..................................................... .. (4)一、方案设计及方案论证1.时钟温度的总体设计思路 (5)2.时钟温度系统方案论证 (5)1)时钟系统方案选择 (5)2)单片机的选择 (5)3)显示系统的方案比较 (5)4)闹铃系统的方案比较 (6)5)温度系统方案选择 (6)6)键盘控制方案选择 (6)7)呼吸灯系统方案选择 (7)3.时钟温度系统总体设计 (7)二.硬件设计部分1.单片机最小系统电路设计 (7)1)单片机芯片选择 (7)2)单片机管脚说明 (8)3)单片机最小系统 (10)2.时钟系统电路设计 (11)3.温度系统电路 (11)1)温度芯片的选择 (11)2)DS18B20内部结构描述 (11)3)DS18B20温度系统电路 (12)4.键盘控制系统设计 (13)5.闹钟电路系统设计 (13)6.液晶显示系统设计 (13)1)1602液晶显示简介 (13)2)1602引脚说明 (14)3)1602液晶显示特性 (14)4)12864F液晶显示电路 (15)7.总体硬件系统设计 (15)三.软件设计部分1.主程序 (16)2.液晶程序 (16)3.时钟数据处理程序 (17)4.DS18B20温度数据处理程序 (17)5.键盘控制程序 (17)6.液晶显示程序 (17)7.其他程序 (18)8.程序中的注意点 (18)四.软硬件调试部分1.软件调试 (18)2.硬件调试 (19)五.总结与体会 (19)参考文献 (20)附件: (20)LCD液晶时钟设计原理电路图 (20)另外再附上我们的PCB图 (21)六.LCD液晶时钟设计部分参考程序 (21)[摘要]我们设计的LCD时钟温度系统是由中央控制器、温度检测器、时钟系统、闹铃设定系统、显示器以及键盘部分组成。

数字钟的设计 (2)

数字钟的设计 (2)

数字钟的设计
数字钟的设计可以包括以下要素:
1. 数字显示器:数字钟需要一个数字显示器来显示当前的
时间。

可以采用LED或LCD显示器,显示数字0-9等基本数字以及冒号等特殊符号。

2. 时间设置按钮:数字钟需要一个或多个按钮来设置时间。

用户可以通过按下按钮来调整小时、分钟和秒等时间设置。

3. 电路板:数字钟需要一个电路板来控制时间的计数和显示。

电路板上包含微控制器或集成电路芯片,负责处理输
入和输出信号,控制时间的计数和显示。

4. 电源:数字钟需要一个电源来供电。

可以使用电池或直
接接入电源插座。

5. 外壳:数字钟需要一个外壳来保护内部组件,同时也可以起到美观的作用。

外壳材料可以选择塑料、金属或木材等。

6. 时钟机芯:数字钟需要一个时钟机芯,用于稳定时间的计数和显示。

时钟机芯可以是石英机芯、机械机芯或电子机芯等。

7. 其他功能:数字钟还可以添加其他功能,如闹钟、温度显示、日历等。

这些功能可以通过额外的按钮和显示屏来实现。

需要根据实际需求和预算来选择设计数字钟的具体要素和组件。

同时,还需要考虑数字钟的易用性、耐用性和美观性等因素。

设计完成后,还需要进行测试和调整,确保数字钟的正常工作。

基于单片机的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显示模块是否能正确显示时间信息。

液晶显示课程设计 数字电子钟显示屏

液晶显示课程设计   数字电子钟显示屏

目录1 课程设计目的 (2)2 课程设计题目描述和要求 (2)3 课程设计报告内容 (2)3.1设计方案的论证 (2)3.2 外观图的设计 (3)3.2 COM、SEG层电极逻辑走线 (4)3.3 COM、SEG层电极图案 (6)3.4 单粒图的设计 (8)3.5菲林版的设计 (10)4 结论 (16)题目:TN-LCD显示屏设计——数字电子钟显示屏设计1 课程设计目的液晶显示器课程设计的目的在于通过对液晶显示器外观图、单粒图和掩模版的设计,掌握液晶显示器设计的基本方法,加深对液晶显示器设计基础理论和基本知识的理解,为今后从事该类型显示器的设计和生产打下良好的基础。

2 课程设计题目描述和要求TN-LCD显示屏设计TN-LCD屏适合各种小屏幕的场合,如计算器,手表等笔段比较少的场合。

本设计通过TN-LCD外观图、单粒图和掩模版的设计,掌握TN-LCD设计的基本方法,为今后从事该类型显示器的设计和生产打下良好的基础。

设计内容包括TN-LCD液晶盒外观图、真值表、逻辑走线、COM、SEG 层电极图案、PI涂覆、封框、银点以及所对映的5张菲林版等。

3 课程设计报告内容3.1设计方案的论证我此次所设计的液晶显示屏是一个多功能数字电子钟,它应用场合、应用人群都很广泛可以显示全天的时间不管是十二小时计时法还是二十四小时计时法都可以完整的显示,除了显示时间88:88外还可以显示上午(AM)下午(PM),显示理想效果如下图示:图3.1-13.2 外观图的设计1.LCD外形的长56mm,宽为30mm;2.LCD大片长为56mm,宽为30mm;3.LCD小片的长为多少56mm,宽为26mm;4.LCD大片在下,小片在上;5.LCD可视区长为49mm,宽为多少22mm;6.可视区距小片玻璃左边缘距离3.5 mm;可视区距小片玻璃下边缘距离4mm;7.引线的电极共有19个;8.引线电极的长为3.8mm,宽为1.7mm;9.引线电极间隙为0.85mm;10.引线电极(第一根)据玻璃边缘的距离为5.05 mm;11.封口位于玻璃左边中央部位,其长为10 mm,宽为1.0 mm;12.偏光片的外形尺寸在小玻璃的基础之上向内偏移了0.5 mm,偏光片厚度0.3 mm;13.LCD玻璃的厚度为为0.7 mm;具体液晶盒尺寸和外观如下图3.2-1示:图3.2-13.2 COM、SEG层电极逻辑走线液晶显示常用的驱动方式有静态驱动和动态驱动两种方式,为控制驱动所需电极的数量,本设计采用动态驱动法,即驱动时分别对不同的Com电极和Seg 电极进行组合加电,控制点亮各笔段。

lcd液晶显示简易电子钟课程设计

lcd液晶显示简易电子钟课程设计

单片机原理及应用课程设计安排一、课程设计的要求:要求每组学生选择一题,并根据要求完成题目中的实物制作,调试通过,同时完成课程设计报告一份。

(规定:每2人一组,每人一份报告)。

适用班级:电信071、电信072、电信073三个班,以班为单位进行课程设计。

费用:费用每组同学自理。

二、可选题目:(每组任选一题,制作过程不可相互复制)(1)数字电压表的设计输入电压为0-10V的电压范围,利用单片机对该电压进行测量并显示,显示可用数码管或液晶显示,要求:测量精度到0.1V,其它功能自定义。

(2)正弦波发生器的设计利用单片机产生正弦波,用示波器能观测到正弦波的波形,要求:显示正弦波的频率,通过按键可以修改正弦波的频率增减,其它功能自定义。

数字频率计的设计利用单片机对输入频率10Hz-5KHz的标准方波信号的频率进行测量与现实,要求显示频率值,精度要求0.1Hz,其它功能自定义。

(3)题目自定义,利用单片机做控制器制作实物一个。

三、课程设计考核办法课程设计结束时,要求学生交课程设计报告打印稿,课程设计报告电子稿、单片机的程序。

课程设计成绩分三部分,各部分的依据和量化如下:实物制作完成调试情况50%设计报告内容50%四、课程设计报告参考目录0、前言单片机的应用介绍1、课程设计的目的和要求2、总体设计3、硬件设计介绍本系统所选用的各种芯片的功能、引脚、相应的命令控制字格式等,绘出硬件接线图。

4、软件设计介绍本系统的主程序、子程序和中断服务程序的框图及程序清单(带有注释)。

5、结束语简述课程设计的收获、体会以及对本教学环节的意见和建议。

6、参考文献五、课程设计报告格式要求1、纸张大小:A4单面打印。

2、标题:小三号宋体,居中,加粗,段前0.5行,段后0.5行。

3、正文:小四号宋体,行距:多倍行距1.25。

4、图表名称:五号黑体,居中。

六、注意事项(1)每组2人,每组在制作前估算一下费用,一般不要超过40-50元/组。

LCD显示电子时钟设计

LCD显示电子时钟设计

LCD显示电子时钟设计本文将设计一个LCD显示电子时钟,下面以逐步说明的方式来介绍。

一、硬件设计1.首先,选择合适的LCD模块,它应该具备合适的尺寸、分辨率和显示效果。

一般为了方便接口,选用I2C或SPI通信接口的LCD。

2.在时钟电路部分,使用一个准确的时钟源,如基于晶体振荡器的时钟模块。

这可以确保时钟的精度和稳定性。

3.添加控制模块,可以使用微控制器或FPGA来完成,控制模块需要完成以下任务:a.读取时钟源的时间。

b.将时间转换为合适的格式,并存储在内存中。

c.根据时钟源的稳定脉冲,更新内存中的时间值。

d.将内存中的时间值从内存传输到LCD模块。

4.添加LCD显示模块的驱动电路,将控制模块输出的信号转换为合适的电平和协议,驱动LCD进行显示。

5.添加电源模块,为整个电子时钟提供合适的电源电压。

二、软件设计1.编写时钟控制程序,该程序将根据时钟源的脉冲信号来更新内存中的时间值。

2.编写LCD显示程序,该程序将根据内存中存储的时间值来更新LCD显示。

3.设计设置模块,该模块允许用户通过按键或旋钮来设置时间、日期以及其他参数。

4.设计闹钟模块,该模块可以设定闹钟的时间,并在闹钟时间到达时触发警报。

5.设计温度和湿度显示模块,该模块可以通过传感器读取温度和湿度,并在LCD上显示。

三、用户界面设计1.显示时间的区域,该区域显示时、分和秒的数字,可以采用大而清晰的字体。

2.添加日期的显示区域,该区域显示日期、星期几和月份。

3.设计闹钟设置界面,用户可以通过按键或旋钮来设置闹钟时间。

4.添加温度和湿度的显示区域,该区域显示当前的温度和湿度值。

5.考虑设计一个简洁且易于操作的用户界面,以提高用户体验。

四、其他功能1.添加背光控制功能,使LCD在黑暗环境中可以清晰可见。

2.设计电池备份电路,以在断电时保存时间和设置。

3.考虑设计一个自动亮度调节功能,根据环境亮度调整LCD背光亮度。

4.添加音效功能,例如在闹钟响起时发出提示声音。

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

武汉纺织大学课程设计报告学院:电子信息工程学院班级:电信XX 姓名:XXX 学号:20100722 指导老师:XXXLCD 液晶多功能数字时钟设计一. 设计要求设计制作基于LCD 液晶显示屏的,可以调整的时钟系统。

1.基本要求(1)采用1602液晶屏显示显示时间。

(2)时间可以显示为:时分秒。

(3)时钟可以通过按键进行调节校正。

2.发挥部分(1)选用12864液晶屏显示日期和时钟。

(2)当系统断电后,时钟仍然可以保持。

(3)可以设置至少两个闹铃;设置温度上下限,超限可以报警。

二.原理框图三.电路图设计四.主要元件选择及参数设计(1)单片机STC89S52STC89S52是比较常用的52系列单片机。

它的工作电压是+5v。

外围电路加上12M的晶振,使其正常工作。

P2口控制DAC0832。

通过对P2口赋值来改变输出增益的大小。

(2)1602液晶1602显示容量为16乘2个字符。

工作电压为+5v 。

(3)按键控制P1.3P1.4P1.5五.软件编程按照电路图的设计焊接好硬件电路。

就开始软件编程。

程序主要分为两个部分,即液晶显示部分和控制按键的部分。

由于本设计采用的是用按键分别控制。

可以在主函数中调用一个键盘扫描的函数,当相应的不同按键按下后控制液晶显示和单片机P2的输出,从而控制液晶的显示。

源程序见附录。

本数字时钟共使用了三个按键。

第一个按键用于选择所要调节的内容(如年、月、日、时、分、秒),按下不同次数光标分别在要调节的对应位置闪烁;第二个按键用于所调节的量的增加,按下一次增加一个单位;第三个按键用于所调节量的减少,按一下增加一个单位。

该数字时钟实现的功能是液晶正常显示时分秒,年月日和星期。

不仅可以用按键调节时分秒,还可以调节年月日,并且要保证星期和年月日相对应。

在这里需要指出的是由于条件限制(除非有时钟芯片实现万年历),不可能保证星期与年月日正确对应),故采程序中用天数对7取余数,余1时为星期一(MON),余2时为星期二(TUE),依此类推,余0时为星期天(SUN),当天数到每月最后一天时继续上加不回归到1,这样可以保证星期是正确的。

具体见程序中注释。

编程思路是,在确定了时钟要实现的功能后按照上述各按键所实现的效果编写程序。

本程序包含液晶写指令函数(write_com())、写数据函数(write_data())、初始化函数(init())、写入时分秒函数(write_sfm())、写入月和日函数(write_nyr())【别指出,由于年包含四位数字其写法与月和日不同,故单独设置一个写入年函数】、写入星期函数(write_xq())和键盘扫描函数,这些程序围绕主函数互相嵌套调用。

六.调试部分本次实验的调试部分花了大量的时间。

当程序写好编译通过后,下载到单片机中,调试硬件看有无显示和输出。

调试主要分为2个部分。

分别是液晶显示部分,按键控制部分。

首先是液晶部分,经过几次程序的修改,和对液晶部分电路的检测终于将液晶部分调出有显示。

然后检查按键部分。

首先检查按键的焊接确定无误后,进行按键控制,结果显示良好。

七.实验心得体会与总结本次实验总共做了两大方面的任务,编程和调试。

在编程过程中必须牢牢把握数字时钟所要实现的功能,在确定方案的情况下理清思路,认真思考如何实现时钟的各种功能。

通过编程我认识到一个合格的单片机编程人员必须有清晰的思路,要有全身心投入的工作精神。

编写这个程序我花费了将近一天的时间,耗费了不少精力。

起初毫无头绪,通过观摩哈尔滨工程大学郭天祥老师的单片机课程视频我学会了不少编程的技巧,如怎样使用液晶,怎样将年月日等字符转换成液晶能显示的字符,还有就是掌握了定义一个标志变量去对应按键按下的次数,根据按键次数即变量值去实现不同的功能等等。

我在编程过程中使用的是自己购买的单片机开发板,其液晶的用法(主要是RS、RW,E这些端口的时序),按键与单片机的接口等与我们自己焊接的单片机最小系统大有不同,程序在开发板上调制成功还要能在我们的单片机最小系统上工作,这也需要不断地调试。

在调试过程中我们发现了一些问题,一是液晶上在年月日后面空白处出现了乱码,原因是在初始化函数中显示年月日的时候for语句多执行了3次;二是光标在按键过快时出现在错误位置,原因是在第一个键按下七次(此时,时钟开始走)时没有把光标重新定位;三是第一个按键不太灵敏,原因是按键在消抖的时候延时过长。

通过此次单片机课程设计我掌握了1602液晶的用法,也学到了很多编程技巧,然而我要想学好用好单片机还有很长的路要走。

//由于每个月日期被规定为31天,到第32天时日期变为01,星期偏差很大,本程序采用天数对7取余数,//天数到每月最后一天后继续上加不归1,减少星期误差#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit RS = P1^0;sbit RW = P1^1;sbit E = P1^2;sbit s1=P1^3;sbit s2=P1^4;sbit s3=P1^5;sbit s4=P1^6;uchar code table[]=" 2010-12-31 FRI";uchar code table1[]=" 23:59:50";uchar num,count,shi=23,fen=59,miao=50;uchar yue=12,ri=31;uint nian=2010;uchar s1num,s2num,xq;void delay(uchar z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){// delay(5);//E=0;RS=0;RW=0;P0=com;delay(5);//_nop_();E=0;delay(5);E=1;}void write_data(uchar date){//delay(5);RS=1;// E=0;RW=0;P0=date;//_nop_();delay(5);E=0;delay(5);E=1;// RS=0;}void init(){delay(15);write_com(0x38); //display modewrite_com(0x08); //display modewrite_com(0x01); //display modewrite_com(0x06); //显示光标移动位置write_com(0x0c); //显示开及光标设置write_com(0x01); //显示清屏write_com(0x80);write_com(0x02);for(num=0;num<15;num++){write_data(table[num]);delay(20);}write_com(0x80+0x41);for(num=0;num<11;num++){write_data(table1[num]);delay(20);}TMOD=0x01;EA=1;ET0=1;TR0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;}void write_sfm(uchar add,uchar date)//写入时分秒{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);//地址指向第二行,在第二行写write_data(0x30+shi);//write_data(0x30+ge);}void write_nyr(uchar add,uchar date)//只写入月和日(月和日均只有十位和个位,写法相同){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}void write_nian(uchar add,uint year)//写入年{uint qian,bai,shi,ge;qian=year/1000;// 2413/1000=2(得到千位)bai=(year%1000)/100;//(2413%1000)=413 413/100=4 (得到百位)shi=((year%1000)%100)/10;// 413%100=13 13/10=1(得到十位)ge=(((year%1000)%100))%10;write_com(0x80+add);//13%10=3 (得到个位)write_data(0x30+qian);write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);}void write_xq1(uchar add)//星期一{write_com(0x80+add);//////////////////////////////write_data(0x40+0x0d);///查询液晶的字符手册可知MON(星期一)write_data(0x40+0x0f);///这三个英文字符对应的二进制码write_data(0x40+0x0e);///}void write_xq2(uchar add)//星期二{write_com(0x80+add);write_data(0x54);write_data(0x55);write_data(0x45);}void write_xq3(uchar add)//星期三{write_com(0x80+add);write_data(0x50+4);write_data(0x40+8);write_data(0x50+5);}void write_xq4(uchar add)//星期四{write_com(0x80+add);write_data(0x57);write_data(0x45);write_data(0x4e);}void write_xq5(uchar add)//星期五{write_com(0x80+add);write_data(0x46);write_data(0x52);write_data(0x49);}void write_xq6(uchar add)//星期六{write_com(0x80+add);write_data(0x53);write_data(0x41);write_data(0x54);}void write_xq7(uchar add)//星期日{write_com(0x80+add);write_data(0x53);write_data(0x55);write_data(0x4e);}void keyscan()//按键控制函数{if(s1==0)//按键1{delay(5);//按下消抖if(s1==0){s1num++;//s1num1是按键1的标志变量,表示按键1按下的次数while(!s1);//按键弹起时消抖if(s1num==1){TR0=0;//时间停止走write_com(0x80+0x40+11);////按键1按下时write_com(0x0f);///////////光标在秒个位闪烁,调秒}}if(s1num==2){write_com(0x80+0x40+8);//按键1按下第二次,光标在分个位闪烁,调分}if(s1num==3){write_com(0x80+0x40+5);//按键1按下第三次,光标在时位闪烁,调时}if(s1num==4){write_com(0x80+4);//按键1按下第四次,光标在年位闪烁,调年}if(s1num==5){write_com(0x80+7);//按键1按下第五次,光标在月个位闪烁,调月}if(s1num==6){write_com(0x80+10);//按键1按下第六次,光标在日个位闪烁,调日}if(s1num==7){s1num=0;write_com(0x0c); //光标按下第七次,光标回到秒个位,write_com(0x80+11);///同时停止闪烁,定时器开,TR0=1;////////////////时间开始走.}}if(s1num!=0)//按键按下执行以下操作{if(s2==0)//按键2的作用为按下时使想要调整的时分秒,年月日等数值增加{delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);//刷新屏幕,将新的秒的值显示出来,其中秒的位置为0X80+0X40+10,从此位置开始写新的秒值write_com(0x80+0x40+11);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);//刷新屏幕,将新的分的值显示出来,其中分的位置为0X80+0X40+7,从此位置开始写新的分值write_com(0x80+0x40+8);}if(s1num==3){shi++;if(shi==24){shi=0;ri++;write_nyr(9,ri);write_sfm(4,shi);//刷新屏幕,将新的时的值显示出来,其中时的位置为0X80+0X40+4,从此位置开始写新的时值,write_com(0x80+7);}write_sfm(4,shi);write_com(0x80+0x40+5);}if(s1num==4){nian++;write_nian(1,nian);//刷新屏幕,将新的年的值显示出来,其中年的位置为0X80+1,从此位置开始写新的年值write_com(0x80+4);}if(s1num==5){yue++;if(yue==13)yue=1;write_nyr(6,yue);//刷新屏幕,将新的月的值显示出来,其中月的位置为0X80+6,从此位置开始写新的月值write_com(0x80+7);}if(s1num==6){ri++;xq++;if(ri==31)ri=1;write_nyr(9,ri);//刷新屏幕,将新的日的值显示出来,其中日的位置为0X80+9,从此位置开始写新的日值write_com(0x80+10);if(xq%7==0)write_xq1(12);if(xq%7==1)write_xq2(12);if(xq%7==2)write_xq3(12);if(xq%7==3)write_xq4(12);if(xq%7==4)write_xq5(12);if(xq%7==5)write_xq6(12);if(xq%7==6)write_xq7(12);write_com(0x80+10);}}}if(s3==0)//按键3的作用是按下时使想要调整的时分秒,年月日等数值减少{delay(1);if(s3==0){while(!s3);if(s1num==1){miao--;if(miao==-1){miao=59;}write_sfm(10,miao);write_com(0x80+0x40+11);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+8);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+5);}if(s1num==4){nian--;write_nian(1,nian);write_com(0x80+4);}if(s1num==5){yue--;if(yue==0)yue=12;write_nyr(6,yue);write_com(0x80+7);}if(s1num==6){ri--;xq--;if(ri==0)ri=30;write_nyr(9,ri);write_com(0x80+10);if(xq%7==0)write_xq1(12);if(xq%7==1)write_xq2(12);if(xq%7==2)write_xq3(12);if(xq%7==3)write_xq4(12);if(xq%7==4)write_xq5(12);if(xq%7==5)write_xq6(12);if(xq%7==6)write_xq7(12);write_com(0x80+10);}}}}}void main(){init();while(1){keyscan();if(count==20)//定时器计满值进入中断20次,时长20*50000=1秒{count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;ri++;xq++;if(ri==31){ri=1;yue++;if(yue==13){yue=1;nian++;write_nian(1,nian);write_com(0x80+1);}write_nyr(6,yue);write_com(0x80+6);}write_nyr(9,ri);write_com(0x80+9);if(xq%7==0)write_xq1(12);if(xq%7==1)write_xq2(12);if(xq%7==2)write_xq3(12);if(xq%7==3)write_xq4(12);if(xq%7==4)write_xq5(12);if(xq%7==5)write_xq6(12);if(xq%7==6)write_xq7(12);}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}。

相关文档
最新文档