单片机课程设计说明书撰写
- 格式:doc
- 大小:803.00 KB
- 文档页数:59
单片机课程设计计划书(精选五篇)第一篇:单片机课程设计计划书机电科学与工程系电气自动化技术专业(专科)《单片机原理及接口技术课程设计》计划书一、目的及要求1.目的:通过本课程设计,•使学生进一步掌握单片机应用系统的硬、•软件开发方法,输入/输出(I/O)接口的扩展技术,应用程序设计技术并结合专业能设计简单、实用的单片机应用系统。
主要针对课堂重点讲授内容使学生加深对单片机硬件原理的理解及提高汇编语言程序设计的能力,提高学生的开发创新能力。
2.基本要求:重点研究单片机、A/D转换器、运算放大器、传感器、LED显示器、固态继电器、微型直流电机等元器件的特性、功能及使用方法;同时掌握主程序、子程序、中断服务程序框图的设计方法与汇编语言程序设计方法。
要求设计系统具有可靠性高、可维护、维修性好及检测精度高等优点。
设计内容可参考设计题目,也可根据自身情况自己拟定。
3.任务要求:了解控制对象、环境参数检测原理,在充分掌握单片机、A/D转换器、运算放大器、传感器、LED显示器、固态继电器、微型直流电机等元器件的工作原理、特性、功能及使用方法的基础上,创造性的、两人一组分工协作(一人偏软、一人偏硬)独立的设计本课题的内容。
二、设计内容、步骤及材料要求1.设计内容画出硬件原理图一张(A4号);软件框图(包括主程序框图、主要子程序框图、中断服务程序框图等)和系统初始化的汇编语言原程序。
提交不少于4000字的设计报告一份(A4纸)。
从整体方案的规划设计到各功能模块的设计,可实现功能及各元器件的选择,参数计算均需表述清楚。
报告的书写要清除工整,层次清晰,文字流畅。
后附5篇以上的参考文献。
2.设计步骤设计时间为5天,前2天进行硬件原理草图设计,指导教师审查之后用1天的时间再进行绘图;第四天进行软件框图(包括主程序框图、主要子程序框图、中断服务程序框图)的设计及系统初始化的汇编语言原程序的设计;第5天答辩。
3.设计图纸要求(1)硬件原理图的绘制:元件图正确、型号标注要准确、连线清楚.(2)软件框图的绘制:流程清晰。
郑州工业应用技术学院课程设计说明书题目:姓名:院(系):专业班级:学号:指导教师:成绩:时间:年月日至年月日郑州工业应用技术学院课程设计任务书题目: 电子秒表设计专业、班级学号姓名主要内容、基本要求、主要参考资料等:主要内容:利用单片机设计一个电子秒表,完成四位显示××.××秒,并具备开始计时、暂停、清零等功能。
基本要求:1.利用单片机设计一个电子秒表,完成四位显示××.××秒,并设定按钮完成开始计时、暂停、清零等功能。
2.利用proteus软件完成设计电路和仿真;3.掌握定时器的使用和数码管显示的方法;4.通过此次设计将单片机软硬件结合起来对程序进行编辑、校验,锻炼实践能力和理论联系实际的能力。
主要参考资料:[1]李全利,单片机原理及接口技术[M],高等教育出版社[2]王文杰,单片机应用技术[M],冶金工业出版社[3]朱清慧,PROTEUS教程——电子线路设计、制版与仿真[M],清华大学出版社[4]单片机实验指导书,天煌教仪[5]彭伟,单片机C语言程序设计实训100例[M],电子工业出版社完成期限:指导教师签名:课程负责人签名:年月日目录1.引言 (1)2.方案设计与论证 (3)2.1 直流调速系统 (3)2.1 检测系统 (4)2.3显示电路 (9)2.4系统原理图 (9)3.硬件设计 (10)3.1 80C51单片机硬件结构 (10)3.2 最小应用系统设计 (11)3.3前向通道设计 (12)3.4后向通道设计 (15)3.5显示电路设计 (17)4.软件设计 (20)4.1主程序设计 (20)4.2显示子程序设计 (24)4.3避障子程序设计 (25)4.4软件抗干扰技术 (26)4.5“看门狗”技术 (28)4.6可编程逻辑器件 (29)5.测试数据、测试结果分析 (30)6.结论 (31)致谢 (31)参考文献 (32)附录A 程序清单 (33)附录B 硬件原理图 (41)1.引言随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。
单片机课程设计任务书5(5篇)第一篇:单片机课程设计任务书5课程设计任务书学生姓名:石樊专业班级:光信科1102指导老师:陈梦苇工作单位:武汉理工大学理学院题目:定时闹铃的设计初始条件:电脑一台、protel作图软件、keilc51编译器、medwin仿真软件、isp在线编程软件要求完成的主要任务:(包括课程设计工作量及其技术要求以及说明书撰写等具体要求)1、技术要求:以89s51单片机为核心芯片,设计一个定时闹铃,要求如下:A、能够显示定时的时间;B、定时时间到让相应的发光二极管发光;2、主要任务:(1)复习有关课程,如数字电路、单片机等;(2)以89s51为核心,根据设计指标设计电路的框图;(3)根据要求设计出电路逻辑图和装配图;(4)查阅资料,确定所需各元器件型号和参数;(5)自拟调整测试方法,并调试电路使其达到设计指标要求;(6)撰写设计说明书,进行答辩。
3、撰写课程设计说明书:封面:题目,学院,专业,班级,姓名,学号,指导教师,日期任务书目录正文:1、技术指标;2、设计方案及其比较;3、实现方案;4、调试过程及结论;5、心得体会;6、参考文献时间安排:课程设计时间:18周:明确任务,查阅资料,初步设计电路原理图;19~20周:按照电路原理图布线,并调试通过。
按照要求撰写课程设计说明书。
指导教师签名:年月日系主任(或负责老师)签名:年月日第二篇:单片机课程设计任务书“单片机课程设计”任务书一、设计目的通过该课程设计,主要达到以下目的:①使学生增进对单片机系统的感性认识,加深对单片机理论方面的理解,为顺利完成毕业设计打基础。
②使学生掌握对单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口和串行口通讯等。
③进一步深化和巩固所学基础理论、专业知识及实验技能,提高学生的技术应用能力,使学生了解和掌握单片机应用系统的软、硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。
单片机课程设计书写一、课程目标知识目标:1. 让学生掌握单片机的基本原理,包括其内部结构、工作原理及功能特点;2. 使学生了解单片机编程的基本语法和编程技巧,能运用C语言或汇编语言进行程序设计;3. 帮助学生掌握单片机外围电路的设计方法,能够根据实际需求选用合适的传感器和执行器。
技能目标:1. 培养学生运用所学知识分析和解决实际问题的能力,能够完成简单的单片机控制系统设计;2. 提高学生的动手实践能力,能够独立完成单片机程序的编写、调试及下载;3. 培养学生团队协作和沟通表达的能力,能够在项目设计中与其他同学进行有效合作。
情感态度价值观目标:1. 激发学生对单片机及电子技术的兴趣,培养其主动学习和持续探究的精神;2. 培养学生的创新意识,鼓励他们在设计中勇于尝试,发挥自己的想象力和创造力;3. 增强学生的责任心,使他们认识到所学知识在实际应用中的重要性,为我国电子科技事业的发展贡献力量。
分析课程性质、学生特点和教学要求,本课程将目标分解为具体的学习成果,以便后续的教学设计和评估。
通过本课程的学习,学生将能够独立完成简单的单片机控制系统设计,具备一定的编程和实践能力,为后续深入学习电子技术打下坚实基础。
同时,课程注重培养学生的团队协作和沟通能力,提高他们的综合素质。
二、教学内容本课程教学内容主要包括以下几部分:1. 单片机基础知识:介绍单片机的内部结构、工作原理及功能特点,使学生了解单片机的基本概念,为后续学习打下基础。
教材章节:第一章 单片机概述2. 单片机编程语言:讲解C语言和汇编语言的基本语法,编程技巧,使学生掌握单片机编程的基本方法。
教材章节:第二章 单片机编程语言3. 单片机外围电路设计:介绍常用传感器、执行器的工作原理,指导学生如何根据实际需求选用合适的器件并进行外围电路设计。
教材章节:第三章 单片机外围电路设计4. 单片机程序设计:通过实例分析,让学生掌握程序设计的方法,培养学生编程思维。
单片机课程设计(论文)撰写说明
1.摘要部门撰写说明
摘要部分主要是对整个设计(论文)内容的提炼,相当于一篇文章的中心思想,要让读者看了你的摘要后就能很快的获取你的设计(论文)的主体内容。
常用的格式应该是:首先简单介绍一下所做课题的背景,然后介绍设计(论文)的主要工作,比如“设计(论文)对……的硬件进行了设计,包括……的设计,然后设计了系统的软件流程和程序源代码………,最后为了验证所设计的……正确性,在proteus环境下建立了……的仿真模型,仿真结果表明本设计多设计的是正确的”
2.设计(论文)总体架构说明
整个设计(论文)的总体架构主要分为前言部分(或者设计任务及要求部分)、整体方案设计、硬件电路设计、软件设计、系统仿真及调试、设计总结等。
前言部分是对所做课题的情况做一个简要的介绍(包括课题的意义、研究现状等),整体方案设计主要是根据设计任务书要求进行方案论证并确定设计方案,要给出整体方案框图并说明其工作原理。
硬件电路设计应包括:单片机最小系统设计(时钟电路设计、电源电路设计、键盘显示电路设计、RAM/ROM扩展等)、A/D、D/A、放大电路、传感器信号处理电路等设计(没有此部分的电路无需设计)。
软件设计主要包括软件流程图和程序源代码设计,要给出程序流程图(主程序流程图和各子程序图)和程序源代码。
系统仿真及调试主要包括仿真软件(系统)的简介、仿真模型的建立、仿真模型的运行及仿真结果与分析。
3.设计(论文)格式
设计(论文)格式严格按照邵阳学院毕业设计(论文)要求(详见邵阳学院网站)。
目录第一章绪论第二章元器件介绍2.2 单片机模块2.3温度检测模块2.4 时钟模块2.5 温度存储模块2.6 液晶显示模块第三章硬件设计第四章软件设计第五章结论第六章参考文献第一章绪论当今社会,温度测量系统被广泛的应用于社会生产、生活的各个领域。
在工业、环境检测、医疗、家庭等多方面均有应用。
同时单片机在电子产品中的应用已经越来越广泛,并且在很多电子产品中也将其用到温度检测和温度控制。
目前温度测量系统种类繁多,功能参差不齐。
有简单的应用于家庭的如电饭煲、太阳能热水器等。
也有用于航天级火箭、卫星发射高精度温度测量系统。
有简单的测量本地温度的有线温度测量系统,也有远程的无线温度测量系统。
有单点的温度测量系统,也有多点的温度测量系统。
现在最新的研究主流是将多个无线温度测量系统组成无线传感器网络,以增强温度测量的测量范围和精度。
单片机在检测和控制系统中得到广泛的应用, 温度则是系统常需要测量、控制和保持的一个量。
本文主要讨论了一种简单的温度测量系统。
系统使用DS18B20作为温度测量传感器,以AT89C2051单片机为核心来构成整个系统。
该系统具有温度测量和简单报警功能,可以满足初级工业应用的要求。
本文详细描述了该温度测量系统的系统设计方案、硬件电路设计和软件设计,并利用keil仿真软件对所开发的C语言程序进行了验证。
第二章元器件介绍2.2 单片机模块2.3温度检测模块2.4 时钟模块2.5 温度存储模块2.6 液晶显示模块第三章硬件设计第四章软件设计第五章结论第六章参考文献[1]丁元杰.单片微机原理及应用[M].北京:机械工业出版社,2003。
[2]马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2003.[3]何立明.单片机应用系统设计[M].北京:北京航空航天大学出版社,1990.[4]潘新民.微型计算机控制技术[M].北京:人民邮电技术出版社,1988.[5]杭和平,杨芳,谢飞.单片机原理与应用[M].北京:机械工业出版社,2008.[6]张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2008.[7]沙占友。
单片机原理及应用课程设计说明书1、绪论1.1主要内容:1:芯片选择:选择适当的单片机芯片是设计大气参数传感器的首要步骤。
考虑到电源要求、计算力、数据存储以及外设接口等因素,选择具备足够性能和功能的单片机芯片,选择STC89C52芯片。
2显示模块:使用BMP180气压传感器和DS18B20温度传感器,可以检测出大气温度和压强,并且DS18B20可以通过气压换算绝对高度,采用数码管进行显示温度和压强。
1.2设计原则:1.硬件和软件结合:在设计中,需要合理选择和使用单片机的硬件资源,并编写适合的软件程序来实现所需功能。
2.用户友好性:设计应重视用户界面的友好度,使用户能够方便地进行设置、调整和查看功能。
3.系统稳定性:设计应确保可调式电子日历系统的稳定性,以便可靠地显示和管理日期时间信息。
这涉及到正确的时钟源选择、合理的电源管理、抗干扰措施等。
4.易用性:大气参数检测仪应提供直观、易用的用户界面,以便用户能够方便地操作。
使用合适的输入设备如按键,以及直观的显示界面,可以提高用户的使用体验。
5.功能性:电子日历应该提供一系列实用的功能,如日期和时间显示、日程安排、提醒功能等。
这些功能应该能够满足用户的需求,并具备高可靠性和准确性。
6.可调性:设计中应该考虑到不同用户的个性化需求,提供可调式的显示格式、主题、颜色方案等选项。
这样用户可以根据自己的喜好和需求来设置和调整数码管的外观。
1.3技术标准:1.电气标准:设计过程需遵循相关的电气安全标准和EMC(电磁兼容性)要求。
2.编程语言和工具:根据单片机型号选择合适的编程语言和开发工具,如C语言和Keil等。
3.I/O接口标准:设计中使用的输入输出接口应符合通用的标准,如GPIO或I2C等2、硬件设计2.1 单片机系统图2. 1 单片机系统中间部分是控制芯片,左上角和右边的电阻都是上拉电阻,目的是限流。
左边中间的部分是复位电路,使用后按下实现复位功能。
左下角是晶振电路为系统提供时钟信号。
单片机课程设计说明书 (word文档+全)单片机课程设计说明书(word文档+全) 盐城工学院课程设计说明书(2015)单片机课程设计说明书用ADC0832设计的两路电压表(用LCD1602显示) 专业新能源科学与工程学生姓名班级学号指导教师完成日期2015年1 月28 日用ADC0832设计的两路电压表(用LCD1602显示) 摘要:本设计是简易两路数字电压表,数字电压表是采用数字化测量设计的电压仪表。
随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。
本设计利用单片机STC89C52借助软件实现数字显示功能、自动校准、LED显示,A/D转换器采用ADC0832构成数模转换电路。
该电压表测量范围在0~5V。
由于采用高性能的单片机芯片为核心,同时利用LED数码管为显示设备,这样就使显示清晰直观、读数准确,减少了因为人为因素所造成的测量误差事件,同时提高了测量的准确度。
根据电压表的主要功能,提出了设计方案并进行了论证。
设计包括硬件设计和软件设计两大部分。
硬件部分包括单片机最小系统、数模转换电路、显示模块四个部分。
首先在Proteus中设计并绘制了电路图,并编写程序使仿真正确。
然后便根据设计的电路在万能板上制作完成了实物并调试成功。
接着在SD301学习板上完成了同样的功能。
接着画了电路原理图,制作了小视频,完成了课程设计。
关键词:单片机,ADC0832,LCD1602,A/D转换,电压表目录 1 概述1 1.1 课程设计研究背景与意义1 1.2 课程设计内容2 2 设计方案论证与方案选择2 2.1 方案论证2 2.2 方案选择2 3 系统硬件电路设计3 3.1 单片机最小系统3 3.2 模数转换电路5 3.3 显示电路7 4 系统软件设计10 4.1 主程序10 4.2 A/D转换程序11 4.3液晶显示子程序11 5 系统调试13 6 结束语15 参考文献16 附录17 附录1 ADC0832设计的两路电压表电路原理图18 附录2 ADC0832设计的两路电压表Proteus仿真电路图19 附录3 ADC0832设计的两路电压表元器件清单20 附录4 ADC0832设计的两路电压表程序清单21 用ADC0832设计的两路电压表(用LCD1602显示) 1 概述1.1 课程设计研究背景与意义近年来计算机技术及微电子器件在工程技术中应用十分广泛。
一概述1.1 课程设计的目的和意义通过课程设计使我进一步熟悉了单片机的内部结构和工作原理,掌握了单片机应用系统设计的基本方法和步骤;通过利用MCS-51单片机,理解单片机在自动化装置中的作用以及掌握单片机的编程调试方法;通过设计一个简单的实际应用输入控制及显示系统,掌握protues和keil以及各种仿真软件的使用。
目前温度计的发展很快,从原始的玻璃管温度计发展到了现在的热电阻温度计、热电偶温度计、数字温度计、电子温度计等等,温度计中传感器是它的重要组成部分,它的精度、灵敏度基本决定了温度计的精度、测量范围、控制范围和用途等。
传感器应用极其广泛,目前已经研制出多种新型传感器。
但是,作为应用系统设计人员需要根据系统要求选用适宜的传感器,并与自己设计的系统连接起来,从而构成性能优良的监控系统。
1.2 任务及要求设计内容:所设计数字电压表应具有以下功能:(1)可以测量-50到110摄氏度内的温度。
(2)在4位LED数码管上显示温度,分别为百位、十位、个位和小数点后一位。
(3)测量精度误差在0.5摄氏度以内。
设计要求:1、根据题目要求进行系统总体设计。
2. 完成系统硬件电路的设计。
(1)硬件电路图。
(2)硬件电路说明。
3. 系统程序的设计。
(1)程序流程图。
(2)完整源程序。
4.完成的控制系统能达到题目的要求。
5.书写设计说明书。
二总体设计方案1 功能简介数码管直接显示DS18B20所测量的温度,超出-50~110℃范围时喇叭报警并且数码管开始闪烁,在温度范围内时喇叭停止报警并且数码管停止闪烁,运行期间可以随时进行复位操作。
2 设计思路AT89C51作为温度测试系统设计的核心器件,具有低电压供电和体积小等特点。
该器件是INTEL公司生产的MCS-5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS-51的CMOS 产品。
芯片中集成了CPU、RAM、ROM、定时/计数器和多功能I/O接口等计算机所需的基本功能部件。
烟台大学机091-2 课程设计目录一.设计任务................................ ...............二.功能与框图................................ ..........三.单片机部分................................ .........四.基本人机接口设计..........................五.附录................................ ........................六.总程序................................ ..................七.参考文献................................ ..............一.设计任务1.1设计题目:频率计1.2任务要求:检测十秒内人按按钮的最快频率,并用三位LED显示出实际检测的频率。
1.3设计内容:⑴设计思路:根据任务要求,确定设计要分为三个小部分:首先,设计程序检测出人按按键的频率;然后,设计一个比较子程序,筛选出人按按键的最快频率;最后,将筛选出的频率值输出到LED上进行显示。
其中最主要的是如何检测人按按钮的频率,对此,有三种设计方案,(1)通过定时器定时1S,检测人按按钮的频率;(2)通过检测相邻两次按键动作的时间间隔计算频率,也需用到定时器;(3)直接定时检测十秒内人按按键的频率(因为任务要求可以理解为不同的含义)。
综合考虑,我们选择了第一种设计方案。
(2)基本人机接口设计①完成显示接口设计。
②完成按键接口设计。
设计要求:①完成设计说明书;②软件设计;③硬件设计;④程序仿真;1.4设计步骤⑴理解并确定设计要求⑵确定整体控制方案⑶编写程序说明书附录附上电路图一张及汇编控制程序一份。
二.功能与框图按键接外部中断一→89C51单片机→LED 显示端口如上图,按键按下,外部中断一产生中断,此时定时器0已经开始计时,等时间到后记录数据,将数据送至单片机。
1 引言1.1 数字时钟的发展史电子钟有着很长的历史,从民国19年的电钟,研制始於60年代中期的国内电晶体、半导体管钟,到研制始於70年代末的石英电子钟,再到今天我们所用的智能电子钟。
以前的电子钟存在着很多缺点,其外观体积庞大,在功能上有死摆、走时时间不长、走时精确度不高等缺点。
如今的电子数字时钟无论是外观,还是在功能上,都有了很大的改进。
1.2 设计的目的与意义我们大学生的生活包括:学习、休息以及参与社会的多种实践活动,环环有条理,丰富多彩。
时钟的计时功能与我们的各种行为和活动有着密切的联系,于是时钟的作用便体现出来,只有合理安排时间,养成良好的时间观念,才能给我们的生活、学习带来极大的方便,这就需要电子钟时刻提醒我们。
因此,在这里设计一个较简单的电子钟,它能完成计时的功能。
这个时钟系统很简单,但对于我们学生很实用。
1.3 设计的基本思路与主要内容设计一个电子产品,首先了解它能实现的功能,时钟系统最基本的功能就是实现计时,在这里设计的数字数字时钟,它能实现计时的功能,给数字时钟加上电自动计时。
设计一个数字时钟,要求:开机时,显示00:00:00的时间开始计时,“秒”的调整,每按一次加1s;“分”的调整,每按一次加1min;“时”的调整,每按一次加1h。
计时满23:59:59时,返回00:00:00重新计时。
硬件设计很简单,主要包括:单片机、按键电路、驱动显示电路,以及LED 显示器四个部分。
单片机选用AT89C51芯片,它无须外扩程序存储器,设计电路很简单。
显示时、分、秒加两个分隔符,采用8位的数码管,用74LS245来驱动LED数码管显示字符。
以秒计数并显示时、分、秒。
其中秒和分为60进制,小时为24进制计数。
2 数字时钟系统的整体设计2.1 系统的功能要求以单片机技术为核心,充分应用各种外围电路元器件,设计一个通过显示器显示时间(时、分、秒)的数字时钟。
要求:1、开始时,时、分、秒显示为00:00:00;2、P0.0/AD0控制“秒”的调整,每按一次加1s;3、P0.1/AD1控制“分”的调整,每按一次加1min;4、P0.2/AD2控制“时”的调整,每按一次加1h。
单片机课程设计报告[5篇]第一篇:单片机课程设计报告《单片机课程设计报告》学校:专业:班级:姓名:学号:指导教师:摘要由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。
通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。
关键词单片机,程序,流水灯,数码管,温度计,键盘扫描,定时器等。
实验内容一、课程设计的目的以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。
在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。
实验一:键盘操作实验实验要求:通过本次实验实现对键盘的控制,操作数码管的显示数字。
实验程序:#include #include #include #include #define WR273 XBYTE[0XC000] #define RD244 XBYTE[0XC000] #define uchar unsigned char #define uint unsigned int sbit DQ =P1^0;uint count=0,x,buf[20],tim,flag;uchar fen,shi;uchar codetable_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80 ,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar codetable_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x0 0,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};voidled_clc(void){ XBYTE[0X8000]=0XFF;XBYTE[0X9000]=0XFF;XBYTE [0XA000]=0XFF;XBYTE[0XB000]=0XFF;}void delay(unsigned int i){ while(i--);} void delay_1ms(uint z){ uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} uchar key_test(){ WR273=0XF0;if((RD244&0X0F)!=0X0F)return 1;else return 0;}void time_init(){ TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=1;ET0=1;EA=1;} void time_display(){if(count==10000)count=0;XBYTE[0X8000]=table_16_1[coun t%10];XBYTE[0X9000]=table_16_1[count%100/10];XBYTE[0XA00 0]=table_16_1[count%1000/100];XBYTE[0XB000]=table_16_1[co unt/1000];} void TIME_SET(){ uchar a,b,c,d,key;while(flag==1){ led_clc();while(!key_test());a=keyscan();XBYTE[0XB000]=table_16_1[a];while(!key_test());b=keyscan();XBYTE[0XA000]=table_16_2[b];while(!key_test());c=keyscan();XBYTE[0X9000]=table_16_1[c];while(!key_test());d=keyscan();XBYTE[0X8000]=table_16_1[d] ;while(!key_test());key=keyscan();if(key==11){shi = a*10+b;fen = c*10+d;flag=0;} } } void TIME_DIS(){if(tim==60){ fen++;tim=0;if(fen==60){ shi++;fen=0;if(shi==24)shi=0;} } XBYTE[0X8000]=table_16_1[fen%10];XBYTE[0X9000]=table_16_1 [fen/10];XBYTE[0XA000]=table_16_2[shi%10];XBYTE[0XB000]=ta ble_16_1[shi/10];} void main(){ uint temp;led_clc();// serial_init();time_init();while(1){ temp=keyscan();if(temp==10)fla g=1;TIME_SET();//XBYTE[0X8000]=table_16_1[temp];//time_display();TIME_DIS();} } void time()interrupt 2 { uchar m;TH0=(65536-46080)/256;TL0=(65536-46080)%256;m++;if(m==20){ m=0;count++;tim++;} } void serial()interrupt 4 { if(RI==1){ x=SBUF;RI=0;} put_char(x);delay_1ms(5);}实验心得体会:通过本次实验,让我对单片机实验有了更深的了解,认为这个实验还是比较容易的,没有花太多的时间。
《单片机及控制系统》课程设计报告题目: LCD显示设计院(系):机电及自动化学院专业班级:电气工程及其自动化1204学生姓名:夏德君学号:20121131177指导教师:李思2015年 6 月 23日至2015年 7 月 3日华中科技大学武昌分校制《单片机及控制系统》课程设计任务书(2) LCD显示电路采用122×32A点阵式LCD液晶显示模块,内置SED1520液晶显示控制器,电路如图1所示。
图1 LCD显示电路(3) LCD及单片机的连接(如图2)1.摘要 (1)2.课程设计题目及要求 (2)2.1课程设计题目 (2)2.2课程设计要求 (2)3.设计分析 (2)3.1L C D显示原理 (2)3.2L C D显示电路 (2)3.3 LCD引脚说明……………………………………………………………33.4S E D1520的基本原理 (4)3.5S E D1520的指令系统 (5)3.6L C D及单片机的连接 (6)4.软件设计 (9)4.1程序流程 (9)4.2课程设计具体程序 (10)4.2.1L C D翻屏程序 (15)4.2.2L C D纵向滚屏程序 (29)4.2.3L C D横向滚屏程序 (39)5.总结....................................................................................参考文献 (3)1.摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于及控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
随着以计算机为轴心的各种各样信息处理装置的诞生,为适应这种新形势,信息家电,网络终端,广播-通信等用途的LCD市场也将迅速扩大,而且如今LCD发展方向不仅在于大屏幕,而且在中小屏幕方面,例如汽车导航系统,摄像机,数字式照相机,便携式电视,PDA(个人数字助理),娱乐/游戏机,摄影机等有着进一步的发展。
液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,近年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。
LCD可分为段式LCD、字符式LCD和点阵式LCD。
其中,段式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线以及汉字、动画,并且可以实现屏幕滚动、反转、闪烁等功能,用途十分广泛。
由此可见LCD的应用是如此广泛,所以用MPU控制液晶显示器是很普遍的应用。
本设计主要研究通过单片机控制来实现液晶模块字符的显示。
2. 课程设计题目及要求2.1课程设计题目LCD显示设计2.2课程设计要求了解122×32A点阵式LCD液晶显示的结构、工作原理、编程方法;SED1250的特性、内部结构、各个管脚的功能,以及获取字模的方法;编写一个完整的程序,按要求在LCD上显示内容。
具体显示效果为:(1)显示汉字:专业、姓名。
(2)实现显示内容的翻屏功能。
扩展:实现显示内容滚屏功能。
3.设计分析3.1 LCD显示的原理液晶是一呈液体状的化学物质,象磁场中的金属一样,当受到外界电场影响时,其分子会产生精确的有序排列。
如果对分子的排列加以适当的控制,液晶分子将会允许光线穿越。
无论是笔记本电脑还是桌面系统,采用的LCD显示屏都是由不同部分组成的分层结构。
位于最后面的一层是由荧光物质组成的可以发射光线的背光层。
背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层。
液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。
当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
3.2 LCD显示电路图3-1 LCD显示电路3.3 引脚说明表3.1 LCD引脚说明3.4 SED1520的基本原理SED为内置液晶显示器控制器,集行、列驱动器和控制器及一体,广泛应用于小型液晶显示模块中,内置2560位显示RAM区(32行80列),RAM中的1位数据控制液晶屏上一个像素的亮暗,“1”为亮,“0”为暗。
图3-2 液晶显屏(1)0-60列为左半屏;61-121为右半屏。
(2)每半屏页数分配一致。
(3)每页含8行80列(80个字节)。
(前61列有效)(4)每半屏为32行,共4页。
(5)每个汉字占16行,即用2页才能写完。
(6)液晶屏上最多能显示两行汉字(静态时最多显示16字)。
3.5 SED1520的指令系统表3.2SED1520的13条指令3.6 LCD及单片机的连接页面地址设置01 0 1 1 1 0P1 P0(0-3)列地址设置000 C6 C5 C4 C3 C2 C1 C0(0-79)启动改写方式01 1 1 0 0 00 0结束改写方式01 1 1 0 1 11 0读取状态字01BUSY ADC ON/OFF RESET 0 0 0 0写显示数据 1数据读显示数据 11数据图3-3 LCD 及单片机的连接单片机及LCD 模块之间有四种基本操作: 写命令:R/W 接低电平即A7为0 读状态:R/W 接高电平即A7为1 写显示数据:A0 接高电平读显示数据:A0 接低电平表3.3单片机及LCD 模块之间有四种基本操作4. 软件设计E2 F800H F880H F840H F8C0H4.1程序流程图4-1 初始化程序图4-2 清屏子程序图4-3 显示主程序4.2课程设计具体程序4.2.1 LCD翻屏程序#include "reg51.h"#include "absacc.h"#include "intrins.h"#define PD1 61 /* 122/2 分成左右两半屏(122x32) */ unsigned char hang ;unsigned char Column;unsigned char Page_ ; /* 页地址寄存器 D1,DO:页地址 */ unsigned char Code_ ; /* 字符代码寄存器 */unsigned char Command; /* 指令寄存器 */unsigned char LCDData; /* 数据寄存器 */#define CWADD1 XBYTE[0xfa00] /* 写指令代码地址(E1) */#define DWADD1 XBYTE[0xfa40] /* 写显示数据地址(E1) */#define CRADD1 XBYTE[0xfa80] /* 读状态字地址(E1) */#define DRADD1 XBYTE[0xfac0] /* 读显示数据地址(E1) */#define CWADD2 XBYTE[0xf800] ///* 写指令代码地址(E//2#define DWADD2 XBYTE[0xf840] ///* 写显示数进地址(E#define CRADD2 XBYTE[0xf880] ///* 读状态字地址(E2#define DRADD2 XBYTE[0xf8c0] ///* 读显示数据地址(E2#define _Nop() _nop_ (); _nop_ (); _nop_ (); _nop_ (); _nop_()/* 中文字模库 16x16点阵 */unsigned char code CCTAB[][32] ={/* 点阵:16x16提取点阵方向:纵向字节掉转:是字节方式:C语言 */0x20,0x20,0x24,0x24,0x24,0xE4,0x26,0x24, //武000x20,0xFF,0x20,0x22,0x2C,0x20,0x20,0x00,0x20,0x60,0x3F,0x20,0x20,0x1F,0x11,0x11,0x10,0x03,0x1C,0x20,0x40,0x80,0xE0,0x00,0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49, //昌010x49,0x49,0x49,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,0x00,0x04,0x04,0x04,0xE4,0x25,0x26,0x34,0x2C, //首02 0x24,0x26,0x25,0xF4,0x24,0x06,0x04,0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0xC0,0x00,0x02,0x0C, //义030x00,0x80,0x60,0x18,0x06,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x10,0x20,0x60,0xC0,0x40,0x00,0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96, //学04 0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0xFE,0x22,0x5A,0x96,0x0C,0x24,0x24, //院05 0x25,0x26,0x24,0x34,0xA4,0x14,0x0C,0x00,0x00,0xFF,0x04,0x08,0x87,0x81,0x41,0x31,0x0F,0x01,0x3F,0x41,0x41,0x41,0x70,0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, //电06 0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54, //气07 0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, //工08 0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E, //程09 0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00, // -1-0a 0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00, // -2-0b 0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00, // -0-0c0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00, // -4-0d 0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,0x00,0x20,0x90,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x85,0x80,0x80,0x00,0x00,0x20,0x10,0x8C,0x63,0x04,0xF4,0x94,0x94,0xF4,0x9F,0xF4,0x94,0x94,0xF6,0x04,0x00,0x02,0x01,0xFF,0x00,0x42,0x32,0x02,0x3A,0x42,0x46,0x5A,0x42,0x62,0x12,0x62,0x00,0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00/* 1.写指令代码子程序(E1) */void WriteCommandE1(){//while(IN(CRADD1) & 0x80); //实际的液晶操作中可以不判断是否忙CWADD1=Command;_Nop();}/* 2.写显示数据子程序(E1) */void WriteDataE1(){//while(IN(CRADD1) & 0x80);DWADD1=LCDData;_Nop();}/* 4.写指令代码子程序(E2) */void WriteCommandE2(){//while(IN(CRADD2) & 0x80); CWADD2=Command;_Nop();}/* 5.写显示数据子程序(E2) */ void WriteDataE2(){//while(IN(CRADD2) & 0x80); DWADD2=LCDData;_Nop();}/* 初始化程序 */void Init(){Command = 0xe2;WriteCommandE1();WriteCommandE2();Command = 0xa4;WriteCommandE1(); WriteCommandE2();Command = 0xa9; WriteCommandE1(); WriteCommandE2();Command = 0xa0; WriteCommandE1(); WriteCommandE2();Command = 0xc0; WriteCommandE1(); WriteCommandE2();Command = 0xaf; WriteCommandE1(); WriteCommandE2(); }/* 清屏 */void Clear(){unsigned char i,j;i = 0;do {Command = (i + 0xb8);/* 页地址设置 */WriteCommandE1();WriteCommandE2();Command = 0x00; /* 列地址设置为"0" */ WriteCommandE1();WriteCommandE2();j = 0x50; /* 一页清 80个字节 */ do {LCDData = 0x00; /* 显示数据为"0" */WriteDataE1();WriteDataE2();}while(--j !=0); /* 页内字节清零循环 */}while(++i !=4); /* 页地址暂存器加一 */ /* 显示区清零循环 */}/*延时函数*/void delay1(){unsigned int i;for(i=0;i<=50000;i++);}void delay2(){unsigned int i;for(i=0;i<=5000;i++);}/* 中文显示子程序 */void WriteCHN8x16(){unsigned char i,j,k;i = 0;j = 0;while(j<2) {Command = ((Page_ + j) & 0x03) | 0xb8; /* 设置页地址 */ WriteCommandE1();WriteCommandE2();k = Column; /* 列地址值 */while(k < Column + 8){if (k < PD1) { /* 为左半屏显示区域(E1) */ Command = k;WriteCommandE1(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE1(); /* 写字模数据 */} else{ /* 为右半屏显示区域(E2) */ Command = k-PD1;WriteCommandE2(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE2(); /* 写字模数据 */};i++;if( ++k >= PD1 * 2) break; /* 列地址是否超出显示范围 */ } ;j++;};}/* 中文显示程序 *//*闪烁(延时delay1,delay2)*/ void main(){Init();Clear();delay2();while(1){Clear();for(i=31;i>0;i--){hang=0xc0+i;Command = hang; WriteCommandE1();WriteCommandE2();Column = 0x00;Code_ = 0x00;WriteCHN16x16();Column = 0x10;WriteCHN16x16();Column = 0x20; Code_ = 0x02;WriteCHN16x16();Column = 0x30; Code_ = 0x03;WriteCHN16x16();Column = 0x40; Code_ = 0x04;WriteCHN16x16();Column = 0x50; Code_ = 0x05;WriteCHN16x16();Code_ = 0x06;WriteCHN16x16();Column = 0x10; Code_ = 0x07;WriteCHN16x16();Column = 0x20; Code_ = 0x08;WriteCHN16x16();Column = 0x30; Code_ = 0x09;WriteCHN16x16();Column = 0x40; Code_ = 0x0a;WriteCHN8x16();Column = 0x48;Code_ = 0x0b;WriteCHN8x16();Column = 0x50;Code_ = 0x0c;WriteCHN8x16();Column = 0x58;Code_ = 0x0d;WriteCHN8x16();Page_ = 0x02; //“夏”,0e Column = 0x30;Code_ = 0x0e;WriteCHN16x16();Page_ = 0x02; //“德”,0f Column = 0x40;Code_ = 0x0f;WriteCHN16x16();Page_ = 0x02; //“君”,10Column = 0x50;Code_ = 0x10;WriteCHN16x16();delay1();}}}4.2.2LCD纵向滚屏程序#include "reg51.h"#include "absacc.h"#include "intrins.h"#define PD1 61 /* 122/2 分成左右两半屏(122x32) */ unsigned char hang ;unsigned char Column;unsigned char Page_ ; /* 页地址寄存器 D1,DO:页地址 */ unsigned char Code_ ; /* 字符代码寄存器 */unsigned char Command; /* 指令寄存器 */unsigned char LCDData; /* 数据寄存器 */#define CWADD1 XBYTE[0xfa00] /* 写指令代码地址(E1) */#define DWADD1 XBYTE[0xfa40] /* 写显示数据地址(E1) */#define CRADD1 XBYTE[0xfa80] /* 读状态字地址(E1) */#define DRADD1 XBYTE[0xfac0] /* 读显示数据地址(E1) */#define CWADD2 XBYTE[0xf800] ///* 写指令代码地址(E//2#define DWADD2 XBYTE[0xf840] ///* 写显示数进地址(E#define CRADD2 XBYTE[0xf880] ///* 读状态字地址(E2#define DRADD2 XBYTE[0xf8c0] ///* 读显示数据地址(E2#define _Nop() _nop_ (); _nop_ (); _nop_ (); _nop_ (); _nop_ ()/* 中文字模库 16x16点阵 */unsigned char code CCTAB[][32] ={/* 点阵:16x16提取点阵方向:纵向字节掉转:是字节方式:C语言 */0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, //电06 0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54, //气07 0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, //工08 0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E, //程09 0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,0x00,0x20,0x90,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x85,0x80,0x80,0x00,0x00,0x20,0x10,0x8C,0x63,0x04,0xF4,0x94,0x94,0xF4,0x9F,0xF4,0x94,0x94,0xF6,0x04,0x00,0x02,0x01,0xFF,0x00,0x42,0x32,0x02,0x3A,0x42,0x46,0x5A,0x42,0x62,0x12,0x62,0x00,0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00};/* 1.写指令代码子程序(E1) */void WriteCommandE1(){//while(IN(CRADD1) & 0x80); //实际的液晶操作中可以不判断是否忙CWADD1=Command;_Nop();}/* 2.写显示数据子程序(E1) */ void WriteDataE1(){//while(IN(CRADD1) & 0x80); DWADD1=LCDData;_Nop();}/* 4.写指令代码子程序(E2) */ void WriteCommandE2(){//while(IN(CRADD2) & 0x80); CWADD2=Command;_Nop();}/* 5.写显示数据子程序(E2) */ void WriteDataE2(){//while(IN(CRADD2) & 0x80); DWADD2=LCDData;_Nop();}/* 初始化程序 */ void Init(){Command = 0xe2; WriteCommandE1(); WriteCommandE2();Command = 0xa4; WriteCommandE1(); WriteCommandE2();Command = 0xa9; WriteCommandE1(); WriteCommandE2();Command = 0xa0; WriteCommandE1(); WriteCommandE2();Command = 0xc0; WriteCommandE1();WriteCommandE2();Command = 0xaf;WriteCommandE1();WriteCommandE2();}/* 清屏 */void Clear(){unsigned char i,j;i = 0;do {Command = (i + 0xb8);/* 页地址设置 */WriteCommandE1();WriteCommandE2();Command = 0x00; /* 列地址设置为"0" */ WriteCommandE1();WriteCommandE2();j = 0x50; /* 一页清 80个字节 */ do {LCDData = 0x00; /* 显示数据为"0" */WriteDataE1();WriteDataE2();}while(--j !=0); /* 页内字节清零循环 */}while(++i !=4); /* 页地址暂存器加一 */ /* 显示区清零循环 */}/*延时函数*/void delay1(){unsigned int i;for(i=0;i<=20000;i++);}void delay2(){unsigned int i;for(i=0;i<=20000;i++);}/* 中文显示子程序 */void WriteCHN16x16(){unsigned char i,j,k;i = 0;j = 0;while(j<2) {Command = ((Page_ + j) & 0x03) | 0xb8; /* 设置页地址 */ WriteCommandE1();WriteCommandE2();k = Column; /* 列地址值 */while(k < Column + 16){if (k < PD1) { /* 为左半屏显示区域(E1) */ Command = k;WriteCommandE1(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE1(); /* 写字模数据 */} else{ /* 为右半屏显示区域(E2) */ Command = k-PD1;WriteCommandE2(); /* 设置列地址值 */LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */WriteDataE2(); /* 写字模数据 */};i++;if( ++k >= PD1 * 2) break; /* 列地址是否超出显示范围 */ } ;j++;};}/* 中文显示程序 *//*闪烁(延时delay1,delay2)*/void main(){unsigned char i;Init();Clear();while(1){Clear();for(i=31;i>0;i--){hang=0xc0+i;Command = hang&0x1f|0xc0; WriteCommandE1();WriteCommandE2();Column = 0x00;Code_ = 0x00;WriteCHN16x16();Column = 0x10;Code_ = 0x01;WriteCHN16x16();Column = 0x20;Code_ = 0x02;WriteCHN16x16();Column = 0x30;Code_ = 0x03;WriteCHN16x16();Column = 0x40; Code_ = 0x04;WriteCHN16x16();Column = 0x50; Code_ = 0x05;WriteCHN16x16();Column = 0x60; Code_ = 0x06;WriteCHN16x16();delay1();}}}4.2.3LCD横向滚屏程序#include "reg51.h"#include "absacc.h"#include "intrins.h"#define PD1 61 /* 122/2 分成左右两半屏(122x32) */ unsigned char hang ;unsigned char Column;unsigned char Page_ ; /* 页地址寄存器 D1,DO:页地址 */ unsigned char Code_ ; /* 字符代码寄存器 */unsigned char Command; /* 指令寄存器 */unsigned char LCDData; /* 数据寄存器 */#define CWADD1 XBYTE[0xfa00] /* 写指令代码地址(E1) */#define DWADD1 XBYTE[0xfa40] /* 写显示数据地址(E1) */#define CRADD1 XBYTE[0xfa80] /* 读状态字地址(E1) */#define DRADD1 XBYTE[0xfac0] /* 读显示数据地址(E1) */#define CWADD2 XBYTE[0xf800] ///* 写指令代码地址(E//2#define DWADD2 XBYTE[0xf840] ///* 写显示数进地址(E#define CRADD2 XBYTE[0xf880] ///* 读状态字地址(E2#define DRADD2 XBYTE[0xf8c0] ///* 读显示数据地址(E2#define _Nop() _nop_ (); _nop_ (); _nop_ (); _nop_ (); _nop_ ()/* 中文字模库 16x16点阵 */unsigned char code CCTAB[][32] ={/* 点阵:16x16提取点阵方向:纵向字节掉转:是字节方式:C语言 */0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, //电060x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54, //气070x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, //工080x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E, //程09 0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,0x00,0x20,0x90,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x85,0x80,0x80,0x00,0x00,0x20,0x10,0x8C,0x63,0x04,0xF4,0x94,0x94,0xF4,0x9F,0xF4,0x94,0x94,0xF6,0x04,0x00,0x02,0x01,0xFF,0x00,0x42,0x32,0x02,0x3A,0x42,0x46,0x5A,0x42,0x62,0x12,0x62,0x00,0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00};/* 1.写指令代码子程序(E1) */void WriteCommandE1(){//while(IN(CRADD1) & 0x80); //实际的液晶操作中可以不判断是否忙CWADD1=Command;_Nop();}/* 2.写显示数据子程序(E1) */void WriteDataE1(){//while(IN(CRADD1) & 0x80);DWADD1=LCDData;_Nop();}/* 4.写指令代码子程序(E2) */void WriteCommandE2(){//while(IN(CRADD2) & 0x80);CWADD2=Command;_Nop();}/* 5.写显示数据子程序(E2) */ void WriteDataE2(){//while(IN(CRADD2) & 0x80); DWADD2=LCDData;_Nop();}/* 初始化程序 */void Init(){Command = 0xe2;WriteCommandE1();WriteCommandE2();Command = 0xa4;WriteCommandE1();WriteCommandE2();。