单片机LCD电子时钟课程设计报告
LCD时钟设计单片机原理课程设计报告

一、设计任务要求分析本设计要实现的功能是:实时显示当前的时钟,并且可以设定闹铃和调整时间,以蜂鸣器鸣响5秒的方式作为闹铃。
二、设计总体方案及其方案论证按照系统的设计功能所要求的,液晶显示电子时钟原理图如图所示。
单片机显示电路键盘电路复位电路晶振电路液晶显示电子时钟原理图本系统以AT89C51单片机为核心,该单片机可把数据进行处理,从而把数据传输到显示模块LCD1602液晶显示器,实现时间及日期的显示。
以LCD 液晶显示器为显示模块,把单片机传来的数据显示出来,并且显示多样化,还可以对时间和日期进行设置,主要靠按键来实现。
三、硬件设计及描述 1、整体结构图①开关部分开关实现校正时间,定闹钟左一开关实现校时左二左三开关实现加减右一开关实现闹钟定时通过控制键来控制所要调节的是时、分、还是秒。
在控制键按下后LCD中会在相应的位置出现光标,这时在通过加数键或减数键来控制时分秒的加或减。
在调闹钟键按下后LCD中也会在相应的位置出现光标,这时也通过加数键或减数键来设置闹钟。
②液晶显示屏③蜂鸣器当单片机的P1^5接口输出为高电平时,蜂鸣器响,当输出为低电平时,蜂鸣器停止。
④复位电路开关为复位键⑤晶振电路选取原则:电容选取22pF,晶振为12MHz。
2、LCD1602简介LCD1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用,正因为如此,所以他不能显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
单片机_电子时钟(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)按键设计系统采用独立式按键,共设计了四个按键,分别是“当前时间”、“分钟+”、“小时+”,用来设置校时功能,这样可以使电路更简单。
(2023)单片机电子时钟课程设计报告2(一)

(2023)单片机电子时钟课程设计报告2(一)(2023)单片机电子时钟课程设计报告2项目简介本项目是一款基于单片机的电子时钟,具有时间显示、闹钟、定时等功能。
主要硬件为STC89C52单片机和LCD12864液晶显示屏。
硬件设计•CPU:STC89C52单片机•显示屏:LCD12864液晶显示屏•晶振:11.0592MHZ•动态RAM:24C02 EEPROM•按键:4个,分别为模式切换、时间调整、闹钟调整、确定键•电源:220V AC/9V DC电源适配器软件设计主要功能模块•时间显示:采用DS1302时钟芯片定时,单片机通过SPI通讯读取当前时间,并在液晶屏上显示。
•闹钟:通过按键调整,设置闹钟时间,并在设定时间响铃。
•定时:通过按键调整,设置定时时间,在设定时间完成特定操作(如开关灯、控制电器等)。
软件工具•Keil uVision5:C语言编程软件•Proteus 8:电路仿真软件实现效果经过测试,本项目能够准确地显示时间,并能够响应用户的设定,完成指定的功能要求。
同时,通过调整代码和电路连接方式,还可以实现更多功能的扩展,如调整亮度、自定义显示内容等。
总结本项目完成了基于单片机的电子时钟设计,实现了时间显示、闹钟、定时等功能,并且实现效果稳定可靠。
在项目中,我们不仅掌握了单片机的基本原理和编程技能,还提高了对电路设计和仿真的操作能力,是一次非常有益的学习和实践。
改进方向在项目完善过程中,可以考虑以下方向进行改进:•加入天气显示功能,通过网络或传感器获取当地天气信息,与时间一起显示。
•优化UI界面,考虑加入图像、背光等元素,提升用户体验。
•采用更高性能的单片机,提升系统稳定性和响应速度。
总体评价本项目难度适中,能够较全面地考察学生在单片机原理、编程能力和电路设计等方面的知识掌握程度,是一次有益的实践。
同时,项目具有一定的功能性和实用性,能够满足用户的基本需求。
因此,本项目是一次成功的课程设计。
单片机电子时钟(LCD显示)综合实验报告

单片机综合实验报告题目:电子时钟(LCD)显示一、实验内容:以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—确认完成设置。
如图:三、实验程序流程图:主程序:时钟主程序流程子程序:四、实验结果分析实验结果及分析:单片机的晶振可以根据要求设定。
6MHZ为和现实时间显示相同。
实验采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。
当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这里为了更明显观察显示数据变化把起始值设为23:59:50 运行后显示,K1为进入现在设置时间,当按下K1后显示,和实验要求相比较,实现了按下K1进入现在时间设置,按下K4确认完成时间设置的功能;不同之处: 当进入时间设置时在按下K1设置小时,再次按下K1是设置分钟。
增加功能:进入时间设置并选择设置位置后K2键位数字增加功能,K3键为数字减小功能。
根据仿真结果能够确定编程正确,基本实现了所有功能,而且有所改进。
单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
基于单片机的电子时钟设计报告(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显示器上显示出来。
单片机电子时钟课程设计报告

单片机电子时钟课程设计报告一、设计目的。
本课程设计旨在通过单片机技术的应用,设计并制作一个简单的电子时钟。
通过这一设计,学生将能够掌握单片机的基本原理和应用,培养学生的动手能力和创新意识,提高学生的实际操作能力。
二、设计原理。
本电子时钟采用单片机作为控制核心,通过晶振产生的时钟信号来实现时间的计时和显示。
利用数码管来显示小时和分钟,通过按键来调整时间。
同时,通过蜂鸣器发出报时信号,实现基本的闹钟功能。
三、设计方案。
1. 硬件设计。
(1)单片机选择,本设计选用常见的51单片机作为控制核心,具有成本低、易于编程的特点。
(2)时钟电路,采用晶振作为时钟信号源,通过单片机的定时器来实现时间的计时。
(3)显示模块,采用数码管来显示小时和分钟,通过数码管的扫描显示来实现时间的动态显示。
(4)按键输入,设计按键来调整时间,包括调整小时和分钟。
(5)报时功能,通过蜂鸣器来实现基本的报时功能,可以设置闹钟时间。
2. 软件设计。
(1)时钟控制,通过单片机的定时器来实现时间的计时和更新。
(2)显示控制,设计数码管的扫描显示程序,实现时间的动态显示。
(3)按键处理,设计按键扫描程序,实现对时间的调整。
(4)报时功能,设计蜂鸣器的报时程序,实现基本的闹钟功能。
四、设计实现。
1. 硬件实现。
根据上述设计方案,完成了电子时钟的硬件连接和布线,保证各个模块之间的正常通讯和工作。
2. 软件实现。
编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。
五、实验结果。
经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。
六、总结与展望。
通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。
在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。
同时,也为学生今后的科研和创新工作奠定了良好的基础。
51单片机电子时钟设计报告

电子时钟实验报告全部代码在文档末尾:51 单片机,LCD1602 液晶显示屏平台下编程实现,可直接编译运行目录:一,实验目的. (1)二,实验要求. (2)三,实验基本原理. (2)四,实验设计分析. (2)五,实验要现. (3)A.电路设计 (3)1.整体设计 (3)2.分块设计 (4)输入部分 (4)输出部分 (5)晶振与复位电路 (6)B.程序设计 (6)程序总体设计 (6)程序主要模块 (7)五. 实验总结及感想 (7)一,实验目的20 世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。
对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以电子钟是以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,得到了广泛的使用。
1.学习8051定时器时间计时处理、按键扫描及LCD液晶显示的设计方法。
2.设计任务及要求利用实验平台上LCD1602液晶显示屏,设计带有闹铃功能的数字时钟二,实验要求A.基本要求:1.在LCD1602液晶显示屏上显示当前日期,时间。
2.利用按键可对时间及闹玲进行设置,并可显示设置闹玲的时间。
闹玲时间到蜂鸣器发出声响,一分钟后闹铃停止。
B.扩展部分:1.日历功能(能对年,月,日,星期进行显示,分辨平年,闰年以及各月天数,并调整)实现年月日时分秒的调整,星期准确的随着日期改变而改变进行显示。
2.定时功能(设定一段时间长度,定时到后,闹铃提示)C.可扩展部分:1.闹铃重响功能(闹铃被停止后,以停止时刻开始,一段时间后闹铃重响,且重响时间的间隔可调)2.可进行备忘录提示,按照年月日,可在设定的某年某月进行闹铃提示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宁德师范学院单片机课程设计报告专业电气工程及其自动化学生姓名钱泳舟学号 B**********题目 LCD电子时钟指导教师袁秋凤2015年12月8日1 方案设计与论证1.1 主控制器模块方案1采用STC89C52芯片作为硬件核心。
STC89C52内部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,与MCS-51系列单片机完全兼容,STC89C52可以通过串口下载。
方案2采用AT89S52芯片作为硬件核心。
AT89S52片内具有8K字节程序存储空间,256字节的数据存储空间没有EEPROM存储空间,也与MCS-51系列单片机完全兼容,具有在线编程可擦除技术。
两种单片机都完全能够满足设计需要,STC89C52相对ATS89C52价格便宜,且抗干扰能力强。
考虑到成本因素,因此选用STC89C52。
1.2 显示模块方案1用LED数码管进行显示。
数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。
方案 2采用LCD的方法,具有硬件制作简单可直接与单片机接口,显示内容多,功耗小,成本低等优点,LCD1602可显示32个字符,采用LCD的缺点是亮度不够。
比较以上两种方案:方案1硬件简单、功耗小;方案2硬件简单,显示内容多,功耗小,成本低等。
本系统设计要求达到功耗小、体积小、成本低,显示信息多等要求,权衡两种方案,选择方案2。
2 硬件电路设计2.1原理框图2.2 单片机最小系统电路主控制器最小系统仿真电路如下图1所示。
主要由STC89C52单片机、内部时钟电路和按键手动复位电路构成。
图1 最小系统仿真电路图2.2.1 复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用上电复位方式。
如图2所示:图2 复位电路图2.2.2 晶振电路晶振可以选用频率为12MHz的晶振,晶振两端接单片机XTA1、XTA2引脚。
如图3所示图3 晶振电路图2.3 LCD液晶屏显示电路显示电路采用LCD液晶显示器,采用动态扫描显示方式。
单片机的P0端口作为段选线,P2.0~P2.3作为位选线。
显示仿真电路如图所示,实际电路制作时采用PNP三极管9012来驱动4位数码管,驱动电路如图4所示,9012的基极接单片机的P2.5~P2.7引脚,集电极接数码管的COM引脚。
图4 LCD显示电路图2.4 按键电路图5 按键电路图K1设置时钟(按键1次设置秒,2次设置分,3次设置时。
),K2增加一(设置中对所选择变量加一),K3减少一(设置中对所选择变量减一),K4 复位(时分秒归零)。
3 软件设计3.1 主程序主程序包括键盘识别控制及液晶屏显示2个子程序,实现时钟的显示,调节功能。
初始化子程序包括1602液晶显示模式和定时器初值。
利用定时器0来控制时间,实现分钟,小时的计算。
开始初始化子程序3.2 子程序3.2.1 按键子程序键(K3).Y Y3.2.2 显示子程序显示子程序通过取商取余的方法将日期、时间分离,然后通过“写命令”、“写数据”两条指令程序将分离后的日期、时间送入1602进行显示,程序框图如图3-3所示。
4 安装与调试4.1 电路安装步骤(1)检查元件的好坏按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测,一定要仔细认真。
而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。
(2)放置、焊接各元件按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。
特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s ,注意芯片的安装方向。
4.2 系统调试(1)在Keil 软件中编写并调试程序,修改语法错误,最终生成.hex 目标程序。
(2)利用Proteus 软件绘制电路图,在确保电路连接正确无误的情况下,载入目标程序,仿真开始3秒后查看结果,如图所示。
图 3秒系统仿真效果5 性能测试与结果分析使用STC-ISP 软件输入目标程序,观察实物运行效果,可以通过按动按键来调整时间,按下K1(选择“秒”位)再按下K2 (加)4次,再次按下K1(选择“分”位)后按下K3 (减)3次,再按K1(选择“时”位)再按下K3(减)2次结果如下图所示。
该电子时钟设计方案正确、可行,各项指标稳定、可靠。
6 心得体会在这个两个星期的时间里我学到了很多宝贵的知识和单片编程的经验,在这次课程设计过程中我遇到了许多困难和问题,其中一些我通过自己上网找资料和询问同学的方式找到了解决的方法,就是在这个过程中我学会了许多书本上学不到的东西,还有一些是我自己解决不了的问题,这些问题都是需要靠我以后的经验积累和不断的学习才能得到解决的,从这次课程设计中我体会到了自己用汗水换来的成果的喜悦。
我在刚开始设计这个东西时是一头雾水,没有一个方向和目标,后来从网上找到一些有关的资料通过相似的题目我一步一步的完成我自己的课程设计的功能,尤其是在编写程序的时候,每一个模块都要经过非常仔细的考虑后在写,因为程序的运行过程中需要考虑各个模块之间的影响和互助,有一些模块是我们没有学习过的我从网上找到相似的然后经过修改变成我能用的,在这之间我锻炼了我的变成能力。
这次课程设计采用的是AT89C51系列单片机,而接口电路则是一个数字时钟,经过反反复复的修改、调试,程序终于达到预期功能。
通过protrus仿真演示也达到预期的功能。
电路的设计相对编程来说要容易一些,总体来说电路图都是大同小异的,只是他们中的分支做一些修改来。
课程设计需要很大的耐心,尤其是遇到困难的时候,这也是对我们的考验。
在设计过程中,我们遇到问题不是感到急躁,而是耐心地寻找解决的办法,与同学进行交流讨论,寻求最佳的解决办法。
最重要的学习就是一个课程设计的过程的整体思路,先做什么后做什么最后来一个总结经验的过程,这给我以后的设计过程打下了基础,这次设计中,我深刻体会到专研的重要性,一个看似简单的系统,却需要着大量的知识储备和很强的专研精神,理论和实践往往是两回事,理论上很简单的事情在实际操作中往往会遇到很多意想不到的困难,学科的知识不光来自于书本知识,更来自于实践。
参考文献:[1] 苏平.单片机的原理与接口技术[M].北京:电子工业出版社,2006,1-113.[2] 王忠民.微型计算机原理[M].西安:西安科技大学出版社,2003,15-55.[3] 左金生.电子与模拟电子技术[M].北京:电子工业出版社,2004,105-131.[4] 新编单片机原理与应用(第二版).西安电子科技大学出版社,2007.2[5] 张萌.单片机应用系统开发综合实例[M]. 北京:清华大学出版社,2007.7附录:1 电路图2 实物图正面反面3 源程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2^5;sbit lcswr=P2^6;sbit lcden=P2^7;sbit s1=P1^0;sbit s2=P1^1;sbit s3=P1^3;sbit rd=P3^7;uchar count,s1num;char miao,shi,fen;uchar code table[]=" 2013052129 "; uchar code table1[]=" 00:00:00"; void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;lcswr=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(uchar add,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan(){rd=0;if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1)miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}void main(){init();while(1){keyscan();}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}。