长沙理工大学《单片机课程设计》电子钟单片机实习报告

合集下载

长沙理工大学《单片机课程设计》电子钟单片机实习报告

长沙理工大学《单片机课程设计》电子钟单片机实习报告

长沙理工大学《单片机课程设计》电子钟单片机实习报告第一篇:长沙理工大学《单片机课程设计》电子钟单片机实习报告目录一引言........................................................................................................................... . (5)二硬件设计 (5)三软件设计 (5)四调试过程及问题分析 (6)五结论........................................................................................................................... ..7六参考文献 (7)附件........................................................................................................................... . (8)一引言单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,单片机都起到了举足轻重的作用。

所以单片机技术也日趋成熟。

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

它体积小,成本低,功能强。

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

此次单片机原理及应用实习通过利用52单片机对电子钟的设计,从而达到学习、了解单片机相关指令在各方面的应用,以及初步了解开发软、硬件的知识。

二硬件设计本次单片机原理及应用实习我们组用到的硬件为MCS51开发板和一个LCD12864液晶显示器。

单片机课程设计实习报告

单片机课程设计实习报告

单片机课程设计实习报告实习报告1. 实习项目概述本次实习项目是单片机课程设计,旨在通过实际项目的设计与实现,加强对单片机原理和应用的理解与掌握。

本次课程设计以红外遥控器为主题,旨在实现通过红外遥控器对设备进行控制。

2. 实习项目目标2.1 理解并掌握单片机的基本原理及其应用;2.2 学习并运用红外遥控技术;2.3 设计并实现一个简单的红外遥控器。

3. 实习内容及步骤3.1 学习单片机原理及其应用通过课堂学习和自学,全面了解单片机的基本原理、内部结构、工作方式以及常用的应用场景。

3.2 学习红外遥控技术了解红外遥控技术的基本原理和工作方式,包括红外遥控信号的编码与解码、红外遥控器的工作原理等。

3.3 设计红外遥控器设计一个简单的红外遥控器,可以通过按键发送特定的红外遥控信号,实现对特定设备的控制。

3.4 实现红外遥控功能根据设计稿,使用所学的单片机知识,编写与实现相应的程序代码,实现红外遥控功能。

3.5 调试与测试将单片机与红外遥控器进行连接,并通过按键测试红外遥控功能是否正常工作。

如有异常,及时调试和解决问题。

4. 实习总结与反思通过本次单片机课程设计实习,我对单片机的原理和应用有了更深入的理解与掌握。

同时,通过设计并实现红外遥控器,我进一步学习了红外遥控技术的应用,并提升了自己的实际操作能力。

然而,在实习过程中,我也遇到了不少难题和挑战。

特别是在调试与测试阶段,由于光线、信号等环境因素的影响,红外遥控功能的稳定性不如预期。

在解决这些问题时,我积极寻求帮助和指导,通过不断的尝试和调试,最终解决了很多困难。

通过本次实习,我不仅对单片机和红外遥控技术有了更深入的了解,更重要的是锻炼了自己的动手实践能力和解决问题的能力。

我相信这些经验和能力将对我的未来学习和工作有很大的帮助。

单片机实习报告

单片机实习报告

单片机实习报告实习报告:在本次单片机实习中,我主要学习了单片机的程序设计和应用。

通过实践和指导,我对单片机的原理和操作方法有了更深入的了解。

在实习的第一周,我首先学习了单片机的基本知识。

了解了单片机的基本结构和工作原理,并学习了常用的单片机开发板和配套软件的使用方法。

通过对单片机的了解,我明白了单片机在电子设备中起到的重要作用。

第二周,我开始进行单片机的程序设计。

首先学习了单片机的汇编语言和C语言编程,了解了不同编程语言的优缺点和适用范围。

通过实践编写一些简单的程序,我掌握了基本的程序设计方法和技巧。

同时,我还学习了如何使用单片机的IO口、串口和定时器等功能模块,实现了一些简单的实验。

第三周,我开始进行单片机的应用开发。

首先,我学习了如何利用单片机控制LED灯的亮灭。

通过编写程序,我实现了LED灯的闪烁和呼吸效果。

然后,我学习了如何利用单片机控制蜂鸣器的发声。

通过调节蜂鸣器的频率和占空比,我实现了不同音调的发声效果。

最后,我还学习了如何利用单片机控制电机的转动。

通过编写程序,我实现了电机的正转、反转和停止等控制。

在实习的最后一周,我开始进行一个综合性的项目实践。

我选择了制作一个简单的温度测量和显示系统。

通过连接温度传感器和数码管,我利用单片机采集温度传感器的数据,并将数据转换为温度值,然后通过数码管显示出来。

在实践过程中,我遇到了一些困难,但通过查找资料和请教老师,最终成功解决了问题。

这个实践项目不仅巩固了我所学的知识,也培养了我解决问题的能力。

通过这次单片机实习,我不仅学到了丰富的单片机知识,还培养了实践能力和解决问题的能力。

同时,我也深刻地意识到了单片机在现代电子设备中的重要性和广泛应用的前景。

我对单片机有了更深入的了解,并对未来从事相关工作充满了信心。

总结来说,这次单片机实习是我大学生涯中的一次重要经历。

通过实践和学习,我不仅积累了宝贵的知识,还培养了实践能力和解决问题的能力。

我将努力将所学知识应用到实际工作中,并不断提升自己的专业水平。

单片机实习报告

单片机实习报告

千里之行,始于足下。

单片机实习报告单片机实习报告》一、引言在大学期间,我有幸参加了一次单片机实习。

单片机作为一种嵌入式系统的重要组成部分,具有广泛的应用前景和重要的理论和实践意义。

通过此次实习,我更深入地了解了单片机的原理和应用,并培养了解决实际问题的能力。

本报告将详细介绍我的实习经历和所学到的知识。

二、实习背景单片机实习是我大学电子信息工程专业中的一门实践课程,旨在将课堂学习到的理论知识与实际应用相结合。

实习内容主要包括单片机基本原理的学习、单片机编程技术的掌握以及实际项目的设计与实现。

三、实习内容1. 单片机基本原理的学习在实习开始前,我们首先学习了单片机的基本原理。

通过理论课的学习,我们对单片机的工作原理、片内资源和寄存器等有了基本的了解。

同时,我们也学习了单片机的编程语言、开发环境和常用的编程技巧。

2. 单片机编程技术的学习第1页/共3页锲而不舍,金石可镂。

为了熟悉单片机的编程技术,我们学习了汇编语言和C语言两种单片机编程语言。

通过编写一些简单的程序,我们逐渐掌握了程序的编写和调试方法,提高了自己的编程能力。

3. 实际项目的设计与实现在实习的最后阶段,我们需要根据老师的要求设计并实现一个实际项目。

在项目的设计过程中,我们需要考虑项目的功能、硬件的选择和电路的设计。

在实际实施中,我们需要根据设计的要求,编写相应的程序,并将其烧录到单片机中进行测试和验证。

四、实习反思通过此次实习,我收获了许多。

首先,我对单片机的原理有了更深入的理解。

以前,我只是了解到单片机具有微型计算机的功能,但具体的实现方式和原理并不清楚。

而通过实习,我学习到了单片机内部的结构和工作原理,明白了单片机是如何通过执行指令来实现功能的。

这对于我今后的学习和工作具有重要的指导意义。

其次,我学会了如何编写单片机程序。

在实习过程中,我们需要不断地编写程序来验证我们的设计。

通过这个过程,我逐渐掌握了单片机编程的技巧和方法,提高了自己的编程水平。

单片机数字钟实习报告

单片机数字钟实习报告

一、实习目的随着电子技术的飞速发展,单片机作为一种重要的电子元件,在工业、医疗、通讯等领域得到了广泛的应用。

为了更好地掌握单片机的原理和应用,提高动手能力,我们选择了单片机数字钟作为实习项目。

通过本次实习,我们旨在掌握单片机的编程、调试、硬件连接等方面的知识,实现数字时钟的显示与控制。

二、实习内容1. 单片机数字钟硬件设计(1)选用AT89C51单片机作为核心控制单元,具有丰富的片上资源,方便编程和调试。

(2)采用LCD1602液晶显示屏,显示时间、日期等信息。

(3)使用DS1302实时时钟芯片,实现时间的存储和更新。

(4)选用按键作为输入设备,实现时间的调整和设置。

(5)选用蜂鸣器作为报警设备,实现定时报警功能。

2. 单片机数字钟软件设计(1)编写主程序,实现系统初始化、时间显示、按键扫描、时间调整等功能。

(2)编写中断服务程序,实现DS1302时钟芯片的读写、按键消抖等功能。

(3)编写子程序,实现时间的计算、格式化、显示等功能。

3. 单片机数字钟调试与测试(1)连接电路,检查各个模块的连接是否正确。

(2)编写程序,将程序烧录到单片机中。

(3)调试程序,确保程序运行正常。

(4)测试各个功能模块,如时间显示、按键调整、定时报警等。

三、实习过程1. 硬件设计(1)根据设计要求,绘制电路原理图。

(2)购买所需元器件,进行焊接。

(3)组装电路板,连接各个模块。

2. 软件设计(1)编写程序,采用C语言进行编程。

(2)使用Keil软件进行编译、烧录。

(3)在仿真软件Proteus中进行仿真,验证程序的正确性。

3. 调试与测试(1)连接电路,检查各个模块的连接是否正确。

(2)编写程序,将程序烧录到单片机中。

(3)调试程序,确保程序运行正常。

(4)测试各个功能模块,如时间显示、按键调整、定时报警等。

四、实习总结1. 通过本次实习,我们掌握了单片机的编程、调试、硬件连接等方面的知识。

2. 学会了使用LCD1602液晶显示屏、DS1302实时时钟芯片、按键等元器件。

单片机课程设计实习报告(共6篇)

单片机课程设计实习报告(共6篇)

单片机课程设计实习报告(共6篇)ok3w_ads(“s004”);ok3w_ads(“s005”);精选范文:单片机课程设计实习报告(共6篇)实训任务:一、实训目的和要求:(1)熟练掌握keil c51集成开发环境的使用方法(2)熟悉keil c51集成开发环境调试功能的使用和dp?单片机仿真器、编程器、实验仪三合一综合开发平台的使用。

(3)利用单片机的p1口作io口,学会利用p1口作为输入和输出口。

(4)了解掌握单片机芯片的烧写方法与步骤。

(5)学会用单片机汇编语言编写程序,熟悉掌握常用指令的功能运用。

(6)掌握利用protel 99 se绘制电路原理图及pcb图。

(7)了解pcb板的制作腐蚀过程。

二、实训器材:pc机(一台)pcb板(一块)520ω电阻(八只)10k电阻(一只)led发光二极管(八只)25v 10μf电容(一只)单片机ic座(一块)at89c51单片机芯片(一块)热转印机(一台)dp?单片机仿真器、编程器、实验仪三合一综合开发平台(一台)三、实训步骤:(2)将流水灯程序编写完整并使用tkstudy ice调试运行。

(4)打开电源,将编写好的程序运用tkstudy ice进行全速运行,看能否实现任务要求。

(6)制板。

首先利用protel 99 se画好原理图,根据原理图绘制pcb图,然后将绘制好的pcb布线图打印出来,经热转印机转印,将整个布线图印至pcb板上,最后将印有布线图的pcb板投入装有三氯化铁溶液的容器内进行腐蚀,待pcb 板上布线图外的铜全部后,将其取出,清洗干净。

(7)焊接。

将所给元器件根据原理图一一焊至pcb板相应位置。

(8)调试。

先把at89c51芯片插入ic座,再将+5v电源加到制作好的功能板电源接口上,观察功能演示的整个过程(看能否实现任务功能)。

(流水灯控制器原理图)四、流水灯控制器程序的主程序:org 0000hsjmp startorg 0030hstart: mov a,#0ffhmov r0,#1chmov r2,#12hclr cloop1: acall delaydjnz r0,loop2sjmp loop4loop2: mov p1,arlc ajnc loop3sjmp loop1loop3: acall delaymov p1,arrc ajnc loop1sjmp loop3loop4: acall delaydjnz r1,loop5sjmp loop6loop5: mov p1,arrc a[单片机课程设计实习报告(共6篇)]篇一:单片机实习报告课程设计专业综合实习总结专业班级:学生学号:学生姓名:指导教师:实习时间:机电工程学院目录1.实习目的和意义 21.1实习目的 (2)1.2实习意义 (2)2.实习内容 2 3. 硬件介绍 23.1 总原理图 (3)3.2 LED显示模块............................................................... 6 3.3 数码管显示模块............................................................ 7 3.4 键盘模块 (9)3.5 A/D转换模块............................................................... 10 3.6 D/A转换模块 (13)3.7 中断嵌套模块 (14)3.8 时钟日历芯片模块 (15)4. 程序流程图 174.1 LED显示模块……………………………………………………… 17 4.2 数码管显示模块…………………………………………………… 19 4.3 键盘模块……………………………………………………………21 4.4 A/D转换模块.................................................................. 23 4.5 D/A转换模块 (23)4.6 中断嵌套模块 (24)4.7 时钟日历芯片模块 (24)5. 实习心得体会………………………………………………… 26 附录:程序清单……………………………………………………271、实习目的和意义1.1 实习目的1、熟悉本专业自己设计的“单片机课程实习”电路板,领会、掌握该电路板的设计原理及硬件布局。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机设计时钟实训报告

单片机设计时钟实训报告

一、引言随着科技的不断发展,单片机技术在电子领域得到了广泛的应用。

为了提高学生的实践能力,培养实际工程应用能力,我们进行了单片机设计时钟实训。

本实训以AT89C51单片机为核心,通过学习时钟电路的设计、编程和调试,使学生掌握单片机在时钟设计中的应用,提高学生的动手能力和创新思维。

二、实训目的1. 掌握单片机的基本原理和编程方法;2. 熟悉时钟电路的设计和调试;3. 培养学生的实际工程应用能力和创新思维;4. 提高学生的团队协作能力和沟通能力。

三、实训内容1. 硬件设计(1)单片机选型:选用AT89C51单片机作为核心控制单元;(2)时钟电路:采用晶振电路作为时钟源,实现1Hz的基准时钟;(3)显示电路:采用LCD1602液晶显示屏,实现时间、日期和星期等信息显示;(4)按键电路:设计4个按键,分别用于设置时间、日期、星期和闹钟功能;(5)复位电路:采用上电复位和按键复位两种方式,保证系统稳定运行。

2. 软件设计(1)系统初始化:初始化单片机,设置波特率、定时器等;(2)时间显示:通过读取实时时钟芯片(如DS1302)的数据,显示时间、日期和星期;(3)按键处理:根据按键输入,实现时间、日期、星期和闹钟的设置与修改;(4)闹钟功能:当设定的时间到达时,通过蜂鸣器发出提示音。

3. 调试与优化(1)调试方法:使用Proteus软件进行仿真调试,观察程序运行状态,分析故障原因;(2)优化方法:针对仿真过程中出现的问题,优化程序代码,提高程序运行效率。

四、实训过程1. 硬件制作(1)按照设计图纸,焊接电路板;(2)连接晶振、LCD显示屏、按键和蜂鸣器等元器件;(3)调试电路,确保各元器件正常工作。

2. 软件编写(1)使用Keil C51软件编写程序,实现时钟显示、按键处理和闹钟功能;(2)编译程序,生成HEX文件。

3. 调试与优化(1)使用Proteus软件进行仿真调试,观察程序运行状态;(2)针对仿真过程中出现的问题,优化程序代码,提高程序运行效率;(3)将优化后的程序烧录到单片机中,进行实际运行测试。

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

目录一引言 (5)二硬件设计 (5)三软件设计 (5)四调试过程及问题分析 (6)五结论 (7)六参考文献 (7)附件 (8)一引言单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,单片机都起到了举足轻重的作用。

所以单片机技术也日趋成熟。

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

它体积小,成本低,功能强。

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

此次单片机原理及应用实习通过利用52单片机对电子钟的设计,从而达到学习、了解单片机相关指令在各方面的应用,以及初步了解开发软、硬件的知识。

二硬件设计本次单片机原理及应用实习我们组用到的硬件为MCS51开发板和一个LCD12864液晶显示器。

在MCS51开发板中,对于我们组做数字电子钟而言应用到ds1302芯片,蜂鸣器,LED点阵显示屏,STC89S52单片机,锁存器等等硬件设备。

通过对这些硬件的使用实现我们组规定的以及我们拓展的要求。

三软件设计此次基于单片机的电子钟的实习基本要求为:基本要求(1)能通过键盘设定年月日时分秒;(2)在LCD12864上显示年月日时分秒及星期;(3)整点蜂鸣器响6次,每秒响一次,最后一响是整点;(4)按学校的作息时间表定时打铃(可用一个LED灯模拟打铃)扩展要求自动计算和显示阴历基于这些功能,我们用到了如下程序(1) 时钟程序ds1302(2) 按键控制程序keyscan(3) 整点报时程序fengming(4) 作息时间表程序schooltime fengming(5) 显示程序LCD12864(6) 自动计算阴历程序 Chinesecalender(7) 自动计算星期程序conver_week我们最初的整体思路是将我们的实习课题分成几个模块,每个人负责一个部分,争取第一周弄完个人部分.第二周主要进行不同模块的整合,以及整个程序的调试和改进.此外准备答辩的PPT,由组长答辩。

程序设计流程图如下:在这一次单片机原理及应用的实习中,我学到了很多。

虽然整个过程并不是一帆风顺的,但是通过我们的共同努力,最终完成了任务。

充分发挥了团队精神,我们互帮互助,共同提高。

我觉得在拿到一个课题的时候,我们首先应该思考的是干什么?然后才是怎么干?最后是如何优化。

于是我开始上网搜有关电子钟设计的相关资料,我了解到:我们本次是利用MCS51开发板和LCD12864液晶显示器制作的,可以完成计时、计分、几秒和校时、校分的功能。

微处理器是单片机的核心,完成运算和控制的操作串行口数据存储器与复位电路、时钟电路、校时电路由微处理器控制完成各自的任务。

最后通过液晶显示器显示时分秒。

在这次实习中我负责的是显示程序LCD12864,刚开始我对于LCD显示程序并不是太了解。

在校园网上找到了些相关的初步显示程序。

通过LCD12864中的一些程序的调用,才能进行显示,但那是以图片的形式显示的,与我们所期望的显示还是有一定的差别,所以我又做进一步的修改,通过和组员的讨论,我才知道有一个显示汉字的程序是通过字模软件实现的,之后我们的显示这一块就可以依据我们自己的想法进行设计了。

而在整个的程序综合中,也遇到了一些问题。

比如在阴历显示在屏幕上的时候,最初只显示阴历两个字,不显示具体的阴历,后来经过检查发现程序调用出现问题,改正后继续进行优化。

就这样,我们反复的修改调试,最终完成了我们的整个课程设计。

五结论在本次的课程设计中,我们虽然走了些小弯路,但是通过我们的共同努力,最终完成了任务。

我从中我学到了很多,比如团队协作精神,众人拾材火焰高。

任何大问题,在一步一步细化之后,解决起来就轻松得多了!我相信只要付出了就会有收获。

无论什么事情,只有当你用心去做了之后你才会发现它的真实意义所在。

我觉得这一次实习是非常有意义的,不仅提高了专业素养,还培养了我们的合作精神。

我要把握每一次学习的机会,认真对待,为以后的就业及更深层次的发展添砖加瓦。

六参考文献一、谭浩强 C语言课程设计(第三版)清华大学出版社 2005.7二、杨恢先黄辉先单片机原理及应用[M] 北京人民邮电出版社 2006.10三、C编写组编常用C语言速查手册龙门书局 1995附件*********************************初始化LCD*******************************/ void Lcminit (void){ cbyte=DISPOFF;WrL(cbyte);WrR(cbyte);cbyte=DISPON;WrL(cbyte);WrR(cbyte);cbyte=DISPFIRST;WrL(cbyte);WrR(cbyte);Lcmcls();Locatexy(0,0);}/***********************************LCD清屏********************************/ void Lcmcls(void){ uchar i,j;for(i=0;i<8;i++){delay(6);for(j=0;j<LIMIT;j++){delay(6);Wrdata(0x0,i,j);}}}/************************************写左区*********************************/ void WrL(uchar x){P0=0xFF;//P0口送FF,准备读lck = 0;P1 = 0x2a;//ELCD=1 /W=1(读),CSB=1,CSA=0lck = 1;while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;P1 = 0x00;//ELCD=0,R/W=0(读),CSB=0,CSA=0lck = 1;P0 = x; //数据送到P0口lck = 0;P1 = 0x22;//ELCD=1,RW = 0(写),CSB=1,CSA=0lck = 1;lck = 0;P1 = 0x00;//ELCD=0,RW = 0(写),CSB=0,CSA=0lck = 1;}void WrR(uchar data x){P0=0xFF;//P0口送FF,准备读lck = 0;P1 = 0x29;//ELCD=1,R/W=1(读),CSB=0,CSA=1lck = 1;while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;P1 = 0x00;//ELCD=0,R/W=0(读),CSB=0,CSA=1lck = 1;P0=x; //数据送到P0口lck = 0;P1 = 0x21;//ELCD=1,RW = 0(写),CSB=0,CSA=1lck = 1;lck = 0;P1 = 0x00;//ELCD=0,RW = 0(写),CSB=0,CSA=0lck = 1;}/**********************************显示定位***********************************/ void Locatexy(uchar row,uchar col){ uchar x, y, right;switch(col&0xc0){ case 0:{P0=0xFF;//P0口送FF,准备读lck = 0;P1 = 0x29;//ELCD=1,R/W=1(读),CSB=0,CSA=1lck = 1;while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;P1 = 0x00;lck = 1;right = 1;break;}//置右半屏标志case 0x40:{P0=0xFF;//P0口送FF,准备读lck = 0;P1 = 0x2a;//ELCD=1,R/W=1(读),CSB=1,CSA=0lck = 1;while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;P1 = 0x00;//ELCD=0,R/W=0(读) CSB=0,CSA=0lck = 1;right = 0;break;}//置左半屏标志}x=col&0x3f|SETX;//把列数据变成行命令y=row&0x07|SETY;//把行数据变成行命令if(right)P1 = 0x29;elseP1 = 0x2a;lck = 1;while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;P1 = 0x00;lck = 1;/***********************************以上为判断忙标志**************************/ P0 = y;lck = 0;if(right)P1 = 0x21;elseP1 = 0x22;lck = 1;lck = 0;P1 = 0x00;lck = 1;/************************************以上为送行命令*****************************/ P0=0xFF;lck = 0;if(right)P1 = 0x29;elseP1 = 0x2a;lck = 1;while(P0 & LCDBUZY);//最高位为1,表示忙,则循环lck = 0;P1 = 0x00;lck = 1;/*************************************以上为判断忙标志***************************/ P0 = x;lck = 0;if(right)P1 = 0x21;elseP1 = 0x22;lck = 1;lck = 0;P1 = 0x00;lck = 1;/*************************************以上为送列命令***************************/elsestatu = 0;//置左又半区标志}/*************************************数据写输出*******************************/ void Wrdata(uchar x,uchar row,uchar col){Locatexy(row,col);//定位显示位置lck = 0;if(statu)P1 = 0x05;//ELCD=0 R/W=0(写),D/I= 1 ,CSB=0,CSA=1elseP1 = 0x06;//ELCD=0,R/W=0(写),D/I= 1 ,CSB=1,CSA=0lck = 1;P0 = x;lck = 0;if(statu)P1 = 0x25;//ELCD=1,R/W=0(写),D/I= 1 ,CSB=0,CSA=1elseP1 = 0x26;//ELCD=1,R/W=0(写),D/I= 1 ,CSB=1,CSA=0lck = 1;lck = 0;P1 = 0x00;lck = 1;}/**********************************半角数据点阵输出******************************/ void Puthalf(uchar *strch,uchar row,uchar col){uchar i,bakerx;bakerx = row;for(i=0;i<16;i++)//上半字输出{ cbyte=strch[i];Wrdata(cbyte,bakerx,col);cbyte=strch[i+1];Wrdata(cbyte,bakerx+1,col);col++;i++; }}void Puthz(uchar *str,uchar row,uchar col){uchar i,bakerx;bakerx=row;for(i=0;i<32;i++)cbyte=str[i];Wrdata(cbyte,row,col); //上半字节输出i++;row=bakerx+1;cbyte=str[i];Wrdata(cbyte,row,col); //下半字节输出row=bakerx;col=col+1;}}/****************************字符型点阵行--》列转换************************/void VtoH8x16change(uchar *hzbuf){ uchar i,j,k, cash[16];uchar newbyte, savebit[8];for(k=0;k<16;k++){newbyte = 0;for(i=0;i<8;i++){savebit[i]=hzbuf[i] & 0x80;}for(j=0;j<8;j++){savebit[j] = savebit[j] >> (7-j);newbyte = newbyte | savebit[j]; }cash[k] = newbyte;newbyte = 0;for(i=8;i<16;i++){savebit[i-8]=hzbuf[i] & 0x80; }for(j=0;j<8;j++){savebit[j] = savebit[j] >> (7-j);newbyte = newbyte |savebit[j]; }cash[k+1] = newbyte;for(j=0;j<16;j++){hzbuf[j] = hzbuf[j] <<1; }k++; }for(i=0;i<16;i++)hzbuf[i] = cash[i]; }/*******************************显示英文和符号字符*******************************/ void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag){uchar ucXArray[16],i;if(flag){ // 反白显示英文for(i = 0; i < 16; i++)ucXArray[i] = ~ch[i];}else{for(i = 0; i < 16; i++)ucXArray[i] = ch[i]; }VtoH8x16change(ucXArray);Puthalf(ucXArray,row,col);}void vWrite8x16String(uchar *str,uchar row, uchar col, bit flag){unsigned char i, j,thiscol;j = strlen(str);for(i = 0; i < j; i++){ thiscol = (i % 16) * 8 + col;//计算列地址if(str[i] < 0xa1)//当前显示内容为英文字符vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag); }}/************************v_RTInputByte*************************/void v_RTInputByte(uchar ucDa){uchar i;ACC = ucDa;for(i=8; i>0; i--){T_IO = ACC0; /*相当于汇编中的RRC */T_CLK = 1;T_CLK = 0;ACC = ACC >> 1;}}/********************** uchar uc_RTOutputByte*************************/uchar uc_RTOutputByte(void){uchar i;for(i=8; i>0; i--){ACC = ACC >>1; /*相当于汇编中的RRC */ACC7 = T_IO;T_CLK = 1;T_CLK = 0;}return(ACC);}/************************v_W1302 *************************************/void v_W1302(uchar ucAddr, uchar ucDa){lck = 0;P1 = 0x00;lck = 1;T_CLK = 0;lck = 0;P1 = 0x10;lck = 1;v_RTInputByte(ucAddr); /* 地址,命令*/v_RTInputByte(ucDa); /* 写1Byte数据*/T_CLK = 1;lck = 0;P1 = 0x00;lck = 1;}/**************************uc_R1302***********************************/uchar uc_R1302(uchar ucAddr){uchar ucDa;lck = 0;P1 = 0x00;lck = 1;T_CLK = 0;lck = 0;P1 = 0x10;lck = 1;v_RTInputByte(ucAddr); /* 地址,命令*/ucDa = uc_R TOutputByte(); /* 读1Byte数据*/T_CLK = 1;lck = 0;P1 = 0x00;lck = 1;return(ucDa);}/************************* v_Set1302 *********************************/void v_Set1302(uchar *pSecDa){uchar i;uchar ucAddr = 0x80;v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/for(i =7;i>0;i--){v_W1302(ucAddr,*pSecDa); /* 秒分时日月星期年*/pSecDa++;ucAddr +=2;}v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/}/*******************************v_Get1302**************************************/void v_Get1302(uchar ucCurtime[]){uchar i;uchar ucAddr = 0x81;for (i=0;i<7;i++){ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒分时日月星期年*/ucAddr += 2;delay(100);}}/**********************************屏幕显示*********************************/ void pingmu(){uchar disp,copymt;uchar temp;copymt = 0xff;P0=0xff;v_Get1302(&buffer); //读取DS1302Conver_week(0,buffer[6],buffer[4],buffer[3]);Chinesecalender(0,buffer[6],buffer[4],buffer[3]) ;disp = buffer[0] % 0x10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],2,100,0);//秒个位temp =buffer[0] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],2,92,0);//秒十位copymt = buffer[1];disp = buffer[1] % 0x10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],2,68,0);//分个位temp =buffer[1] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],2,60,0);//分十位disp = buffer[2] % 0x10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],2,30,0);//时个位temp =buffer[2] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],2,22,0);//时十位disp = buffer[3] % 0x10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,100,0);//日个位temp =buffer[3] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,92,0);//日十位disp = buffer[4] % 0x10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,68,0);//月个位temp =buffer[4] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,60,0);//月十位disp = buffer[6] % 0x10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,30,0);//年个位temp =buffer[6] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,22,0);//年十位disp = buffer[7] % 0x10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,14,0);//年百位temp =buffer[7] & 0x7f;temp = temp/16;disp = temp%10 + '0';vWrite8x16Character(&char_Table[disp-0x20][0],0,6,0);//年千位}。

相关文档
最新文档