版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1单片机应用系统的开发过程7.2单片机应用系统设计的基本原则与方法7.3单片机应用系统的一般结构7.4单片机应用系统的调试7.5单片机应用系统举例
——数字压力表的设计第7章单片机应用系统设计与开发7.1单片机应用系统的开发过程通常,开发一个单片机应用系统需要经过以下几个过程:·系统可行性分析;·系统需求分析;·系统方案设计;·系统构建;·系统调试与测试;·固化程序与电路,形成正式系统(或产品)。1.可行性分析可行性分析将对新系统开发研制的必要性及可实现性给出明确的结论,根据这一结论决定系统的开发研制工作是否进行下去。可行性分析通常从以下几个方面进行论证:①市场或用户需求;②经济效益和社会效益;③技术支持与开发环境;④现在的竞争力与未来的生命力。2.系统需求调查做好详细的系统需求分析是对研制新系统准确定位的关键。当建造一个新的单片机应用系统时,首先要调查市场或用户的需求,了解用户对未来新系统的希望和要求,通过对各种需求信息进行分析综合,得出市场或用户是否需要新系统的结论。
其次,应对国内外同类系统的状况进行调研。调研的主要内容包括:①原有系统的结构、功能以及存在的问题;②国内外同类系统的最新发展情况以及与新系统有关的各种技术资料;③同行业中哪些用户已经采用了新的系统,它们的结构、功能、使用情况以及所产生的经济效益。最后,经过对现状、用户、技术需求的详细分析总结,,整理出详尽具体的系统需求分析报告,作为下一步系统设计的主要依据。显然,需求分析报告的准确性将影响系统的成败。3.系统方案设计单片机应用系统的方案设计是系统实现的基础,这项工作要十分仔细,考虑周全。方案设计的主要依据是市场或用户的需求、应用环境状况、关键技术支持、同类系统经验借鉴及开发人员设计经验等。为完成系统功能,方案设计主要内容包括:①系统结构硬件设计;②系统软件与算法设计;③界面和可靠性设计等。4.系统构建这一阶段的工作是将前面产生的系统方案付诸实施,将硬件框图转化为具体电路,软件流程及算法用程序加以实现。设计硬件电路时,单片机的选用对电路结构及复杂度有较大影响。一个合适的单片机将会最大限度地降低其外围连接电路,从而简化整个系统的硬件。5.系统调试与测试系统调试检验所设计系统的正确与可靠,从中发现组装问题或设计错误。这里所指的设计错误,是指设计过程中所出现的小错误或局部错误,决不允许出现重大错误。
6.固化程序与电路,形成正式系统(或产品)开发、测试完系统后,要对单片机程序进行固化,对单片机系统硬件电路进行完善。作为正式系统(或产品),不仅要提供一个能正确可靠运行的系统(或产品),而且还应提供关于该系统(或产品)的全部文档。这些文档包括系统设计方案、硬件电原理图、软件程序清单、软/硬件功能说明、软/硬件装配说明书、系统操作手册等。
7.2单片机应用系统设计的
基本原则与方法
7.2.1单片机应用系统的基本设计原则单片机应用系统的基本设计原则是:①可靠性高;②性能价格比高;③操作简便;④设计周期短。
1.可靠性高高可靠性是系统应用的前提,在系统设计的每一个环节,都应该将可靠性作为首要的设计准则。
通常,高可靠性可从以下5个方面进行考虑:
(1)使用可靠性高的元器件;
(2)严格安装硬件设备及电路;
(3)采取必要的抗干扰措施,以防止环境干扰(如空间电磁辐射、强电设备启停、酸碱环境腐蚀等)、信号串扰、电源或地线干扰等影响系统的可靠性;
(4)请专家和有经验的设计人员对系统的设计方案严格把关;
(5)作必要的冗余设计或增加自诊断功能。2.性能价格比高单片机除体积小、功耗低等特点外,最大的优势在于高性能价格比。
3.操作简便如果所设计的产品人机交互过多,必然会给用户操作带来一定困难,也不利于最大限度地降低劳动强度。
4.设计周期短只有缩短设计周期,才能有效地降低设计费用,充分发挥新系统的技术优势,及早占领市场并具有一定的竞争力。
7.2.2单片机应用系统的一般设计方法在进行单片机应用系统方案设计时,可以下述一般设计方法作为指导。
1.确定系统功能与性能由需求分析可以确定出单片机应用系统的设计目标,这一目标包括系统功能与性能。系统功能主要有数据采集、数据处理、输出控制等。2.确定系统基本结构单片机应用系统结构一般是以单片机为核心外部扩展相关电路的形式。确定了系统中的单片机、存储器分配及输入/输出方式就可大体确定出单片机应用系统的基本组成。
1)单片机在系统详细方案设计时,先要确定单片机的型号。所选单片机的型号不同,组成的系统结构也就不同。
选择单片机的原则是:·有供货渠道;·最适宜实现系统的功能与性能;·有开发手段,且性价比较高。。以下列出较有影响的单片机型号及厂家,供选型参考。·8位机MCS-51系列Intel(美国英特尔公司)SUPER8,Z8系列Zilog(美国)F8,3870系列Fairchild(美国仙童公司)68HC05,68HC11系列Motorola(美国摩托罗拉公司)6500/1系列Rockwell(美国洛克威尔公司)TMS700系列TI(美国得克萨斯仪器公司)NS8070系列NS(美国国家半导体公司)CDP1800系列RCA(美国无线电公司)MN6800系列National(日本松下公司)μCOM87(μPD7800)系列NEC(日本电气公司)HD6301,HD6305,HD63L05Hitachi(日本日立公司)AT89C系列ATMEL公司·16位机8096(8098)系列Intel(美国英特尔公司)MK68200系列Mostek(美国莫斯特公司)TMS-9900系列TI公司HPC1604系列NS公司μPD78300系列NEC公司2)存储器分配不同的单片机具有不同的存储器组织。MCS-51单片机的程序存储器与数据存储器空间相互独立,工作寄存器与内部数据存储器共用一个存储空间,I/O端口则与外部数据存储器共用一个存储空间。3)I/O方式采用不同的输入/输出方式,对于单片机应用系统的软、硬件结构有直接的影响。在单片机应用系统中,常用的I/O方式主要有:
·无条件传送方式(同步传送方式);
·查询方式;
·中断方式。3.硬件设计单片机应用系统的硬件设计是围绕着单片机做外部功能扩展而展开的,其结构如图7―1所示,它主要涉及以下扩展部分的设计。
1)程序存储器若单片机内无片内程序存储器或存储容量不够时,需外部扩展程序存储器。外部扩展的存储器通常选用EPROM或E2PROM。EPROM集成度高、价格便宜,E2PROM则编程容易。当程序量较小时,使用E2PROM较方便;当程序量较大时,采用EPROM更经济。目前还有采用Flash存储器的,将会更加方便。图7―1单片机应用系统硬件的一般结构2)数据存储器数据存储器利用RAM构成。大多数单片机都提供了小容量的片内数据存储区,只有当片内数据存储区不够用时才扩展外部数据存储器。存储器的设计原则是:在存储容量满足的前提下,尽可能减少存储芯片的数量。建议使用大容量的存储芯片以减少存储器芯片数目,但应避免盲目地扩大存储容量。3)I/O接口由于外设多种多样,使得单片机与外设之间的接口电路也各不相同。因此,I/O接口常常是单片机应用系统中设计最复杂也是最困难的部分之一。
4)译码电路当需要外部扩展电路时,就需要设计译码电路。译码电路要尽可能简单,这就要求存储器空间分配合理,译码方式选择得当。
5)总线驱动器如果单片机外部扩展的器件较多,负载过重,就要考虑设计总线驱动器。6)抗干扰电路针对可能出现的各种干扰,应设计抗干扰电路。在单片机应用系统中,一个不可缺少的抗干扰电路就是抗电源干扰电路。最简单的实现方法是在系统弱电部分(以单片机为核心)的电源入口处对地跨接1个大电容(100μf左右)与1个小电容(01μf左右),在系统内部各芯片的电源端对地跨接1个小电容(001μf~0.1μf)。
4.软件设计软件是单片机应用系统中的一个重要组成部分。一般计算机应用系统的软件包括系统软件和用户软件,而单片机应用系统中的软件只有用户软件,即应用系统软件。软件设计的关键是确定软件应完成的任务及选择相应的软件结构。
1)任务确定根据系统软、硬件的功能分工,确定出软件应完成什么功能。作为实现控制功能的软件应明确控制对象、控制信号及控制时序;作为实现处理功能的软件应明确输入是什么、要做什么样的处理(即处理算法)、产生何种输出。2)软件结构设计软件结构设计与程序设计技术密切相关。程序设计技术则提供了程序设计的基本方法。在单片机应用系统中,最常用的程序设计方法是模块程序设计。模块程序设计具有结构清晰、功能明确、设计简便、程序模块可共享、便于功能扩展及便于程序维护等特点。为了编制模块程序,先要将软件功能划分为若干子功能模块,然后确定出各模块的输入、输出及相互间的联系。图7―2单片机应用系统软件的一般结构7.3单片机应用系统的一般结构1.单机结构单机结构是指在单片机应用系统中只有1个单片机。这种结构是目前单片机应用系统采用最多的一种结构,它适用于小规模的单片机应用系统。
典型的单机软硬件结构框图如图7-1与图7-2所示。前面所叙述的单片机应用系统的设计方法是针对单机结构而言的。单机结构的优点是设计简单、系统紧凑,对于小规模应用系统具有最佳的性能/价格比。但在大规模应用系统中,由于单机结构难以实现多任务处理及高速度运行,因而无法满足系统功能与性能的要求。2.多机结构多机结构是指在单片机应用系统中有多个单片机同时工作。这种结构是面向大规模单片机应用系统的。由于拓扑结构不同,多机结构又分为多级多机分散控制结构与局部网络结构,其中多级多机分步式控制结构在目前应用较为广泛。多级多机分步式控制结构的典型代表是两级多机分步式控制系统。它的拓扑结构如图7-3所示。图7―3两级多机分散控制系统结构如果单片机允许外部扩展数据存储器,则可以采取多端口共享存储器结构实现主机系统与单片机系统的通信。这也是目前采用较多的一种方法。多端口存储器互连结构如图7-4所示。主机系统与单片机系统都可以对共享存储器进行读写操作,这样,主机系统的信息与单片机系统的信息可以通过共享存储器加以交换,实现其通信目的。为了防止数据冲突,对共享存储器应作如下处理:
·给共享存储器每个端口规定不同的优先级,防止数据竞争。
·对共享存储器进行分区,使得每个单片机系统与主机系统间交换的数据仅在它们拥有的固定存储区上存储,防止数据串扰。图7―4多端口共享存储器互连结构7.4单片机应用系统的调试
单片机应用系统调试是系统开发的重要环节。当完成了单片机应用系统的硬件、软件设计和硬件组装后,便可进入单片机应用系统调试阶段。系统调试的目的是要查出用户系统中硬件设计与软件设计中存在的错误及可能出现的不协调问题,以便修改设计,最终使用户系统能正确可靠地工作。
最好能在方案设计阶段就考虑系统调试问题,如采取什么调试方法、使用何种调试仪器等,以便在系统方案设计时将必要的调试方法综合进软、硬件设计中,或提早做好调试准备工作。图7-5说明了系统调试的一般过程。图7―5系统调试的一般过程7.4.1单片机应用系统调试工具在单片机应用系统调试中,最常用的调试工具有以下几种。
1.单片机开发系统单片机开发系统(又称仿真器)的主要作用是:①系统硬件电路的诊断与检查;②程序的输入与修改;③硬件电路、程序的运行与调试;④程序在存储器中的固化。由于单片机本身不具有调试及输入程序的能力,因此单片机开发系统成为开发单片机应用系统不可缺少的工具。
2.万用表万用表主要用于测量硬件电路的通断、两点间阻值、测试点处稳定电流或电压值及其他静态工作状态。例如,当给某个集成芯片的输入端施加稳定输入时,可用万用表来测试其输出,通过测试值与预期值的比较,就可大致判定该芯片的工作是否正常。3.逻辑笔逻辑笔可以测试数字电路中测试点的电平状态(高或低)及脉冲信号的有无。假如要检测单片机扩展总线上连接的某译码器是否有译码信号输出,可编写一循环程序使译码器对一特定译码状态不断进行译码。
4.逻辑脉冲发生器与模拟信号发生器逻辑脉冲发生器能够产生不同宽度、幅度及频率的脉冲信号,它可作为数字电路的输入源。5.示波器示波器可以测量电平、模拟信号波形及频率,还可以同时观察两个或多个信号的波形及它们之间的相位差(双踪或多踪示波器)。它既可以对静态信号进行测试,也可以对动态信号进行测试,而且测试准确性好。它是任何电子系统调试维修的一种必备工具。
6.逻辑分析仪逻辑分析仪能够以单通道或多通道实时获取与触发事件相关的逻辑信号,可保存显示触发事件前后所获取的信号,供操作者随时观察,并作为软、硬件分析的依据,以便快速有效地查出软、硬件中的错误。逻辑分析仪主要用于动态调试中信号的捕获。7.4.2单片机应用系统的一般调试方法
1.硬件调试硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),通过执行开发系统有关命令或运行适当的测试程序(也可以是与硬件有关的部分用户程序段),检查用户系统硬件中存在的故障。硬件调试可分静态调试与动态调试两步进行。
1)静态调试静态调试是在用户系统未工作时的一种硬件检查。2)动态调试动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件间连接逻辑错误等的一种硬件检查。由于单片机应用系统的硬件动态调试是在开发系统的支持下完成的,故又称为联机仿真或联机调试。2.软件调试软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。软件调试的一般方法是先独立后联机、先分块后组合、先单步后连续。
1)先独立后联机
2)先分块后组合
3)先单步后连续3.系统联调系统联调是指让用户系统的软件在其硬件上实际运行,进行软、硬件联合调试,从中发现硬件故障或软、硬件设计错误。这是对用户系统检验的重要一关。系统联调主要解决以下问题:
(1)软、硬件能否按预定要求配合工作,如果不能,那么问题出在哪里?如何解决?(2)系统运行中是否有潜在的设计时难以预料的错误,如硬件延时过长造成工作时序不符合要求、布线不合理造成有信号串扰等。(3)系统的动态性能指标(包括精度、速度参数)是否满足设计要求。
4.现场调试一般情况下,通过系统联调后,用户系统就可以按照设计目标正常工作了。但在某些情况下,由于用户系统运行的环境较为复杂(如环境干扰较为严重、工作现场有腐蚀性气体等),在实际现场工作之前,环境对系统的影响无法预料,只能通过现场运行调试来发现问题,找出相应的解决办法;或者虽然已经在系统设计时考虑到抗环境干扰的对策,但是否行之有效,还必须通过用户系统在实际现场的运行来加以验证。7.5单片机应用系统举例
——数字压力表的设计
7.5.1数字压力表的功能需求数字压力表用于检测现场的实时压力。压力信号通过压力传感器模拟信号经放大电路输入到芯片A/D转换通道,实现模拟信号的数字化,再将采集到的压力信号以工程量的形式显示在LCD液晶显示器上。为了实现数字压力表的主要功能,首先设定五个参量:实时压力CURRENTPRESS:当前的压力值;上限值H_LIMIT:压力的高报警线(本系统高报警线为30MPa);下限值L_LIMIT:压力的低报警线(本系统低报警线为10MPa);压力量最大值H_range:压力量程的上限值(本系统上限值为40MPa);压力量最小值L_range:压力量程的下限值(本系统上限值为0MPa)。其次,还需设置S1(加键)、S2(减键)、S3(保存键)、S4(转换键)4个按键控制修改系统参量,满足不同用户的要求。其中S4的切换顺序依次为CURRENTPRESS、H_LIMIT、L_LIMIT、H_range、L_range。在切换到每种信号模式下时,就可以利用加减键S1、S2调节该设定值的大小,单按加减键则每次设定值加减1,若长按加减键则可以进行连续加减设定值。例如,若当前处于上限值显示的状态下,可以通过加减键实现上限值的改变来满足不同的需求,下限值、压力量最大值、压力量最小值也可以通过同样的方式进行修改。只有实时压力显示值是不能通过加减键来改变的,它显示的就是当前的压力值。
7.5.2数字压力表的总体结构设计根据压力表的功能需求,设计了如图7-6所示的压力表结构图,包括电源供电模块、CPU控制器、压力信号采集转换模块、按键输入电路、LCD显示模块、报警输出及指示电路、参数存储模块。采用单片机模块化设计,具有参数可修改、实时性强、运行稳定性高和抗干扰性强等特点。图7-6压力表的总体结构图
7.5.3数字压力表的硬件电路压力表具体的硬件电路原理图如图7-7所示。图7-7压力表的硬件电路图
7.5.4数字压力表的软件程序系统软件主要包括初始化程序和主程序两个部分。初始化程序主要由CPU各个端口初始化处理、初始数据加载、初始化A/D转换等操作组成。在主程序中主要完成外部输入模拟量的转换,外部按键操作的接受处理,状态参数的修改和保存,液晶显示器的显示更新、越限判断处理以及报警等工作。主程序流程图如图7-8所示,执行系统状态及参数初始化程序后,进入主循环程序,对信号进行A/D转换,然后启动越限判断子程序和检测按键,若有按键按下,则进入相应的按键处理子程序。在对按键进行处理的同时,显示缓冲区的数据也得到更新,等下一个循环到来,将显示缓冲区的数据送入显示电路模块。图7-8主程序流程图越限判断子程序流程图如图7-9所示。当实时压力大于上限设定值时,D1灯亮,蜂鸣器报警;当实时压力小于下限设定值时,D2灯亮同时蜂鸣器报警。图7-9越限判断子程序流程图按键扫描子程序流程图如图7-10所示。首先判断有无键按下,若为转换键,则在实时压力、上限值、下限值、压力最大值、压力最小值之间进行切换;若为加减键,则对相应的值进行加减操作;若为保存键,则保存所有的参数设置。图7-10键盘扫描子程序流程图本系统是在Keilc中进行C语言编程实现的。下面给出本系统的C语言清单,其中对于I2C总线芯片24C02C的所有操作与5.3.5节的实例完全相同,这里不在详细介绍。LCD显示的写指令和写数据函数也与6.5.4节完全相同。(1)主程序press.c:通过ADC0832芯片在LCD液晶显示器上显示压力数据。#include<lcd.h>#include<adc.h>#include<key.h>#include<i2c.h>#include<alarm.h>ucharkey_temp=0; //显示状态:0.实时压力1.上限显示2.下限显示
//3.压力最大值4.压力最小值ucharreal_press[]=".MPa"; //实时压力显示格式ucharrealPress=0; //实时压力值ucharh_limit=30,l_limit=10; //上下限值ucharh_range=40,l_range=0; //压力值范围ucharpress[]="0MPa"; //设定上下限及压力范围的显示格式ucharwrite_dat[4]; //保存上下限值和压力范围值/*******************************************数字量与工程量的转换函数入口参数:ADC转换后的数字量,压力最大值,压力最小值*******************************************/voidConvert_Value(uchardigtal,value_h,value_l){ ucharinterval; interval=value_h-value_l; //计算监测压力量程
realPress=(digtal*interval)/255+value_l;//实时压力换算
if(realPress>=100) real_press[0]=0x30+realPress/100;//实时压力的百位上的数值
else real_press[0]=0x20;//百位无值用空格代替,空格的ascii码为32 if(realPress>=10) real_press[1]=0x30+realPress/10%10;//实时压力的十位上的数值
else real_press[1]=0x20; //无值则空格表示
real_press[2]=0x30+realPress%10; //个位上的数值
real_press[4]=0x30+((digtal*interval*2)/51)%10; //小数点后一位上的数值}/********************************************上下限以及压力最大最小值的存储转换***********************************************/voidConvert(uchart){ if(t>=100) press[0]=0x30+t/100; //百位上的数值
else press[0]=0x20; //无值用空格表示
if(t>=10) press[1]=0x30+t/10%10; //十位上的数值
else press[1]=0x20; press[2]=0x30+t%10; //个位上的数值}/*****************************************************保存键处理函数:入口参数为key_temp即当前显示状态******************************************************/voidSAVE_Key_Deal(uchartemp){ write_dat[0]=h_limit; //保存上限值
write_dat[1]=l_limit; //保存下限值
write_dat[2]=h_range; //保存压力最大值
write_dat[3]=l_range; //保存压力最小值
I2C_Write_NByte(0,0,write_dat,4);//写入存储器}/*******************************************************加键处理函数:入口参数为key_temp即当前显示状态********************************************************/voidADD_Key_Deal(uchartemp){ switch(temp) { case1: h_limit++; //上限值加1 break; case2: l_limit++; //下限值加1 break; case3: h_range++; //压力最大值加1 break; case4: l_range++; //压力量最小值加1 break; default: break; } }/****************************************************减键处理函数:入口参数为key_temp即当前显示状态****************************************************/voidDEL_Key_Deal(uchartemp){ switch(temp) { case1: h_limit--; //上限值减1 break; case2: l_limit--; //下限值减1 break; case3: h_range--; //压力最大值减1 break; case4: l_range--; //压力最小值减1 break; default: break; } }/******************************************************屏幕显示的对应数据处理函数:入口参数为key_temp*******************************************************/voidDeal(uchartemp){ switch(temp) { case1: Convert(h_limit); //转换上限值屏显格式
break; case2: Convert(l_limit); //转换下限值屏显格式
break; case3: Convert(h_range);//压力最大值转换成屏显格式
break; case4: Convert(l_range); //压力最小值转换成屏显格式
break; default: break; } }voidmain(){ ucharchannel=0x02; //选择通道0 uintcount=0; //计数器
Lcd_Init(); while(1) { switch(Key_Scan()) //按键扫描
{ caseSET: //转换键
write_com(0x01);//显示清屏 count=0; if(key_temp>=4)//状态切换
key_temp=0; else key_temp++; break; caseADD: //加键
ADD_Key_Deal(key_temp); count=0; break; caseDEL: //减键
DEL_Key_Deal(key_temp); count=0; break; caseSAVE: //保存键
count=0; SAVE_Key_Deal(); break; caseNULL: Convert_Value(ADConvert(channel),h_range,l_range); //工程量转换
count++; if(count>100) //判断一定时间内无键按下,则跳转至实时压力显示
key_temp=0; break; } Judge_Limit(h_limit,l_limit,realPress); //判断越限
Deal(key_temp); //数据格式转换
Lcd_Display(key_temp,real_press,press); //刷新屏幕显示数据
} }(2)adc.h:实现ADC的初始化以及模拟量与数字量的转换ucharADConvert(ucharChannel){ uchari,adval=0,test=0; //定义局部变量并初始化
CLK=0; DI=1; //DI初始高电平在第一个时钟脉冲的下降沿前保持高电平,表示启动信号
_nop_(); CS=0; //片选使能
_nop_(); CLK=1; //CLK上升沿,起始位写入
_nop_(); CLK=0; _nop_(); DI=(bit)(0x02&Channel);//设定通道的第一位数据
CLK=1; _nop_(); CLK=0; _nop_(); DI=(bit)(0x01&Channel);//设定通道模式的第二位数据
CLK=1; //AD转化初始化完成
_nop_(); CLK=0; DI=1; for(i=0;i<8;i++) //从高位向低位读取八位AD值
{ CLK=1; _nop_(); CLK=0; if(DO)adval|=0x80>>i; _nop_(); } for(i=0;i<8;i++) //从低位向高位读取八位AD值
{ if(DO)test|=0x01<<i; _nop_(); CLK=1; _nop_(); CLK=0; _nop_(); } CS=1; //数据读取完成,释放所有的数据线
DI=1; _nop_(); CLK=1; if(adval==test) returnadval; //判断两个读取值是否相等,相等就把读取的数赋值给DAT} (3)key.h:键盘扫描,用来判断是否有键按下#defineSET0x01#defineADD0x02#defineDEL0x03#defineSAVE 0x04#defineNULL 0x05voidDelay(uinti) //延迟{ while(i--);}ucharKey_Scan()//键盘扫描函数{ if((P0&0xf0)!=0xf0) //判断有没有键按下
{ Delay(12000); //消除抖动
if((P0&0xf0)!=0xf0) //再次判断有没有键按下
{ switch(P0&0xf0) { case0x70:returnSET; //转换键按下
case0xE0:returnADD; //加键按下
case0xd0:returnDEL; //减键按下
case0xb0:returnSAVE; //保存键按下
default: returnNULL; } } } returnNULL;}(4)lcd.h:在LCD液晶显示器上显示不同的压力数据voidwrite_com(ucharcom) //具体编程见6.5.4voidwrite_com(ucharcom)voidwrite_1(ucharadd,uchar*dat)//在LCD的第一行写入数据{uchari=0;write_com(0x80+add);while(dat[i]!='\0'){ write_data(dat[i]); i++;}}voidwrite_2(ucharadd,uchar*dat) //在LCD的第二行写入数据{uchari=0;write_com(0x80+0x40+add);while(dat[i]!='\0'){ write_data(dat[i]); i++;}}//LCD屏显模式:根据不同的地址命令,显示不同的数据信息voidLcd_Display_Model(ucharaddr,uchar*value,uchar*value1){ write_1(addr,value); write_2(4,value1);}//LCD屏幕显示:调用LCD_Display_Model函数实现不同的数据显示voidLcd_Display(uchartemp,uchar*real_press,uchar*press){ ucharstr[]="CURRENTPRESS:"; ucharstr1[]="H_LIMIT:"; ucharstr2[]="L_LIMIT:"; ucharstr3[]="H_range:"; ucharstr4[]="L_range:"; switch(temp) { case0: Lcd_Display_Model(1,str,real_press);//显示实时压力
break; case1: Lcd_Display_Model(4,str1,press); //显示上限值
break; case2: Lcd_Display_Model(4,str2,press); //显示下限值
break; case3: Lcd_Display_Model(4,str3,press); //显示压力最大值
break; cas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45111-2024保护层分析(LOPA)、安全完整性等级(SIL)定级和验证质量控制导则
- BIM工程师-全国《BIM应用技能资格》考前冲刺2
- 浙江省温州市龙港市2024年中考数学二模试题附答案
- 电子政务提高公共服务效率
- 幼儿园大班数学测试题
- 高一化学教案:第二单元化学反应中的热量
- 2024高中地理第1章区域地理环境与人类活动第4节第1课时资源跨区域调配精练含解析湘教版必修3
- 2024高中语文第6单元墨子蚜第1课兼爱训练含解析新人教版选修先秦诸子蚜
- 2024高中语文第六单元文无定格贵在鲜活种树郭橐驼传作业含解析新人教版选修中国古代诗歌散文欣赏
- 2024高考化学一轮复习第一部分考点10氯及其化合物强化训练含解析
- 2025湖北襄阳市12345政府热线话务员招聘5人高频重点提升(共500题)附带答案详解
- 2025年河北省职业院校技能大赛智能节水系统设计与安装(高职组)考试题库(含答案)
- 2024年下半年鄂州市城市发展投资控股集团限公司社会招聘【27人】易考易错模拟试题(共500题)试卷后附参考答案
- GB/T 29498-2024木门窗通用技术要求
- 《职业院校与本科高校对口贯通分段培养协议书》
- 人教版(2024)英语七年级上册单词表
- 中医养生产业现状及发展趋势分析
- 2023年浙江省温州市中考数学真题含解析
- 司库体系建设
- 居间合同范本解
- 机电传动单向数控平台-矿大-机械电子-有图
评论
0/150
提交评论