设计方案论证.docx
《设计方案论证.docx》由会员分享,可在线阅读,更多相关《设计方案论证.docx(34页珍藏版)》请在冰豆网上搜索。
设计方案论证
第二章设计方案论证
2.1整个系统的原理
整个系统的设计方案如下面的介绍,主要是,系统原理,控制芯片介绍和管脚的说明。
2.1.1系统原理说明
图2.1系统原理框图
从上面的框图我们很容易的可以看出,CPU是整个电路的核心,它受电源驱动,然后驱动555电路和液晶屏,并且反馈到上位机。
整个设计的大体思想就是这样,CPU作为最核心的部件,是这给那个电路的主体,也是整个电路的控制部分。
此次我们采用的是由飞利浦公司生产的P89V5RD2HBA单片机芯片。
芯片的引脚图如图2.2所示。
本设计工作,我主要负责的是软件的编程的工作,这就需要对所用的主芯片要有一个详实的了解,下面是我们在此次设计中用到的芯片口的详细资料,(说明,本次设计中P2口没有用到,作为红外线报警器的扩展口来用,以备今后对红外线的升级之用.)
2.1.2控制芯片介绍
在本系统中采用的控制芯片是P89V51RD2,P89V51RD2是一款80C51微控制器,包含64kBFlash和1024字节的数据RAM。
P89V51RD2的典型特性是它的X2方式选项。
利用该特性,设计工程师可使应用程序以传统的80C51时钟频率(每个机器周期包含12个时钟)或X2方式(每个机器周期包含6个时钟)的时钟频率运行,选择X2方式可在相同时钟频率下获得2倍的吞吐量。
从该特性获益的另一种方法是将时钟频率减半而保持特性不变,这样可以极大地降低电磁干扰(EMI)。
Flash程序存储器支持并行和串行在系统编程(ISP)。
并行编程方式提供了高速的分组编程(页编程)方式,可节省编程成本和上市时间。
ISP允许在软件控制下对成品中的器件进行重复编程。
应用固件的产生/更新能力实现了ISP的大范围应用。
它的主要特性如下:
(1)80C51核心处理单元;
(2)5V的工作电压,操作频率为0~40MHz;
(3)16/32/64kB的片内Flash程序存储器,具有ISP(在系统编程)和IAP(在应用中编程)功能;
(4)通过软件或ISP选择支持12时钟(默认)或6时钟模式;
(5)SPI(串行外围接口)和增强型UART;
(6)PCA(可编程计数器阵列),具有PWM和捕获/比较功能;
(7)4个8位I/O口,含有3个高电流P1口(每个I/O口的电流为16mA);
(8)3个16位定时器/计数器;
(9)可编程看门狗定时器(WDT);
(10)8个中断源,4个中断优先级;
(11)2个DPTR寄存器;
(12)低EMI方式(ALE禁能);
(13)兼容TTL和CMOS逻辑电平;
(14)掉电检测;
(15)低功耗模式
(16)掉电模式,外部中断唤醒;
(17)空闲模式;
(18)DIP40,PLCC44和TQFP44的封装;
P89V51RD2的管脚如图2.2所示。
图2.2系统CPU芯片管脚图
2.1.3管脚的具体说明
本次设计中对芯片的使用管脚(注:
本次只对设计中所用的管脚作介绍)如表2.1所示:
表2.1P89V51RD2的管脚说明
符号
类型
描述
P0.0—P0.7
I/O
P0口:
P0口是一个8位开漏双向I/O口。
写入‘1’时P0口悬浮,可用作高阻态输入。
当访问外部程序和数据存储器时,P0口复用为低位地址和数据总线。
应用中P0口利用强内部上拉来发送‘1’电平。
P0口可在外部主机模式编程过程中接收代码字节和在外部主机模式校验过程中发送代码字节。
P0口用作程序校验或通用I/O口时均需连接一个外部上拉电阻。
P1.0—P1.7
I/O带内部上拉
P1口:
P1口是一个带内部上拉的8位双向口。
写入‘1’时P1口被内部上拉拉高,可用作输入。
用作输入时,由于内部上拉的存在,P1口被外部器件拉低时将吸收电流(IIL)。
此外,P1.5,P1.6,P1.7还有16mA的高电流驱动能力。
在外部主机模式编程和校验中,P1口也可接收低位地址字节。
P1.0
I/O
T2:
定时器/计数器2的外部计数输入或时钟输出。
P1.1
I
T2EX:
定时器/计数器2捕获/重装触发和方向控制。
P1.2
I
ECI:
外部时钟输入。
PCA的外部时钟输入。
P1.3
I/O
CEX0:
PCA模块0的捕获/比较外部I/O口。
每个捕获/比较模块连接一个P1口用作外部I/O口。
该口线不被PCA占用时仍可用作标准I/O口。
P1.4
I/O
/SS:
SPI从机选择输入。
CEX1:
PCA模块1的捕获/比较外部I/O口。
P1.5
I/O
MOSI:
SPI主机输出从机输入端。
CEX2:
PCA模块2的捕获/比较外部I/O口。
P1.6
I/O
MISO:
SPI主机输入从机输出端。
CEX3:
PCA模块3的捕获/比较外部I/O口。
P1.7
I/O
SCK:
SPI主机输出从机输入端。
CEX4:
PCA模块4的捕获/比较外部I/O口。
P2.0—P2.7
I/O带内部上拉
P2口:
P2口是一个带内部上拉的8位双向口。
写入‘1’时P2口被内部上拉拉高,可用作输入。
用作输入时,由于内部上拉的存在,P2口被外部器件拉低时将吸收电流(IIL)。
在取指外部程序存储器或访问16位地址(MOVX@DPTR)的外部数据存储器时,P2口发送高位地址。
应用中P2口利用强内部上拉来发送‘1’。
P3.0—P3.7
I/O带内部上拉
P3口:
P3口是一个带内部上拉的8位双向口。
写入‘1’时P3口被内部上拉拉高,可用作输入。
用作输入时,由于内部上拉的存在,P3口被外部器件拉低时将吸收电流(IIL)。
在外部主机模式编程和校验中,P3口可接收一些控制信号和部分高地址位。
P3.0
I
RxD:
串口输入。
P3.1
O
TxD:
串口输出。
P3.2
I
/INT0:
外部中断0输入
P3.3
I
/INT1:
外部中断1输入
P3.4
I
T0:
定时器/计数器0的外部计数输入。
P3.5
I
T1:
定时器/计数器1的外部计数输入。
P3.6
O
WR:
外部数据存储器写选通信号。
P3.7
O
RD:
外部数据存储器读选通信号。
/PSEN
I/O
程序选通使能:
/PSEN是外部程序存储器的读选通信号。
/PSEN在执行内部程序存储器的程序时无效(高电平),执行外部程序存储器时每个机器周期内两次有效,但当访问外部数据存储器时两个有效/PSEN脉冲将被跳过。
当RST输入引脚的高电平时间大于10个机器周期时,向/PSEN脚强制输入一个高电平到低电平的跳变将使器件进入外部主机模式编程。
RST
I
复位:
振荡器工作时,该引脚上2个机器周期的高电平逻辑状态将使器件复位。
当RST输入引脚为高电平时,如果/PSEN脚输入一个高电平到低电平的跳变,器件将进入外部主机模式。
否则进入正常工作模式。
/EA
I
外部访问使能:
若器件要对外部程序存储器取指,/EA就必须与VSS相连。
器件执行内部程序存储器的程序时/EA必须与VDD相连。
然而,4个安全锁定电平可将/EA禁能,使器件只能执行内部程序存储器的程序。
/EA脚可承受12V的高压
ALE/
/PROG
I/O
地址锁存使能:
ALE是一个输出信号,在访问外部存储器时将地址低字节锁存。
该引脚也用作Flash的编程脉冲输入(/PROG)。
通常,ALE在1/6的振荡频率时输出,可用作外部定时或外部时钟。
每次访问外部数据存储器时都有一个ALE脉冲被跳过。
但是,只要AO被置1,ALE就被禁能。
NC
I/O
不连
XTAL1
I
晶振1:
反相振荡放大器的输入和内部时钟发生电路的输入。
XTAL2
O
晶振2:
反相振荡放大器的输出。
VDD
I
电源
VSS
I
地
综上所述P89V51RD2单片机既具有通用单片机的特点又有一些独特之处,因此,此芯片足以满足本设计的要求,并能很好的控制整个电路,尤其它所具有的ISP在线调试功能给本设计带来了极大的方便。
2.216x2字符型带背光液晶显示模块
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
2.2.1液晶模块的认识
这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。
下面是它的实物图以及插槽连接图。
图2.3(液晶显示模块的正面视图)
图2.4(液晶显示模块的反面视图)
图2.5(液晶显示模块的引脚插槽)
其中,各个引脚所对应的含义如下表所示。
表2.21602管脚说明
端自号:
标记:
电平:
功能:
1
VSS
----
电源电压GND
2
VCC
-----
电源电压+5V
3
V0
-----
液晶驱动电源
4
RS0
H/L
寄存器选择信号:
L指令寄存器H:
数据寄存器
5
RW
H/L
读写选择信号L:
写操作H:
读操作
6
EN
H\H-L
使能信号
7-14
P00~P07
H/L
数据总线
15
VCC
----
备光驱动电压
16
GND
----
电源电压GND
2.2.2液晶模块的编程
本次设计中所编写的液晶显示模块程序如附录一所示:
读操作时序
写操作时序:
液晶模块的流程图、程序见附录一。
2.3.串口通信
随着计算机的广泛应用,市场上很多电气产品应用串口通信技术作为对外数据交换的桥梁,串口通信受到如此重视,主要原因就是这个技术简单而且容易实现。
所以本次设计使用串口进行通信。
而且本次设计使用的是RS-232串口通信。
串口通信的认识:
串口通信在本次的软件设计中担任传输的作用,即上位机和下位机的数据传输。
(包括程序的下载和数据的传输)具体连接如图2.6所示。
图2.6RS-232串口通信连接图
串口控制程序一般分为查询和中断两者方式。
查询方式适用于简单的应用,简单可靠,但是缺点是需要占用处理器资源,在发送或者接收数据的时候不能做其它的事情,处理器利用率低。
中断方式下,在发送或者接受数据的时候处理器还可以做其它的工作,效率较高。
对于稍微复杂的系统来说,中断方式管理串口程序将会更加有效。
中断处理方式也可分为几种,其中采用循环缓冲区的方式比较高效。
循环缓冲区为定义的一定长度的RAM区间,对于接受数据来说,中断中收到的数据将存入RAM中,然后等待主程序来读取。
其中会涉及到数据见的协调问题,写数据的时候不能把还没有读取的数据覆盖掉,读数据的时候应该读取的是缓冲区中最老的数据。
当缓冲区已满的时候,写入的新数据应该覆盖掉最老的数据。
这些问题的处理可以使用两个指针来实现。
2.4VisualBasic与串口通信
随着计算机的广泛应用,市场上很多电气产品应用串口通信技术作为对外数据交换的桥梁,串口通信受到如此的重视,主要原因就是这个技术简单而且容易实现。
2.4.1VisualBasic简单介绍
VisualBasic集成开发环境主要由以下元素组成:
工具窗口、工程窗口、属性窗口、对象窗口以及代码组成等。
如图2.7所示
图2.7VisualBasic集成开发环境
VisualBasic是一般程序设计人员在Windows环境下最常用的串口编程语言。
利用VisualBasic开发串口通信程序主要有两种方法:
一是使用MSComm串口控件,二是利用WindowsAPI函数。
在查阅了大量的资料和在实践资料中,使用VisualBasic串口控件实现通信的方法比调用API动态链接库的方法更加方便、快捷,而且用较少的代码可以实现相同的功能,从而使编程效率大大提高,也减少了因编程不当而导致的系统不稳定。
所以本次的设计采用了串口控件实现。
2.4.2MSComm控件
MSComm控件全称为MicrosoftCommunicationsControl,是Microsoft公司提供的ActiveX控件,目的是为了简化Windows下串行通信编程,它既可以用来提供简单的串行通信功能,也可以用来创建功能完备的、事件驱动的高级通信工具。
MSComm控件在串口通信时非常方便,程序员不必花时间去了解较为复杂的API函数,而且在VisualBasic、VisualC++、Delphi等语言中均可使用。
使用他可以建立与串行端口的连接,通过串行端口连接到其他通信设备(如调制解调器),发出命令,交换数据,以及监视和响应串行连接中发生的时间和错误。
利用它可以进行诸如拨打电话号码、监视串行端口的输入数据乃至创建功能完备的终端程序等。
“引用(3)”
MSComm控件处理通信的方式有两种:
一种是事件驱动方式,另一种是查询方式。
MSComm控件有许多属性,这将会在上位机设计中作具体说明。
2.4.3VB工程建立
工程的具体包括如下:
(注意:
下面的jia.*是本次设计的上位机的文件名)
.工程文件(jia.vbp)
一个工程只有一个工程文件,他管理着该工程的所有部件。
工程文件中含有该工程的所有窗体文件以及其他的相关信息(如其他部件的名称、在磁盘上的位置等)。
此外,每个工程还会生成一个扩展名为.vbw的附属工程文件,它保存了工程在集成环境中各窗体的状态。
.窗体文件(jia.frm)
添加到工程中的每个窗体都会单独地保存为一个文件。
工程中有几个窗体就会产生几个窗体文件。
窗体文件中保存了所有该窗体和放置在该窗体中控件的信息,包括对象名、对象类型、对象的属性设置、对象的事件过程代码和通用过程代码。
也就是说,一个窗体文件保存了这个窗体所对应的对象窗口和代码窗口所有的内容。
这些内容在VisualBasic中被总称为“窗体模块”。
一个工程有几个窗体就有几个窗体模块和几个窗体模块文件。
.二进制窗体文件(jia.frx)
如果一个窗体中包括了图片等二进制信息(如在属性窗口中设置了窗体的Icon属性、Pircture属性),则会产生一个与窗体*.frm文件同文件名的*.frx文件。
.标准模块文件(jia.bas)
标准模块是用来保存公共变量、常量、数据类型、过程的地方,其他的模块可以调用标准模块中的代码。
一个工程中有多个标准模块,也可以没有。
工程文件(jia.vbp)、窗体模块文件(jia.frm)和标准模块文件(jia.bas)都是纯文本文件,有经验的编程者可以使用“记事本”这类文本编辑软件打开、查看并进行修改。
.类模块文件
VisualBasic允许编程者创建新类,新类的定义保存在类模块中。
一个工程中可以有多个类模块,也可以没有。
.建立可执行文件
前面执行应用程序的时候是选择“运行”菜单的“启动”命令来执行的,这种执行是解释执行,解释执行只能在VisualBasic开发环境中进行,不能脱离开发环境。
为了使应用程序能脱离开发环境而直接在Windows环境下运行,就必须将应用程序编译成可执行文件(5.6.21.44.exe文件,这个是此次毕业设计的上位机的运行界面的名称。
意思是:
五月六日9点44分完成)。
生成的方法是:
依次选择“文件”菜单的“生成工程1.exe”命令(这里的“工程1”是工程名),弹出“生成工程”对话框时,选定保存位置,输入可执行文件的名字,单击“确定”按钮即可在指定位置建立一个可执行文件。
第三章设计和计算
3.1上位机设计(VB的设计)
定义声明函数
初始化串口各参数
清零按钮按下?
设置连接按钮按下?
执行相应操作
退出按钮按下?
结束退出
N
Y
Y
N
Y
Y
N
Y
图3.1VB程序的流程图
3.1.1VB编写的上位机程序
程序一:
DimCOMBUFAsString
PrivateSubCommand3_Click()
MSComm1.settings="600,N,8,1"'设置数据传输率,没有奇偶校验,和数据位八位,一位停止位。
MSComm1.CommPort=6'设置通讯串口COM6
MSComm1.InputLen=0'设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据
MSComm1.InBufferSize=512'设置接收缓冲区为512Byte
MSComm1.InBufferCount=0'读取整个缓冲区的数据。
MSComm1.RThreshold=1'每个字符到接收缓冲区都触发接收事件字符到接收缓冲区触发接收事件
MSComm1.PortOpen=True'打开串口
Shape1.Visible=True
EndSub
PrivateSubCommand1_Click()
form1.Cls
MSComm1.PortOpen=False'关闭串口
Shape1.FillColor=RGB(0,255,0)'绿色
Text1.BackColor=RGB(0,255,0)
WindowsMediaPlayer1.Controls.stop
Shape1.Visible=True
Timer2.Enabled=False
Timer3.Enabled=False
EndSub
PrivateSubCommand2_Click()
UnloadMe'退出
EndSub
PrivateSubMSComm1_OnComm()
DimiAsVariant
SelectCaseMSComm1.CommEvent
CasecomEvReceive
COMBUF=Asc(MSComm1.Input)
Print"苗家祥.张勇提醒:
"&COMBUF&"区报警"&"-"&Now
Text1.BackColor=RGB(255,0,0)'红色
Shape1.FillColor=RGB(255,0,0)
WindowsMediaPlayer1.URL="E:
\音乐\哈.mp3"
Timer2.Enabled=True
Timer3.Enabled=True
EndSelect
EndSub
PrivateSubTimer1_Timer()‘Timer控件
Text1.Text=Now
EndSub
PrivateSubTimer2_Timer()
Shape1.Visible=False
EndSub
PrivateSubTimer3_Timer()
Shape1.Visible=True
EndSub
分析:
当报警的时候就在上位机的界面上执行下面一句:
Print"苗家祥.张勇提醒:
"&COMBUF&"区报警"&"-"&Now
这样报警的信息就显示在界面上了。
如下图所示。
图3.2报警信息图
上述程序中的Timer控件即定时器控件主要用来控制界面中的闪烁的红色小球。
如下图所示:
绿色红色
正常检测状态图3.3报警状态
开始检测的时候,他是绿颜色的,当触发报警的时候,他就变成红颜色的并且是在不断闪烁的小球,给人以视觉冲击起到报警的作用。
程序中使用了三个定时器控件,Timer1主要用来控制上图中的时钟条。
Timer2和Timer3主要用来控制小球,设计的时候把Timer2的interval属性定义成500,Timer3的interval属性定义成1000.这样再触发下面的事件。
PrivateSubTimer2_Timer()PrivateSubTimer3_Timer()
Shape1.Visible=FalseShape1.Visible=True
EndSubEndSub
就实现了小球的不断闪烁。
同时触发WindowsMediaPlayer1发生报警信号。
这样上位机的声光报警就实现
3.2下位机设计
主程序分析:
我们的目标是,当红外线检测到有人闯入时:
(1)由P3.4输出高低电平间隔0.5s的脉冲信号去驱动声光报警电路,产生声光报警。
这可通过使P3.4每隔0.5s取反一次实现,而0.5s时间可同时定时器T0(工作于定时方式1)重复定时100ms十次来实现。
用工作寄存器R1作循环计数器,初值为10(0AH)。
(采用中断方式编程)。
(50ms*10=500ms=0.5s)
(2)由P0口输出数据到液晶屏显示报警所在位置的区号(1、2、3、4)。
这要通过在主程序中对液晶模块的调用来实现。
显示什么字符,就调用该字符函数。
(3)通过RS232串口(由是程序的下载线,当下载线不用时)上传到上位机,并在上位机当中显示报警所在位置的区号(1234)。
上位机部分要通过VisualBasic软件来实现。
3.2.1C编写的下位机程序
主要功能是对系统进行初始化和对系统进行监视,看是否有人闯入。
其程序流程图如图3.3所示。
图3.4主程序流程图
整个设计的主程序如下面的“程序一”所示:
下面是中断程序流程图。
开始定义
重设定时初值
1s到吗?
P3.4取反
中断返回
图3.5声光报警中断程序流程图
NO
YES
程序一:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP10=P1^0;
sbitP11=P1^1;
sbitP12=P1^2;
sbitP13=P1^3;
sbitP14=P1^4;
sbitP15=P1^5;
sbitP16=P1^6;
sbitP17=P1^7;
sbitP34=P3^4;
voidfun0(void);
voidfun1(void);
Uart_Init();
Uart1_Init();
externvoidlcd_init(void);
externvoiddisplay_string(unsignedcharx,unsignedchary,unsignedchar*s);
externvoiddisplay_char(unsignedcharx,unsignedchary,unsignedchardat);
unsignedcharcodestr1[]={"BAOJING"};
ucharcodeTable_Count[4]={1,2,3,4};//要显示的数字或者字母,放在此区域
voidmain(void)
{uchartemp=0;
P10=0;
P11=0;
P12=0;
P13=0;
Uart_Init();