单片机课程设计说明书撰写
- 格式: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.设计(论文)格式
设计(论文)格式严格按照邵阳学院毕业设计(论文)要求(详见邵阳学院网站)。
《单片机及控制系统》课程设计报告题目: 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();。