PB基本语句,循环语句和PC机与单片机实时通信系统的设计与实现_第1页
PB基本语句,循环语句和PC机与单片机实时通信系统的设计与实现_第2页
PB基本语句,循环语句和PC机与单片机实时通信系统的设计与实现_第3页
PB基本语句,循环语句和PC机与单片机实时通信系统的设计与实现_第4页
PB基本语句,循环语句和PC机与单片机实时通信系统的设计与实现_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PC机与单片机实时通信系统的设计与实现PAGEPAGE1PB基本语句

一、赋值语句

赋值语句用于给变量、对象属性赋值,这是应用程序中使用最频繁的语句,其语法格式为:variablename=expression

其中:⑴variablename是变量名或对象属性;

⑵expression是表达式,其数据类型应该与variablename的数据类型兼容。

下面是赋值语句的几个简单示例:

Address="北京"

TaxRate=.05

Age=30

mle.text="北京欢迎你"

PowerScript的赋值语句不支持多重赋值,也就是说,一条赋值语句只对一个变量赋值,不能同时对多个变量赋值。

下面的语句:A=B=0

在有些编程语言中同时把A和B均赋值0,但PowerScript中,该语句等价于:

A=(B=0)

其意义为,检查B等于0是否成立,成立时将TRUE赋给变量A,否则把FALSE赋给变量A。如果A不是Boolean类型的变量,则上述语句将引起编译错误。

二、条件语句

IF语句有两种形式,下面我们按照从简单到复杂的次序逐一介绍。

1.单行IF...THEN语句

单行IF...THEN语句的格式为:

IF逻辑表达式THEN语句1[ELSE语句2]

单行IF...THEN语句书写时整条语句写在一行上,当逻辑表达式的结果为True时执行语句1,否则执行语句2(如果有该子句的话)。

例如:IFsle_State.text="BJ"THEN

MessageBox("欢迎","北京")

2.多行IF...THEN语句

多行IF...THEN语句的语法格式为:

IF逻辑表达式1THEN

语句1

[ELSEIF逻辑表达式2THEN

语句2

...

][ELSE

语句n]

ENDIF

本语句的执行过程为:计算逻辑表达式1,如果其结果为True,则执行语句1,然后离开整个IF语句;否则计算逻辑表达式2,如果其结果为True,则执行语句2,然后离开整个IF语句;...如果逻辑表达式的结果都是False,且存在ELSE子句,则执行语句3。

例1:从单行编辑框中输入考分,按“输入”按钮再根据考分显示及格或不及格。

Integers

s=integer(sle_1.text)

//sle_1text单行编辑框文本

Ifs<60then

St_1.text=“不及格”

//St_1.text静态编辑框文本

Else

St_1.text=“及格”

Endif

例2:从单行编辑框中输入考分,按“输入”按钮后,再根据考分显示优、良、中、及格或不及格。

Integers

s=integer(sle_1.text)

//sle_1text单行编辑框文本

ifs>=90then

St_1.text=“优”

elseifs>=80then

St_1.text=“良”

elseifs>=70then

St_1.text=“中”

elseifs>=60then

St_1.text=“及格”

else

St_1.text=“不及格”

endif

3.CHOOSECASE语句

根据测试表达式的值选择不同的操作,其语法格式为:

CHOOSECASE测试表达式

CASE判断表达式

执行语句块

[CASE判断表达式

语句块

...

CASE判断表达式

语句块]

[CASEELSE

语句块]

ENDCHOOSE

判断表达式可以使用如下的形式:

1.用逗号分隔的一组数据,例如:2,4,7

2.用TO表示一个区间范围,例如:2TO15

3.用IS代表测试值,后跟关系操作符和比较值,例如:IS>30

4.组合运用上述三种方法,并用逗号进行分隔,例如:5,6,8TO12,IS>20

执行CHOOSECASE语句时,PowerBuilder将逐条查找CASE,如果找到与测试值相匹配的判断表达式,就执行该CASE后的语句块,然后执行ENDCHOOSE后的第一条语句。如果CHOOSECASE语句中包含CASEELSE子句,则未找到任何匹配的CASE条件时,执行CASEELSE子句中的语句块。

例3:从单行编辑框中输入考分,按“输入”按钮后,再根据考分显示优、良、种、及格或不及格。(用choosecase重写例2)

integerf

Strings

f=integer(sle_1.text)

CHOOSECASEf

CASEIS>=90

//改进90to100

S="优"

CASE80TO89

S="良"

CASE70TO79

S="中"

CASE60TO69

S="及格"

CASE0TO59

S="不及格"

CASEELSE

S="输入错,请重新输入!"

ENDCHOOSE

St_1.text=string(S)

三、循环语句

各种语言都提供了自己的循环语句,PowerScript也不例外,它的循环语句有三种形式:DO…LOOP、FOR…NEXT、GOTO,将前两种形式与EXIT和CONTINUE语句配合使用,可以完全抛弃GOTO语句,而且DO…LOOP本身有四种格式,丰富多采的表达方式为我们编写清晰流畅的程序提供了有效手段。

下面介绍PowerScript循环语句的格式、中途退出循环或中途开始下次循环的方法、以及循环嵌套的概念。

1DOLOOP循环

DOLOOP结构提供了一种基于某个条件的灵活的循环方法,它有四种形式,分别为:

DOUNTIL<条件>…LOOP

DOWHILE<条件>…LOOP(类似c)

DO…LOOPUNTIL<条件>

DO…LOOPWHILE<条件>(类似c)

DO表示循环的开始,LOOP表示循环的结束,condition表示循环条件,是个逻辑表达式,其值为True或False。

(1)DOUNTIL…LOOP的语法格式为:

DOUNTIL<条件>

语句块

LOOP

其执行过程为:先计算条件condition,其结果为False时,执行语句块,接着再检查条件,直到条件的结果为True时退出循环。

例:按计算按钮求s=1+2+3+…+10。

解1:

integeri=1,s=0

DOUNTILi>10

s+=i

i++

LOOP

st_1.text=string(s)

(2)DOWHILE…LOOP的语法格式为:

DOWHILE<条件>

语句块

LOOP

其执行过程为:先计算条件,其结果为True时,执行语句块,接着再检查条件,直到条件的结果为False时退出循环。

例:按计算按钮求s=1+2+3+…+10。

解2:

integeri=1,s=0

DOWHILEi<=10

s+=i

i++

LOOP

st_1.text=string(s)

(3)DO…LOOPUNTIL的语法格式为:

DO

语句块

LOOPUNTIL<条件>

其执行过程为:先执行语句块,然后计算条件,如果其结果为False,则继续执行语句块,直到条件的结果为True时退出循环。

例:按计算按钮求s=1+2+3+…+10。

解3:解1与解3完全等价

integeri=1,s=0

DO

s+=i

i++

LOOPUNTILi>10

st_1.text=string(s)

(4)DO…LOOPWHILE的语法格式为:

DO

语句块

LOOPWHILE<条件>

其执行过程为:先执行语句块,然后计算条件,如果其结果为True,则继续执行语句块,直到条件的结果为False时退出循环。

例:按计算按钮求s=1+2+3+…+10。

解4:解2与解4完全等价

integeri=1,s=0

DO

s+=i

i++

LOOPWHILEi<=10

st_1.text=string(s)

这四种循环结构中,前两种结构可以一次也不执行,后两种结构则至少执行一次。

实际上,只需要从前两种和后两种结构中各取其一就能表达所有的逻辑关系,但为了更清晰地表达条件,PowerScript还是提供了四种结构。

2FORNEXT循环

FOR…NEXT是个循环次数确定的循环结构,它使循环体内的语句执行规定的次数,其语法结构为:

FORvarname=startTOend[STEPincrement]

Statementblock

NEXT

其中,varname是循环变量,可以是任意的数值类型,start、end分别是循环变量的初值和终值,increment是每次循环后循环变量的步长增量(缺省值为1),statementblock是一组语句,称做循环体,方括号表示该子句可以省略。

FOR…NEXT语句的执行过程为:循环变量varname从start开始,到end为止,重复执行循环体,每执行一次,varname被重新赋值,新值为:varname+increment。另外,如果start和/或end在循环体内被修改,将影响循环次数。

例:按计算按钮求s=1+2+3+…+10。

解5:

integeri,s=0

fori=1to10

s+=i

next

st_1.text=string(s)

3EXIT(退出循环)

在循环语句的循环体中,当我们想在中途退出循环时,使用EXIT语句是个好办法,执行该语句后,程序的控制权转至循环语句后的语句,执行该语句后,程序的控制权转至循环语句后的语句。

在嵌套循环的情况下,EXIT语句退出当前层循环,而不是所有循环。

功能:执行该语句后,程序的控制权转至循环语句后的语句。

例:下列程序运行后,变量s中的值是多少?

integeri,j,s=0

fori=1to10

forj=1to10

ifj>6then

exit

endif

next

s=s+i

next

4CONTINUE(继续循环)

功能:在循环语句的循环体中,遇到CONTINUE语句后,将不执行CONTINUE语句后与循环结束前的所有语句,而开始新一轮循环。

四、返回语句与终止程序运行

在编写事件处理程序或函数时,使用RETURN语句返回控制给用户或调用函数的地方。当希望终止应用程序的运行时,使用HALT语句。

1RETURN语句

RETURN语句立即终止事件处理程序或函数的执行,把控制返回到调用程序。

语法格式:RETURN[表达式]

功能:RETURN语句立即终止事件处理程序或函数的执行,把控制返回到调用程序。

表达式值作为事件处理程序或函数的返回值返回。

2HALT语句

HALT语句用于终止应用程序的运行,其语法为:HALT{CLOSE}

其中CLOSE是个可选项。当HALT语句不带CLOSE选项时,该语句立即终止应用程序的运行;当HALT语句带CLOSE选项时,执行到该语句后,应用程序先执行应用对象的Close事件处理程序,之后再终止应用程序的运行。PC机与单片机实时通信系统的设计与实现摘要:本系统分为上位机和下位机两个部分。下位机最要由六个部分组成:单片机控制系统、串口通信系统、温度采集系统、LED显示系统、蜂鸣器报警系统和液晶显示系统。下位机采用AT89C52单片机作为控制器件,DS18B20用于采集温度,1602LCD和发光二极管作为显示器件,蜂鸣器作为报警器件;上位机采用PC机用VC++编程制作的可视化界面,上位机可视化界面简单直观,易于操作。系统实现的功能:温度采集,温度液晶显示,报警功能,上位机实时显示温度,上位机显示温度波形,上位机实时控制下位机.上位机还增加许多小技巧,比如鼠标的形状,图标按钮,位图按钮,背景色控制,退出显示提示信息等等。关键词:上位机,单片机AT89S52,DS18B20,1602LCD,串口通信DesignandImplementofPCandMCUReal-TimeCommunicationSystemAbstract:Thesystemisdividedintotwopartsupperandlowermachine.Lowermachinemadeupofsixdifferentparts:MCUcontrolsystem,Communicationsystem,Measuretemperaturesystem,LEDdisplaysystem,buzzerwarnedsystemandLCDdisplaysystem.LowermachineuseAT89C52MCUascontrolapparatus.DS18B20usedtogettemperature,1602LCDandLEDusedtodisplay.Buzzerisusedasenunciator.UppermachineuseVC++composeprogramtomakeupaninterface.TheinterfaceisVisualandeasytooperate.Systemaccomplishfunctionincludingmeasuretemperature,displaytemperaturewith1602LCD,uppermachinerealtimedisplaytemperature,uppermachinedisplaytemperaturebywave,uppermachinerealtimecontrollowermachine.Upperincreasealotfunction,suchas:theshapeofmousepointer,iconbutton,bmpbutton,backgroundcolor

canchangeandpromptforquitsystem.Keywords:Uppermachine;AT89C52MCU;DS18B20;1602LCD;serialcommunication

1前言随着科技的不断发展,个人电脑在我们生活中的地位和作用已经无可替代,许多工作设计,商业运作都是通过电脑完成,主要原因就是利用许多简单操作就可以完成许多实际工作。只需要通过程序编程,制作出一些友好简单直观的界面。我们就能够通过PC机很轻松地完成许多复杂的操作。本系统主要通过PC机与单片机构成小型集散控制系统来进行实时通信,既充分利用PC机丰富的软硬件资源实现友好的人机界面,又通过RS-232C/485总线结构与89C52单片机进行通信,对单片机进行数据采集和处理。此设计只需点击鼠标就可以控制下位机完成许多操作。可以用于检测一些人难以到达或环境比较恶劣的地方进行数据采集。比如控制机器人去一些比较深、比较小的洞穴探索和采集数据,本设计所涉及的专业知识较广,包括VC++可视化编程技术及应用、单片机原理及应用、传感器原理及应用,数字电子技术,液晶显示技术等。上位机所涉及到的内容主要是将下位机数据处理并简单直观地通过文本框和温度波形展示在人们面前;使用者仅需点击鼠标就能够控制下位机,达到想要的操作及现象。下位机所涉及到的内容主要是DS18B20实时采集温度,将温度数据传给单片机;单片机将数据处理,通过1602LCD显示出来,并实时将温度传输给上位机;当温度到达所设定的报警值时蜂鸣器开始工作,实现报警功能;下位机实时接收到上位机发送来的数据,根据数据分析做出相应的操作和显示。通过此次毕业设计,了解电子系统设计的基本方法,掌握电子设计的基本步骤,熟练运用VC++编程。我将大学四年的所学的专业知识,连贯起来作为一个整体做出了这个设计,理论与实际结合写出论文,并做出实物而且调试成功。看到调试成功的实物和实现所有自己所要求实现的功能,自己内心无比骄傲和兴奋。大学四年终究能说学有所成,而且是自己爱好的电子设计。2系统总体设计本系统主要由两个部分组成:上位机,下位机。通过USB转串口连接上位机与下位机。系统实现的功能:①DS18B20实时采集环境温度②单片机分析DS18B20采集到得数据,控制1602LCD显示出实时温度。③当温度达到系统设置的报警值30℃时蜂鸣器报警④单片机能将DS18B20采集的温度通过USB串口实时传给上位机⑤上位机能够利用编辑框实时显示单片机传输的温度⑥上位机能够通过按键控制显示出温度的实时波形⑦上位机可以通过按键或发送编辑框向单片机发送数据,控制单片机LED的闪烁和1602LCD的显示,USB转串口下位机系统上位机系统USB转串口下位机系统上位机系统图1系统框图3.下位机设计下位机的设计主要分为两个部分:硬件设计和软件设计。3.1下位机硬件设计:下位机最要由六个部分组成:单片机控制系统、串口通信系统、温度采集系统、LED显示系统、蜂鸣器报警系统和液晶显示系统。工作原理:开机后所有二极管闪烁一次,蜂鸣器报警一声。单片机向18B20发送数据,温度采集系统开始检测温度,把采集到的温度值发送给单片机,单片机将数据处理后,控制液晶显示系统显示出当前温度。系统不断循环采集温度,并实时显示,而且将实时温度通过串口通信系统将数据发送给上位机。当所测温度达到30℃时,蜂鸣器开始报警,而且二极管全亮。单片机系统同时通过串口通信系统不断检测,如果串口接收到数据,单片机会将数据处理,并控制LED显示系统和液晶显示系统工作。单片机控制系统LED显示系统液晶显示系统串口通信系统单片机控制系统LED显示系统液晶显示系统串口通信系统温度采集系统蜂鸣报警系统3.1.1单片机电路:图3单片机单元电路图AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。电路结构:单片机P0口接上拉电阻,因为P0口的驱动电流不大,不能驱动液晶进行显示。②接1602LCD的数据位(7脚——14脚)③P2.0,P2.1,P2.2,分别接1602LCD的4,5,6脚用于控制1602LCD的显示。④P2.7脚接18B20的数据传输线。⑤XTAL1,XTAL2分别接晶振的两个输出脚。⑥RST接复位电路输出脚。⑦/VPP接上高电平。⑧RXD和TXD分别接上串口的9脚和10脚。⑨P3.5接蜂鸣器3.1.2串口电路设计:图4串口通信电路图串口电流主要由MAX232和一个串口头再加一些电阻组成。J1与上位机的USB转串口连接,MAX232的9脚和10脚分别接单片机的RXD,TXD两端。通过MAX232的电平转换,使单片机与上位机通信。3.1.31602LCD电路:图51602LCD液晶显示电路图在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高;数字式接口;体积小、重量轻;功耗低;液晶显示简介.液晶显示原理:液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。引脚接口说明第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602LCD的2脚、15脚接电源,1脚和16脚接地。7脚——14脚是1602LCD的数据传输位,接单片机的P0脚。4脚——6脚是1602LCD的控制位,接单片机的P2.0、P2.1、P2.2脚。3脚通过滑动变阻器接地,用于控制液晶的亮度。3.1.4DS18B20电路设计图6DS18B20温度传感器电路图数字温度传感器DS18B20介绍DS18B20的主要特性①适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电.②独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯.③DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温④DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内⑤温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃⑥可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温⑦在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快⑧测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力⑨负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。3.1.5蜂鸣器电路设计图7蜂鸣器电路图蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器的结构原理⑴.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。⑵.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。这里对单片机在蜂鸣器驱动上的应用作一下描述。驱动方式:由于自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音。单片机驱动他激蜂鸣器的方式是利用I/O定时翻转电平产生驱动波形对蜂鸣器进行驱动。利用I/O定时翻转电平来产生驱动波形的方式会比较麻烦一点,必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。3.1.6晶振电路、复位电路及LED显示设计图8晶振电路和复位电路XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。常用的复位电路如图3-4所示。复位操作不会对内部RAM有所影响。LED结构及发光原理:发光二极管的核心部分是由P型半导体和N型半导体组成的晶片,在P型半导体和N型半导体之间有一个过渡层,称为PN结。在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN结加反向电压,少数载流子难以注入,故不发光。LED光源的特点①电压:LED使用低压电源,供电电压在6-24V之间。②效能:消耗能量较同光效的白炽灯减少80%。③适用性:很小,每个单元LED小片是3-5mm的正方形,所以可以制备成各种形状的器件,并且适合于易变的环境。④稳定性:10万小时,光衰为初始的50%。⑤响应时间:其白炽灯的响应时间为毫秒级,LED灯的响应时间为纳秒级。图9发光二极管电路图⑥对环境污染:无有害金属汞。图9发光二极管电路图⑦价格:LED的价格现在越来越平民化。开始蜂鸣器鸣叫一声,二极管全亮闪烁一次开始蜂鸣器鸣叫一声,二极管全亮闪烁一次单片机向18B20和1602LCD发送控制信号,并对串口初始化18B20采集温度,并将温度值传输给单片机单片机处理数据,并控制1602LCD显示温度单片机通过串口将温度发送给上位机检测是否有数据传入当字符”0”传入当字符”1”传入当字符”2”传入当字符”3”传入当字符”4”传入当字符”5”传入当字符”6”传入当字符”7”传入单数二极管亮双数二极管亮二极管交叉闪烁流水灯广告灯液晶显示1液晶显示2显示当前温度无有图10下位机软件设计流程图:3.2.1DS18B20温度采集和数据处理设计①DS18B20控制方法DS18B20有六条控制命令,指令约定代码操作说明温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9个字节内容写暂存器4EH将数据写入暂存器的TH、TL字节复制暂存器48H把暂存器的TH、TL字节写到E2RAM中重新调E2RAMB8H把E2RAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU②DS18B20的初始化(1)先将数据线置为高电平“1”。(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。(4)延时750微秒(该时间的时间范围可以从480到960微秒)。(5)数据线拉到高电平“1”。(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。(8)将数据线再次拉高到高电平“1”后结束。③DS18B20的写操作(1)数据线先置低电平“0”。(2)延时确定的时间为15微秒。(3)按从低位到高位的顺序发送字节(一次只发送一位)。(4)延时时间为45微秒。(5)将数据线拉到高电平。(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。(7)最后将数据线拉高。④DS18B20的读操作(1)将数据线拉高“1”。(2)延时2微秒。(3)将数据线拉低“0”。(4)延时15微秒。(5)将数据线拉高“1”。(6)延时15微秒。(7)读数据线的状态得到1个状态位,并进行数据处理。(8)延时30微秒。3.2.21602LCD液晶控制和显示①1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表3.1所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表11602LCD控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。图11读操作时序图12写操作时序②1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置3.2.3串口通信的设计①IE中断允许寄存器(串口中断)可位寻址,地址:A8H如表3-2所示。表2中断允许寄存器B7B6B5B4B3B2B1B0EA-ET2ESET1EX1ET0EX0EA:EA=0时,所有中断停用(禁止中断)EA=1时,各中断的产生由个别的允许位决定。ET2:定时器/计数器2(T/C2)溢出中断允许位。ET2=1,T/C2开中断ET2=0,T/C2关中断。ES:串行口中断允许位。ES=1串行口开中断,ES=0串行口关中断。ET1:定时器/计数器1(T/C2)溢出中断允许位。ET1=1,T/C1开中断,ET1=0,T/C关中断。EX1:外部中断1的允许位,EX1=1外部中断1开中断,EX1=0外部中断1关中断。ET0:定时器/计数器0(T/C0)溢出中断允许位。ET0=1,T/C0开中断,ET0=0,T/C关中断。EX0:外部中断0的允许位。EX0=1外部中断1开中断,EX0=0外部中断1关中断。②本设计的中断程序所设计的内容是收到上位机发送来的数据,实现不同的操作:当接收到上位机发送的数据“0”时,程序控制单数发光二极管亮。当接收到上位机发送的数据“1”时,程序控制双数发光二极管亮。当接收到上位机发送的数据“2”时,程序控制发光二极管交叉闪烁。当接收到上位机发送的数据“3”时,程序控制发光二极管亮流水灯式发光。当接收到上位机发送的数据“4”时,程序控制发光二极管亮广告灯式发光。当接收到上位机发送的数据“5”时,程序控制1602LCD显示“WANGLUNBIYESHEJI”字样。当接收到上位机发送的数据“6”时,程序控制1602LCD显示“XIEXIEGEWEILAOSHI”字样。当接收到上位机发送的数据“7”时,程序控制1602LCD显示检测到的实时温度。3.2.4蜂鸣器报警程序利用单片机的P2.7口定时翻转电平来产生驱动波形,利用编写好的延时程序来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。4.上位机的设计上位机是指:人可以直接发出操控命令的计算机,一般是PC,屏幕上显示各种信号变化(液压,水位,温度等)。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般模拟量),转化成数字信号反馈给上位机。简言之如此,真实情况千差万别不离其宗。上下位机都需要编程,都有专门的开发系统。控制者和提供服务者是上位机被控制者和被服务者是下位机通常上位机和下位机通讯可以采用不同的通讯协议,可以有RS232的串口通讯,或者采用RS485串行通讯,当用计算机和PLC通讯的时候不但可以采用传统的D形式的串行通讯,还可以采用更适合工业控制的双线的PROFIBUS-DP通讯,采用封装好的程序开发工具就可以实现PLC和上位机的通讯。当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。4.1串口通信的编程4.1.1认识串口图12计算机上的串口图公头接线端子排序图母头接线端子排序图图139针串口的公头和母头图14USB转串口图公头接线端子排序图母头接线端子排序图如图12所示,计算机上的串口图中有几个串口,包括9针的和25针的。9针的串口公头、母头如图14所示。笔记本电脑可以通过USB→串行口通信转换适配器(如图14所示)。本设计采用的就是USB→串行口进行设计。用USB转串口易于操作,实验方便,稳定性高,非常适合于笔记本做上位机的开发。4.1.2串口标准RS232:RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS422:RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。RS485:为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连。9针串口(DB9)25针串口(DB25)针号功能说明缩写针号功能说明缩写1数据载波检测DCD8数据载波检测DCD2接收数据RXD3接收数据RXD3发送数据TXD2发送数据TXD4数据终端准备DTR20数据终端准备DTR5信号地GND7信号地GND6数据设备准备好DSR6数据准备好DSR7请求发送RTS4请求发送RTS8清除发送CTS5清除发送CTS9振铃指示DELL22振铃指示DELL表39针和25针串口的引脚功能说明表4.1.3计算机串口通信编程方式利用CSerialport类实现串口通信:大家都比较熟悉用VC++控件实现串口通信,但由于MSComm控件比较简单,一般只是用于较简单的系统,串口通信还可以使用WindowsAPI函数和CSerial类,可以根据实际情况选择合适的方法。本设计需要做很多复杂的处理,那么放弃简单的MSComm通讯控件,选择用这个CserialPort类。此类虽然比较复杂,但由于类程序可以直接应用,省了许多事。CserialPort类实现的功能比MSComm控件强大很多,可以自行选择端口通信,而且数据处理更方便。程序设计步骤:①利用利用CSerialport类实现串口通信:新建一个基于对话框的工程将CSerialport类复制到新建号的工程的文件夹下,通过project选项的addtoproject,弹出对话框,选中Serialport.h和Serialport.cpp文件,再单击添加。CSerialport类就被成功引入。在对话框的头文件中将CSerialport类的头文件包含,并添加一个CSerialport类的变量.②打开串口按钮的程序:按钮添加的程序都是双击添加的按钮,直接进入编写程序的地方,函数的映射系统已经自己生成。实现的功能:先获得组合框的端口号、波特率、数据位、校验位和停止位的内容,并检查通信端口是否打开,以及通信状态是否正确。如果通信端口没有打开或被占用则提示“没有发现此串口”,如果通信端口设置正确,通信状态正确则亮起通信信号灯。③通信协议的设置以及传输数据处理的函数:如函数中所示,设置的通信协议为:以“/”为终止位,以“a”为起始位。并将中间的数据处理在现实A处温度的编辑框中现实出来。以“/”位终止位,以“b”位起始位。并将中间的数据处理在B出显示出来。首先在对话框的头文件和源文件中分别添加 afx_msgLONGOnComm(WPARAMch,LPARAMport);和 ON_MESSAGE(WM_COMM_RXCHAR,OnComm)两个函数。再在源文件中编辑函数:将“/”设定为截止位,将“a”设定为起始位。用一个字符串把“a”和“/”中的数据处在字符串中。在利用atof函数,将字符串转换为浮点型数据。④关闭按钮的程序:单击关闭按钮时关闭串口,停止通信。关闭通信信号提示灯。⑤发送按钮添加一个按钮,向下位机发送数据的程序:先写程序获取编辑框的内容,再将编辑框的内容发送出去。4.2波形显示的实现本设计采用了两个显示波形的界面。图15COScopeCtrl类和CScope类创建的示波器界面如图所示显示波形的程序设计①用COScopeCtrl类显示图形将COScopeCtrl类复制到新建好的工程的文件夹下,通过project选项的addtoproject,弹出对话框,选中OScopeCtrl.h和OScopeCtrl.cpp文件,再单击添加。COScopeCtrl类就被成功引入。在对话框的头文件中将COScopeCtrl类的头文件包含,并添加一个COScopeCtrl类的变量;在对话框中添加一个位图,添加的位图位置就是波形显示的位置。在对话框源文件的OnInitDialog()初始化函数中添加函数:函数的作用是设置显示区间为20——40,设置纵坐标为“℃”以及设置好背景色。再通过classwrizard添加WM_TIMER函数,在函数中写入波形显示程序;写好程序就可以把采集到的数据显示成波形了。②用CScope类显示图形将CScope类复制到新建好的工程的文件夹下,通过project选项的addtoproject,弹出对话框,选中ScopeCtrl.h和Scope.cpp文件,再单击添加。CScope类就被成功引入。向对话框引入两个位图,做显示时需要用到。在对话框的头文件中将CScope类的头文件包含,并添加一个CScope类的变量;在对话框中添加一个静态文本控件设定控件ID为IDC_SCOPE;在对话框源文件的OnInitDialog()初始化函数中添加函数:函数的作用是设置显示温度,设置纵坐标为“温度”“℃”。再通过classwrizard添加WM_TIMER函数,在函数中写入波形运行程序。写好程序就可以把采集到的数据显示成波形了。4.3上位机增加的一些小技巧:①设置图标按钮:先添加一个图标,设置按钮为图标属性,再关联一个按钮的变量,在初始化时编写如下程序即可得到按钮图标。m_button1.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON3));②设置位图按钮先添加一个位图,设置按钮为位图属性,再关联一个按钮的变量,在初始化时编写如下程序即可得到按钮图标。HBITMAPhBmp=::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3));m_button2.SetBitmap(hBmp);③修改主窗口标题AfxGetMainWnd()->SetWindowText(_T("王泽鑫毕业设计"));④设置背景色及文本颜色SetDialogBkColor(RGB(0,55,200),RGB(0,255,55));⑤退出提示信息if(MessageBox("确定要退出吗?","提示",MB_YESNO|MB_DEFBUTTON2)==IDYES)AfxGetMainWnd()->PostMessage(WM_CLOSE); ⑥打开串口的亮灯提示,关闭串口熄灯设置两个图像控件并重叠,按键下键则选择一个按钮显示另一个隐藏。关串口则相反。GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);⑦设置运行外部显示图标:m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);⑧其中显示波形包含了一个小技巧:按键选择开始及暂停.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论