第一篇:1602显示原理及应用(课件)
所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602液晶的正面(绿色背光,黑色字体)
1602液晶背面
另一种1602液晶模块,显示屏是蓝色背光白色字体
字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:
HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:
也就是说想要在LCD1602屏幕的第一行第一列显示一个“A”字,就要向DDRAM的00H地址写入“A”字的代码就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:
DDRAM地址与显示位置的对应关系
(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了)
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
上表中的字符代码与我们PC中的字符代码是基本一致的。因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。PC在编译时就把“A”先转为41H代码了。
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。
0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。
那么如何对DDRAM的内容和地址进行具体操作呢,下面先说说HD44780的指令集及其设置说明,请浏览该指令集,并找出对DDRAM的内容和地址进行操作的指令。共11条指令:
1.清屏指令
功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码20H;
<2> 光标归位,即将光标撤回液晶显示屏的左上方;
<3> 将地址计数器(AC)的值设为0。
2.光标归位指令
功能:<1> 把光标撤回到显示器的左上方;
<2> 把地址计数器(AC)的值设置为0;
<3> 保持DDRAM的内容不变
3.进入模式设置指令
功能:设定每次写入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:
位名
设置
I/D
0=写入新数据后光标左移
1=写入新数据后光标右移
S
0=写入新数据后显示屏不移动
1=写入新数据后显示屏整体右移1个字
4.显示开关控制指令
功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:
位名
设置
D
0=显示功能关
1=显示功能开
C
0=无光标
1=有光标
B
0=光标闪烁
1=光标不闪烁
5.设定显示屏或光标移动方向指令
功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:
S/C
R/L
设定情况
0
0
光标左移1格,且AC值减1
0
光标右移1格,且AC值加1
0
显示器上字符全部左移一格,但光标不动
显示器上字符全部右移一格,但光标不动
6.功能设定指令
功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:
位名
设置
DL
0=数据总线为4位
1=数据总线为8位
N
0=显示1行
1=显示2行
F
0=5×7点阵/每字符
1=5×10点阵/每字符
7.设定CGRAM地址指令
功能:设定下一个要存入数据的CGRAM的地址。
8.设定DDRAM地址指令
功能:设定下一个要存入数据的CGRAM的地址。
(注意这里我们送地址的时候应该是0x80+Address,这也是前面说到写地址命令的时候要加上0x80的原因)
9.读取忙信号或AC地址指令
功能:<1> 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;
<2> 读取地址计数器(AC)的内容。
10.数据写入DDRAM或CGRAM指令一览
功能:<1> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;
<2> 将使用者自己设计的图形存入CGRAM。
11.从CGRAM或DDRAM读出数据的指令一览
功能:读取DDRAM或CGRAM中的内容。
基本操作时序:
读状态
输入:RS=L,RW=H,E=H
输出:DB0~DB7=状态字
写指令
输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码
输出:无
读数据
输入:RS=H,RW=H,E=H
输出:DB0~DB7=数据
写数据
输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据
输出:无
这么多的指令刚开始的时候没有必要全部掌握,随着学习的深入可以再尝试去用更复杂的控制指令。
测试用的最小系统,单片机是STC89C516,晶振为12M。液晶为蓝底白字的那种1602。
当我们硬件连接错误,或者程序错误时就会出现下图这种情况,就是上排显示16的白色的块(蓝底黑字的液晶则显示的是16个黑块)。
在1602的上排显示“LCD1602 check ok”下排显示“study up”程序中没有用到忙检测,而是用延时函数来替代忙检测.#include
#define uint unsigned int //预定义一下
#define uchar unsigned char
sbit rs=P3^5;
//1602的数据/指令选择控制线
sbit rw=P3^6;//1602的读写控制线
sbit en=P3^7;//1602的使能控制线
/*P0口接1602的D0~D7,注意不要接错了顺序*/
uchar code table[]=“LCD1602 check ok”;//要显示的内容1放入数组tablel uchar code table1[]=“study up”;
//要显示的内容2放入数组table1 void delay(uint n)
//延时函数
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com)//1602写命令函数
{
rs=0;
//选择指令寄存器
rw=0;
//选择写
P0=com;
//把命令字送入P0
delay(5);
//延时一小会儿,让1602准备接收数据
en=1;
//使能线电平变化,命令送入1602的8位数据口
en=0;}
void lcd_wdat(uchar dat)//1602写数据函数
{
rs=1;
//选择数据寄存器
rw=0;
//选择写
P0=dat;
//把要显示的数据送入P0
delay(5);//延时一小会儿,让1602准备接收数据
en=1;
//使能线电平变化,数据送入1602的8位数据口
en=0;}
void lcd_init()
//1602初始化函数
{
lcd_wcom(0x38);
//8位数据,双列,5*7字形
lcd_wcom(0x0c);
//开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06);
//显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01);
//清屏
}
void main()
//主函数
{
uchar n,m=0;
lcd_init();
//液晶初始化
lcd_wcom(0x80);
//显示地址设为80H(即00H,)上排第一位
for(m=0;m<16;m++)//将table[]中的数据依次写入1602显示
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x80+0x44);
//重新设定显示地址为0xc4,即下排第5位
for(n=0;n<8;n++)
//将table1[]中的数据依次写入1602显示
{
lcd_wdat(table1[n]);
delay(200);
}
while(1);//动态停机
}
程序写好后烧写进单片机,现在让我们看看效果吧
这就是显示的效果,你做成功了吗?
下面让我们来看看如何显示一个自定义的字符吧
我们从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000X111,X为无效位,最后三位为000-111共8个。
如果我们要想显示这8个用户自定义的字符,操作方法和显示CGROM的一样,先设置DDRAM位置,再向DDRAM写入字符码,例如“A”就是41H。现在我们要显示CGRAM的第一个自定义字符,就向DDRAM写入00000000B(00H),如果要显示第8个就写入00000111(08H),简单吧!
好!现在我们来看怎么向这八个自定义字符写入字模。有个设置CGRAM地址的指令大家还记得吗?赶快再找出来看看。
从这个指令可以看出指令数据的高2位已固定是01,只有后面的6位是地址数据,而这6位中的高3位就表示这八个自定义字符,最后的3位就是字模数据的八个地址了。例如第一个自定义字符的字模地址为01000000-01000111八个地址。我们向这8个字节写入字模数据,让它能显示出“℃”
地址:01000000
数据:00010000
图示:○○○■○○○○
01000001
00000110
○○○○○■■○
01000010
00001001
○○○○■○○■
01000011
00001000
○○○○■○○○
01000100
00001000
○○○○■○○○
01000101
00001001
○○○○■○○■
01000110
00000110
○○○○○■■○
01000111
00000000
○○○○○○○○
下面我们写一段程序让这8个自定义字符显示出一个心的图案:(由于上面那个显示程序已经有很详细的注释了,因此这个程序只对与上个程序不同的地方写注释)
#include
uchar code table[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心图案
/*uchar code table1[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//字符℃ */
void delay(uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);}
void lcd_wcom(uchar com)
{
rs=0;
rw=0;
P2=com;
delay(5);
en=1;
en=0;}
void lcd_wdat(uchar dat)
{
rs=1;
rw=0;
P2=dat;
delay(5);
en=1;
en=0;
}
void lcd_init()
{
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}
void main(){
char m=0;
lcd_init();
lcd_wcom(0x40);
//设定CGRAM地址
for(m=0;m<64;m++)//将心型代码写入CGRAM中
{
lcd_wdat(table[m]);
}
lcd_wcom(0x85);//设定上排的显示位置
for(m=0;m<4;m++)//显示心型图案的上半部分
{
lcd_wdat(m);
}
lcd_wcom(0xc5);//将显示坐标转移到下排和上排相对应的地方
for(m=4;m<8;m++)//显示心型图案的下半部分
{
lcd_wdat(m);
}
while(1);}
让我们一起来看看显示的效果吧~~
在绿底黑字液晶模块和蓝底白字液晶模块上分别显示的效果。
下面再为大家展示几种可能出现的问题
1:通电之后,程序也烧写进去了,但是1602就是不显示,只显示一排黑块(一般都是在上排8个小黑块,记得刚开始用1602液晶的时候,被这个整怕了~~),怎么样,你郁闷了吧,其实出现这种问题的原因无非以下几种:硬件连线上的错误,这种错误一般用万用表仔细检查后很容易找出来。第二种情况就是硬件连接上是正确的,那么此时出问题最大的就是程序上了,如果你用的是忙检测,看一下忙检测函数写对了没,如果用的是延时函数,那么看看延时的时间是否够长。再就是看看时序图,这点很重要的哦。如果硬件和软件都没有错,那么就要考虑1602是否坏了,但是出现这种情况的几率很小,如果遇到这种情况,你可以考虑去买彩票了~~
下面这种情况你遇到过吗?我遇到过了的,搞得我很是郁闷~~
我做的实验是要液晶显示ABC这三个字母,并且开光标,光标闪烁。大家可以在第一排的最后几位看到ABC和光标都已经显示出来了。但是为什么其它位会显示这么多8呢?嘿嘿~~郁闷吧。出现这种情况的原因就是在初始化液晶的时候,要把清屏指令放在最后面,否则就会出现上图这种情况。怎么样,第一次听说吧~不过,我不知道其它的液晶是否也有这个问题出现,至少我用的这块就有这种情况,但是我的另一个液晶则没有这种情况出现,不管是在一开始就清屏还是最后清屏。大家注意下就可以了,万一出现了这种情况,就会处理了~~
上面这张图是用1602作为显示的温度电子钟~~上面的年月日三个字就是用自定义字符的方法显示的。呵呵,怎么样~~到此1602的驱动基本上结束了,剩下的就靠大家自己去发挥了。
LCD1602.pdf
(2010-02-05 16:03:05, Size: 579 KB, Downloads: 23)tiankai(2010-2-05 16:31:51)
晨辉教你轻松学51--------按键篇
对于一个由单片机为核心构成的系统而言。输入通道是相当重要的。可以看到几乎每一样基于单片机的产品都有人机交互的部分。如各种仪器设备上的各种按钮和开关,以及我们手机上的键盘,MP3上的按键等等。最常见的输入部分,莫非就是按键了。对于大多数初学者而言,编写一个好的按键程序是一件颇为头疼的事情。于是乎在网上乱搜一气,程序倒是找到了不少,但是看了半天依然是不明白。或者在某某论坛上面发帖“跪求XX按键程序,大虾帮忙……”如果你偶然间进了这个论坛,又偶然看到了这个帖子,而且恰好你对按键程序的写法也不是很清楚,那么我希望你能够静静的看完这个帖子。如果你觉得对你很有帮助,那么我希望你能够在以后的日子中能够坚持到这个论坛来,一起交流学习,分享自己学习过程中的喜悦或者一起探讨棘手的问题,这是我写这个帖子的最大的初衷了。OK,不能再说了,再说就变成水帖了。那么我们开始吧。
按键的种类很多。不过原理基本相似。下面我们以一种轻触开关为例讲解按键程序的写法。
这种轻触开关大家不陌生吧^_^
一般情况下,按键与单片机的连接如下面这幅图所示。
(图中电阻值一般去4.7k~10k之间,对于内部端口有上拉电阻的单片机则可省略此电阻)单片机对于按键的按下与否则是通过检测相应引脚上的电平来实现的。对于上图而言,当P17引脚上面的电平为低时,则表示按键已经按下。反之,则表明按键没有按下。我们在程序中只要检测到了P17引脚上面的电平为低了,就可以判断按键按下。呵呵,简单吧。等会,您先别乐呵,话还没说完呢。下面我们来看看,当按键按下时,P17引脚上面的波形是怎么变化的。
上图是一个理想波形图,当按键按下时,P17口的电平马上被拉低到0V了。当然理想的东西都是不现实的。所以我们还是看看现实的波形图吧。
看出什么区别来了没。呵呵,只要你不是傻子我相信都能看出其中的区别。由于按键的机械特性。当按键闭合时,并不能马上保存良好的接触,而是来回弹跳。这个时间很短,我们的手根本感觉不出来。但是对于一秒钟执行百万条指令的单片机而言,这个时间是相当的长了。那么在这段抖动的时间内,单片机可能读到多次高低电平的变化。如果不加任何处理的话,就会认为已经按下,或者松开很多次了。而事实上,我们的手一直按在按键上,并没有重复按动很多次。要想能够正确的判断按键是否按下就要避开这段抖动的时间。根据一般按键的机械特点,以及按键的新旧程度等而言,这段抖动的时间一般在5MS~20MS之间。
看到这里你明白了该如何做了吧。
看看下面的这个流程图,你应该不陌生吧。
这个流程是好多教科书上的做法。可惜,误导了好多人。为什么呢。因为它根本就没有考虑实际情况。我们根据这幅流程图来写它的代码看看。
unsigned char v_ReadKey_f(void)
{
unsigned char KeyPress;
if(P17 == 0)
{
Delay(20);//延时20MS
If(P17 == 0)
{
KeyPress = 1;
While(!P17);//等待释放
}
else
KeyPress = 0;
}
}
这样一个程序,相信对很多初学者而言都不陌生。因为好多书上基本都是这样的一个流程和写法。可是当有一天,我们想做一个数码管加按键调整的时钟,发现当我们按键按下去的时候,数码管就不亮了。为什么呢。原因就在这个键盘扫描函数。平常没有按键按下还好。一旦有键按下,它先是浪费了CPU的大部分时间(就是那个什么事情都没做的延时20MS函数)然后,又霸占CPU(就是哪个死死等在那里的while(P17);语句)直到按键释放。对于这种情况我们是忍无可忍的,那么就让我们彻底的抛弃它吧。那么到底按键扫描函数改如何写呢……..所谓众里寻她千百度,蓦然回首,那人却在灯火阑珊处。如果我们把CPU延时的那20MS拿出来去做其它事情,那么不就充分利用CPU的时间了吗。而一般情况下我们只要前沿去抖动就可以了。也就是说了,我们只需在按键按下后去抖就可以了,对于按键的释放抖动可以不必要过于关注。当然这主要和应用的场合有关。一个能有效识别按键按下并支持连发功能的按键已经能够应用到大多数的场合了。
下面以四个独立按键的处理程序为例来讲解(支持单击和连发)
#include“regx52.h”
sbit KeyOne = P1^0;
sbit KeyTwo = P1^1;
sbit KeyThree = P1^2;
sbit KeyFour = P1^3;
#define uint16 unsigned int
#define uint8 unsigned char
#define NOKEY 0xff
#define KEY_WOBBLE_TIME 500
//去抖动时间(待定)
#define KEY_OVER_TIME 15000 //等待进入连击时间(待定),该常数要比正常 //按键时间要长,防止非目的性进入连击模式
#define KEY_QUICK_TIME 1000 //等待按键抬起的连击时间(待定)
void v_KeyInit_f(void)
{
KeyOne = 1;//按键初始化(相应端口写1)
KeyTwo = 1;
KeyThree = 1;
KeyFour = 1;
}
uint8 u8_ReadKey_f(void)
{
static uint8 LastKey = NOKEY;//保存上一次的键值
static uint16 KeyCount = 0;//按键延时计数器
static uint16 KeyOverTime = KEY_OVER_TIME;//按键抬起时间
uint8 KeyTemp = NOKEY;
//临时保存读到的键值
KeyTemp = P1 & 0x0f;
//读键值
if(KeyTemp == 0x0f)
{
KeyCount = 0;
KeyOverTime = KEY_OVER_TIME;
return NOKEY;
//无键按下返回NOKEY
}
else
{
if(KeyTemp == LastKey)//是否第一次按下
{
if(++KeyCount == KEY_WOBBLE_TIME)次按下,则判断//抖动是否结束
{
return KeyTemp;
//去抖动结束,返回键值
}
else
{
if(KeyCount > KeyOverTime)
//不是第一
{
KeyCount = 0;
KeyOverTime = KEY_QUICK_TIME;
}
return NOKEY;
}
}
else //是第一次按下则保存键值,以便下次执行此函数时与读到的键值作比较
{
LastKey = KeyTemp;
//保存第一次读到的键值
KeyCount = 0;
//延时计数器清零
KeyOverTime = KEY_OVER_TIME;
return NOKEY;
}
}
}
下面是我测试用的主程序(相关头文件未列出,仅仅作测试演示用)void main(void){
uint8 KeyValue;
int16 Count;
v_LcdInit_f();
v_KeyInit_f();
CLS
LOCATE(3, 1)
PRINT(“Key Test”)
LOCATE(6, 2)
SHOW_ICON
while(1)
{
KeyValue = u8_ReadKey_f();
if(KeyValue!= NOKEY)
{ LOCATE(1, 2)
if(KeyValue == 0x0e)Count++;
if(KeyValue == 0x0d)Count--;
if(KeyValue == 0x0b)Count = 0;
if(KeyValue == 0x07)Count = 0;
HIDE_ICON
PRINTD(Count, 5)
LOCATE(6, 2)
}
else
{
//SHOW_ICON
} }
}
每次执行读键盘函数时,只是对一些标志进行判断,然后退出。因此能够充分的利用CPU的资源。同时可以处理连发按键。此按键扫描按键函数可以直接放在主函数中。如果感觉按键太过灵敏或者迟钝则改一下相关消抖动的宏定义即可。此函数也可以通过中断标志位进行定时的扫描。此时,需要添加一个定时标志位,并将相关消抖动的和连击时间的宏定义改小即可。然后在主程序类似下面这样写即可
if(KeyTime)//定时扫描时间到
{
KeyValue = u8_ReadKey_f();
} 具体的工作就交给您去完成啦。
看看效果: 按键单击
连发时候的截图
至此,关于单个按键的学习就告一段落了,您是否已经明白了。如果您还不明白,那么把这个程序好好的看看,并画下流程图,分析分析。估计您就会恍然大悟。关键是思路要转换过来。下面我们来看看多个按键的情况吧
一般情况下,如果多个按键每个都直接接在单片机的I/O上的话会占用很多的I/O资源。比较合理的一种做法是,按照行列接成矩阵的形式。按键接在每一个的行列的相交处。这样对于m行n列的矩阵,可以接的按键总数是m*n。这里我们以常见的4*4矩阵键盘来讲解矩阵键盘的编程。
上图就是矩阵键盘的一般接法。
这里我们要介绍一种快速的键盘扫描法:线反转法(或者称为行列翻转法)。具体流程如下。首先,让单片机的行全部输出0,列全部输出1,读取列的值(假设行接P3口的高四位,列接低四位)。即P3= 0x0f;此时读列的值,如果有键按下,则相应的列读回来的值应该为低。譬如此时读回来的值为 0x0e;即按键列的位置已经确定。这时反过来,把行作为输入,列作为输出,即P0 = 0xf0;此时再读行的值,如果按键仍然被按下,则相应的行的值应该为低,如果此时读回来的值为0xe0,则确定了行的位置。说到这里,您应该笑了,知道了一个按键被按下的行和列的位置,那么就可以肯定确定它的位置了。我们把读回来的行值和列值进行或运算。即 0xe0 | 0x 0e 即 0xee。那么0xee就是我们按下的按键的键值了。怎么样。只需几步就可以判断所有的键值,简单吧。下面再结合一个例子具体看看。/****************************************** * 此模块所需相关支持库
* ******************************************/ #include“regx52.h” #define uint8 unsigned char #define uint16 unsigned int
/**************************************** * 与硬件连接相关的定义及宏定义和操作宏 * *****************************************/ #define KEYBOARD P3
//键盘连接到单片机上的端口位置
#define READ_ROW_ENLABLE KEYBOARD = 0x0f;//读端口之前先把相应口置位(由基本51单片机特性决定的)#define READ_COL_ENLABLE KEYBOARD = 0xf0;// 根据实际硬件连接情况修改
/***************************************** * 模块内相关的宏定义及常数宏
* ******************************************/ #define NOKEY
0xff //定义无键按下时的返回值 #define DELAY_COUNT 2 //消抖时间常数
/***************************************** * 此模块所需的全局或者外部变量
* *****************************************/ bit bdata StartScan = 0;//此变量需放在定时中断中置位
/***************************************** * 按键扫描函数,按下去后经去抖,确定按下 * * 则返回键值0~15;无键按下则返回0xff;*
* 此函数需要定时器的支持(去抖....)
* *****************************************/ uint8 u8_KeyBoardScan_f(){
static uint8 DelayCount = 0;
uint8 KeyValueRow = 0;
uint8 KeyValueCol = 0;
uint8 KeyValue = 0;
if(StartScan)
//开始扫描,StartScan在定时中断中置位
{
StartScan = 0;//清除开始扫描标志位,避免多次重复执行扫描程序
//读入按键状态前先向相应端口写1(由基本51单片机硬件结构决定)
READ_ROW_ENLABLE
if((KEYBOARD & 0x0f)!= 0x0f)//判断是否有键按下
{
DelayCount++;
if(DelayCount <= DELAY_COUNT)//有键按下则判断延时去抖的时间是否达到
{
return NOKEY;
}
else
//消除了抖动
{
if((KEYBOARD & 0x0f)!= 0x0f)//再次判断是否按键真的按下
{
DelayCount = 0;
//确定按下后,延时去抖计时器清0
KeyValueRow = KEYBOARD & 0x0f;//取得行码
//准备读列,先向相应端口写1(由基本51单片机硬件结构决定)
READ_COL_ENLABLE
if((KEYBOARD & 0xf0)!= 0xf0)//反转,读列码
{
KeyValueCol = KEYBOARD & 0xf0;//取得列码
//合并取得的行码和列码,即是相应按键的键值
switch(KeyValueCol | KeyValueRow)
{
case 0x77 : KeyValue = 0;break;
case 0xb7 : KeyValue = 1;break;
case 0xd7 : KeyValue = 2;break;
case 0xe7 : KeyValue = 3;break;
case 0x7b : KeyValue = 4;break;
case 0xbb : KeyValue = 5;break;
case 0xdb : KeyValue = 6;break;
case 0xeb : KeyValue = 7;break;
case 0x7d : KeyValue = 8;break;
case 0xbd : KeyValue = 9;break;
case 0xdd : KeyValue = 10;break;
case 0xed : KeyValue = 11;break;
case 0x7e : KeyValue = 12;break;
case 0xbe : KeyValue = 13;break;
case 0xde : KeyValue = 14;break;
case 0xee : KeyValue = 15;break;
default : return NOKEY;
}
return KeyValue;
}
else
{
DelayCount = 0;
return NOKEY;
}
}
else
{
DelayCount = 0;
return NOKEY;
}
}
}
else
{
DelayCount = 0;
return NOKEY;
} }
}
void v_T0_Isr_f(void)interrupt INTERRUPT_TIMER2_OVERFLOW {
StartScan = 1;}
/*************************************************** *模块调试
* ***************************************************/
//主函数仅作演示用,主函数除按键扫描外的函数并没在这里给出 void v_Init_T2_f(void){
T2CON = 0x04;
T2MOD = 0x00;
TH2 = 0xd8;
RCAP2H = 0xd8;
TL2
= 0xf0;
RCAP2L = 0xf0;
ET2 = 1;
TR2 = 1;}
void main(void){
uint8 readkey = 0;
v_Init_T2_f();
v_LcdInit_f();
LOCATE(1, 1)
PRINT(“4*4KeyBoard Test”)
EA = 1;
LOCATE(3, 2)
while(1)
{
SHOW_ICON
readkey = u8_KeyBoardScan_f();
if(readkey!= NOKEY)
{
PRINTN(readkey , 2)
LOCATE(3, 2)
continue;
}
else
{
continue;
}
} }
呵呵,按键扫描程序已经注释的很详细了。我就不多费嘴舌了。如果有不清楚的地方,欢迎跟帖讨论。下面是按键测试的截图
我的自己搭建的实验板
OK,Enioy it!自此按键检测告一段落。下次如果再讲按键。将会讨论另外一种按键的写法:基于状态机的按键程序设计。欢迎讨论。tiankai(2010-2-05 16:37:53)晨辉教你轻松学51--------按键篇
对于一个由单片机为核心构成的系统而言。输入通道是相当重要的。可以看到几乎每一样基于单片机的产品都有人机交互的部分。如各种仪器设备上的各种按钮和开关,以及我们手机上的键盘,MP3上的按键等等。最常见的输入部分,莫非就是按键了。对于大多数初学者而言,编写一个好的按键程序是一件颇为头疼的事情。于是乎在网上乱搜一气,程序倒是找到了不少,但是看了半天依然是不明白。或者在某某论坛上面发帖“跪求XX按键程序,大虾帮忙……”如果你偶然间进了这个论坛,又偶然看到了这个帖子,而且恰好你对按键程序的写法也不是很清楚,那么我希望你能够静静的看完这个帖子。如果你觉得对你很有帮助,那么我希望你能够在以后的日子中能够坚持到这个论坛来,一起交流学习,分享自己学习过程中的喜悦或者一起探讨棘手的问题,这是我写这个帖子的最大的初衷了。OK,不能再说了,再说就变成水帖了。那么我们开始吧。
按键的种类很多。不过原理基本相似。下面我们以一种轻触开关为例讲解按键程序的写法。
这种轻触开关大家不陌生吧^_^
一般情况下,按键与单片机的连接如下面这幅图所示。
(图中电阻值一般去4.7k~10k之间,对于内部端口有上拉电阻的单片机则可省略此电阻)单片机对于按键的按下与否则是通过检测相应引脚上的电平来实现的。对于上图而言,当P17引脚上面的电平为低时,则表示按键已经按下。反之,则表明按键没有按下。我们在程序中只要检测到了P17引脚上
面的电平为低了,就可以判断按键按下。呵呵,简单吧。等会,您先别乐呵,话还没说完呢。下面我们来看看,当按键按下时,P17引脚上面的波形是怎么变化的。
上图是一个理想波形图,当按键按下时,P17口的电平马上被拉低到0V了。当然理想的东西都是不现实的。所以我们还是看看现实的波形图吧。
看出什么区别来了没。呵呵,只要你不是傻子我相信都能看出其中的区别。由于按键的机械特性。当按键闭合时,并不能马上保存良好的接触,而是来回弹跳。这个时间很短,我们的手根本感觉不出来。但是对于一秒钟执行百万条指令的单片机而言,这个时间是相当的长了。那么在这段抖动的时间内,单片机可能读到多次高低电平的变化。如果不加任何处理的话,就会认为已经按下,或者松开很多次了。而事实上,我们的手一直按在按键上,并没有重复按动很多次。要想能够正确的判断按键是否按下就要避开这段抖动的时间。根据一般按键的机械特点,以及按键的新旧程度等而言,这段抖动的时间一般在5MS~20MS之间。
看到这里你明白了该如何做了吧。
看看下面的这个流程图,你应该不陌生吧。
这个流程是好多教科书上的做法。可惜,误导了好多人。为什么呢。因为它根本就没有考虑实际情况。我们根据这幅流程图来写它的代码看看。
unsigned char v_ReadKey_f(void){
unsigned char KeyPress;
if(P17 == 0)
{
Delay(20);//延时20MS
If(P17 == 0)
{
KeyPress = 1;
While(!P17);//等待释放
}
else
KeyPress = 0;
}
}
这样一个程序,相信对很多初学者而言都不陌生。因为好多书上基本都是这样的一个流程和写法。可是当有一天,我们想做一个数码管加按键调整的时钟,发现当我们按键按下去的时候,数码管就不亮了。为什么呢。原因就在这个键盘扫描函数。平常没有按键按下还好。一旦有键按下,它先是浪费了CPU的大部分时间(就是那个什么事情都没做的延时20MS函数)然后,又霸占CPU(就是哪个死死等在那里的while(P17);语句)直到按键释放。对于这种情况我们是忍无可忍的,那么就让我们彻底的抛弃它吧。那么到底按键扫描函数改如何写呢……..所谓众里寻她千百度,蓦然回首,那人却在灯火阑珊处。如果我们把CPU延时的那20MS拿出来去做其它事情,那么不就充分利用CPU的时间了吗。而一般情况下我们只要前沿去抖动就可以了。也就是说了,我们只需在按键按下后去抖就可以了,对于按键的释放抖动可以不必要过于关注。当然这主要和应用的场合有关。一个能有效识别按键按下并支持连发功能的按键已经能够应用到大多数的场合了。
下面以四个独立按键的处理程序为例来讲解(支持单击和连发)
#include“regx52.h”
sbit KeyOne = P1^0;
sbit KeyTwo = P1^1;
sbit KeyThree = P1^2;
sbit KeyFour = P1^3;
#define uint16 unsigned int
#define uint8 unsigned char
#define NOKEY 0xff
#define KEY_WOBBLE_TIME 500
//去抖动时间(待定)
#define KEY_OVER_TIME 15000 //等待进入连击时间(待定),该常数要比正常 //按键时间要长,防止非目的性进入连击模式
#define KEY_QUICK_TIME 1000 //等待按键抬起的连击时间(待定)
void v_KeyInit_f(void)
{
KeyOne = 1;//按键初始化(相应端口写1)
KeyTwo = 1;
KeyThree = 1;
KeyFour = 1;
}
uint8 u8_ReadKey_f(void)
{
static uint8 LastKey = NOKEY;//保存上一次的键值
static uint16 KeyCount = 0;//按键延时计数器
static uint16 KeyOverTime = KEY_OVER_TIME;//按键抬起时间
uint8 KeyTemp = NOKEY;
//临时保存读到的键值
KeyTemp = P1 & 0x0f;
//读键值
if(KeyTemp == 0x0f)
{
KeyCount = 0;
KeyOverTime = KEY_OVER_TIME;
return NOKEY;
//无键按下返回NOKEY
}
else
{
if(KeyTemp == LastKey)//是否第一次按下
{
if(++KeyCount == KEY_WOBBLE_TIME)//不是第一次按下,则判断//抖动是否结束
{
return KeyTemp;
//去抖动结束,返回键值
}
else
{
if(KeyCount > KeyOverTime)
{
KeyCount = 0;
KeyOverTime = KEY_QUICK_TIME;
}
return NOKEY;
}
}
else //是第一次按下则保存键值,以便下次执行此函数时与读到的键值作比较
{
LastKey = KeyTemp;
//保存第一次读到的键值
KeyCount = 0;
//延时计数器清零
KeyOverTime = KEY_OVER_TIME;
return NOKEY;
}
}
}
下面是我测试用的主程序(相关头文件未列出,仅仅作测试演示用)void main(void){
uint8 KeyValue;
int16 Count;
v_LcdInit_f();
v_KeyInit_f();
CLS
LOCATE(3, 1)
PRINT(“Key Test”)
LOCATE(6, 2)
SHOW_ICON
while(1)
{
KeyValue = u8_ReadKey_f();
if(KeyValue!= NOKEY)
{ LOCATE(1, 2)
if(KeyValue == 0x0e)Count++;
if(KeyValue == 0x0d)Count--;
if(KeyValue == 0x0b)Count = 0;
if(KeyValue == 0x07)Count = 0;
HIDE_ICON
PRINTD(Count, 5)
LOCATE(6, 2)
}
else
{
//SHOW_ICON
}
}
}
每次执行读键盘函数时,只是对一些标志进行判断,然后退出。因此能够充分的利用CPU的资源。同时可以处理连发按键。此按键扫描按键函数可以直接放在主函数中。如果感觉按键太过灵敏或者迟钝则改一下相关消抖动的宏定义即可。此函数也可以通过中断标志位进行定时的扫描。此时,需要添加一个定时标志
位,并将相关消抖动的和连击时间的宏定义改小即可。然后在主程序类似下面这样写即可
if(KeyTime)//定时扫描时间到
{
KeyValue = u8_ReadKey_f();
} 具体的工作就交给您去完成啦。
看看效果: 按键单击
连发时候的截图
至此,关于单个按键的学习就告一段落了,您是否已经明白了。如果您还不明白,那么把这个程序好好的看看,并画下流程图,分析分析。估计您就会恍然大悟。关键是思路要转换过来。下面我们来看看多个按键的情况吧
一般情况下,如果多个按键每个都直接接在单片机的I/O上的话会占用很多的I/O资源。比较合理的一种
做法是,按照行列接成矩阵的形式。按键接在每一个的行列的相交处。这样对于m行n列的矩阵,可以接的按键总数是m*n。这里我们以常见的4*4矩阵键盘来讲解矩阵键盘的编程。
上图就是矩阵键盘的一般接法。
这里我们要介绍一种快速的键盘扫描法:线反转法(或者称为行列翻转法)。具体流程如下。首先,让单片机的行全部输出0,列全部输出1,读取列的值(假设行接P3口的高四位,列接低四位)。即P3= 0x0f;此时读列的值,如果有键按下,则相应的列读回来的值应该为低。譬如此时读回来的值为 0x0e;即按键列的位置已经确定。这时反过来,把行作为输入,列作为输出,即P0 = 0xf0;此时再读行的值,如果按键仍然被按下,则相应的行的值应该为低,如果此时读回来的值为0xe0,则确定了行的位置。说到这里,您应该笑了,知道了一个按键被按下的行和列的位置,那么就可以肯定确定它的位置了。我们把读回来的行值和列值进行或运算。即 0xe0 | 0x 0e 即 0xee。那么0xee就是我们按下的按键的键值了。怎么样。只需几步就可以判断所有的键值,简单吧。下面再结合一个例子具体看看。/****************************************** * 此模块所需相关支持库
* ******************************************/ #include“regx52.h” #define uint8 unsigned char #define uint16 unsigned int
/**************************************** * 与硬件连接相关的定义及宏定义和操作宏 *
*****************************************/ #define KEYBOARD P3
//键盘连接到单片机上的端口位置
#define READ_ROW_ENLABLE KEYBOARD = 0x0f;//读端口之前先把相应口置位(由基本51单片机特性决定的)#define READ_COL_ENLABLE KEYBOARD = 0xf0;// 根据实际硬件连接情况修改
/***************************************** * 模块内相关的宏定义及常数宏
* ******************************************/ #define NOKEY
0xff //定义无键按下时的返回值 #define DELAY_COUNT 2 //消抖时间常数
/***************************************** * 此模块所需的全局或者外部变量
* *****************************************/ bit bdata StartScan = 0;//此变量需放在定时中断中置位
/***************************************** * 按键扫描函数,按下去后经去抖,确定按下 * * 则返回键值0~15;无键按下则返回0xff;* * 此函数需要定时器的支持(去抖....)
* *****************************************/ uint8 u8_KeyBoardScan_f(){
static uint8 DelayCount = 0;
uint8 KeyValueRow = 0;
uint8 KeyValueCol = 0;
uint8 KeyValue = 0;
if(StartScan)
//开始扫描,StartScan在定时中断中置位
{
StartScan = 0;//清除开始扫描标志位,避免多次重复执行扫描程序
//读入按键状态前先向相应端口写1(由基本51单片机硬件结构决定)
READ_ROW_ENLABLE
if((KEYBOARD & 0x0f)!= 0x0f)//判断是否有键按下
{
DelayCount++;
if(DelayCount <= DELAY_COUNT)//有键按下则判断延时去抖的时间是否达到
{
return NOKEY;
}
else
//消除了抖动
{
if((KEYBOARD & 0x0f)!= 0x0f)//再次判断是否按键真的按下
{
DelayCount = 0;
//确定按下后,延时去抖计时器清0
KeyValueRow = KEYBOARD & 0x0f;//取得行码
//准备读列,先向相应端口写1(由基本51单片机硬件结构决定)
READ_COL_ENLABLE
if((KEYBOARD & 0xf0)!= 0xf0)//反转,读列码
{
KeyValueCol = KEYBOARD & 0xf0;//取得列码
//合并取得的行码和列码,即是相应按键的键值
switch(KeyValueCol | KeyValueRow)
{
case 0x77 : KeyValue = 0;break;
case 0xb7 : KeyValue = 1;break;
case 0xd7 : KeyValue = 2;break;
case 0xe7 : KeyValue = 3;break;
case 0x7b : KeyValue = 4;break;
case 0xbb : KeyValue = 5;break;
case 0xdb : KeyValue = 6;break;
case 0xeb : KeyValue = 7;break;
case 0x7d : KeyValue = 8;break;
case 0xbd : KeyValue = 9;break;
case 0xdd : KeyValue = 10;break;
case 0xed : KeyValue = 11;break;
case 0x7e : KeyValue = 12;break;
case 0xbe : KeyValue = 13;break;
case 0xde : KeyValue = 14;break;
case 0xee : KeyValue = 15;break;
default : return NOKEY;
}
return KeyValue;
}
else
{
DelayCount = 0;
return NOKEY;
}
}
else
{
DelayCount = 0;
return NOKEY;
}
}
}
else
{
DelayCount = 0;
return NOKEY;
}
}
}
void v_T0_Isr_f(void)interrupt INTERRUPT_TIMER2_OVERFLOW {
StartScan = 1;}
/*************************************************** *模块调试
* ***************************************************/
//主函数仅作演示用,主函数除按键扫描外的函数并没在这里给出 void v_Init_T2_f(void){
T2CON = 0x04;
T2MOD = 0x00;
TH2 = 0xd8;
RCAP2H = 0xd8;
TL2
= 0xf0;
RCAP2L = 0xf0;
ET2 = 1;
TR2 = 1;}
void main(void){
uint8 readkey = 0;
v_Init_T2_f();
v_LcdInit_f();
LOCATE(1, 1)
PRINT(“4*4KeyBoard Test”)
EA = 1;
LOCATE(3, 2)
while(1)
{
SHOW_ICON
readkey = u8_KeyBoardScan_f()
if(readkey!= NOKEY)
{
PRINTN(readkey , 2)
LOCATE(3, 2)
continue;
}
else
{
continue;
}
;
} }
呵呵,按键扫描程序已经注释的很详细了。我就不多费嘴舌了。如果有不清楚的地方,欢迎跟帖讨论。下面是按键测试的截图
我的自己搭建的实验板
OK,Enioy it!自此按键检测告一段落。下次如果再讲按键。将会讨论另外一种按键的写法:基于状态机的按键程序设计。欢迎讨论。tiankai(2010-2-05 16:39:19)晨辉教你轻松学51--------外围芯片之ds1302和ds18b20
对于市面上的大多数51单片机开发板来说。ds1302和ds18b20应该是比较常见的两种外围芯片。ds1302是具有SPI总线接口的时钟芯片。ds18b20则是具有单总线接口的数字温度传感器。下面让我们分别来认识并学会应用这两种芯片。
首先依旧是看DS1302的datasheet中的相关介绍。
上面是它的一些基本的应用介绍。下面是它的引脚的描述。
下面是DS1302的时钟寄存器。我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。
这是DS1302内部的31个RAM寄存器。在某些应用场合我们可以应用到。如我们想要做一个带定时功能的闹钟。则可以把闹钟的时间写入到31个RAM寄存器中的任意几个。当单片机掉电时,只要我们的DS1302的备用电池还能工作,那么保存在其中的闹钟数据就不会丢失~~
由于对于这些器件的操作基本上按照数据手册上面提供的时序图和相关命令字来进行操作就可以了。因此在我们应用这些器件的时候一定要对照着手册上面的要求来进行操作。如果觉得还不够放心的话。可以到网上下载一些参考程序。对着手册看别人的程序,看别人的思路是怎么样的。
DS1302和单片机的连接很简单。只需一根复位线,一根时钟线,一根数据线即可。同时它本身还需要接一个32.768KHz的晶振来提供时钟源。对于晶振的两端可以分别接一个6PF左右的电容以提高晶振的精确度。同时可以在第8脚接上一个3.6V的可充电的电池。当系统正常工作时可以对电池进行涓流充电。当系统掉电时,DS1302由这个电池提供的能量继续工作。
下面让我们来驱动它。
sbit io_DS1302_RST = P2^0;sbit io_DS1302_IO = P2^1;sbit io_DS1302_SCLK = P2^2;
//------常数宏--//
#define DS1302_SECOND_WRITE 0x80
//写时钟芯片的寄存器位置
#define DS1302_MINUTE_WRITE 0x82
#define DS1302_HOUR_WRITE 0x84
#define DS1302_WEEK_WRITE 0x8A
#define DS1302_DAY_WRITE 0x86
#define DS1302_MONTH_WRITE 0x88
#define DS1302_YEAR_WRITE 0x8C
#define DS1302_SECOND_READ 0x81
//读时钟芯片的寄存器位置
#define DS1302_MINUTE_READ 0x83
#define DS1302_HOUR_READ 0x85
#define DS1302_WEEK_READ 0x8B
#define DS1302_DAY_READ 0x87
#define DS1302_MONTH_READ 0x89
#define DS1302_YEAR_READ 0x8D
//----操作宏---//
#define DS1302_SCLK_HIGH
io_DS1302_SCLK = 1;
#define DS1302_SCLK_LOW
io_DS1302_SCLK = 0;
#define DS1302_IO_HIGH
io_DS1302_IO = 1;
#define DS1302_IO_LOW
io_DS1302_IO = 0;
#define DS1302_IO_READ
io_DS1302_IO
#define DS1302_RST_HIGH
io_DS1302_RST = 1;
#define DS1302_RST_LOW
io_DS1302_RST = 0;
/****************************************************** * 保存时间数据的结构体
* ******************************************************/ struct {
uint8 Second;
uint8 Minute;
uint8 Hour;
uint8 Day;
uint8 Week;
uint8 Month;
uint8 Year;}CurrentTime;
/****************************************************************************** * Function: static void v_DS1302Write_f(uint8 Content)* * Description:向DS1302写一个字节的内容
* * Parameter:uint8 Content : 要写的字节
* *
* ******************************************************************************/
static void v_DS1302Write_f(uint8 Content)
{
uint8 i;
for(i = 8;i > 0;i--)
{
if(Content & 0x01)
{
DS1302_IO_HIGH
}
else
{
DS1302_IO_LOW
}
Content >>= 1;
DS1302_SCLK_HIGH
DS1302_SCLK_LOW
} }
/****************************************************************************** * Function: static uint8 v_DS1302Read_f(void)
* * Description: 从DS1302当前设定的地址读取一个字节的内容 * * Parameter:
* * Return: 返回读出来的值(uint8)
* ******************************************************************************/ static uint8 v_DS1302Read_f(void){
uint8 i, ReadValue;
DS1302_IO_HIGH
for(i = 8;i > 0;i--)
{
ReadValue >>= 1;
if(DS1302_IO_READ)
{
ReadValue |= 0x80;
}
else
{
ReadValue &= 0x7f;
}
DS1302_SCLK_HIGH
DS1302_SCLK_LOW
}
return ReadValue;}
/****************************************************************************** * Function: void v_DS1302WriteByte_f(uint8 Address, uint8 Content)* * Description: 从DS1302指定的地址写入一个字节的内容
* * Parameter: Address: 要写入数据的地址
* * Content: 写入数据的具体值
* * Return:
* ******************************************************************************/ void v_DS1302WriteByte_f(uint8 Address, uint8 Content){
DS1302_RST_LOW
DS1302_SCLK_LOW
DS1302_RST_HIGH
v_DS1302Write_f(Address);
v_DS1302Write_f(Content);
DS1302_RST_LOW
DS1302_SCLK_HIGH }
/***********************************************************************
******* * Function: uint8 v_DS1302ReadByte_f(uint8 Address)
* * Description:从DS1302指定的地址读出一个字节的内容
* * Parameter:Address: 要读出数据的地址
* *
* * Return:
指定地址读出的值(uint8)
* ******************************************************************************/ uint8 v_DS1302ReadByte_f(uint8 Address){
uint8 ReadValue;
DS1302_RST_LOW
DS1302_SCLK_LOW
DS1302_RST_HIGH
v_DS1302Write_f(Address);
ReadValue = v_DS1302Read_f();
DS1302_RST_LOW
DS1302_SCLK_HIGH
return ReadValue;} /****************************************************************************** * Function: void v_ClockInit_f(void)
* * Description:初始化写入DS1302时钟寄存器的值(主程序中只需调用一次即可)* * Parameter:
* *
* * Return:
* ******************************************************************************/ void v_ClockInit_f(void){
if(v_DS1302ReadByte_f(0xc1)!= 0xf0)
{ v_DS1302WriteByte_f(0x8e, 0x00);//允许写操作
v_DS1302WriteByte_f(DS1302_YEAR_WRITE, 0x08);//年
v_DS1302WriteByte_f(DS1302_WEEK_WRITE, 0x04);//星期
v_DS1302WriteByte_f(DS1302_MONTH_WRITE, 0x12);//月
v_DS1302WriteByte_f(DS1302_DAY_WRITE, 0x11);
//日
v_DS1302WriteByte_f(DS1302_HOUR_WRITE, 0x13);//小时
v_DS1302WriteByte_f(DS1302_MINUTE_WRITE, 0x06);//分钟
v_DS1302WriteByte_f(DS1302_SECOND_WRITE, 0x40);//秒
v_DS1302WriteByte_f(0x90, 0xa5);
//充电
v_DS1302WriteByte_f(0xc0, 0xf0);
//判断是否初始化一次标识写入
v_DS1302WriteByte_f(0x8e, 0x80);
//禁止写操作
} } /****************************************************************************** * Function: void v_ClockUpdata_f(void)
* * Description:读取时间数据,并保存在结构体CurrentTime中
* * Parameter:
* *
* * Return:
* ******************************************************************************/ void v_ClockUpdata_f(void){
CurrentTime.Second = v_DS1302ReadByte_f(DS1302_SECOND_READ);
CurrentTime.Minute = v_DS1302ReadByte_f(DS1302_MINUTE_READ);
CurrentTime.Hour = v_DS1302ReadByte_f(DS1302_HOUR_READ);
CurrentTime.Day = v_DS1302ReadByte_f(DS1302_DAY_READ);
CurrentTime.Month = v_DS1302ReadByte_f(DS1302_MONTH_READ);
CurrentTime.Week = v_DS1302ReadByte_f(DS1302_WEEK_READ);
CurrentTime.Year = v_DS1302ReadByte_f(DS1302_YEAR_READ);}
有了上面的这些函数我们就可以对DS1302进行操作了。当我们想要获取当前时间时,只需要调用v_ClockUpdata_f(void)这个函数即可。读取到的时间数据保存在CurrentTime这个结构体中。至于
如何把时间数据在数码管或者是液晶屏上显示出来我相信大家应该都会了吧^_^.看看显示效果如何~~
下面再让我们看看DS18B20吧。
DS18B20是单总线的数字温度传感器。其与单片机的接口只需要一根数据线即可。当然连线简单意味着软件处理上可能要麻烦一点。下面来看看它的优点:
看看它的靓照。外形和我们常用的三极管没有什么两样哦。
DS18B20的内部存储器分为以下几部分
ROM:存放该器件的编码。前8位为单线系列的编码(DS18B20的编码是19H)后面48位为芯片的唯一序列号。在出场的时候就已经设置好,用户无法更改。最后8位是以上56位的CRC码。
RAM:DS18B20的内部暂存器共9个字节。其中第一个和第二个字节存放转换后的温度值。第二个和第三个字节分别存放高温和低温告警值。(可以用RAM指令将其拷贝到EEPROM中)第四个字节为配置寄存器。第5~7个字节保留。第9个字节为前8个字节的CRC码。
DS18B20的温度存放如上图所示。其中S位符号位。当温度值为负值时,S = 1,反之则S = 0。我们把得到的温度数据乘上对应的分辨率即可以得到转换后的温度值。
DS18B20的通讯协议:
在对DS18B20进行读写编程时,必须严格保证读写的时序。否则将无法读取测温结果。根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过3个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令。这样才能对DS18B20进行预定的操作。复位要求主机将数据线下拉500us,然后释放,DS18B20收到信号后等待16~160us然后发出60~240us的存在低脉冲,主机收到此信号表示复位成功。
上图即DS18B20的复位时序图。下面是读操作的时序图
这是写操作的时序图
第二篇:PLC原理及应用
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC D组
一、全自动洗衣机梯形图控制程序的设计与调试 1.控制要求:
按下启动按扭及水位选择开关,注水直到高(中、低)水位,关水
(3)2s后开始洗涤
(4)洗涤时,正转30s,停2s,然后反转30s,停2s(5)如此循环5次,总共320s后开始排水,排空后脱水30s(6)开始清洗,重复(2)~(5),清洗两遍
(7)清洗完成,报警3秒并自动停机
(8)若按下停车按扭,可手动排水(不脱水)和手动脱水(不计数)
输入点: 输出点:
启动 10001 低水位检测 10009 启动洗衣机 00001 停止 10002 手动排水 10010 进水阀 00002 高水位 10003 手动脱水 10011 正转 00003 中水位 10004 反转 00004 低水位 10005 排水 00005 排空检测 10006 脱水 00006 高水位检测 10007 报警 00007 中水位检测 10008 2.若要求启动开关分为标准洗和轻柔洗,试改变有关输入点,并在程序中加入轻柔洗功能(轻柔洗过程自定)3.I/O编址 4.编程并调试
二、PLCⅡ型教学实验箱程序的开发
要求:
1.开发实验
十一、实验十五的梯形图程序 2.写出I/O编址
3.写出梯形图程序及语句表程序并调试
三、自行设计课题
要求:设计汽车自动清洗装置的PLC梯形图控制课题及程序 1.了解汽车自动清洗过程(可网上查找资料)
设计课题:课题名称、控制要求、工作框图或时序图、I/O编址 编程并调试 c)I/O端子接线图
四、完成课程设计说明书
1.课题名称及要求
2.程序(包括注释)、框图或时序图、I/O接线图等
3.三菱PLC与MODICON PLC相关指令的比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC E组
一、PLCⅡ型教学实验箱程序的开发 要求:
1.开发实验
九、实验
十二、实验十三的梯形图程序 2.写出I/O编址
3.写出梯形图程序及语句表程序并调试
二、自行设计课题
要求:设计十字路口交通灯控制课题及程序
1.观察宜山路中山西路口交通灯(包括左转弯灯和行人灯)的工作时序 2.设计课题:课题名称、控制要求、时序图、I/O编址 3.编程并借助于PLC实验箱的发光二极管(LED)进行调试 4.I/O端子接线图 三、八层电梯楼层定位及显示的梯形图控制程序设计与调试 1.控制要求:
(1)根据各楼层行程开关的状态,确定轿厢所在楼层
(2)用九段LED数码管作十进制层楼位置显示,如下图所示:
2.九段码编码示意图、真值表、I/O编址
3.编程并借助实验箱上的发光二极管进行调试(注意各层之间的显示保持)4.I/O端子接线图
四、完成课程设计说明书
1.课题名称及要求
2.程序(包括注释)、框图或时序图、I/O接线图等
3.三菱PLC与MODICON PLC相关指令的比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC F组
一、PLCⅡ型教学实验箱程序的开发
要求:
1.开发实验
八、实验
九、实验十五的梯形图程序 2.写出I/O编址
3.写出梯形图程序及语句表程序并调试
二、自行设计课题
要求:设计十字路口交通灯控制课题及程序
1.观察桂林路漕宝路口交通灯(包括左转弯灯和行人灯)的工作时序 2.设计课题:课题名称、控制要求、时序图、I/O编址 3.编程并借助于PLC实验箱的发光二极管(LED)进行调试 4.I/O端子接线图
三、花式喷水池装置PLC控制梯形图的设计与调试 1.花式喷水池示意图
图a中4为中间喷水管,3为内环状喷水管,2为中环形状喷水管,1为外环形状喷水管。图b中的选择开关可有4种选择,可分别用4个开关模拟实现;单步/连续开关为“1”= 单步,“0”= 连续,其他为单一功能开关。2.控制要求:
(1)水池控制电源开关接通后,按下启动按钮,喷水装置即开始工作。按下停止按钮,则停止喷水。工作方式由“选择开关”和“单步/连续”开关来决定。
(2)“单步/连续”开关在单步位置时,喷水池只运行一个循环;在连续位置时,喷水池反复循环运行。
(3)方式选择开关用以选择喷水池的喷水花样,1~4号喷水管的工作方式选择如下:
a)选择开关在位置“1”——按下启动按钮后,4号喷水,延时2s,3号喷水,再延时1.5s,2号喷水,再延时2s,1号喷水,然后全部停止1s,接着一起喷水15s为一个循环。
b)选择开关在位置“2”——按下启动按钮后,1号喷水,延时2s,2号喷水,再延时2s,3号喷水,再延时2s,4号喷水,然后全部停止0.5s,接着一起喷水30s为一个循环。
c)选择开关在位置“3”——按下启动按钮后,1、3号同时喷水,延时3s后,2、4号同时喷水,1、3号停止喷水;交替运行5次后,1~4号同时喷水20s为一个循环。
d)选择开关在位置“4”——按下启动按钮后,喷水池1~4号水管的工作顺序为: 1→2→3→4按顺序延时2s喷水,然后一起喷水10s后,按1→1+2→2→2+3→3→3+4→4→4+1号水管以1s间隔顺序喷水,小循环3次后,一起喷水2s,再停止1s,由4→3→2→1反序分别延时2s喷水,然后再一起喷水10s为一个大循环。
(4)不论在什么工作方式,按下停止按钮,喷水池立即停止工作,所有存储器复位。
3.I/O编址 4.编程并调试 5.I/O端子接线图
四、完成课程设计说明书
1.课题名称及要求
2.程序(包括注释)、框图或时序图、I/O接线图等
3.三菱PLC与MODICON PLC相关指令的比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC G组
一、PLCⅡ型教学实验箱程序的开发
要求:1.开发实验
十、实验十一的梯形图程序 2.写出I/O编址
3.写出梯形图程序及语句表程序并调试
二、自动门控制装置PLC梯形图控制程序的设计与调试 1.自动门控制装置的硬件组成:
自动门控制装置由门内光电探测开关K1、门外光电探测开关K2、开门到位限位开关K3、关门到限位开关K4、开门执行机构KM1(使直流电动机正转)、关门执行机构KM2(使直流电动机反转)等部件组成。光电探测开关为检测到人或物体时为ON,否则OFF。2.控制要求:
(1)当有人由内到外或由外到内通过光电检测开关K1或K2时,开门执行机构KM1动作,电动机正转,到达开门限位开关K3位置时,电机停止运行。
(2)自动门在开门位置停留8s后,自动进入关门过程,关门执行机构KM2被起动,电动机反转,当门移动到关门限位开关K4位置时,电机停止运行。
(3)在关门过程中,当有人员由外到内或由内到外通过光电检测开关K2或K1时,应立即停止关门,并自动进入开门程序。
(4)在门打开后的8s等待时间内,若有人员由外至内或由内至外通过光电检测开关K2或K1时,必须重新开始等待8s后,再自动进入关门过程,以保证人员安全通过。
(5)开门与关门不可同时进行 3.I/O编址
4.编程并借助于实验箱的发光二极管LED进行调试 5.I/O端子接线图
三、坐标式机械手的PLC梯形图控制程序设计与调试
1.坐标式机械手动作原理图
2.控制要求:将物体从位置A搬至位置B(1)动作顺序:机械手从原点位置起始下移到A处下限位→从A处夹紧物体后上升至上限位→右移至右限位→机械手下降至B处下限位→将物体放置在B处后→上升
至上限位→左移至左限位(原点)为一个循环。
(2)上限、A、B下限、左限、右限分别由限位开关控制;机械手设立起动和停止开关。
(3)机械手夹紧或松开的工作状态以及到达每一个工位时,均应有状态显示。
(4)机械手的夹紧和放松动作均应有1s延时,然后上升;机械手每到达一个位置均有0.5s的停顿延时,然后进行下一个动作。
(5)若机械手停止时不在原点位置,可通过手动开关分别控制机械手的上升和左移,使之回到原点。
(6)要求循环工作1小时时,判断机械手是否夹有物体,若没有,则立即自动停止工作并警铃报警;若夹有物体,则继续工作至物体放置到B位后自动停止工作并警铃报警。
3.I/O编址并画出工作框图 4.编程并调试 5.I/O端子接线图
四、完成课程设计说明书
1.课题名称及要求
2.程序(包括注释)、框图或时序图、I/O接线图等
3.三菱PLC与MODICON PLC相关指令的比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC H组
一、PLCⅡ型教学实验箱程序的开发
要求:
1.开发实验十四的梯形图程序 2.写出I/O编址
3.写出梯形图程序及语句表程序并调试 二、三相六拍步进电机PLC梯形图控制程序设计与调试 1.控制要求:
(1)三相步进电动机有三个绕组:A、B、C,正转通电顺序为:A→AB→B→BC→C→CA→A
反转通电顺序为:A→CA→C→BC→B→AB→A(2)要求能实现正、反转控制,而且正、反转切换无须经过停车步骤。
(3)具有两种转速:
#1开关合上,则转过一个步距角需0.5s。#2开关合上,则转过一个步距角需0.05s。
(4)要求步进电动机转动100个步距角后自动停止运行
(5)(选)在完成上述功能的基础上,增加功能:
设置按钮K1,每按一次K1,转速增加一档(即转动一个步距角所需时间减少0.01s)设置按钮K2,每按一次K2,转速减少一档(即转动一个步距角所需时间增加0.01s)I/O编址
3.编程并借助于PLC实验箱的发光二极管(LED)进行调试
三、完成课程设计说明书
1.课题名称及要求
2.程序(包括注释)、框图或时序图、I/O接线图等
3.三菱PLC与MODICON PLC相关指令的比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC I组
一、霓虹灯广告屏装置PLC控制梯形图的设计与调试 1.霓虹灯广告屏示意图
该广告屏共有8根灯管,24只流水灯,每4只灯为一组,如下图所示:
2.控制要求::
(1)该广告屏中间8根灯管亮灭的时序为:第1根亮→2亮→3亮→„„→第8根亮,时间间隔为1s,全亮后,显示10s,再反过来从8→7→„„→1按1s间隔顺序熄灭,全灭后停亮2s;再从第8根开始亮,顺序点亮7→6→„„→1,时间间隔1s,显示5s,再从1→2→„„→8按1s间隔顺序熄灭,全灭后停亮2s,然后重复运行,周而复始。
(2)24只流水灯,4个一组分成6组,从Ⅰ→Ⅱ→„„→Ⅵ按1s时间间隔依次向前移动,且点亮时每相隔1灯为亮,即从Ⅰ“①、③”亮→Ⅱ“⑤、⑦”亮,同时Ⅰ“①、③”灭→Ⅲ“、”亮,同时Ⅱ“⑤、⑦”灭„„,如此移动一段时间(如30s)后,再反过来移动一段时间:Ⅵ“、”亮 →Ⅴ“、”亮,同时Ⅵ“、”灭,„„如此循环往复。(3)系统有单步/连续控制,有起动和停止按钮。
(4)起动时,灯管和流水灯同时起动,关闭时,可同时也可分别关闭。
(5)在控制要求1中,若要求将全亮后显示10s改为以0.5s间隔同时闪烁5s,试修改程序。
(6)*要求有移位指令的应用 3.编程并模拟调试 4.画出I/O端子接线图
二、自行设计课题
要求:设计汽车自动清洗装置的PLC梯形图控制课题及程序 1.观察汽车自动清洗过程(可网上查找资料)
2.设计课题:课题名称、控制要求、工作框图或时序图、I/O编址 3.编程并调试 4.I/O端子接线图
三、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、时序图或框图、I/O接线图
3.三菱PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC J组
一、MODICON PLC梯形图控制程序的移植
要求:
1.将教材中五层电梯模型的梯形图控制程序三菱FX2N PLC的梯形图控制程序 I/O编址
试画出I/O端子接线图 二、五相十拍步进电动机控制程序的设计与调试 1.控制要求:
(1)五相步进电动机有五个绕组: A、B、C、D、E , 正转通电顺序: ABC→BC→BCD→CD→CDE→DE→DEA→EA→EAB→AB
反转通电顺序: ABC←BC←BCD←CD←CDE←DE←DEA←EA←EAB←AB
(2)用五个开关控制其工作:
#1开关控制其运行(启 / 停)。
#2 开关控制其低速运行(转过一个步距角需 0.5 s)。#3 开关控制其中速运行(转过一个步距角需 0.1 s)。#4 开关控制其低速运行(转过一个步距角需 0.03 s)。#5 开关控制其转向(ON 为正转,OFF 为反转)。2.I/O编址及工作框图(或时序图)
3.编程并借助于PLC实验箱的发光二极管(LED)进行调试 4.I/O端子接线图
三、PLCⅡ型教学实验箱程序的开发
要求:
1.开发实验
十、实验十一的梯形图程序 2.写出I/O编址
3.写出梯形图程序及语句表程序并调试
四、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、时序图或框图、I/O接线图 3.三菱PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC K组
一、PLCⅡ型教学实验箱程序的开发
要求:
1.开发实验
八、实验
九、实验十一的梯形图程序 2.写出I/O编址
3.写出梯形图程序及语句表程序并调试
二、霓虹灯广告屏装置PLC控制梯形图的设计与调试 1.霓虹灯广告屏示意图
该广告屏共有8根灯管,24只流水灯,每4只灯为一组,如下图所示:
2.控制要求::
(1)该广告屏中间8根灯管亮灭的时序为:第1根亮→2亮→3亮→„„→第8根亮,时间间隔为1s,全亮后,显示10s,再反过来从8→7→„„→1按1s间隔顺序熄灭,全灭后停亮2s;再从第8根开始亮,顺序点亮7→6→„„→1,时间间隔1s,显示3s,再从1→2→„„→8按1s间隔顺序熄灭,全灭后停亮2s,然后重复运行,周而复始。
(2)24只流水灯,4个一组分成6组,从Ⅰ→Ⅱ→„„→Ⅵ按1s时间间隔依次向前移动,且点亮时每相隔1灯为亮,即从Ⅰ“①、③”亮→Ⅱ“⑤、⑦”亮,同时Ⅰ“①、③”灭→Ⅲ“、”亮,同时Ⅱ“⑤、⑦”灭„„,如此移动一段时间(如30s)后,再反过来移动一段时间:Ⅵ“、”亮 →Ⅴ“、”亮,同时Ⅵ“、”灭,„„如此循环往复。
(3)系统有单步/连续控制,单步运行时广告屏只亮一个循环,连续运行时则循环往复运行;有起动和停止按钮。
(4)起动时,灯管和流水灯同时起动,关闭时,可同时也可分别关闭。
(5)在控制要求1中,若要求将全亮后显示10s改为以0.5s间隔同时闪烁5s,试修改程序。
(6)*要求有移位指令的应用 3.I/O编址并工作框图(或时序图)
4.编程并借助实验箱上的发光二极管模拟调试 5.画出I/O端子接线图
三、自动门控制装置PLC梯形图控制程序的设计与调试 1.自动门控制装置的硬件组成:
自动门控制装置由门内光电探测开关K1、门外光电探测开关K2、开门到位限位开关K3、关门到限位开关K4、开门执行机构KM1(使直流电动机正转)、关门执行机构KM2(使直流电动机反转)等部件组成。光电探测开关为无光导通,有光断开。2.控制要求:
(1)当有人由内到外或由外到内通过光电检测开关K1或K2时,开门执行机构KM1动作,电动机正转,到达开门限位开关K3位置时,电机停止运行。
(2)自动门在开门位置停留8s后,自动进入关门过程,关门执行机构KM2被起动,电动机反转,当门移动到关门限位开关K4位置时,电机停止运行。
(3)在关门过程中,当有人员由外到内或由内到外通过光电检测开关K2或K1时,应立即停止关门,并自动进入开门程序。
(4)在门打开后的10s等待时间内,若有人员由外至内或由内至外通过光电检测开关K2或K1时,必须重新开始等待10s后,再自动进入关门过程,以保证人员安全通过。
(5)开门与关门不可同时进行 3.I/O编址
4.编程并借助实验箱上的发光二极管模拟调试
四、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、时序图或框图、I/O接线图 3.三菱PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC L组
一、PLCⅡ型教学实验箱程序的开发
要求:1.开发实验九、十、十二的梯形图程序
2.写出I/O编址、写出梯形图程序及语句表程序并调试
二、大、小球分拣传送机械PLC控制梯形图的设计与调试 1.大、小球分拣传送机械示意图
2.控制要求:
(1)机械臂起始位置在机械原点(见图),为左限、上限并有显示。
(2)有起动按钮和停止按钮控制运行,设停止时机械臂必须已回到原点。
(3)起动后,机械臂动作顺序为:下降→吸球→上升(至上限)→右行(至右限)→下降→释放→上升(至上限)→左行返回(至原点)。
(4)机械臂右行时有小球右限(LS4)和大球右限(LS5)之分;下降时,当电磁铁压着大球时,下限开关LS2断开(=“0”);压着小球时,下限开关LS2接通(=“1”)。
3.I/O编址及工作框图
4.编程并借助实验箱上的发光二极管进行调试 5.I/O端子接线图
三、自行设计课题
要求:设计汽车自动清洗装置的PLC梯形图控制课题及程序(1)了解汽车自动清洗过程
(2)设计课题:课题名称、控制要求、工作框图或时序图、I/O编址(3)编程并借助实验箱上的发光二极管进行调试
四、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、时序图或框图、I/O接线图 3.三菱PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得 《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC M组
一、PLCⅡ型教学实验箱程序的开发
要求:
1.开发实验十、十二、十五的梯形图程序 写出I/O编址
写出梯形图程序及语句表程序并调试
二、自行设计“全自动洗衣机PLC控制”课题
要求:
1.课题名称 2.控制要求 3.工作框图.4.I/O设置
5.编程并借助实验箱上的发光二极管进行调试
三、饮料灌装生产流水线PLC梯形图控制程序设计与调试 1.控制要求:
(1)系统通过开关设定为自动操作模式,一旦启动,则传送带的驱动电机启动并一直保持到停止开关动作或灌装设备下的传感器检测到一个瓶子时停止;瓶子装满饮料后,传送带驱动电机必须自动启动,并保持到又检测到一个瓶子或停止开关动作(2)当瓶子定位在灌装设备下时,停顿1s,灌装设备开始工作,灌装过程为5s钟,灌装过程应有报警显示,5s后停止并不再显示报警;报警方式为红灯以0.5s间隔闪烁
(3)以每24瓶为一箱,记录产品箱数
(4)每隔8小时将记录产品箱数的计数器当前值转存至其他寄存器,然后对计数器自动清零,重新开始计数。(*)
(5)可以手动对计数器清零(复位)2.编程并借助实验箱上的发光二极管进行调试 3.画出I/O端子接线图
四、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、时序图或框图、I/O接线图
3.三菱PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC N组
一、PLCⅡ型教学实验箱程序的开发
要求: 1.开发实验八、九、十五的梯形图程序 写出I/O编址
写出梯形图程序及语句表程序并调试
二、物业供水系统水泵梯形图控制程序设计与调试
某物业供水系统有水泵4台,供水管道安装压力检测开关K1,K2和K3。K1接通,表示水压偏低;K2接通,表示水压正常;K3接通,表示水压偏高。1.控制要求:
(1)自动工作时,当用水量少,压力增高,K3接通,此时可延时30s后撤除1台水泵
工作,要求先工作的水泵先切断;当用水量多时,压力降低,K1接通,此时可延时30s后增设1台水泵工作,要求未曾工作过的水泵增加投入运行;当K2接通,表示供水正常,可维持水泵运行数量。工作时,要求水泵数量最少为1台,最多不得超出4台。
(2)各水泵工作时,均应有工作状态显示。
(3)手动工作时,要求4台水泵可分别独立操作(分设起动和停止开关),并分别具有
过载保护,可随时对单台水泵进行断电控制(若输入点不够,可用I/O扩展模块)
(4)设置“自动/手动”切换开关(ON——手动,OFF——自动),另设自动运行控制开关(ON——自动运行,OFF——自动运行停止)。2.画出运行框图,I/O编址
3.编程并借助实验箱上的发光二极管进行调试 4.画出I/O端子接线图。
三、自动门控制装置PLC梯形图控制程序的设计与调试 1.自动门控制装置的硬件组成:
自动门控制装置由门内光电探测开关K1、门外光电探测开关K2、开门到位限位开关K3、关门到限位开关K4、开门执行机构KM1(使直流电动机正转)、关门执行机构KM2(使直流电动机反转)等部件组成。光电探测开关为无光导通,有光断开。2.控制要求:
(1)当有人由内到外或由外到内通过光电检测开关K1或K2时,开门执行机构KM1动作,电动机正转,到达开门限位开关K3位置时,电机停止运行。
(2)自动门在开门位置停留8s后,自动进入关门过程,关门执行机构KM2被起动,电动机反转,当门移动到关门限位开关K4位置时,电机停止运行。
(3)在关门过程中,当有人员由外到内或由内到外通过光电检测开关K2或K1时,应立即停止关门,并自动进入开门程序。
(4)在门打开后的10s等待时间内,若有人员由外至内或由内至外通过光电检测开关K2或K1时,必须重新开始等待10s后,再自动进入关门过程,以保证人员安全通过。
(5)开门与关门不可同时进行 3.I/O编址
4.编程并借助实验箱上的发光二极管模拟调试
四、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、时序图或框图、I/O接线图 3.三菱PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书 MITSUBISHI(三菱)PLC O组 一、八层电梯楼层定位及显示的梯形图控制程序设计与调试 1.控制要求:
(1)根据各楼层行程开关的状态,确定轿厢所在楼层
(2)用九段LED数码管作十进制层楼位置显示,如下图所示:
2.九段码编码示意图、真值表、I/O编址 3.用0作故障显示
4.编程并借助实验箱上的发光二极管模拟调试 5.I/O端子接线图 二、三相六拍步进电机PLC梯形图控制程序设计与调试 1.控制要求:
(1)三相步进电动机有三个绕组:A、B、C,正转通电顺序为:A→AB→B→BC→C→CA→A 反转通电顺序为:A→CA→C→BC→B→AB→A
(2)要求能实现正、反转控制,而且正、反转切换无须经过停车步骤。
(3)具有两种转速:
#1开关合上,则转过一个步距角需0.5s。#2开关合上,则转过一个步距角需0.05s。
(4)要求步进电动机转动100个步距角后自动停止运行 I/O编址 编程并借助实验箱上的发光二极管模拟调试
三、自行设计课题
要求:设计十字路口交通灯控制课题及程序
1.观察桂林路漕宝路口交通灯(包括左转弯灯和行人灯)的工作时序 2.设计课题:课题名称、控制要求、时序图、I/O编址 3.编程并借助实验箱上的发光二极管模拟调试
四、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、框图(或时序图)、I/O接线图
3.三菱PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书
西门子S7-200 PLC A组 一、十字路口交通信号灯PLC控制系统设计与调试 1.控制要求:
(1)系统工作受开关控制,起动开关 ON 则系统工作;起动开关 OFF 则系统停
止工作。
(2)控制对象有八个:
东西方向红灯两个 , 南北方向红灯两个,东西方向黄灯两个 , 南北方向黄灯两个,东西方向绿灯两个 , 南北方向绿灯两个,东西方向左转弯绿灯两个,南北方向左转弯绿灯两个。
(3)控制规律:
1)高峰时段按时序图二(见附图)运行,正常时段按时序图三(见附图)运行,晚上时段按提示警告方式运行,规律为: 东、南、西、北四个黄灯全部闪亮,其余灯全部熄灭,黄灯闪亮按亮 0.4 s,暗 0.6 s的规律反复循环。高峰时段、正常时段及晚上时段的时序分配按时序图一运行(见附图)。2.编程并调试 3.I/O端子接线图
时序图一
高峰时段 7:00↘ ↙8:15 16:30↘ 正常时段
晚间时段 6:30↗
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 小时
时序图二
00004 R-EW 00001 L——SN 00002 G 00003 Y
00008 R 00005 L 00006 G 00007 Y 10 20 30 40 50 60 70 80 90 SEC 时序图三
00004 R-EW 00001 L 00002 G 00003 Y
00008 R—SN —SN —EW —EW —EW
——SN
—SN —SN
—SN —SN 00005 L—EW 00006 G—EW 00007 Y—EW 10 20 30 40 50 60 70 80 90 SEC
二、车库车辆出入库管理PLC梯形图控制程序设计与调试 1.控制要求:
(1)入库车辆前进时,经过1#传感器→2#传感器后,计数器A加1,后退时经过2#传感器→1#传感器后,计数器B减1;(计数器B的初始值由计数器A送来)只经过一个传感器则计数器不动作。
(2)出库车辆前进时,经过2#传感器→1#传感器后,计数器B减1,后退时经过1#传感器→2#传感器后,计数器A加1;只经过一个传感器则计数器不动作
(3)车辆入库或出库时,均应有警铃报警,定时3s钟(4)仓库启用时,先对所有用到的存储单元清零,并应有仓库空显示
(5)若设仓库容量为50辆车,则仓库满时应报警并显示。
(6)若同时有车辆相对入库和出库(即入库车辆经过1#传感器,出库车辆经过2#传感器),应避免误计数。2.I/O编址 编程并调试
I/O端子接线图
三、自动门控制装置PLC梯形图控制程序的设计与调试 1.自动门控制装置的硬件组成:
自动门控制装置由门内光电探测开关K1、门外光电探测开关K2、开门到位限位开关K3、关门到限位开关K4、开门执行机构KM1(使直流电动机正转)、关门执行机构KM2(使直流电动机反转)等部件组成。光电探测开关为有光导通,无光断开。2.控制要求:
(1)当有人由内到外或由外到内通过光电检测开关K1或K2时,开门执行机构KM1动作,电动机正转,到达开门限位开关K3位置时,电机停止运行。
(2)自动门在开门位置停留8s后,自动进入关门过程,关门执行机构KM2被起动,电动机反转,当门移动到关门限位开关K4位置时,电机停止运行。
(3)在关门过程中,当有人员由外到内或由内到外通过光电检测开关K2或K1时,应立即停止关门,并自动进入开门程序。
(4)在门打开后的8s等待时间内,若有人员由外至内或由内至外通过光电检测开关K2或K1时,必须重新开始等待8s后,再自动进入关门过程,以保证人员安全通过。
(5)开门与关门不可同时进行 3.I/O编址 4.编程并调试 5.I/O端子接线图
四、自行设计课题
要求:设计汽车自动清洗装置的PLC梯形图控制课题及程序 观察汽车自动清洗过程(可网上查找资料)
2.设计课题:课题名称、控制要求、工作框图或时序图、I/O编址 3.编程并调试 4.I/O端子接线图
五、完成课程设计说明书 1.课题名称及要求
程序(包括注释)、框图或时序图、I/O接线图
西门子PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 课程设计的心得
《PLC原理及应用》课程设计任务书
西门子S7-200 PLC B组 一、五相十拍步进电动机控制程序的设计与调试 1.控制要求:
(1)五相步进电动机有五个绕组: A、B、C、D、E , 正转通电顺序: ABC→BC→BCD→CD→CDE→DE→DEA→EA→EAB→AB
反转通电顺序: ABC←BC←BCD←CD←CDE←DE←DEA←EA←EAB←AB
(2)用五个开关控制其工作:
#1开关控制其运行(启 / 停)。
#2 开关控制其低速运行(转过一个步距角需 0.5 s)。#3 开关控制其中速运行(转过一个步距角需 0.1 s)。#4 开关控制其低速运行(转过一个步距角需 0.03 s)。#5 开关控制其转向(ON 为正转,OFF 为反转)。2.I/O编址 3.编程并调试 4.I/O端子接线图
二、饮料灌装生产流水线PLC梯形图控制程序设计与调试 1.控制要求:
(1)系统通过开关设定为自动操作模式,一旦启动,则传送带的驱动电机启动并一直保持到停止开关动作或灌装设备下的传感器检测到一个瓶子时停止;瓶子装满饮料后,传送带驱动电机必须自动启动,并保持到又检测到一个瓶子或停止开关动作
(2)当瓶子定位在灌装设备下时,停顿1s,灌装设备开始工作,灌装过程为5s钟,灌装过程应有报警显示,5s后停止并不再显示报警;报警方式为红灯以0.5s间隔闪烁
(3)用两个传感器分别检测空瓶数和满瓶数,用计数器记录空瓶数和满瓶数,一旦系统启动,即开始记录空瓶数和满瓶数
(4)若每24瓶为一箱,记录产品箱数
(5)每隔8小时将空瓶及满瓶计数器的当前值转存至其他寄存器,然后对计数器自动清零,重新开始计数。
(6)可以手动对计数器清零(复位)2.编程并调试 3.画出I/O端子接线图
三、自行设计“全自动洗衣机PLC控制”课题
要求: 1.课题名称 2.控制要求 3.工作框图.4.I/O设置 5.编程并调试
四、完成课程设计说明书 1.课题名称及要求 程序(包括注释)、框图、I/O接线图
西门子PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 课程设计的心得
《PLC原理及应用》课程设计任务书
西门子S7-200 PLC C组 一、八层电梯楼层定位及显示的梯形图控制程序设计与调试 1.控制要求:(1)根据各楼层行程开关的状态,确定轿厢所在楼层
(2)用九段LED数码管作十进制层楼位置显示,如下图所示:
2.九段码编码示意图、真值表、I/O编址 3.编程并调试 4.I/O端子接线图 二、三相六拍步进电机PLC梯形图控制程序设计与调试 1.控制要求:
(1)三相步进电动机有三个绕组:A、B、C,正转通电顺序为:A→AB→B→BC→C→CA→A
反转通电顺序为:A→CA→C→BC→B→AB→A
(2)要求能实现正、反转控制,而且正、反转切换无须经过停车步骤。
(3)具有两种转速:
#1开关合上,则转过一个步距角需0.5s。#2开关合上,则转过一个步距角需0.05s。
(4)要求步进电动机转动100个步距角后自动停止运行
(5)在完成上述功能的基础上,增加功能:
设置按钮K1,每按一次K1,转速增加一档(即转动一个步距角所需时间减少0.01s)设置按钮K2,每按一次K2,转速减少一档(即转动一个步距角所需时间增加0.01s)I/O编址 编程与调试
三、自行设计课题
要求:设计十字路口交通灯控制课题及程序
1.观察桂林路漕宝路口交通灯(包括左转弯灯和行人灯)的工作时序 2.设计课题:课题名称、控制要求、时序图、I/O编址 3.编程并调试 4.I/O端子接线图
四、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、框图、I/O接线图
3.西门子PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书
西门子S7-200 PLC D组
一、自动门控制装置PLC梯形图控制程序的设计与调试 1.自动门控制装置的硬件组成:
自动门控制装置由门内光电探测开关K1、门外光电探测开关K2、开门到位限位开关K3、关门到限位开关K4、开门执行机构KM1(使直流电动机正转)、关门执行机构KM2(使直流电动机反转)等部件组成。光电探测开关为无光导通,有光断开。2.控制要求:
(1)当有人由内到外或由外到内通过光电检测开关K1或K2时,开门执行机构KM1动作,电动机正转,到达开门限位开关K3位置时,电机停止运行。(2)自动门在开门位置停留8s后,自动进入关门过程,关门执行机构KM2被起动,电动机反转,当门移动到关门限位开关K4位置时,电机停止运行。
(3)在关门过程中,当有人员由外到内或由内到外通过光电检测开关K2或K1时,应立即停止关门,并自动进入开门程序。
(4)在门打开后的10s等待时间内,若有人员由外至内或由内至外通过光电检测开关K2或K1时,必须重新开始等待10s后,再自动进入关门过程,以保证人员安全通过。
(5)开门与关门不可同时进行 3.I/O编址 4.编程并调试 5.I/O端子接线图
二、物业供水系统水泵梯形图控制程序设计与调试
某物业供水系统有水泵4台,供水管道安装压力检测开关K1,K2和K3。K1接通,表
示水压偏低;K2接通,表示水压正常;K3接通,表示水压偏高。1.控制要求:
(1)自动工作时,当用水量少,压力增高,K3接通,此时可延时30s后撤除1台水泵
工作,要求先工作的水泵先切断;当用水量多时,压力降低,K1接通,此时可延时30s后增设1台水泵工作,要求未曾工作过的水泵增加投入运行;当K2接通,表示供水正常,可维持水泵运行数量。工作时,要求水泵数量最少为1台,最多不得超出4台。(2)各水泵工作时,均应有工作状态显示。
(3)手动工作时,要求4台水泵可分别独立操作(分设起动和停止开关),并分别具有
过载保护,可随时对单台水泵进行断电控制(若输入点不够,可用I/O扩展模块)
(4)设置“自动/手动”切换开关(ON——手动,OFF——自动),另设自动运行控制开关(ON——自动运行,OFF——自动运行停止)。2.画出运行框图,I/O编址,编程并调试 3.画出I/O端子接线图。
三、全自动洗衣机梯形图控制程序的设计与调试 1.控制要求:
(1)按下启动按扭及水位选择开关
(2)注水直到高(中、低)水位,关水
(3)2s后开始洗涤
(4)洗涤时,正转30s,停2s,然后反转30s,停2s(5)如此循环5次,总共320s后开始排水,排空后脱水30s(6)开始清洗,重复(2)~(5),清洗两遍
(7)清洗完成,报警3s并自动停机
(8)若按下停车按扭,可手动排水(不脱水)和手动脱水(不计数)
输入点: 输出点:
启动 10001 低水位检测 10009 启动洗衣机 00001 停止 10002 手动排水 10010 进水阀 00002 高水位 10003 手动脱水 10011 正转 00003 中水位 10004 反转 00004 低水位 10005 排水 00005 排空检测 10006 脱水 00006 高水位检测 10007 报警 00007 中水位检测 10008 2.若要求启动开关分为标准洗和轻柔洗,试改变有关输入点,并在程序中加入轻柔洗功能(轻柔洗过程自定)3.I/O编址 4.编程并调试
四、MODICON PLC梯形图控制程序的移植
要求:
1.将教材中五层电梯模型的梯形图控制程序改成S7-200 PLC的梯形图控制程序
2.I/O编址:设有开关量I/O扩展模块2个,均为8×24VDC输入/8×继电器输出 3.试画出I/O端子接线图
五、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、框图、I/O接线图
3.西门子PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书
西门子S7-200 PLC E组 一、四分频电路梯形图控制程序设计与调试
要求:
1.解读MODICON PLC的二分频电路梯形图程序,用STEP7设计四分频电路梯形图程序并调试,画出四分频时序图。2.控制要求:
输入点引入信号脉冲,输出点输出的脉冲是输入脉冲的四分频信号。
二分频时序图如下: 输入10001 输出00002 MODICON PLC二分频梯形图:
()10001 00101 00100()10001 00101()00100 00002 00102()00100 00102 00002 00002
二、自行设计课题
要求:设计汽车自动清洗装置的PLC梯形图控制课题及程序 1.观察汽车自动清洗过程(可网上查找资料)
2.设计课题:课题名称、控制要求、工作框图或时序图、I/O编址 3.编程并调试 4.I/O端子接线图
三、MODICON PLC梯形图控制程序的移植
1.将教材中五层电梯模型的梯形图控制程序改成S7-200 PLC的梯形图控制程序
2.I/O编址:设有开关量I/O扩展模块2个,均为8×24VDC输入/8×继电器输出
3.画出I/O端子接线图
4.完成PLC与电梯模型的接线并运行调试
四、完成课程设计说明书 1.课题名称及要求 2.程序(包括注释)、框图、I/O接线图
3.西门子PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书
西门子S7-200 PLC F组
一、花式喷水池装置PLC控制梯形图的设计与调试 1.花式喷水池示意图
图a)中4为中间喷水管,3为内环状喷水管,2为中环形状喷水管,1为外环形状喷水管。图b)中的选择开关可有4种选择,可分别用4个开关模拟实现;单步/连续开关为“1”= 单步,“0”= 连续,其他为单一功能开关。2.控制要求:
(1)水池控制电源开关接通后,按下启动按钮,喷水装置即开始工作。按下停止按钮,则停止喷水。工作方式由“选择开关”和“单步/连续”开关来决定。
(2)“单步/连续”开关在单步位置时,喷水池只运行一个循环;在连续位置时,喷水池反复循环运行。(3)方式选择开关用以选择喷水池的喷水花样,1~4号喷水管的工作方式选择如下:
a)选择开关在位置“1”——按下启动按钮后,4号喷水,延时2s,3号喷水,再延时1.5s,2号喷水,再延时2s,1号喷水,然后全部停止1s,接着一起喷水15s为一个循环。
b)选择开关在位置“2”——按下启动按钮后,1号喷水,延时2s,2号喷水,再延时2s,3号喷水,再延时2s,4号喷水,然后全部停止0.5s,接着一起喷水30s为一个循环。
c)选择开关在位置“3”——按下启动按钮后,1、3号同时喷水,延时3s后,2、4号同时喷水,1、3号停止喷水;交替运行5次后,1~4号同时喷水20s为一个循环。
d)选择开关在位置“4”——按下启动按钮后,喷水池1~4号水管的工作顺序为: 1→2→3→4按顺序延时2s喷水,然后一起喷水10s后,按1→1+2→2→2+3→3→3+4→4→4+1号水管以1s间隔顺序喷水,小循环3次后,一起喷水2s,再停止1s,由4→3→2→1反序分别延时2s喷水,然后再一起喷水10s为一个大循环。
(4)不论在什么工作方式,按下停止按钮,喷水池立即停止工作,所有存储器复位。
3.I/O编址 4.编程并调试 5.I/O端子接线图
二、带有显示的十字路口交通信号灯控制程序的设计与调试 1.系统框图:
2.控制要求:
(1)南北方向为主干道,绿灯亮的时间比东西方向次干道绿灯亮的时间多一倍,黄灯间隔0.5s闪烁3 s后切换到红灯,信号灯工作时序图如下,一次循环共需96s。(2)时序图:
(3)主干道的数码显示应该与红、黄及绿灯同步,且两条主、次干道应该一样显示。比如:南北方向绿灯亮时,东西方向和南北方向均应显示数字63(绿灯亮60s,黄灯亮3s),然后隔秒减1,当减到0时,换成东西方向绿灯亮,南北方向红灯亮,此时,数码管应显示33,然后隔秒减1,当减到0时,再进行切换,完成一次工作循环。
(4)*有白天/夜间操作转换开关、运行/停止开关、紧急操作开关1#、2#,其功能如下:
白天/夜间操作转换开关在“白天”位置时,按上述时序正常工作,在“夜间”位置时,两边均只有黄灯闪烁
运行开关在接通电源时,方可切换白天/夜间开关
开关在“运行”位置时,系统启动,在“停止”位置时,系统关闭
当有特殊情况(如事故)需某一方向的绿灯一直亮,则应用紧急操作开关实现次功能。比如:1#开关=“1”,则南北方向绿灯一直亮,东西方向红灯一直亮,2#开关=“1”,则东西方向绿灯一直亮,南北方向红灯一直亮,关闭紧急开关,则系统恢复正常。
3.编程并模拟调试
4.画出I/O端子接线图(用一个I/O扩展模块)
.三、完成课程设计说明书 1.课题名称及要求 2.程序(包括注释)、框图、I/O接线图
3.西门子PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
《PLC原理及应用》课程设计任务书
西门子S7-200 PLC G组
一、霓虹灯广告屏装置PLC控制梯形图的设计与调试 1.霓虹灯广告屏示意图
该广告屏共有8根灯管,24只流水灯,每4只灯为一组,如下图所示:
2.控制要求::
(1)该广告屏中间8根灯管亮灭的时序为:第1根亮→2亮→3亮→„„→第8根亮,时间间隔为1s,全亮后,显示10s,再反过来从8→7→„„→1按1s间隔顺序熄灭,全灭后停亮2s;再从第8根开始亮,顺序点亮7→6→„„→1,时间间隔1s,显示5s,再从1→2→„„→8按1s间隔顺序熄灭,全灭后停亮2s,然后重复运行,周而复始。
(2)24只流水灯,4个一组分成6组,从Ⅰ→Ⅱ→„„→Ⅵ按1s时间间隔依次向前移动,且点亮时每相隔1灯为亮,即从Ⅰ“①、③”亮→Ⅱ“⑤、⑦”亮,同时Ⅰ“①、③”灭→Ⅲ“、”亮,同时Ⅱ“⑤、⑦”灭„„,如此移动一段时间(如30s)后,再反过来移动一段时间:Ⅵ“、”亮 →Ⅴ“、”亮,同时Ⅵ“、”灭,„„如此循环往复。
(3)系统有单步/连续控制,有起动和停止按钮。
(4)起动时,灯管和流水灯同时起动,关闭时,可同时也可分别关闭。
(5)要求有移位指令的应用
(6)*在控制要求1中,若要求将全亮后显示10s改为以0.5s间隔同时闪烁5s,试修改程序。3.编程并模拟调试
4.画出I/O端子接线图(用2个I/O扩展模块)
二、自行设计课题
要求:设计汽车自动清洗装置的PLC梯形图控制课题及程序 1.观察汽车自动清洗过程(可网上查找资料)
2.设计课题:课题名称、控制要求、工作框图或时序图、I/O编址 3.编程并调试 4.I/O端子接线图
三、完成课程设计说明书 1.课题名称及要求
2.程序(包括注释)、时序图或框图、I/O接线图
3.西门子PLC与MODICON PLC相关指令的应用比较、运行情况及调试小结等 4.课程设计的心得
第三篇:DWI原理和应用
一、DWI的概念
1.定义:
弥散又称扩散,是指分子从周围环境的热能中获取运动能量而使分子发生的一连串的、小的、随机的位移现象并相互碰撞,也称分子的热运动或布朗运动。
2.DWI技术就是检测扩散运动的方法之一,由于一般人体MR成像的对象是质子,主要是水分子中的质子,因此DWI技术实际上是通过检测人体组织中水分子扩散运动受限制的方向和程度等信息间接反映组织微观结构的变化。
3.生物组织内的水分子的扩散分为三大类:细胞外扩散,细胞内扩散,跨膜扩散,且扩散运动受到组织结构、细胞内细胞器和组织大分子的影响。
4.影响水分子弥散的因素:膜结构的阻挡,大分子蛋白物质的吸附,微血管内流动血液的影响(?)。
5.DWI中的水分子:
1)
无创探测活体组织中水分子扩散的唯一方法
2)
信号来源于组织中的自由水
3)
结合水尽管运动受限,但仍不能产生信号
4)
不同组织对自由水扩散限制程度不同
5)
产生DWI对比
6)
检测组织中自由水限制性扩散的程度
6.常规DWI,主要对细胞外自由水运动敏感
T2WI基础上,施加扩散梯度,组织信号衰减
1)
自由水扩散越自由=信号丢失多,DWI信号越低
2)
自由水扩散越受限=信号丢失少,DWI信号越高
7.在均匀介质中,任何方向的弥散系数都相等,这种弥散称为各向同性扩散(eg.脑脊液);在非均匀介质中,各方向的弥散系数不等,这种弥散称为各向异性扩散(eg.脑白质纤维素)。
各向异性扩散在人体组织中是普遍存在的,其中最典型的是脑白质神经纤维束。水分子在神经纤维长轴方向上扩散运动相对自由,而在垂直于神经纤维长轴的方向上,水分子的扩散运动将明显受到细胞膜和髓鞘的限制。
二、DWI的原理
1.以SE-EPI序列来介绍DWI的基本原理。
射频脉冲使体素内质子的相位一致,射频脉冲关闭后,由于组织的T2弛豫和主磁场不均匀将造成质子逐渐失相位,从而造成宏观横向磁化矢量的衰减。
除了上述两种因素以外,我们在某个方向上施加一个扩散梯度场,人为在该方向上制造磁场不均匀,造成体素内质子群失相位,然后在施加一个强度与持续时间完全相同的反向扩散梯度场,则会出现两种情况:在该方向上没有位移的质子不会受两次梯度场强的影响而失相位,而移动的质子因两次梯度场引起的相位变化不能相互抵消,而失相位信号衰减。
2.DWI通过测量施加扩散敏感梯度场前后组织发生的信号强度变化,来检测组织中水分子扩散状态(自由度及方向),后者可间接反映组织微观结构特点及其变化。
体素中水分子都存在一定程度的扩散运动,其方向是随机的,而在扩散梯度场方向上的扩散运动将造成体素信号的衰减,如果水分子在敏感梯度场方向上扩散越自由,则在扩散梯度场施加期间扩散距离越大,经历的磁场变化也越大,组织信号衰减越明显。
三、技术要点
1.DWI上组织信号强度的衰减主要因素:
1)扩散敏感梯度场的强度,强度越大组织信号衰减越明显;
2)扩散敏感梯度场持续的时间,时间越长组织信号衰减越明显;
3)两个扩散敏感梯度场的间隔时间,间隔时间越长,组织信号衰减越明显;
4)组织中水分子的扩散自由度,在扩散敏感梯度场施加方向上水分子扩散越自由,组织信号衰减越明显。
2.b值对DWI的影响:DWI技术中把施加的扩散敏感梯度场参数称为b值或称扩散敏感系数。
1)
b值代表扩散敏感系数;r代表磁旋比;Gi和Gj分别为i轴和j轴上的磁场梯度强度;δ代表梯度场持续时间;Δ代表两个梯度场间隔时间。
2)
b值的选择(表示应用的梯度磁场的时间、幅度、形状)
b值越高,扩散的权重越重
b值越高,信号越弱
b值越高,信噪比越差
b值越高,相同TR内可采集的层数越少
因会出现周围神经的刺激症状也限制了太高的b值。
较小的b值可得到的较高信噪比的图像,但对水分子扩散运动的检测不敏感。
3)因此,b值的选择非常重要,用小b值进行DWI,在一定程度上反映了局部组织的微循环灌注,但所测得的ADC值稳定性较差,且易受其他生理活动的影响,不能有效反映水分子的弥散运动;用大b值进行DWI,所测得的ADC值受局部组织的微循环灌注影响较小,能较好反映水分子的弥散运动,因此,大b值进行DWI称高弥散加权成像,用小b值进行DWI称低弥散加权成像。b=0时产生无弥散加权的t2wi。
4)扩散图像的b值的选择主要应满足以下三个条件:
(1)能够清晰显示和分辨被检组织。
(2)有效抑制t2透射效应对扩散图像的影响。
(3)应用尽可能高的b值,使被检组织的ADC值更接近组织的真实D值。
三、DWI的方向性:
DWI是反映扩散敏感梯度场方向上的扩散运动,为了全面反映组织在各方向上的水分子扩散情况,需要在多个方向上施加扩散敏感梯度场。如果在多个方向(6个以上方向)分别施加扩散敏感梯度场,则可对每个体素水分子扩散的各向异性作出较为准确的检测,这种MRI技术称为扩散张量成像(diffusion
tensor
imaging,DTI)。利用DTI技术可以很好地反映白质纤维束走向,对于脑科学的研究将发挥很大的作用。
四、扩散系数和表观扩散系数
1.分子布朗运动的方向是随机的,其在一定方向上的弥散距离与相应弥散时间的平方根之比为一个常数,这个常数称为扩散系数D。表示一个水分子单位时间内随机弥散运动的平均范围,其单位为mm2/s。通过对施加扩散敏感梯度场前后的信号强度检测,在得知b值的情况下,我们可以计算组织的扩散系数,需要指出的是造成组织信号衰减不仅仅是水分子的扩散运动,水分子在扩散敏感梯度场方向上各种形式的运动(或位置移动)还将造成组织信号的衰减。
2.影响因素:
1)微观因素:体液流动、细胞的渗透性和温度、毛细血管灌注、细胞内外水的黏滞度、膜通透性的方向。
2)宏观因素:呼吸、搏动、蠕动等。
3.因此利用DWI上组织信号强度变化检测到的不是真正的扩散系数,它还会受到其他形式水分子运动的影响。我们把检测到的扩散系数称为表观扩散系数(apparent
diffusion
coeffecient,ADC)。
实际工作中用表观扩散系数(ADC)
来代替真正的扩散系数,前者常明显大于后者。
ADC
值的大小取决于成像物质及其内部分子的空间分布,b值的选择,场强……
4.计算组织的ADC值至少需要利用2个以上不同的b值,其计算公式如下:
ADC=
ln(SI低/SI高)/(b高-b低)
式中SI低表示低b值DWI上组织的信号强度(b值可以是零);SI高表示高b值DWI上组织的信号强度;b高表示高b值;b低表示低b值;ln表示自然对数。
五、(一)T2透射效应(T2
shine
through)
1.DWI序列是在SE序列基础上施加了弥散梯度的长TR长TE序列,无法消除T2WI效应影响,这样也使DWI信号强度的变化与ADC的变化并不一致。
2.由于t2延长作用使DWI上出现高信号,但ADC值升高,称为T2透射效应。
(二)T2廓清效应(Washout)
ADC值升高和t2WI高信号的综合结果造成DWI成等信号。
常见于血管源性水肿。
(三)T2暗化效应
由于t2低信号而造成的DWI低信号。
多见于出血性病变。
通常发生顺磁性磁敏感伪影。
六、伪影:
涡漩电流伪影,磁敏感伪影,N/2鬼影,化学位移伪影,运动伪影
七、临床应用:
(一)急性期脑梗死
病理生理:
1、急性期:
血供中断,细胞缺血、缺氧,Na-K
ATP酶,大量Na离子进入细胞内
细胞水肿(细胞毒性水肿)。细胞内结构肿胀,扩散受限,细胞内能量代谢障碍导致细胞器裂解,产生大量碎片,造成细胞内粘度增加,胞浆流动减慢,导致扩散进一步受限细胞外间隙缩小,扩散受限。
正常组织,水分子随机运动,呈低信号。
细胞毒性组织,水分子运动受限,呈高信号。
2.MRDWI检查,则在发病后20~30min,即可见到局部的扩散作用增加,呈现相应的病理MR信号(高信号)。因此DWI序列又称为中风序列。
3.DWI反映的是细胞毒性水肿。
T2WI反映的是血管源性水肿。CT反映的是脑组织的坏死和水肿。
第四篇:压力传感器原理及应用
压力传感器原理及应用
压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业,下面就简单介绍一些常用传感器原理及其应用
1、应变片压力传感器原理与应用力学传感器的种类繁多,如电阻应变片压力传感器、半导体应变片压力传感器、压阻式压力传感器、电感式压力传感器、电容式压力传感器、谐振式压力传感器及电容式加速度传感器等。但应用最为广泛的是压阻式压力传感器,它具有极低的价格和较高的精度以及较好的线性特性。下面我们主要介绍这类传感器。在了解压阻式力传感器时,我们首先认识一下电阻应变片这种元件。电阻应变片是一种将被测件上的应变变化转换成为一种电信号的敏感器件。它是压阻式应变传感器的主要组成部分之一。电阻应变片应用最多的是金属电阻应变片和半导体应变片两种。金属电阻应变片又有丝状应变片和金属箔状应变片两种。通常是将应变片通过特殊的粘和剂紧密的粘合在产生力学应变基体上,当基体受力发生应力变化时,电阻应变片也一起产生形变,使应变片的阻值发生改变,从而使加在电阻上的电压发生变化。这种应变片在受力时产生的阻值变化通常较小,一般这种应变片都组成应变电桥,并通过后续的仪表放大器进行放大,再传输给处理电路(通常是A/D转换和CPU)显示或执行机构。金属电阻应变片的内部结构点击浏览该文件如图1所示,是电阻应变片的结构示意图,它由基体材料、金属应变丝或应变箔、绝缘保护片和引出线等部分组成。根据不同的用途,电阻应变片的阻值可以由设计者设计,但电阻的取值范围应注意:阻值太小,所需的驱动电流太大,同时应变片的发热致使本身的温度过高,不同的环境中使用,使应变片的阻值变化太大,输出零点漂移明显,调零电路过于复杂。而电阻太大,阻抗太高,抗外界的电磁干扰能力较差。一般均为几十欧至几十千欧左右。电阻应变片的工作原理金属电阻应变片的工作原理是吸附在基体材料上应变电阻随机械形变而产生阻值变化的现象,俗称为电阻应变效应。金属导体的电阻值可用下式表示: 式中:ρ——金属导体的电阻率(Ω·cm2/m)S——导体的截面积(cm2)L——导体的长度(m)我们以金属丝应变电阻为例,当金属丝受外力作用时,其长度和截面积都会发生变化,从上式中可很容易看出,其电阻值即会发生改变,假如金属丝受外力作用而伸长时,其长度增加,而截面积减少,电阻值便会增大。当金属丝受外力作用而压缩时,长度减小而截面增加,电阻值则会减小。只要测出加在电阻的变化(通常是测量电阻两端的电压),即可获得应变金属丝的应变情
2、陶瓷压力传感器原理及应用抗腐蚀的陶瓷压力传感器没有液体的传递,压力直接作用在陶瓷膜片的前表面,使膜片产生微小的形变,厚膜电阻印刷在陶瓷膜片的背面,连接成一个惠斯通电桥(闭桥),由于压敏电阻的压阻效应,使电桥产生一个与压力成正比的高度线性、与激励电压也成正比的电压信号,标准的信号根据压力量程的不同标定为2.0 / 3.0 / 3.3 mV/V等,可以和应变式传感器相兼容。通过激光标定,传感器具有很高的温度稳定性和时间稳定性,传感器自带温度补偿0~70℃,并可以和绝大多数介质直接接触。陶瓷是一种公认的高弹性、抗腐蚀、抗磨损、抗冲击和振动的材料。陶瓷的热稳定特性及它的厚膜电阻可以使它的工作温度范围高达-40~135℃,而且具有测量的高精度、高稳定性。电气绝缘程度>2kV,输出信号强,长期稳定性好。高特性,低价格的陶瓷传感器将是压力传感器的发展方向,在欧美国家有全面替代其它类型传感器的趋势,在中国也越来越多的用户使用陶瓷传感器替代扩散硅压力传感器。
3、扩散硅压力传感器原理及应用 工作原理 被测介质的压力直接作用于传感器的膜片上(不锈钢或陶瓷),使膜片产生与介质压力成正比的微位移,使传感器的电阻值发生变化,和用电子线路检测这一变化,并转换输出一个对应于这一压力的标准测量信号。原理图 点击浏览该文件
4、蓝宝石压力传感器原理与应用利用应变电阻式工作原理,采用硅-蓝宝石作为半导体敏感元件,具有无与伦比的计量特性。蓝宝石系由单晶体绝缘体元素组成,不会发生滞后、疲劳和蠕变现象;蓝宝石比硅要坚固,硬度更高,不怕形变;蓝宝石有着非常好的弹性和绝缘特性(1000 OC以内),因此,利用硅-蓝宝石制造的半导体敏感元件,对温度变化不敏感,即使在高温条件下,也有着很好的工作特性;蓝宝石的抗辐射特性极强;另外,硅-蓝宝石半导体敏感元件,无p-n漂移,因此,从根本上简化了制造工艺,提高了重复性,确保了高成品率。用硅-蓝宝石半导体敏感元件制造的压力传感器和变送器,可在最恶劣的工作条件
下正常工作,并且可靠性高、精度好、温度误差极小、性价比
高。表压压力传感器和变送器由双膜片构成:钛合金测量膜片和钛合金接收膜片。印刷有异质外延性应变灵敏电桥电路的蓝宝石薄片,被焊接在钛合金测量膜片上。被测压力传送到接收膜片上(接收膜片与测量膜片之间用拉杆坚固的连接在一起)。在压力的作用下,钛合金接收膜片产生形变,该形变被硅-蓝宝石敏感元件感知后,其电桥输出会发生变化,变化的幅度与被测压力成正比。传感器的电路能够保证应变电桥电路的供电,并将应变电桥的失衡信号转换为统一的电信号输出(0-5,4-20mA或0-5V)。在绝压压力传感器和变送器中,蓝宝石薄片,与陶瓷基极玻璃焊料连接在一起,起到了弹性元件的作用,将被测压力转换为应变片形变,从而达到压力测量的目的。
5、压电压力传感器原理与应用压电传感器中主要使用的压电材料包括有石英、酒石酸钾钠和磷酸二氢胺。其中石英(二氧化硅)是一种天然晶体,压电效应就是在这种晶体中发现的,在一定的温度范围之内,压电性质一直存在,但温度超过这个范围之后,压电性质完全消失(这个高温就是所谓的“居里点”)。由于随着应力的变化电场变化微小(也就说压电系数比较低),所以石英逐渐被其他的压电晶体所替代。而酒石酸钾钠具有很大的压电灵敏度和压电系数,但是它只能在室温和湿度比较低的环境下才能够应用。磷酸二氢胺属于人造晶体,能够承受高温和相当高的湿度,所以已经得到了广泛的应用。现在压电效应也应用在多晶体上,比如现在的压电陶瓷,包括钛酸钡压电陶瓷、PZT、铌酸盐系压电陶瓷、铌镁酸铅压电陶瓷等等。压电效应是压电传感器的主要工作原理,压电传感器不能用于静态测量,因为经过外力作用后的电荷,只有在回路具有无限大的输入阻抗时才得到保存。实际的情况不是这样的,所以这决定了压电传感器只能够测量动态的应力。压电传感器主要应用在加速度、压力和力等的测量中。压电式加速度传感器是一种常用的加速度计。它具有结构简单、体积小、重量轻、使用寿命长等优异的特点。压电式加速度传感器在飞机、汽车、船舶、桥梁和建筑的振动和冲击测量中已经得到了广泛的应用,特别是航空和宇航领域中更有它的特殊地位。压电式传感器也可以用来测量发动机内部燃烧压力的测量与真空度的测量。也可以用于军事工业,例如用它来测量枪炮子弹在膛中击发的一瞬间的膛压的变化和炮口的冲击波压力。它既可以用来测量大的压力,也可以用来测量微小的压力。压电式传感器也广泛应用在生物医学测量中,比如说心室导管式微音器就是由压电传感器制成的,因为测量动态压力是如此普遍,所以压电传感器的应用就非常广泛
压力传感器是工业实践中最为常用的一种传感器,而我们通常使用的压力传感器主要是利用压电效应制造而成的,这样的传感器也称为压电传感器。
我们知道,晶体是各向异性的,非晶体是各向同性的。某些晶体介质,当沿着一定方向受到机械力作用发生变形时,就产生了极化效应;当机械力撤掉之后,又会重新回到不带电的状态,也就是受到压力的时候,某些晶体可能产生出电的效应,这就是所谓的极化效应。科学家就是根据这个效应研制出了压力传感器。
压电传感器中主要使用的压电材料包括有石英、酒石酸钾钠和磷酸二氢胺。其中石英(二氧化硅)是一种天然晶体,压电效应就是在这种晶体中发现的,在一定的温度范围之内,压电性质一直存在,但温度超过这个范围之后,压电性质完全消失(这个高温就是所谓的“居里点”)。由于随着应力的变化电场变化微小(也就说压电系数比较低),所以石英逐渐被其他的压电晶体所替代。而酒石酸钾钠具有很大的压电灵敏度和压电系数,但是它只能在室温和湿度比较低的环境下才能够应用。磷酸二氢胺属于人造晶体,能够承受高温和相当高的湿度,所以已经得到了广泛的应用。
现在压电效应也应用在多晶体上,比如现在的压电陶瓷,包括钛酸钡压电陶瓷、PZT、铌酸盐系压电陶瓷、铌镁酸铅压电陶瓷等等。
压电效应是压电传感器的主要工作原理,压电传感器不能用于静态测量,因为经过外力作用后的电荷,只有在回路具有无限大的输入阻抗时才得到保存。实际的情况不是这样的,所以这决定了压电传感器只能够测量动态的应力。
压电传感器主要应用在加速度、压力和力等的测量中。压电式加速度传感器是一种常用的加速度计。它具有结构简单、体积小、重量轻、使用寿命长等优异的特点。压电式加速度传感器在飞机、汽车、船舶、桥梁和建筑的振动和冲击测量中已经得到了广泛的应用,特别是航空和宇航领域中更有它的特殊地位。压电式传感器也可以用来测量发动机内部燃烧压力的测量与真空度的测量。也可以用于军事工业,例如用它来测量枪炮子弹在膛中击发的一瞬间的膛压的变化和炮口的冲击波压力。它既可以用来测量大的压力,也可以用来测量微小的压力。压电式传感器也广泛应用在生物医学测量中,比如说心室导管式微音器就是由压电传感器制成的,因为测量动态压力是如此普遍,所以压电传感器的应用就非常广泛。
除了压电传感器之外,还有利用压阻效应制造出来的压阻传感器,利用应变效应的应变式传感器等,这些不同的压力传感器利用不同的效应和不同的材料,在不同的场合能够发挥它们独特的用途。
这种压力变送器主要利用液体或气体在检测器件上形成的压力来检测液体或者气体的流量或压强。把这种压力信号转变成标准的0~10V或者4~20mA电信号。以便控制使用。压力和电信号的转化主要由各种压力传感器的核心部件完成。核心部件主要由压力检测体和放大电路组成。
第五篇:gps原理及应用
《gps原理及应用》
1、gps定位技术相对于其他定位技术的特点:(1)观测站之间无需通视(2)定位精度高(3)观测时间短(4)提供三维坐标(5)操作简便(6)全天候作业
2、简述gps定位系统的构成,并说明各部分的作用:由三部分组成:空间部分—GPS星座(GPS星座是由24颗卫星组成的星座,其中21颗是工作卫星,3颗是备份卫星);地面控制部分—地面监控系统;用户设备部分—GPS 信号接收机。GPS的空间部分是由24 颗工作卫星组成,它位于距地表20 200km的上空,均匀分布在6 个轨道面上(每个轨道面4 颗),轨道倾角为55°。此外,还有4 颗有源备份卫星在轨运行。卫星的分布使得在全球任何地方、任何时间都可观测到4 颗以上的卫星,并能保持良好定位解算精度的几何图象。这就提供了在时间上连续的全球导航能力。地面控制部分由一个主控站,5 个全球监测站和3 个地面控制站组成。用户设备部分即GPS 信号接收机。其主要功能是能够捕获到按一定卫星截止角所选择的待测卫星,并跟踪这些卫星的运行。
3、Wgs-84坐标是如何构建的:一种国际上采用的地心坐标系。坐标原点为地球质心,其地心空间直角坐标系的Z轴指向BIH(国际时间)1984.O定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系,称为1984年世界大地坐标系统。
GPS广播星历是以WGS-84坐标系为根据的
4、水准面:静止的水面称为水准面,水准面是受地球表面重力场影响而形成的,是一个处处与重力方向垂直的连续曲面,因此是一个重力场的等位面。设想一个静止的海水面扩展到陆地部分。这样,地球的表面就形成了一个较地球自然表面规则而光滑的曲面,这个曲面被称为水准面。
大地水准面:一个与静止的平均海水面重合并延伸到大陆内部的包围整个地球的封闭的重力位水准面。
高程:的是某点沿铅垂线方向到绝对基面的距离,称绝对高程。简称高程。某点沿铅垂线方向到某假定水准基面的距离,称假定高程。原子时:原子时:ATI(inernational atomic time),以物质的原子内部发射的电磁振荡频率为基准的时间计量系统[1]。原子时的初始历元规定为 1958年1月1日世界时0时,秒长定义为铯-133 原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间。这是一种均匀的时间计量系统。由于世界时存在不均匀性和历书时的测定精度低,1967年起,原子时已取代历书时作为基本时间计量系统。
Gps时:GPS时钟也是基于最新型GPS高精度定位授时模块开发的基础型授时应用产品。能够按照用户需求输出符合规约的时间信息格式,从而完成同步授时服务。其主要原理是通过GPS或其他卫星导航系统的信号驯服晶振,从而实现高精度的频率和时间信号输出,是目前达到纳秒级授时精度和稳定度在1E12量级频率输出的最有效方式。
5、参心坐标系和地心坐标系的区别:
参心坐标系
reference-ellipsoid-centric coordinate system
是以参考椭球的几何中心为原点的大地坐标系。通常分为:参心空间直角坐标系(以x,y,z为其坐标元素)和参心大地坐标系(以B,L,H为其坐标元素)。[1]
参心坐标系是在参考椭球内建立的O-XYZ坐标系。原点O为参考椭球的几何中心,X轴与赤道面和首子午面的交线重合,向东为正。Z轴与旋转椭球的短轴重合,向北为正。Y轴与XZ平面垂直构成右手系。
“参心”意指参考椭球的中心。在测量中,为了处理观测成果和传算地面控制网的坐标,通常须选取一参考椭球面作为基本参考面,选一参考点作为大地测量的起算点(大地原点),利用大地原点的天文观测量来确定参考椭球在地球内部的位置和方向。参心大地坐标的应用十分广泛,它是经典大地测量的一种通用坐标系。根据地图投影理论,参心大地坐标系可以通过高斯投影计算转化为平面直角坐标系,为地形测量和工程测量提供控制基础。由于不同时期采用的地球椭球不同或其定位与定向不同,在我国历史上出现的参心大地坐标系主要有BJZ54(原)、GDZ80和BJZ54等三种。
地心坐标系
geocentric coordinate system
以地球质心为原点建立的空间直角坐标系,或以球心与地球质心重合的地球椭球面为基准面所建立的大地坐标系。
以地球质心(总椭球的几何中心)为原点的大地坐标系。通常分为地心空间直角坐标系(以x,y,z为其坐标元素)和地心大地坐标系(以B,L,H为其坐标元素)。
地心坐标系是在大地体内建立的O-XYZ坐标系。原点O设在大地体的质量中心,用相互垂直的X,Y,Z三个轴来表示,X轴与首子午面与赤道面的交线重合,向东为正。Z轴与地球旋转轴重合,向北为正。Y轴与XZ平面垂直构成右手系。
6、广播星历 :卫星发播的预报一定时间内卫星轨道信息的电文信息。
精密星历:供卫星精密定位所使用的卫星轨道信息。
区别是,前者是预报星历,后者是后处理星历
7、载波相位测量的原理:载波信号量测精度优于波长的1/100,载波波长(L1=19cm, L2=24cm)比C/A码波长(C/A=293m)短得多,所以GPS测量采用载波相位观测值可以获得比伪距(C/A码或P码)定位高得多的成果精度。
伪距测量的原理:GPS接收机对测距码的量测就可得到卫星到接收机的距离,由于含有接收机卫星钟的误差及大气传播误差,故称为伪距。对C/A码测得的伪距称为C/A码伪距,精度约为20米左右,对P码测得的伪距称为P码伪距,精度约为2米左右。
8、绝对定位又称为单点定位,这是一种采用一台接收机进行定位的模式,它所确定的是接收机天线的绝对坐标。这种定位模式的特点是作业方式简单,可以单机作业。绝对定位一般用于导航和精度要求不高的应用中。相对定位又称为差分定位,这种定位模式采用两台以上的接收机,同时对一组相同的卫星进行观测,以确定接收机天线间的相互位置关系。
接收设备安置在运动的载体上的定位成为动态定位
9、Gps定位原理:GPS的基本定位原理是:卫星不间断地发送自身的星历参数和时间信息,用户接收到这些信息后,经过计算求出接收机的三维位置,三维方向以及运动速度和时间信息。
10、Gps误差来源有哪些:(1)与GPS卫星有关的因素(2)与传播路径有关的因素(3)接收机有关的因素(4)GPS控制部分人为或计算机造成的影响,数据处理软件的影响,固体潮、极潮和海水负荷的影响,相对论效应。
11、Gps控制网布点原则:(1)周围应便于安置接收设备和操作,视野开阔,视场内障碍物的高度角不宜超过15度;(2)远离大功率无线电发射源(如电视台、电台、微波站等),其距离不小于200m;远离高压输电线和微波无线电信号传送通道,其距离不小于50m;(3)附近不应有强烈反射卫星信号的物件(如大型建筑物等);(4)交通方便,并有利于其他测量手段扩展和联测;(5)地面基础稳定,易于点的保存;(6)AA、A、B级GPS点,应选在能长期保存的地点;(7)充分利用符合要求的旧有控制点;(8)选站时应尽可能使测站附近的小环境(地形,地貌,植被等)与周围的大环境保持一致,以减少气象元素的代表性误差。
12、基线:三角测量中推算三角锁、网起算边长所依据的基本长度边。
观测时段:测站上开始接收卫星信号到观测停止,连续工作的时间段,简称时段。
同步观测:两台或两台以上接收机同时对同一组卫星进行的观测。同步观测环:三台或三台以上接收机同步观测获得的基线向量所构成的闭合环,简称同步环。独立观测环:由独立观测所获得的基线向量构成的闭合环,简称独立环。
异步观测环:在构成多边形环路的所有基线向量中,只要有非同步观测基线向量,则该多边形环路叫异步观测环,简称异步环。独立基线:对于N台GPS接收机的同步观测环,有J条同步观测基线,其中独立基线数为N-1。
非独立基线:除独立基线外的其它基线叫非独立基线,总基线数与独立基线之差即为非独立基线数。
13、同步网之间的连接方式有哪些?
对于由N台GPS接收机构成的同步图形中一个时断包含的GPS基线数为:
但其中仅有N-1条是独立的GPS边,其余为非独立边。当接收机数N=2~5时所构成的同步图形
当同步观测的GPS接收机数N≥3时,同步闭合环的最少数应为:
14、Gps网形设计原则:(1)GPS网中不应存在自由基线。所谓自由基线是指不构成闭合图形的基线,由于自由基线不具备发现粗差的能力,因而必须避免出现,也就是GPS网一般应通过独立基线构成闭合图形。(2)GPS网中的闭合条件中基线数不可过多。网中各点最好有三条或更多基线分支,以保证检核条件,提高网的可靠性,使网中的精度、可靠性较均匀。(3)GPS网应以“每个点至少独立设站观测两次”的原则布网。这样不同接收 机数测量构成的网之精度和可靠性指标比较接近。(4)为了实现GPS网与地面网之间的坐标转换GPS网至少应与地面网有2个重合点。
15、数据预处理的目的:对原始数据进行编辑、加工、整理、分流并产生各种专用信息文件,为进一步平差计算做准备。
Gps测量定位技术设计及技术总结包括那些内容?
在gps测量工作完成后,应按要求编写技术总结报告,其具体内容包括外业和内业两大部分。外业技术总结内容
测区范围与位置,自然地理条件,气候特点,交通及电信、电源等情况
任务来源,测区已有测量情况,项目名称,施测目的和基本精度要求;
施测单位,施测起讫时间,技术依据,作业人员情况; 接收设备作业仪器类型与数量、精度、检验情况; 点位观测质量评价,埋石与重合点情况; 观测方法要点与补测、重测情况; 外业观测数据质量分析与野外数据检验情况 内业技术总结内容:
数据处理方案、所采用的软件、所采用的星历、起算数据、坐标系统,以及无约束、约束平差情况。误差检验及相关参数与平差结果的精度估计等。
上交成果中尚存在的问题和需要说明的其他问题、建议或改进意见 综合附表与附图
16、GPS数据预处理的目的是:①对数据进行平滑滤波检验,剔除粗差;②统一数据文件格式并将各类数据文件加工成标准化文件(如GPS卫星轨道方程的标准化,卫星时钟钟差标准化,观测值文件标准化等);③找出整周跳变点并修复观测值(整周跳变的修复见5.3.3);④对观测值进行各种模型改正。
17、Gps基线向量网平差有哪些类型:三维无约束平差法,二维约束平差,三维联合平差,二维联合平差
18、Gps信号接收机分类:按工作原理分为,码相关型接收机,平方型接收机,混合型接收机。按接收机用途分为:导航型接收机,测量型接收机,授时型接收机。按接收机接收的载波频率分为,单频接收机,双频接收机。按接收机的通道数分为,多通道接收机,序贯通道接收机,多路复用通道接收机
19、Gps信号接收机的工作原理:当GPS卫星在用户视界升起时,接收机能够捕获到按一不定期卫星高度截止角所选择的待测卫星,并能够跟踪这些卫星的运行;对所接收到的GPS信号,具有变换、放大和处理的功能,以便测量出GPS信号从卫星到接收天线的传播时间,解译出GPS卫星所发送的导航电文,实时地计算出测站的三维位置,甚至三维速度和时间。