生产实习.docx
《生产实习.docx》由会员分享,可在线阅读,更多相关《生产实习.docx(18页珍藏版)》请在冰豆网上搜索。
生产实习
生产实习说明书
学院机械工程学院
专业测控技术与仪器
学生姓名
学号201210114106年级2012级测控1班
指导教师莫莉
2015年5月28日
目录
1设计的整体方案2
1.1实习制作目的2
2硬件介绍3
2.1单片机的选择3
2.1.1AT89C51的特点及选择原因3
2.1.2AT89C51的工作模式及注意事项4
2.2ADC08095
2.2.1主要技术指标和特性5
2.2.2内部结构和外部引脚6
2.3CD45437
2.4LED数码管7
3电路原理9
3.1晶振电路与复位电路9
3.2A/D转换电路10
3.3开关量信号检测及其指示电路10
3.4静态显示器驱动电路11
4实物焊接与调试11
5心得体会12
附录Ⅰ13
附录Ⅱ14
附录Ⅲ15
1设计的整体方案
1.1实习制作目的
通过生产实习制作,使学生进一步加深理解单片机的工作原理,通过实习制作掌握引入外部中断的方法及其中断服务程序的编写方法;掌握定时器的使用及其中断服务程序的编写方法;从而了解如何构成系统的主程序;通过实习制作掌握单片机应用系统的制作工艺及调试方法;进一步理解单片机系统的设计和开发方法,从而使学生具备设计单片机应用系统的能力。
1.2实习制作要求
1.熟悉单片机最小系统的基本构成;
2.掌握A/D转换芯片ADC0809与单片机的硬件连接方法及A/D转换的中断编程方法。
3.掌握开关量信号检测及其指示电路的设计方法和编程方法。
4.掌握单片机引入外部中断的实现方法及其中断服务程序的编写方法。
5.掌握定时器的使用及其中断服务程序的编写方法。
6.了解LED显示器的工作原理,掌握静态显示器驱动电路的设计方法以及编程方法。
7.掌握单片机应用系统的制作工艺及调试方法。
1.3实习制作内容
1、自行设计一个直流稳压电源——交流输入:
220V 直流输出:
+5V
2、利用ADC0809做A/D转换器;使用单片机AT89C51做控制器;选用4位LED显示块(共阴极)做显示器,并设计相应的驱动电路;设计外部中断功能键一个;设计开关量信号检测及其指示电路;由上述电路构建成一个单片机应用系统。
3、进行硬件电路的设计、焊接与测试。
4、自行编写有关的应用程序,以及完成系统功能的需求。
5、进行系统的软、硬件联机调试。
1.4单片机应用系统应具备的功能
1、系统运行时,循环显示你组同学的班级号(例如01)和学生号(例如23),为了显示清晰,要求循环显示2s(或5s),
2、每隔五秒,启动、采集A/D转换一次。
3、模拟信号由电位器W1提供。
A/D转换结束时,以外部中断的方式通知CPU,当0809A/D转换完成后,由EOC信号经反向后产生中断申请信号,由INT1引脚接入;中断后读取A/D转换结果,并连续读取8个或4个数据,数据保存在片内RAM中
4、对8个或4个数据进行数值滤波后作为A/D转换的平均值保存,先试试,是将平均值转换为十进制数送显示器显示,为了显示清晰,要求显示时间2s(或5s)
5、当按下外部中断功能键时检测4路开关量信号,并由发光二极管显示其开关状态;外部中断功能键由INT0引脚接入。
6、为了保证精确定时,要求T0的中断优先级别高于外部中断0和外部中断1。
2硬件介绍
2.1单片机的选择
2.1.1AT89C51的特点及选择原因
AT89C51作为温度测试系统设计的核心器件.该器件是INTEL公司生产的MCS一5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术.具有高性能的8位单片机,属于标准的MCS一51的CMOS产品。
片内含8Kbytes的可贩毒擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件兼容标准的MCS-51指令系统。
片内置通用8位中央处理器(CPU)和Flash存储单元。
结合了HMOS的高速和高密度技术及CHMOS的低功耗特征。
其具有如下性质:
(1)与MCS-51产品指令系统完全兼容
(2)8K字节可重擦写Flash闪烁存储器。
(3)寿命:
1000写/擦循环。
(4)数据保留时间:
10年。
(5)全静态工作:
0Hz-24Hz。
(6)三级程序存储器锁定。
(7)128*8位内部RAM。
(8)32可编程I/O线。
(9)三个16位定时器/计数器。
(10)8个中断源。
(11)可编程串行通道。
(12)低功耗的闲置和掉电模式。
(13)片内振荡器和时钟电路。
图2-1AT89C51引脚图
AT89C51单片机提供以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89C51可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
由于此设计需要编写程序,需要将程序烤入单片机中,因此单片机必须具有足够多的存储空间,其具有8K字节的Flash完全满足要求。
32位的I/O口线能够使得单片机与温度显示器、温度传感器、键盘、报警电路、按键电路和指示灯连接等等变得可能。
16位的定时计数器使得读取数据变得更加简单,同时其结构有利于晶振电路和复位电路的连接。
最重要的是,能够在掉电状态下保存RAM内的数据。
同时,与同类51单片机相比,AT89C51具有更强的可操作性。
。
2.1.2AT89C51的工作模式及注意事项
AT89C51单片机有两种可用软件编程的省电模式,它们是空闲模式和掉电工作模式。
这两种方式是控制专用寄存器PCON(即电源控制寄存器)中的PD(PCON1)和IDL(PCON0)位来实现的。
PD是掉电模式,当PD=1时,激活掉电工作模式,单片机进入掉电工作状态。
IDL是空闲等待方式,当IDL=1,激活空闲工作模式,点偏激进入睡眠状态。
如需同时进入两种工作模式,即PD和IDL同时为1,则先激活掉电模式。
在空闲工作状态下,CPU保持睡眠状态而所有的片内的外设都保持激活状态,这种方式由软件产生,此时,片内RAM和所有特殊功能寄存器的内容保持不变。
空闲模式可由任何允许的中断请求或硬件复位终止。
终止空闲工作模式的方法有两种,进入中断服务程序,执行完中断服务程序并紧随RST1(中断返回)指令后,下一条要执行的指令就是使单片机进入空闲模式的那条指令后面的一条指令。
其二是通过硬件复位可以将空闲工作模式终止。
需要注意的是,当由硬件复位来终止空闲工作模式时,CPU通常是从激活空闲模式那条指令的吓一跳指令开始继续执行程序的,要完成内部复位操作,硬件复位脉冲要保持两个机器周期(24个时钟周期)有效,在这种情况下,内部禁止CPU访问片内RAM,而允许访问其他端口。
为了避免可能对端口产生意外写入,激活空闲状态的那条指令后一条指令不应是一条端口或外部存储器的写入指令。
在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令。
片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。
退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器但并没有因此改变RAM中的内容,在Vcc恢复到正常工作电平前,复位应无效,但必须保持一定时间以使振荡器重启动并稳定工作。
AT89S52单片机具有一些极限参数:
(1)工作温度:
-55摄氏度至+125摄氏度
(2)储藏温度:
-65摄氏度至+150摄氏度
(3)任一引脚对地电压:
-1.0V至+7.0V
(4)最高工作电压:
6.6V
(5)直流输出电流:
15.0mA
2.2ADC0809
ADC0808和ADC0809除精度略有差别外(前者精度为8位、后者精度为7位),其余各方面完全相同。
它们都是CMOS器件,不仅包括一个8位的逐次逼近型的ADC部分,而且还提供一个8通道的模拟多路开关和通道寻址逻辑,因而有理由把它作为简单的“数据采集系统”。
利用它可直接输入8个单端的模拟信号分时进行A/D转换,在多点巡回检测和过程控制、运动控制中应用十分广泛。
2.2.1主要技术指标和特性
(1)分辨率:
8位。
(2)总的不可调误差:
ADC0808为±LSB,ADC0809为±1LSB。
(3)转换时间:
取决于芯片时钟频率,如CLK=500kHz时,TCONV=128μs。
(4)单一电源:
+5V。
(5)模拟输入电压范围:
单极性0~5V;双极性±5V,±10V(需外加一定电路)。
(6)具有可控三态输出缓存器。
(7)启动转换控制为脉冲式(正脉冲),上升沿使所有内部寄存器清零,下降沿使A/D转换开始。
(8)使用时不需进行零点和满刻度调节。
2.2.2内部结构和外部引脚
ADC0809的外部引脚如图2-2所示。
内部各部分的作用和工作原理在内部结构
图中已一目了然,在此就不再赘述,下面仅对各引脚定义分述如下:
(1)IN0~IN7——8路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC来选通一路。
(2)D7~D0——A/D转换后的数据输出端,为三态可控输出,故可直接和微处理器数据线连接。
8位排列顺序是D7为最高位,D0为最低位。
(3)ADDA、ADDB、ADDC——模拟通道选择地址信号,ADDA为低位,ADDC为高位。
地址信号与选中通道对应关系如表11.3所示。
(4)VR(+)、VR(-)——正、负参考电压输入端,用于提供片内DAC电阻网络的基准电压。
在单极性输入时,VR(+)=5V,VR(-)=0V;双极性输入时,VR(+)、VR(-)分别接正、负极性的参考电压。
5)ALE——地址锁存允许信号,高电平有效。
当此信号有效时,A、B、C三位地址信号被锁存,图2-2ADC0809的外部引脚译码选通对应模拟通道。
在使用时,该信号常和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
(6)START——A/D转换启动信号,正脉冲有效。
加于该端的脉冲的上升沿使逐次逼近寄存器清零,下降沿开始A/D转换。
如正在进行转换时又接到新的启动脉冲,则原来的转换进程被中止,重新从头开始转换。
(7)EOC——转换结束信号,高电平有效。
该信号在A/D转换过程中为低电平,其余时间为高电平。
该信号可作为被CPU查询的状态信号,也可作为对CPU的中断请求信号。
在需要对某个模拟量不断采样、转换的情况下,EOC也可作为启动信号反馈接到START端,但在刚加电时需由外电路第一次启动。
(8)OE——输出允许信号,高电平有效。
当微处理器送出该信号时,ADC0808/0809的输出三态门被打开,使转换结果通过数据总线被读走。
在中断工作方式下,该信号往往是CPU发出的中断请求响应信号。
2.3CD4543
CD4543BCD—七段锁存译码液晶驱动器具有消隐和测试功能,输出可以直接驱动段位式液晶显示器,它只接受0—9内的BCD码。
图2-3CD4543引脚图及功能表
2.4LED数码管
LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。
如:
显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。
LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。
小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。
发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
图2-4LED数码管引脚图(共阴极)
A、静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O埠进行驱动,或者使用如BCD码二-十进位*器*进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O埠多,如驱动5个数码管静态显示则需要5×8=40根I/O埠来驱动,要知道一个89S51单片机可用的I/O埠才32个呢。
故实际应用时必须增加*驱动器进行驱动,增加了硬体电路的复杂性。
B、动态显示驱动:
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。
7段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,可以显示0~9等10个数字和小数点,使用非常广泛。
3电路原理
整个设计的电路包括了最小系统电路、直流稳压电路、电压显示电路、开关量信号检测及其指示电路、静态显示器驱动电路、A/D转换电路六部分电路组成。
3.1晶振电路与复位电路
晶振电路和复位电路与单片机连接构成最小系统电路,如图3-1
图3-1最小系统
3.2A/D转换电路
图3-2A/D转换电路
3.3开关量信号检测及其指示电路
图3-3开关量检测指示电路
3.4静态显示器驱动电路
图3-4数码管驱动电路
4实物焊接与调试
焊接过程中所遇到的问题:
在焊接元件时主要的问题是容易堆焊和虚焊从而导致电路之间断断、短路,还有就是元件有本身有问题,在换元件过程中,导致焊盘没有了,在重新焊接新元件的时候,很不好焊接。
所以在焊接过程中,必须要细心一个一个的将各个引脚焊接好,不然很容易出现问题。
调试过程中所遇到的问题:
在调试的过程中,数码管容易烧坏。
因为在第二个数码管的dp引脚是直接连接到电源的,所以必须在第二个数码管的dp端串联一个电阻,这样才不会因为电压过高而烧坏数码管。
我焊接的电路板就是因为这点,刚接上电路就被烧了。
还有一个问题就是将排阻的型号弄错了,导致在调试时候,改变滑动变阻器的阻值,数码管显示的电压数值却不发生任何改变。
所以一定要焊接正确排阻的型号。
5心得体会
经过这次生产实习,让我对单片机和proteus、keil、protel和altiumdesigner更加熟练,虽然在设计过程中虽然遇到了一些问题,但经过自己的思考,查阅资料还有请教同学都解决了,这些都说明我专业知识的欠缺和经验的不足。
只有通过实践,自己亲自动手做,才能知道自己欠缺说明,哪里不足,以在后期需要弥补。
生产实习使我的专业知识以及专业技能有了很大提升。
生产实习让我自由发挥,做出自己想做出来的东西。
使我对抽象的理论知识有了更加具体的体会和认识。
这次生产实习,我已经掌握了常用元件的识别、测试和使用,熟悉了常用仪器、仪表的使用方法,以及如何提高电路的抗干扰性能等,在电装实习的基础上更加深刻的掌握了焊接的方法和技术,已经在过程中所遇到的问题的解决方法。
在这次生产实习中,不仅培养了动手操作的能力,而且提高了独立思考的能力。
最为重要的是,在这个过程中,让我学会了很多学习的方法。
这在今后都是非常有用。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
在学习与实践中真正的掌握知识,进而更大程度的提高自己。
我学到了很多东西,同时不仅巩固了以前所学过的知识,让理论在实践中得到检验,而且学到了很多在书本中、课堂上没有学到过的知识。
通过这次生产实习让我明白了理论与实际相结合是很重要的,对“实践是检验真理的唯一标准”这句话,有了切身的体会与认识。
对于现在的大学生来说,仅仅学到了理论知识是远远不够的,理论知识只要你愿意去学习,认真思考体会,大家都能学会,但是必须把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的算的上掌握了这些知识,只有这样才能提高自己的学习能力、动手能力、独立思考的能力。
附录Ⅰ
仿真图
附录Ⅱ
PCB图
附录Ⅲ
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharAD_Result;
uchart,num;
uinta,p,data1,data2,data3,data4;
ucharcodeds13[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9};
ucharcodeds24[]={0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f};
sbitst=P2^4;//AD转换启动信号输入端
sbitwr=P3^6;
sbitrd=P3^7;
sbiteoc=P3^3;//转换结束信号输出引脚
sbitP26=P2^6;
sbitP27=P2^7;
sbitP24=P2^4;
sbitEOC=P3^3;
sbitD1=P1^4;
sbitD2=P1^5;
sbitD3=P1^6;
sbitD4=P1^7;
voidxianshi();
voiddisplay();
//------------------------------------------
//延时程序
//--------------------------------------
voiddelay(uintms)
{
uchari;
while(ms--)for(i=0;i<120;i++);
}
//-----------------------
//主程序
//---------------------
voidmain()
{
//ucharq;
P0=0xff;
P1=0X0F;//熄灭LED灯
st=0;
TMOD=0x11;//定时器0.1模式1
EA=1;//开总中断
EX0=1;//开INT0中断
ET0=1;//开定时器0中断
TR0=1;//定时器0开始计数
IT0=1;//外部中断为边沿出发方式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//T0装入初值
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;//T1装入初值
PT0=1;//定时器T0位中断为高优先级
wr=0;
xianshi();
while
(1);
}
//----------------------------------
//外部中断0开关检测
//-------------------------------------
voidex_ser1()interrupt0
{
uchartemp;
while
(1)
{
temp=P1;
temp=temp<<4;
P1=temp^0xff;
}
}
ucharAD_Convert()
{
P24=0;
WR=1;WR=0;WR=1;
while(EOC==1);//等待转换结束
P0=0xff;
RD=0;
AD_Result=P0;
RD=1;
returnAD_Result;
}
//-----------------------------
//定时器T0中断
//--------------------------------------------
voidt0_ser2()interrupt1//定时器0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==100)
{
t=0;
p=AD_Convert()*500.0/255;
display();
delay(2000);
xianshi();
}
}
//-------------------
//显示
//--------------------
voiddisplay()
{
data1=p/1000;
data2=p%1000/100;
data3=p%100/10;
data4=p%10;
wr=0;
P26=0;P27=1;
P0=ds13[data1]&ds24[data2];
P26=1;
P27=0;
P0=ds13[data3]&ds24[data4];
P27=1;
wr=1;
}
//----------------------
//显示学号
//----------------------
voidxianshi()
{
t=0;
wr=0;
P26=0;
P27=1;
P0=0X21;
delay(10);
wr=0;
P26=1;
P27=0;
P0=0X60;
delay(10);
}