基于c语言单片机电子时钟课程设计报告书

合集下载

单片机_电子时钟(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)按键设计系统采用独立式按键,共设计了四个按键,分别是“当前时间”、“分钟+”、“小时+”,用来设置校时功能,这样可以使电路更简单。

单片机闹钟设计程序报告

单片机闹钟设计程序报告

单片机闹钟设计程序报告1. 引言闹钟作为人们日常生活中的常用物品,不仅有叫醒人们起床的功能,还可以作为提醒的工具。

随着科技的进步,单片机闹钟逐渐取代了传统的机械闹钟,成为人们生活中不可或缺的一部分。

本报告旨在介绍一个基于单片机的简单闹钟设计程序。

2. 设计方案本设计方案使用了单片机和数码管作为主要硬件,通过对单片机的编程,实现了闹钟的基本功能,包括时间设置、闹钟时间设置、闹钟触发、蜂鸣器报警等。

2.1 硬件设计硬件方面,本设计基于某型号的单片机和数码管。

单片机通过相关的引脚与数码管相连,通过控制引脚的电平来显示不同的数字。

2.2 软件设计软件方面,本设计使用C语言编程实现。

主要的功能包括获取当前时间、显示时间、设置时间、设置闹钟时间、闹钟触发检测、蜂鸣器报警等。

3. 程序实现3.1 初始化设置在程序的开始部分,需要对单片机进行初始化设置。

包括设置引脚的输入输出模式、设置计时器、设置中断等。

3.2 时间显示为了实现时间显示的功能,我们需要通过单片机的计时器来不断获取当前时间,并将其转换为时、分、秒的格式。

然后通过数码管显示出来。

3.3 时间设置通过给单片机的某个引脚接入按钮,实现时间设置功能。

当按钮被按下时,单片机进入时间设置模式。

此时,用户可以通过另外的按钮来逐个调整时、分、秒的数值。

3.4 闹钟时间设置类似于时间设置,闹钟时间设置也需要通过按钮来实现。

用户可以按下对应的按钮来设置闹钟的时、分,设置完毕后,单片机会将设置的时间保存起来。

3.5 闹钟触发检测在每一次时间显示的循环中,程序都会检测当前时间是否与闹钟时间相符。

如果相符,则触发闹钟,蜂鸣器开始报警。

3.6 蜂鸣器报警通过单片机的一个输出引脚,连接到蜂鸣器,实现蜂鸣器的报警功能。

当闹钟触发时,单片机会给对应的引脚输出一个高电平,从而使蜂鸣器发声。

4. 总结通过对单片机闹钟设计程序的实现,我们成功实现了闹钟的基本功能,包括时间设置、闹钟时间设置、闹钟触发、蜂鸣器报警等。

基于单片机的电子时钟课程设计报告

基于单片机的电子时钟课程设计报告

目录一、引言········二、设计课题·········三、系统总体方案·········四、系统硬件设计······1.硬件电路原理图2.元件清单五、系统软件设计·········1.软件流程图2.程序清单六、系统实物图········七、课程设计体会········八、参考文献及网站·········九、附录·········一.引言单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。

基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。

数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。

数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。

(2023)单片机电子时钟课程设计报告2(一)

(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界面,考虑加入图像、背光等元素,提升用户体验。

•采用更高性能的单片机,提升系统稳定性和响应速度。

总体评价本项目难度适中,能够较全面地考察学生在单片机原理、编程能力和电路设计等方面的知识掌握程度,是一次有益的实践。

同时,项目具有一定的功能性和实用性,能够满足用户的基本需求。

因此,本项目是一次成功的课程设计。

电子时钟设计实验报告

电子时钟设计实验报告

单片机电子时钟设计报告一、设计任务本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。

电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。

二、系统硬件设备及芯片简介数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用LED作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。

字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。

本系统设计采用字符型液品显示模块LCD1602 作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。

1 LCD1602简介字符型液晶显示模块LCD1602已经是单片机应用设计中最常用的信息显示器件。

LCD1602可以显示两行,每行16个字符,采用+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。

2 LCD1602功能介绍2.1 引脚功能LCD1602采用标准14脚(无背光)或16脚(带背光)接口,各引脚功能见表1。

表1 引脚功能2.2 LCD1602读写指令LCD1602读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:①写指令38H:显示模式设置;②写指令08H:显示关闭;③写指令01H:显示清屏;④写指令06H:显示光标移动设置;⑤写指令0CH:显示开及光标设置。

2.3 LCD1602 读写操作时序LCD1602 读写操作时序总体上来说是比较简单的,掌握其有两种方法:一种是只看时序图,另外一种方法是直接记忆和总结读写时电平高低和变化。

很显然第二种更简单和直接,下面就列出典型读写的时序要求,以方便编写程序。

(1)读状态:输入:RS=L,RW=H,E=H。

输出:D0-D7=状态字。

(2)写指令:输入:RS=L,RW=L,D0-D7=指令码,E=上升沿。

单片机课程设计报告单片机的电子钟设计

单片机课程设计报告单片机的电子钟设计

单片机课程设计报告---单片机的电子钟设计单片机课程设计报告---单片机的电子钟设计一、设计简介本课程设计是以单片机为核心,设计一个具有显示时间和闹钟功能的电子钟。

电子钟是人们日常生活中必备的计时工具,其精度和稳定性直接影响到人们的时间安排和生活质量。

因此,本设计的目的是通过学习和实践,掌握单片机的应用和电子钟的设计方法,提高我们的实践能力和理论知识水平。

二、硬件设计1.单片机选择本设计选用AT89C51单片机作为主控制器。

AT89C51是一种低功耗、高性能的8位单片机,具有丰富的I/O口和片内资源,适合用于各种嵌入式系统开发。

2.显示模块显示模块采用LED数码管,用于显示时间、日期和闹钟状态。

为了方便调试和编程,我们选用4位一体式数码管。

3.按键模块按键模块包括功能键和调整键,用于设置时间、日期和闹钟。

我们选用4个独立式按键,分别实现上调、下调、设置和闹钟功能。

4.蜂鸣器模块蜂鸣器模块用于发出闹钟声音。

我们选用一款常见的无源蜂鸣器,通过单片机的一个IO口控制其频率,实现声音提示功能。

三、软件设计1.时钟芯片驱动本设计选用DS1302时钟芯片,用于提供实时时间和日期的信息。

DS1302与单片机通过I2C协议进行通信,需要编写相应的驱动程序。

驱动程序包括时钟芯片的初始化、数据读写和中断处理等。

2.显示驱动显示驱动程序负责控制数码管的显示。

驱动程序包括延时函数、位选函数和段选函数等。

通过调用这些函数,我们可以实现时间、日期和闹钟状态的动态显示。

3.按键驱动按键驱动程序负责识别用户的按键操作。

驱动程序通过检测独立式按键的状态变化,识别出不同的按键操作,并执行相应的功能。

例如,当用户按下上调键时,驱动程序将调用时钟芯片的读秒函数,并将时间的小时数加1。

4.蜂鸣器驱动蜂鸣器驱动程序负责控制蜂鸣器的声音频率。

驱动程序通过设置单片机的定时器寄存器,产生一定频率的方波信号,驱动蜂鸣器发声。

为了实现不同的声音效果,我们可以通过改变方波信号的频率和持续时间来实现。

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。

二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。

2.软件设计通过C语言编写单片机程序,用于实现时钟功能。

3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。

(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。

(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。

(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。

三、实验结果经过调试,电子时钟的各项功能都能够正常实现。

在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。

在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。

四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。

通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。

在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。

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

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

单片机电子时钟课程设计报告一、设计目的。

本课程设计旨在通过单片机技术的应用,设计并制作一个简单的电子时钟。

通过这一设计,学生将能够掌握单片机的基本原理和应用,培养学生的动手能力和创新意识,提高学生的实际操作能力。

二、设计原理。

本电子时钟采用单片机作为控制核心,通过晶振产生的时钟信号来实现时间的计时和显示。

利用数码管来显示小时和分钟,通过按键来调整时间。

同时,通过蜂鸣器发出报时信号,实现基本的闹钟功能。

三、设计方案。

1. 硬件设计。

(1)单片机选择,本设计选用常见的51单片机作为控制核心,具有成本低、易于编程的特点。

(2)时钟电路,采用晶振作为时钟信号源,通过单片机的定时器来实现时间的计时。

(3)显示模块,采用数码管来显示小时和分钟,通过数码管的扫描显示来实现时间的动态显示。

(4)按键输入,设计按键来调整时间,包括调整小时和分钟。

(5)报时功能,通过蜂鸣器来实现基本的报时功能,可以设置闹钟时间。

2. 软件设计。

(1)时钟控制,通过单片机的定时器来实现时间的计时和更新。

(2)显示控制,设计数码管的扫描显示程序,实现时间的动态显示。

(3)按键处理,设计按键扫描程序,实现对时间的调整。

(4)报时功能,设计蜂鸣器的报时程序,实现基本的闹钟功能。

四、设计实现。

1. 硬件实现。

根据上述设计方案,完成了电子时钟的硬件连接和布线,保证各个模块之间的正常通讯和工作。

2. 软件实现。

编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。

五、实验结果。

经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。

六、总结与展望。

通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。

在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。

同时,也为学生今后的科研和创新工作奠定了良好的基础。

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

课程设计报告课程名称:单片机程序设计报告题目:电子时钟学生:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013年12月25日课程设计任务书摘要单片计算机即单片微型计算机。

由RAM、ROM、CPU构成。

定时,计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

而51系列单片机是各单片机中最为典型和最有代表性的一种。

这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

本设计主要设计了一个基于AT89C51单片机的电子时钟。

并在数码管上显示相应的时间。

并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。

应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。

该方法仿真效果真实、准确,节省了硬件资源。

关键词:单片机;子时钟;键控制目录一、概述 (5)1.1电子时钟简介 (5)1.2电子时钟的基本特点 (5)1.3电子时钟的原理 (5)二、方案设计选择 (5)2.1计时方案 (5)2.2显示方案 (5)三、硬件设计 (6)3.1单片机型号选择 (6)3.2数码管显示工作原理 (6)3.3键盘电路设计 (7)3.4电路原理图 (7)四、软件设计 (7)五、结论与心得 (15)六、参考文献 (16)一、概述1.1 电子时钟简介1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。

现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。

从而达到计时的功能,是人民日常生活补课缺少的工具。

1.2 电子时钟的基本特点现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

1.3 电子时钟的原理该电子时钟由89C51,BUTTON,六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。

而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。

二、方案设计选择2.1计时方案方案1:采用实时时钟芯片现在市场上有很多实时时钟集成电路,如DS1287、DS12887、DS1302等。

这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需要程序干预。

因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。

方案2:使用单片机部的可编程定时器。

利用单片机部的定时计数器进行中端定时,配合软件延时实现时、分、秒的计时。

该方案节省硬件成本,但程序设计较为复杂。

2.2显示方案对于实时时钟而言,显示显然是另一个重要的环节。

通常LED显示有两种方式:动态显示和静态显示。

静态显示的优点是程序简单、显示亮度有保证、单片机CPU的开销小,节约CPU的工作时间。

但占有I/O口线多,每一个LED都要占有一个I/O口,硬件开销大,电路复杂。

需要几个LED就必须占有几个并行口,比较适用于LED数量较少的场合。

当然当LED数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。

LED动态显示硬件连接简单,但动态扫描的显示方式需要占有CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。

本系统需要采用6位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。

三、硬件设计3.1单片机型号的选择通过对多种单片机性能的分析,最终认为89C51是最理想的电子时钟开发芯片。

89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8 位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C5是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。

3.2数码管显示工作原理数码管是一种把多个LED显示段集成在一起的显示设备。

有两种类型,一种是共阳型,一种是共阴型。

共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。

共阴型就是把多个LED显示段的阴极接在一起,即为公共商。

阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。

通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP是小数点位段。

而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。

即所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。

数码管显示方法可分为静态显示和动态显示两种。

静态显示就是数码管的8段输入及其公共端电平一直有效。

动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;每位数码管的阳极连在一起组成公共端。

利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。

3.3键盘电路设计该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损耗,该键盘可以实现小时和分钟的调节;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。

达到时间调节的目的。

3.4电路原理图四、软件设计#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();} //宏定义掩延时函数sbit K1=P3^0; //位定义sbit K2=P3^1;sbit K3=P3^2;sbit K4=P3^3;sbit D34=P3^4;sbit SCL = P2^0;sbit SDA = P2^1;void diyi();void xianshi(); // 函数声明void panduan(); //函数声明void delay(uchar z); //函数声明uchar t=0,n=1,m=59,a,temp; //定义变量uchar code at[]={0xe0,0xd0,0xb0,0x70}; //定义数组uchar code as[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code b[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};uintt;void delay_us(uchar tt) //短延时函数{while(tt--);}/****************************/ /***********初始化***********//**************************//********at24c02***********/ void I2C_start()//I^2C模块{SDA = 1;_nop_();SCL = 1;somenop;SDA = 0;somenop;SCL = 0;}void I2C_stop(){SDA = 0;_nop_();SCL = 1;somenop;SDA = 1;}void I2C_ack(bit ackbit) {if(ackbit)SDA = 0;elseSDA = 1;somenop;SCL = 1;somenop;SCL = 0;SDA = 1;somenop;}bit I2C_waitack(){SDA = 1;somenop;SCL = 1;somenop;if(SDA){I2C_stop();return 0;}else{SCL = 0;return 1;}}void I2C_write(uchar dat) {uchar i;for(i=0;i<8;i++){if(dat&0x80)SDA = 1;elseSDA = 0;somenop;SCL = 1;dat <<= 1;somenop;}}uchar I2C_read(){uchar dat;uchar i;for(i=0;i<8;i++){SCL = 1;somenop;dat <<= 1;if(SDA)dat |= 0x01;SCL = 0;somenop;}return dat;}void W_at24c02(uchar add,uchar dat) {I2C_start();I2C_waitack();I2C_write(add);I2C_waitack();I2C_write(dat);I2C_waitack();I2C_stop();delay_us(300);}uchar R_at24c02(uchar add) {uchar AT_temp;I2C_start();I2C_write(0xa0);I2C_waitack();I2C_write(add);I2C_waitack();I2C_start();I2C_write(0xa1);AT_temp = I2C_read();I2C_ack(0);I2C_stop();return AT_temp;}/**************************//************main**********/void main(){diyi();t= R_at24c02(24); //程序运行时,读取掉电前数据m= R_at24c02(23);n= R_at24c02(25);while(1){panduan();//判断子函数xianshi();//显示子函数}}void diyi() //定义子函数{P2=0xbf;P0=0xbf;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void exer1() interrupt 1 //定时器/计数器 1 {uchar t1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;t1++;if(t1==10){P2=0x9f;P0=0x00;}if(t1==20){P2=0x9f;P0=0xff;t1=0;t++;W_at24c02(24,t ); //每隔一秒,保存当前数据delay(3);W_at24c02(23,m);delay(3);W_at24c02(25,n);if(t==60){ t=0; m++;if(m==60){ m=0; n++; }if(n==24)n=0;}}}void xianshi()//显示函数{P2 = 0xdf; P0 =b[0]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[t%10];P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =b[1]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[(t/10)%10]; P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =b[2]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =0xbf;P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =b[3]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[m%10];P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =b[4]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[(m/10)%10]; P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =b[5]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =0xbf;P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =b[6]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[n%10];P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =b[7]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[(n/10)%10]; P2=0x1f;P0=0x00;delay(3);}void delay(uchar z)//延时函数{uchar i,j;for(i=0;i<z;i++)for(j=0;j<110;j++);}void panduan()//判断函数{P3=0xfe;delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);if(temp!=0xf0){while(P3!=0xfe);if(temp==at[0]){a++;TR0=0; if(a==4) {a=0;TR0=1;}}if(temp==at[1]){if(a==1){ t++; if(t==60){ t=0;} }if(a==2){m++;if(m==60){m=0;}}if(a==3){ n++;if(n==24){n=0;}}}if(temp==at[2]){if(a==1){if(t==0){t=60;}t--;}if(a==2){if(m==0){m=60;}m--;}if(a==3){if(n==0){n=24;}n--;}}P2 = 0xc0;P0 =b[7]; P2=0x00;P0=0xff;P2 = 0xe0;P0=0xff;P2=0x00;P0=0x00;delay(3);}}}五、结论与心得在廖亦凡和铁军老师耐心的指导下,我顺利完成了这次单片机课程设计课题中的电子时钟设计,过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。

相关文档
最新文档