生产实习电路板制作报告.docx
《生产实习电路板制作报告.docx》由会员分享,可在线阅读,更多相关《生产实习电路板制作报告.docx(20页珍藏版)》请在冰点文库上搜索。
生产实习电路板制作报告
生产实习说明书
学院工业制造学院
专业测控技术与仪器
班级00000000000
姓名000000
学号20091011000000
指导教师00000
2012年3月3日
\目录
一基本概要2
1生产实习的要求2
2对于单片机因具有的如下三个功能:
2
二系统的工作原理及设计3
三芯片的介绍5
189C525
2LED7
3ADC08098
4CD454310
四接电路板中遇到的问题和解决方法13
五软件的设计,调试以及遇到的问题14
1流程图14
2序的调试以及遇到的问题以及解决方法14
六感想和心得体会15
七附录16
一基本概要
1生产实习的要求
1、自行设计一个直流稳压电源——交流输入:
220V直流输出:
+5V
2、利用ADC0809做A/D转换器;使用单片机AT89C51做控制器;选用4位LED显示块(共阴极)做显示器,并设计相应的驱动电路;设计外部中断功能键一个;设计开关量信号检测及其指示电路;由上述电路构建成一个单片机应用系统。
3、进行硬件电路的设计、焊接与调试。
4、自行编写有关的应用程序,以完成系统功能的需求。
5、进行系统的软、硬件联机调试。
2对于单片机因具有的如下三个功能:
1.系统运行时,循环显示你组同学的班级号(例如01)和学生号(例如23),为了显示清晰,要求循环显示时间2s(或5s),
2.每隔5秒,启动、采集A/D转换一次,模拟量信号由电位器W1提供。
A/D转换结束时,以外部中断方式通知CPU,当0809A/D转换完成后,由EOC信号经反向后产生中断申请信号,由
1引脚接入;中断后读取A/D转换结果,并连续读取8个或4个数据,数据保存在片内RAM中
3.当按下外部中断功能键时,检测4路开关量信号,并由发光二极管显示其开关状态;外部中断功能键由
0引脚接入。
二系统的工作原理及设计
根据此次生产实习的要求来设计其工作的原理图
首先选用的单片机为89C52
分析要就可知要显示学号班级,还要采集AD芯片的数据,主要的元器件有电阻,开关,发光二级管,ADC0809,BCD-七段码驱动器,LED显示器反相器74LS06或非门74LS02,由于ADC0809内部没有时钟电路所以需要外接500HZ的时钟信号,这里我们采用74LS74对单片机的时钟信号分频为ADC0809提供时钟信号。
具体的元器件及数目:
表一:
名称
型号、规格
数量
名称
型号、规格
数量
单片机
AT89C51
1个
滤波电容
独石104
9个
A/D转换芯片
ADC0809
1个
整流二极管
IN4007
4个
正沿触发双D锁存器
74LS74
1个
三端稳压器
7805
1个
6反相驱动器(OC高压输出)
74LS06
1个
整流变压器
220/9V、3W
1个
四2输入或非门
74LS02
1个
2相电源插头
1个
BCD-七段码/驱动器
MC14543
4个
IC插座
40脚、28脚
10脚、16脚
各1个
各4个
LED显示块
0.5″共阴
4个
IC插座
14脚
3个
晶振
6MHz
1个
插座
CH2.54—4P
2个
复位按钮
6*6*7
2个
线路版
1块
拨动开关
小
4个
电阻排
1个
发光二极管
Φ5
4个
电阻
10KΩ、1/4W
1个
可调电阻
32961KΩ
1个
晶振电容
CC63V30PF
2个
电阻
200Ω、1/4W
32个
电解电容
CD16V22μF
1个
电阻
5.1KΩ、1/4W
5个
电解电容
CD25V2200μF
470μF
1个
1个
根据要求单片机的P0口接排阻J1,同时P0口于BCD七段码驱动器相连通过点单片机的程序控制数码管的显示。
对于发光二级管的显示:
单片机的P1通过反相器74LS06与数码管的阴极相连,数码管的阳极通过上拉电阻与电源相连这里74LS06是用来驱动数码管工作的。
同时拨动开关也通过上拉电阻与电源相连,其公共端接地。
当单片机的外部中断0有效是检测开关开启的状态
可变电阻为ADC0809提供模拟信号。
在AD芯片的START引脚提供底电平AD启动开始AD转换,转换结束后转换标志为EOC为1,通过非门后入单片机的外部中断1INT1(P3.3),单片机获取中断后对ENABLE去高电平此时将转换后的数据送到P0口送入内存同时单片机将其转换为十进制数显示在数码管上。
最后通过多单片机进行编程来实现数码管以及发光二极管的控制。
三芯片的介绍
189C52
工作原理:
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图片见下图:
图一
主要功能特性
标准MCS-51内核和指令系统
·片内8kROM(可扩充64kB外部存储器)
·32个双向I/O口
·256x8bit内部RAM(可扩充64kB外部存储器)
·3个16位可编程定时/计数器
·时钟频率3.5-12/24/33MHz
·向上或向下定时计数器
·改进型快速编程脉冲算法
·6个中断源
·5.0V工作电压
·全双工串行通信口
·布尔处理器
—帧错误侦测
·4层优先级中断结构
—自动地址识别
·兼容TTL和CMOS逻辑电平
·空闲和掉电节省模式
·PDIP(40)和PLCC(44)封装形式
管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,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口作为AT89C51的一些特殊功能口,管脚备选功能
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2LED
工作原理:
它是一种通过控制半导体发光二极管的显示方式即在二极管的阴极加低电平,阳极加高电平是二极管导通而发亮,其大概的样子就是由很多个通常是红色的发光二极管组成,靠灯的亮灭来显示字符。
其与单片机的连接方式就是:
LDE的VCC与电源相连,GND接地,其他引脚与单片机的I/O口相连从而控制其显示
LED显示器分为共阴极和共阳极两种
图二
LED的段选码列表“
表2
3ADC0809
工作原理:
采用频率为8位的,以主次逼近原理进行模数转换的器件,其内部有8通道多路开关,可以根据地址锁存译码后的信号值选通8个单断模拟输入信号中的一个进行A/D转换。
八路模拟信号分时采集,片内有八路模拟选通开关,以及相应的通道抵制锁存用译码电路。
其转换时间为100us左右。
锁存器完成对A,B,C3个地址位进行数据锁存和译码,其译码输出用于通道的选择,其转换结果通过三态输出锁存器存放,输出,因此可以直接与系统数据总线直接相连。
信号引脚
IN7~IN0:
模拟量输入通道
ALE:
地址锁存允许信号
START:
转换启动信号。
START=O时开始进行A/D转换在此期间始终要保持低电平
A,B,C:
地址线。
选取通道
CLK:
时钟信号,ADC0809内部没有时钟信号,需要外接时钟一般为500KHz
EOC:
转换结束信号。
EOC=0正在转换为1时结束转换可以作为查询状态标识也可以用于中断请求信号
OE:
输出允许信号,OE=1时输出转换得到数据
VCC:
+5V电源
Vref:
参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。
下图为其与单片机的连接图
图三
4CD4543
工作原理:
cd4543具有数据锁存功能
D,C,B,A:
地址输入线。
a,bc,d,e,f,g:
数据输出线
LD:
输入允许端。
当LD=1的时候允许数据输入,当LD=0的时候数据不能输入
PH:
使能端,当PH=0时有效,芯片工作
BI:
当其位1是无输出,为0时输出
Vss:
地线
VDD:
电源线,3V~18V
其输入输出如下图所示:
表3:
CD4543只能输出0~9是个数字,不能输出控制小数位其控制LED显示器显示如下
3.用PROTEL画出的电路图
图四
四接电路板中遇到的问题和解决方法
在这次生产实习之前,由于没有做过电路板方面的相关实验,所以遇到了很多的问题。
第一:
以前在课堂上学习的关于单片机方面的知识,没有实际操作过,在设计电路的时候只能慢慢在书上查。
第二:
在焊接的过程中由于是第一次焊电路板,没经验,出现了很多错误,只能请以前做过的同学帮忙。
第三:
通过这次的实习,让我对protel的基本操作,包括绘制电路原理图和PCB更加的熟练了。
虽然我们做的只是小电路板,但我相信经过以后的不断练习,不断地学习,我们能完成更加困难的实验。
五软件的设计,调试以及遇到的问题
1流程图
根据系统所要实现的要求,首先确定出程序的流程图
数码管显示学号班级:
开关状态:
A/D转换程序:
序见附录1:
2序的调试以及遇到的问题以及解决方法
流程图的基础上写出了程序,并且将程序下载进入单片机中显示输出
在最初调试的时候,在小系统上数码管在显示班级学好的时候出现了显示的顺序乱了,经过检查后发现在编码的过程中对P0口的高四位和第四位的出现了问题,改变了编码的顺序,数码管的显示护符了正常。
在对开关信号的检查的时候,灯的亮没不受中断的控制,没有按照预定的情况显示。
在检查后发现没有开启总中断,重新编写程序后正常运行。
在对A/D芯片进行编程采集并且显示采集的数据的时候出现了较大的麻烦,在最开始的时候A/D可以运行但是显示乱码,改正程序后数码管正常显示但是A/D芯片始终不工作,这个为题一直不能解决最后通过和老师商量讨论发现了这个问题,因为在编写程序的过程中在对A/D转换结束的判断出现了错误,这使得A/D芯片始终没有办法读取采集到的数据。
在老师帮助下解决了对A/D的编程问题。
六感想和心得体会
通过这次的生产实习,让我明白了,我们学的还远远不够。
设计电路图的时候,还必须得翻书查找资料。
我们永远都离不开书本。
在焊接的过程中,什么都不会,需要在经常在实验室做实验的同学带着做。
怎么用锡焊,焊孔堵住了怎么办,元器件的位置怎么放,正负节怎么分等等以系列的问题。
还好我们是三人一组,,在同学的帮助下终于完成了生产实习。
这次的生产实习同时也让我明白了学习是永远的事情,一个人总会有需要别人帮助的时候。
感谢学校给了我们这么好的一个锻炼机会,在学习知识的同时还让我明白了做人要虚心。
七附录
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitst=P2^4;
sbitwr=P3^6;
sbitrd=P3^7;
sbiteco=P3^3;
sbitLD1=P2^6;
sbitLD2=P2^7;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitD1=P1^4;
sbitD2=P1^5;
sbitD3=P1^6;
sbitD4=P1^7;
uinta0809,data1,data2,data3;
uchart,num;
ucharcodetable1[]={0x21,0x22,0x23};
ucharcodetable[]={0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f};
voiddisplay1();
voiddisplay();
voiddelay(uintz)
{
uintx,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
voidmain()
{
P0=0xff;
st=0;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
wr=0;
display1();
IT0=1;
EA=1;
EX0=1;
while
(1)
{
wr=0;
display();
}
}
voidextero()interrupt1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
voiddisplay1()
{
t=0;
LD1=0;
LD2=1;
P0=0x01;
delay(100);
LD1=1;
LD2=0;
P0=0x21;
while
(1)
{
if(t==40)
{t=0;
num++;
if(num==3)
{num=0;
}
P0=table1[num];
delay(100);
}
}
}
voidexter1()interrupt0
{
if(key1==1)
{
D1=1;
}
elseD1=0;
if(key2==1)
{
D2=1;
}
elseD2=0;
delay(5);
if(key3==1)
{
D3=1;
}
elseD3=0;
delay(5);
if(key4==1)
{
D4=1;
}
elseD4=0;
delay(5);
}
voidexter2()interrupt1using0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==50)
{
t=0;
wr=1;
wr=0;
wr=1;
while(eco==1);
rd=0;
_nop_();
a0809=P0;
_nop_();
rd=1;
data1=(a0809*49/25)/100;
data2=(a0809*49/25)/10;
data3=(a0809*49/25)%10;
}
}
voiddisplay()
{
LD2=1;
LD1=0;
P0=(table[data1]>>4)|(table[data2]&0xf0);
delay(10);
LD2=0;
LD1=1;
P0=table[data3];
}