微机课设实验报告
华中科技大学微机接口课程设计实验报告

《微机接口技术》课程设计报告设计题:人工降雨系统指导老师:谭支鹏、熊自立、陈永平设计时间:2013.10.28 至2013.11.1人工降雨系统设计一、课程设计目的1、掌握接口硬件开发平台的使用方法,利用现有的实验平台和PC机,组成一个微机模拟应用系统。
2、掌握基本接口电路的综合应用。
3、掌握接口电路的驱动程序和界面软件的设计与编制,学会调试与测试接口软件的一般方法。
4、微机接口技术及接口芯片的综合应用。
5、在干旱了一段时间后,进行人工降雨。
不同的季节,大自然不降雨对生活生产的影响不同,要控制好等待多久才进行人工降雨,以及降雨的量。
二、课程设计要求设计一个模拟的微机应用系统。
要求该系统综合应用实验台上的多种资源(并行接口、串行接口及其它接口和传感器)设计满足选题要求的符合实际应用的硬件系统,编制主控程序;执行元件驱动程序;通信程序等相应的软件,实现主控中心微机与终端机的远距离传送以及远程控制或监测功能。
由一个主控机(上位机)和若干个下位机组成,上位机与下位机利用串行通讯接口进行连接,构成一个完整系统。
主控机负责数据处理,下位机负责接口访问,接口所需的芯片功能需要通过FPGA自己设计实现。
基于FPGA设计的芯片功能可以是一个完整的功能芯片,也可以只是你在应用需要的芯片某项功能即可。
验收的时候会根据实现的情况作出评价。
(1)主控机:在屏幕上用数字、图形、表格、曲线等方式直观地显示数据/状态处理的结果和过程。
(2)下位机:用实验台的声光部件描述当前监控/操作的工作状态,按主控机的命令驱动执行元件并返回状态和结果。
题目要求:1.用实验台上的信号电源模拟湿度计的信号电压。
2.用实验台上的LED和扬声器模拟加湿动作及报警信号。
3.用实验台上的步进电机模拟水泵动作。
4.上位机实现图形监控。
(模拟)三、课程设计内容及过程1.系统总体结构图1) 系统硬件由主控机(其中一台微机)、终端机(另一台位微机)和执行部件组成。
《计算机辅助教学》实验报告

《计算机辅助教学》实验报告
实验名称:计算机辅助教学
实验目的:通过计算机辅助教学软件,提高学生的学习效果和学习兴趣。
实验步骤:
1. 选择一款计算机辅助教学软件,如微课堂、智慧课堂等。
2. 将该软件安装在教室的电脑上,并确保软件能够正常运行。
3. 将教学内容制作成电子课件并导入到软件中。
4. 让学生在电脑前坐下,打开软件并选择相应的课件。
5. 通过软件展示课件的内容,包括文字、图片、视频等多媒体形式。
6. 让学生跟随课件上的指引,完成相关的学习任务。
7. 在学习过程中,教师可以利用软件提供的互动功能与学生进行互动,解答学生的问题。
8. 根据学生的学习情况,及时调整教学内容和教学方式。
实验结果:通过计算机辅助教学软件,学生的学习效果得到了提高,学生对课程内容表现出了更高的兴趣和积极性。
教师能够更好地掌握学生的学习情况,及时进行教学调整。
实验结论:计算机辅助教学能够有效提高学生的学习效果和学习兴趣,提供了更多的学习资源和互动方式,有助于教师进行个性化教学和差异化指导。
微机原理与接口技术-拆字程序

《微机原理与接口技术》课程实验报告
一、实验目的和要求
实验目的:掌握汇编语言设计和调试方式。
实验要求:通过本实验,掌握8051汇编程序设计以及仿真实验的流程及方法。
二、实验环境
DVCC单片机仿真实验系统独立工作以及连PC机。
三、实验内容及实施
【实验内容】把7000H的内容拆开,高位送7001H低位,低位送7002H低位。
7001H、7002H高位清零,一般本程序用于把数据送显示缓冲区使用。
【源程序】
【实验步骤】
(1)先用存储器读写方法将7000H单元置成34H。
(2)用单步、断点或连续执行程序的方法从起始地址0050H开始运行程序(输人0050H后按STEP为单步,按EXEC为连续)。
(3)按MON键或RESET键退出。
(4)检查7001H和7002H单元中的内容应为03H和04H
四、实验结果
五、实验讨论
用断点方式调试本程序的方法:把光标指向语句左边,然后单击,会出现一个符号。
同样的方法对需要在结束语句左边做同样的事情,然后全速运行,按下停止按钮,程序就会在相应的位置停止。
通过本次实验,对单片机的RAM和ROM的使用有了更加透彻的理解,熟悉了仿真实验系统的键盘操作以及基本仿真软件的使用,并且逐步掌握汇编语言设计和调试方式。
左右来回循环的流水灯实验报告

青 岛 科 技 大 学微机原理与接口技术综合课程设计(报告)题 目 __________________________________指导教师__________________________ 学生姓名__________________________ 学生学号_________________________________________________________院(部)____________________________专业________________班______年 ___月 ___日直流电机控制综合实验 周艳平宋雪英 01 信息科学技术学院计算机科学与技术0961 2012 12 27摘要 (2)1、单片机概述 (2)2、仿真软件介绍 (2)3、需求分析 (3)一、课程设计目的 (3)二、课程设计要求 (4)三、实验内容 (4)1、设计任务与要求 (4)2、系统分析 (4)1).硬件电路设计(画出原理图、接线图) (5)2)软件框图 (7)3、用keil建项目流程 (8)4、程序清单 (9)4、系统调试 (11)四、设计总结(结论) (12)摘要近年来,随着电子技术和微型计算机的发展,单片机的档次不断提高,起应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到广泛的应用、成为现代电子系统中最重要的智能化的核心部件。
而AT89C51就是其中一种,它是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMO8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
本课程设计介绍一种LED小灯控制系统的设计方法,以单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。
能够通过按键控制8个LED小灯从左到右依次点亮。
关键字:单片机、LED流水灯1、单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
微机原理实验-外部中断实验

下面是赠送的几篇网络励志文章需要的便宜可以好好阅读下,不需要的朋友可以下载后编辑删除!!谢谢!!出路出路,走出去才有路“出路出路,走出去才有路。
”这是我妈常说的一句话,每当我面临困难及有畏难情绪的时候,我妈就用这句话来鼓励我。
一定有很多人想说:“这还在北京混个什么劲儿啊!”但他每天都乐呵呵的,就算把快递送错了也乐呵呵的。
某天,他突然递给我一堆其他公司的快递单跟我说:“我开了家快递公司,你看得上我就用我家的吧。
”我有点惊愕,有一种“哎呦喂,张老板好,今天还能三蹦子顺我吗”的感慨。
之后我却很少见他来,我以为是他孩子出生了休假去了。
再然后,我就只能见到单子见不到他了。
某天,我问起他们公司的快递员,小伙子说老板去上海了,在上海开了家新公司。
我很杞人忧天地问他:“那上海的市场不激烈吗?新快递怎么驻足啊!”小伙子嘿嘿一笑说:“我们老板肯定有办法呗!他都过去好几个月了,据说干得很不错呢!”“那老婆孩子呢?孩子不是刚生还很小吗?”“过去了,一起去上海了!”那个瞬间,我回头看了一眼办公室里坐着的各种愁眉苦脸的同事,并且举起手机黑屏幕照了一下我自己的脸,一股“人生已经如此的艰难,有些事情就不要拆穿”的气息冉冉升起。
并不是说都跳槽出去开公司才厉害,在公司瞪着眼睛看屏幕就是没发展,我是想说,只有勇气才能让自己作出改变。
《拒绝平庸》里有一句话:很多时候我们为什么嫉妒别人的成功?正是因为知道做成一件事不容易又不愿意去做,然后又对自己的懒惰和无能产生愤怒,只能靠嫉妒和诋毁来平衡。
其实走出去不一定非要走到什么地方去,而是更强调改变自己不满意的现状。
有人问我那你常说要坚持,天天跑出去怎么坚持?其实要坚持的是一种信仰,而不是一个地方,如果你觉得一个地方让你活得特别难受,工作得特别憋屈,除了吐槽和压抑没别的想法,那就要考虑走出去。
就像歌词里说的:“梦想失败了,那就换一个梦想。
”不能说外面都是大好前程,但肯定你会认识新的人,有新的机会,甚至改头换面重新做人。
虚拟仪器课程设计实验报告

《微机化仪器综合设计与实践》实验指导书李扬周琦广东工业大学机电工程学院2015 6月印刷精选文库目录精选文库实验六基于PID算法的可控硅水温自动调节系统设计一、实验目的和要求1.掌握虚拟仪器高级语言Lab VIEW 或Lab Windows/CVI 的流程图和软仪器面板的编程设计方法,熟悉数据处理模块、信号分析模块、仪器控制模块等各种软件模块的应用。
2.掌握数据采集硬件的低层驱动程序(C 语言/汇编语言)设计、调试及嵌入Lab VIEW 的技术。
3.学习基于PID的比例积分微分程序编写方法。
4.了解可控硅的的温度控制特点和原理。
5.熟悉CB-68LP接线端子板各接口,利用CB-68LP端子板和PCI-6023E数据采集卡进行模拟量和数字量的转换及相关数据采集。
二、实验主要仪器设备和材料(1)装有lab windows/CVI 软件PC 一台(2)PC-DAQ/PCI 卡(3)CB-68LP端子板(4)变送器(型号 SBWZ-2460)(5)可控硅(6)热电偶三、实验内容和要求1、实验内容1)、对水温进行数据采样:先把水温加热至某个温度值(100℃左右,利用万能表测试相应引脚的输出电压,温度每下降1 摄氏度,就马上记录输出电压值。
2)、对采样数据进行处理:通过观察可知,电压与温度不成线性关系,是一条曲线,因此,本设计采用分段直线拟合。
得出电压与温度的对应关系。
3)、用户界面设计:用Lab windows/CVI 软件进行用户界面开发,并进行编程。
具体程序见后面。
4)、进行调试:把PC 和其他设备连接好,测试程序,设置PID 参数,观察控制效果,确立PID 参数。
5)、重新对数据采样:开始采样时,因为温度和电压值都不断发生变化,而温度计显示变化相对于电压变化有一定的滞后,造成微机上温度显示数值比温度计发生一定量的偏移,造成较大误差。
因此,此次采样利用刚开发的程序控制炉温恒定,观察电压变化范围,记录多个电压值,求其平均值。
微机原理实验报告

微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。
⼆、实验要求1.掌握DEBUG的使⽤,调试程序。
2.读懂程序中各条指令,说明程序功能。
三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。
100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。
2.加深对指令的理解。
⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。
请编⼀程序将AX的内容和BX的内容进⾏交换。
请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。
2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。
在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。
三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。
微机原理与单片机实验报告

微机原理与单片机实验报告Prepared on 22 November 2020北京联合大学信息学院实验报告课程名称:微型计算机原理学号:姓名:2012 年 6 月 9 日目录实验1 EMU8086模拟器的使用一实验要求利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的:熟悉EMU8086实验环境三 EMU8086环境:1 模拟器编辑窗口2 模拟器调试窗口四实验内容实验内容1:新建文件。
运行 emu80861. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码:MOV AX, 1020HMOV BX, 2030HMOV AX, BXADD AX, BXMOV [BX], AXMOV [2032H], AXHLT2. 编译:单击“编译”按钮,对程序段进行编译;3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。
4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。
5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。
6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。
7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为 400毫秒,单击“全速”按钮,运行程序,8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序的关联。
10.将“存储器”中地址改为1000:0100,并将从其开始的连续10个单元的内容改为55H。
实验内容2:运行范例在模拟器编辑窗口中1.点击典型范例2.选择:hellow,word程序,编译,运行,观察结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机课程设计数字温度计实验报告一、题目:上位机:完成界面设计与通讯程序1、能够显示两个温度值,温度精度0.5度,当超出报警温度阈值时,温度值后又提示字幕。
2、能够设定报警温度阈值3、每隔一秒将温度值保存至文件存档。
当超出报警温度阈值时,温度值后面有提示。
4、可以对串口进行设置。
下位机:完成电路设计与控制程序1、用两个DS18B20测温。
2、通过串口与上位机通信,并传输温度值,接受阈值设置。
3、当超出报警温度阈值时,有相应指示灯提示。
4、将当前温度显示LCD1602液晶屏上,当超出报警温度阈值时,温度值后有提示。
二、原理DS18B20是DALLS公司推出的“1—wire”接口的数字温度传感器,可以直接将温度转换为9~12串行信号供单片机处理。
由于这种传感器只有一个IO口,是单总线串行接口,单片机可以利用串行通信将数据读出并按照LCD 的协议显示在1602液晶屏上。
同时,通过PC机与单片机之间的串行通信,可以用PC机控制温度的警戒值以及记录不同时间测量的温度。
三、原理图图3.1 LCD、18B20以及串口与单片机最小系统连接图图3.2电源模块四、流程图1、上位机流程图图4.1.1发送数据流程图图4.1.2 接受数据流程图2、下位机流程图图4.2.2读出温度子程序流程图图4.2.1总流程图图4.2.4计算温度子程序流程图图4.2.3 温度转换流程图图4.2.6温度值显示在LCD1602上图4.2.5 显示数据刷新子程序五、源程序1、上位机程序:见附录1;2、下位机程序:见附录2;3、实验结果显示(上位机):见附录3。
六、问题与解决1、电路图绘制使用Altium Designer绘制电路图,因为是现学绘制,因此对于绘制过程中的单片机等器件的封装问题由于软件数据库的容量,其中并没有提供单片机芯片的封装。
因此是询问了同学以及上网下载数据库,对于MAX232则是直接用矩形框绘制。
2、下位机程序编写下位机的程序主要用keil4编写,出现的问题是遗忘了很多编写注意事项,只能采集温度,而无法正常显示在LCD1602液晶屏上,查找了LCD1602的数据手册以及基础显示程序,可以显示温度。
但是,在于上位机的信号传送时又出问题,只能发送数据,无法接收,以至于无法控制阈值温度,后来队友侯棋文解决了。
七、总结本次课程设计题目是数字温度计,分为上位机程序界面曲线阈值控制以及下位机程序以及下位机的温度采集显示。
上位机程序用C#编写,下位机用keil编写,我主要是下位机程序。
从DS18B20的初始化采集温度,到LCD1602的初始化显示温度学到了很多也暴露了很多基础不扎实的问题。
串口的通信数据传送还未把握住。
不过收获了很多,重新系统的学习了程序的编写及其具体使用,对于主动学习有了跟明显的理解。
同事注重问题交流以及询问。
八、工作量说明侯棋文负责上位机程序的编写(c#)绘制流程图以及指导队友下位机的程序编写;林天颂负责下位机程序的编写(c)绘制流程图和电路图的绘制。
附录1:下位机程序//头文件:#include "reg51.h"#include "ds18b20.h" //引入DS18B20头文件/********宏定义***********************************************************/#define LCD_Data P0#define Busy 0x80 //用于检测LCD状态字中的Busy标识//变量定义:unsigned char datasend[3];unsigned char ly_dis[4];//定义显示缓冲区unsigned char l_posit=0; //显示位置//引脚定义:sbit LCD_RS=P1^0;//定义引脚sbit LCD_RW=P1^1;sbit LCD_E=P1^2;/********函数声明*************************************************************/void WriteDataLCD(unsigned char WDLCD); //写数据void WriteCommandLCD(unsigned char WCLCD,BuysC); //写命令unsigned char ReadDataLCD(void); //读数据unsigned char ReadStatusLCD(void); //读状态void LCDInit(void); //初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //相应坐标显示字节内容void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); //相应坐标开始显示一串内容void Delay5Ms(void); //延时void Delay400Ms(void); //延时//函数声明://void display(void);//显示函数,显示缓冲区内容void delay(void);void delaysend(int ms){int i;for (i=0;i<ms;i++){;}}//主函数,C语言的入口函数:void main(){float temp;int canhigh = 0;int canlow = 0;unsigned int i=0;float tt;int ltemp;unsigned char ldat;TMOD=0X20; //设置定时器1为模式2,做为波特率发生器TL1=0xF3; //2400波特率的初值,板子使用12M晶振,初值=256-12000000/32/12/2400TH1=0xF3; //TR1=1; //启动波特率发生SCON=0x50;datasend[0] = 0xff;//lcd开始Delay400Ms(); //启动等待,等LCD讲入工作状态LCDInit(); //初始化Delay5Ms(); //延时片刻(可不要)while(1){if(i==0)tmpchange(); //温度转换if(i==100){tt=tmp()*0.0625; //得到真实十进制温度值,因为DS18B20//可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度。
ltemp=tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
if(ltemp<0){ //判断第一位显示整数还是负号ly_dis[0]=0xbf;ltemp=0-ltemp;}elsely_dis[0]=ltemp/1000;//显示百位值ltemp=ltemp%1000;ly_dis[1]=ltemp/100; //显示温度十位值ltemp=ltemp%100;ly_dis[2]=ltemp/10; //显示温度个位值ly_dis[3]=ltemp%10; //显示小数点后一位datasend[1] = ly_dis[0]*10+ly_dis[1];datasend[2] = ly_dis[2]*10+ly_dis[3];SBUF=datasend[0]; //将接收到的数据发送出去while(!TI); //等待发送完成TI=0;delaysend(500);SBUF=datasend[1]; //将接收到的数据发送出去while(!TI); //等待发送完成TI=0;delaysend(500);SBUF=datasend[2]; //将接收到的数据发送出去while(!TI); //等待发送完成TI=0;delaysend(500);}DisplayOneChar(0,1,(unsigned char)(48+ly_dis[0])); //将数据在LCD1602上显示DisplayOneChar(1,1,(unsigned char)(48+ly_dis[1]));DisplayOneChar(2,1,(unsigned char)(48+ly_dis[2]));DisplayOneChar(3,1,46);DisplayOneChar(4,1,(unsigned char)(48+ly_dis[3]));temp = ly_dis[0]*100+ly_dis[1]*10+ly_dis[2]+ly_dis[3]/10.0;if (temp>32&&canhigh ==0) //如果超过阈值上限显示警告“HIGH”{canhigh = 1;DisplayOneChar(0,0,'H');DisplayOneChar(1,0,'I');DisplayOneChar(2,0,'G');DisplayOneChar(3,0,'H');}if (temp<32&& canhigh==1) //如果超过阈值上限,在显示警告同时显示温度值{DisplayOneChar(0,0,' ');DisplayOneChar(1,0,' ');DisplayOneChar(2,0,' ');DisplayOneChar(3,0,' ');canhigh = 0;}if (temp<29&&canlow ==0) //如果低于阈值下限显示警告“LOW”{canlow = 1;DisplayOneChar(0,0,'L');DisplayOneChar(1,0,'O');DisplayOneChar(2,0,'W');}if (temp>29&&canlow ==1) //如果低于阈值上下限,在显示警告同时显示温度值{canlow = 0;DisplayOneChar(0,0,' ');DisplayOneChar(1,0,' ');DisplayOneChar(2,0,' ');// DisplayOneChar(3,0,'H');}i++;if(i==3000)i=0;//display(); //调用显示delay();}}/***********写数据********************************************************/void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD(); //检测忙LCD_Data = WDLCD;LCD_RS = 1;LCD_RW = 0;LCD_E = 0; //若晶振速度太高可以在这后加小的延时LCD_E = 0; //延时LCD_E = 1;}/***********写指令********************************************************/ void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data = WCLCD;LCD_RS = 0;LCD_RW = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;}/***********读数据********************************************************/ unsigned char ReadDataLCD(void){LCD_RS = 1;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;return(LCD_Data);}/***********读状态*******************************************************/ unsigned char ReadStatusLCD(void){LCD_Data = 0xFF;LCD_RS = 0;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;while (LCD_Data & Busy); //检测忙信号return(LCD_Data);}/***********初始化********************************************************/ void LCDInit(void){LCD_Data = 0;WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}/***********按指定位置显示一个字符*******************************************/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码WriteDataLCD(DData);}/***********按指定位置显示一串字符*****************************************/ void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData){unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20){ //若到达字串尾则退出if (X <= 0xF){ //X坐标应小于0xFDisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}/***********短延时********************************************************/ void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}/***********长延时********************************************************/ void Delay400Ms(void){unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}}//延时子函数,短暂延时void delay(void){unsigned char i=10;while(i--);}附录2:上位机程序附录3:实验结果上位机界面截图:。