PLC实验室实习报告.docx
《PLC实验室实习报告.docx》由会员分享,可在线阅读,更多相关《PLC实验室实习报告.docx(19页珍藏版)》请在冰豆网上搜索。
PLC实验室实习报告
2010届生产实习报告
姓名
班级
学号
指导教师
电气工程学院
2013年7月3日
实习时间
自2013年6月10日至2013年6月21日
实习地点
科技楼PLC实验室
现场实习导师
实习内容
一、实习目的
专业实习是测控技术与仪器专业一项重要的实践性教学环节。
它是大学生参加工作之前必不可少的环节,该环节能锻炼自己的动手能力和实践能力,将所学的理论知识运用于实践当中,反过来还能检验书本上理论的正确性,有利于融会贯通。
同时也能开拓视野,巩固和理解专业课程,完善自己的知识结构,达到锻炼能力的目的。
通过专业实习可以对本专业知识形成一个客观,理性的认识,从而不与社会现实相脱节。
同时专业实习也为即将进入工作单位的我们提供了提前接触生产实际的机会,有利于其毕业后的职业发展。
此次实习通过51单片机时时检测温度1602液晶显示及报警实验达到:
(1)了解并学习51单片机。
(2)掌握1602液晶、数字温度计DS18B20以及矩阵键盘和独立键盘的工作原理。
(3)掌握51单片机C语言编程。
(4)熟练掌握AltiumDesigner软件绘图方法及C语言KEIL编程软件。
(5)要求会查阅有关参考资料和手册
(6)实现温度的时时检测及手动按键控制温度上下限的报警。
2、实习要求
1、实验器材
51单片机开发板一块、万用表、STC89C52RC单片机芯片一个、程序下载线一根、DS18B20数字温度计、1602液晶一块。
辅助工具:
AltiumDesigner绘图软件,KEIL编程软件。
2、实验原理
单片机AT89S51是低功耗,高性能CMOS8位单片机,片内含4kbytes的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP),也可用传统方法进行编程。
(1)AT89S51的介绍
AT89S51实物如3-1图所示:
图3-1AT89S51实物图
AT89S51主要特性及引脚如下与MCS-51兼容
4K字节可编程闪烁存储器
全静态工作:
0Hz-24Hz
三级程序存储器锁定
128*8位内部RAM
2可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
AT89S51单片机为40引脚双列直插式封装。
其引脚排列和逻辑符号如图3-2所示。
各引脚功能简
单介绍如下:
VCC:
供电电压
GND:
接地
P0口:
P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。
当P0口的管脚写“1”时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。
作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。
P3口也可作为AT89S51的一些特殊功能口:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INT0(外部中断0)
P3.3INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
同时P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取址期间,每个机器周期PSEN两次有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
EA/VPP:
当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
(2)DS18B20的介绍
allas的最新单线数字温度传感器DS18B20简称新的“一线器件”体积更小、使用电压更宽、更经济。
Dallas半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20测量温度范围为-55℃~+125℃,在-10~+85℃范围内,精度为±0.5℃。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
其实物图如3-3图所示:
DS18B20引脚及特点
a.引脚功能说明
GND是地址信号;
DQ是数据输入/输出引脚,开漏单总线接口引脚,当被用在寄生电源下,也可以向器件提供电源;
VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
b.DS18B20功能特点
①采用单总线技术,与单片机通信只需要一根I/O线,在一根线上可以挂接多个DS18B20。
②每只DS18B20具有一个独有的,不可修改的64位序列号,根据序列号访问地应的器件。
③低压供电,电源范围从3.0~5.5V,可以本地供电,也可以直接从数据线窃取电源(寄生电源方式)。
④测温范围为-55℃~+125℃,在-10℃~+85℃范围内误差为±0.5℃。
⑤可编辑数据为9~12位,转换12位温度时间为750ms(最大)。
⑥用户可自设定报警上下限温度。
⑦报警搜索命令可识别和寻址超过程序限定温度(温度报警条件)的器件。
⑧DS18B20的分辨率由用户通过EEPROM设置为9~12位。
⑨DS18B20可将检测到温度值直接转化为数字量,并通过串行通信的方式与主控制器进行数据通信。
⑩负电压特性,电源极性接反时,温度计不会因为发热而烧毁,只是不能正常工作。
(3)液晶显示模块
将所测速度及时间显示在1602液晶屏上,1602液晶简介及电路图
引脚
符号
引脚说明
引脚
符号
引脚说明
1
VSS
电源地
9
D2
数据口
2
VDD
电源正极
10
D3
数据口
3
VO
对比度调节
11
D4
数据口
4
RS
数据/命令选择端
12
D5
数据口
5
R/W
读写选择端
13
D6
数据口
6
E
使能信号
14
D7
数据口
7
D0
数据口
15
BLA
背光电源正极
8
D1
数据口
16
BLK
背光电源负极
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能显示图形。
1602LCD是指显示的内容为16×2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
1602LCD的特性
(1)+5V电压,对比度可调。
(2)内含复位电路。
(3)提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能。
(4)有80字节显示数据存储器DDRAM。
(5)内建有160个5×7点阵的字型的字符发生器CGROM。
(6)8个可由用户自定义的5×7的字符发生器CGROM。
(7)字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线(16脚).
三、温度检测程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#define_Nop()_nop_()
sbitDQ=P2^2;//定义DS18B20通信端口
sbitlcd_rs_port=P3^5;/*定义LCD控制端口*/
sbitlcd_rw_port=P3^6;
sbitlcd_en_port=P3^4;
sbits5=P3^7;
sbitbeep=P2^3;
#definelcd_data_portP0
////////////////////////////////////////
sbitWELA=P2^7;//数码管的位选信号
voiddelay1(void)//关闭数码管延时程序
{
intk;
for(k=0;k<1000;k++);
}
//////////////以下是LCD1602驱动程序////////////////
voidlcd_delay(ucharms)/*LCD1602延时*/
{
ucharj;
while(ms--){
for(j=0;j<250;j++)
{;}
}
}
voidlcd_busy_wait()/*LCD1602忙等待*/
{
lcd_rs_port=0;
lcd_rw_port=1;
lcd_en_port=1;
lcd_data_port=0xff;
while(lcd_data_port&0x80);
lcd_en_port=0;
}
voidlcd_command_write(ucharcommand)/*LCD1602命令字写入*/
{
lcd_busy_wait();
lcd_rs_port=0;
lcd_rw_port=0;
lcd_en_port=0;
lcd_data_port=command;
lcd_en_port=1;
lcd_en_port=0;
}
voidlcd_system_reset()/*LCD1602初始化*/
{
lcd_delay(20);
lcd_command_write(0x38);
lcd_delay(100);
lcd_command_write(0x38);
lcd_delay(50);
lcd_command_write(0x38);
lcd_delay(10);
lcd_command_write(0x08);
lcd_command_write(0x01);
lcd_command_write(0x06);
lcd_command_write(0x0c);
}
voidlcd_char_write(ucharx_pos,y_pos,lcd_dat)/*LCD1602字符写入*/
{
x_pos&=0x0f;/*X位置范围0~15*/
y_pos&=0x01;/*Y位置范围0~1*/
if(y_pos==1)x_pos+=0x40;
x_pos+=0x80;
lcd_command_write(x_pos);
lcd_busy_wait();
lcd_rs_port=1;
lcd_rw_port=0;
lcd_en_port=0;
lcd_data_port=lcd_dat;
lcd_en_port=1;
lcd_en_port=0;
}
voidlcd_bad_check()/*LCD1602坏点检查*/
{
chari,j;
for(i=0;i<2;i++){
for(j=0;j<16;j++){
lcd_char_write(j,i,0xff);
}
}
lcd_delay(200);
lcd_delay(200);
lcd_delay(200);
lcd_delay(100);
lcd_delay(200);
lcd_command_write(0x01);/*clearlcddisp*/
}
//////////////////以下是DS18B20驱动程序////////////////
//延时函数
voiddelay(unsignedinti)
{
while(i--);
}
//初始化函数
Init_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时大于480us
DQ=1;//拉高总线
delay(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
}
//读一个字节
ReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--){
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)dat|=0x80;
delay(4);
}
return(dat);
}
//写一个字节
WriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
}
//读取温度
ReadTemperature(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;//将温度的高位与低位合并
t=tt*10+0.5;//对结果进行4舍5入
return(t);
}
//////////////////以上是DS18B20驱动程序////////////////
/*定义数字ascii编码*/
unsignedcharmun_char_table[]={"0123456789abcdef"};
unsignedchartemp_table[]={"Temp:
.'C"};
unsignedchartemp_high_low[]={"H:
.L:
."};
/*1MS为单位的延时程序*/
voiddelay_1ms(ucharx)
{
ucharj;
while(x--){
for(j=0;j<125;j++)
{;}
}
}
main()
{
unsignedinti=0;
unsignedinttemp_high;
unsignedinttemp_low;
unsignedchartemp;
unsignedintnum1=320,num2=300;
ReadTemperature();/*读取当前温度*/
lcd_system_reset();/*LCD1602初始化*/
////////////////////////////////////////////////////////////////
P0=0XFF;//关掉数码管的位选信号。
阻止数码管受到P0口信号的影响。
delay();
WELA=1;
delay();
WELA=0;
////////////////////////////////////////////////////////////////
lcd_bad_check();/*LCD1602坏点检查*/
for(i=0;i<12;i++)lcd_char_write(i,0,temp_table[i]);
for(i=0;i<16;i++)lcd_char_write(i,1,temp_high_low[i]);
i=ReadTemperature();/*读取当前温度*/
temp_high=i;
temp_low=i;
while
(1){
i=ReadTemperature();//读取当前温度
if(temp_high
if(temp_low>i)temp_low=i;
lcd_char_write(6,0,mun_char_table[i/100]);/*把温度显示出来*/
lcd_char_write(7,0,mun_char_table[i%100/10]);
lcd_char_write(9,0,mun_char_table[i%10]);
lcd_char_write(2,1,mun_char_table[temp_high/100]);/*显示最高温度*/
lcd_char_write(3,1,mun_char_table[temp_high%100/10]);
lcd_char_write(5,1,mun_char_table[temp_high%10]);
lcd_char_write(10,1,mun_char_table[temp_low/100]);/*显示最低温度*/
lcd_char_write(11,1,mun_char_table[temp_low%100/10]);
lcd_char_write(13,1,mun_char_table[temp_low%10]);
delay_1ms(100);
if(s5==0)
{
lcd_delay(10);//消抖
if(s5==0)
{while(!
s5);//等待按键松开。
num1=num1+10;
}
}
/*if(s4==0)
{
lcd_delay(10);//消抖
if(s4==0)
{while(!
s4);//等待按键松开。
num2=num2-10;
}
}*/
if(i>=num1)
{
beep=0;
}
elseif(i<=num2)
{
beep=0;
}
else{beep=1;}
}
}
四、实习收获
经过这段时间的认知学习,让我更深层次的了解了我们专业、。
这为我以后的学习打下了更深的基础,同时也使我有机会将课本上学到的东西学以致用。
在实习期间实验室老师为我详细讲解了很多我之前在书本上学不到的知识,让我觉得受益匪浅。
我进一步的认识到理论知识和工程实践都是非常重要的,二者不可偏废。
在学校学习的文化知识和专业知识,在进入工作后还必须与工程实践相结合才会使自己在工作中游刃有余。
单片机及PLC是工业生产中必不可少的知识,在许多工业生产中都用到,这一段时间的认知实习,更让我体会到了我们专业在生活中普遍用到。
通过老师们详细的讲解,再加上同学的相互帮助,使我收获很多。
然后希望所有和我一样实习的同学们在日后的工作中有所发展,取他人长,补自己短.好好学习,最后,作为当代大学生我们应该努力学习,要跟得上时代的发展,技术的更新,为祖国的明天奉献自己的力量。
参考文献
【1】51单片机C语言教程——入门、提高、开发、拓展全攻略郭天祥
【2】单片微机原理及应用上海丁元杰
【3】谭浩强.C程序设计北京:
清华大学出版社
【4】求是科技.8051系列单片机C语言程序设计北京:
人民邮电出版社
附录
成绩评定
优
良
中
及格
不及格