大学电子工程实习报告.docx
- 文档编号:11689628
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:45
- 大小:743.51KB
大学电子工程实习报告.docx
《大学电子工程实习报告.docx》由会员分享,可在线阅读,更多相关《大学电子工程实习报告.docx(45页珍藏版)》请在冰豆网上搜索。
大学电子工程实习报告
中国地质大学(武汉)
课程:
电子工程实习报告
学号:
班级:
姓名:
指导老师:
陈分雄、叶敦范、罗大鹏、杨勇、王勇
第一阶段软件使用与仿真·····································3
1.1单片机系统原理图绘制·································3
1.2PCB制板·············································3
1.3编程训练·············································4
第二阶段焊接电路板········································18
2.1单片机最小系统板焊接································18
第三阶段电路调试与程序设计································18
3.1电路调试及功能测试·································18
3.2蜂鸣器调试·········································19
3.3串口通信调试······································19
3.4液晶显示调试·······································19
3.5数码管及键盘控制调试·······························20
3.6系统综合功能设计···································20
附录·······················································21
实习小结···················································38
第一阶段软件使用与仿真
1.1﹑单片机系统原理图绘制(指导老师:
罗大鹏)
1.地点:
信息楼503
2.目的:
熟练掌握protel99的使用方法,绘制单片机最小系统原理图,且保证ERC校验无误,并生成网络报表
3.内容:
⑴﹑文件管理
先新建设计数据库,再在数据库中新建各种文件,主要用到SchematicDocument和PCBDocument。
在使用中学会及时保存原理图或PCB文件以及熟练文件的导入导出。
⑵﹑protel的绘图方法
通过学习掌握绘图的一些方法。
要对键盘上的快捷键熟练应用,比如:
把原理图的放大PageUP,缩小PageDown,追踪鼠标视野Home,删除Delete,空格键转换元件以及撤销选择区域X-A等。
元器件或区域的复制,粘贴,删除等。
熟悉界面中的工作条功能。
⑶﹑绘制原理图
首先添加元件库,包括自制元件和下载的元件库,加上protel自带的元件库。
把需要用到的元件在自定义合适大小的图纸上合理摆布,再用导线把各器件连接起来,注意各电源及接地符号,节点,总线等的设置方法,使用绘图工具实现文字注释或其他注释。
⑷﹑ERC校验
待原理图绘制完毕,然后进行电气法则测试,即ERC校验,若产生错误,则根据错误提示对原电路图进行修改,直至通过ERC校验,原理图无误。
⑸﹑修改元器件封装
当ERC校验无错时,然后对照元件清单及PCB元件库,对每一个元器件封装进行修改,产生元件清单。
修改器件封装,修改其属性中的footprint即可。
修改完以后,再进行一次ERC校验,若出现错误,则根据错误提示修改,直至能通过ERC校验无错误产生。
⑹﹑生成网络报表
待修改封装之后,并再次通过ERC校验无错误产生,生成网络报表。
然后对照原电路图把网络报表仔细检查一遍,检查每一个器件与其他器件间的连接是否有误,及是否有元器件的丢失,检查VCC与GND的连接,是否全部连上。
若有遗漏或错误,则返回修改,在进行ERC校验,生成网络报表,直至无遗漏和错误。
此工作非常繁琐,需耐心和仔细对待。
但由于前些工作比较仔细所以原理图基本没有太大错误。
原理图见附录1。
1.2﹑PCB制板
1.地点:
信息楼503
2.目的:
熟练掌握protel99的使用方法,绘制单片机最小系统原理图
3.内容:
⑴﹑新建PCB文件,并添加老师要求的PCB元件库。
⑵﹑导入网络报表
导入上一阶段产生的网络报表,在导入过程中会进行错误检查,若产生错误,则需返回上一阶段,根据错误提示,修改元器件的封装等等,然后按步骤生成网络报表,再次导入网络报表,直至导入无错误。
⑶﹑手工布局
在PCB图纸上KeepOutLayer层放置线定义板宽,在导入网络报表无错误之后,然后执行,在将导入的各元器件进行布局摆放,其中键盘按照矩阵形式排列,我们所用的是16个键,按4×4矩阵进行排列,其中外部扩展及下载口及电源及串口等等器件应放置在PCB板边缘,在元件布局应按原理图的各个模块的具体分布进行,把每一模块的各器件尽量摆放在一起,并标注各个模块,再逐步调整,使所用PCB板面积尽量小,利用效率最大。
⑷﹑自动布线及手工改动
首先设计规则,主要是电线宽度,孔大小约束。
待手工布局结束后,进行自动布线,自动布线结束后,仔细检查布线效果,布线应遵循导线走钝角,线尽量走近路,尽量保证TopLayer层走横线,BottomLayer层走竖线。
然后去掉自动布线所产生的毛刺,修改走直角或锐角的连线,并使线程尽量短。
此过程中应逐个局部仔细检查修正。
修正结束后,可以对PCB添加泪滴焊盘,进行覆铜或放置汉字,防止实际硬件电路静电干扰。
PCB板见附录2。
⑸﹑设计规则检查
对已经布局布线的PCB图进行设计规则检查,对PCB图进行查错,以保证其正确无误。
⑹﹑观看3D图
单PCB图画好后,可以观看其3D效果图,以验证其布局布线合理,和提前知晓制成板后的效果。
PCB3D效果图见附录3
⑺﹑生成PCB报表
最后可以生成PCB报表,包括电路板状态信息报表,引脚信息报表,元件信息报表,网络分析信息报表等,以对板子有个清晰的认识。
1.3、编程训练:
(指导老师:
杨勇)
(一)熟悉keil软件的使用和仿真步骤
Keil集成开发软件基本操作
1、新建一个项目文件
2、首先点击KeiluVision2,进入uVision2界面。
点击工具栏Project选项中的NewProject,准备开始建立自己的项目
3、输入工程文件名称,并选择保存工程文件的目录。
4、为项目文件选择一个目标器件(如AT89C51),如图所示。
5、用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择“为目标‘目标1’设置选项”如下图所示。
6、在“为目标‘目标1’设置选项”中,点击“调试”菜单,在此菜单中可选择是使用硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的[设置]选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。
7、点击“文件/新建”创建源程序文件并输入程序代码。
8、在文本框中输入原程序
9、点击“文件/保存“对程序进行保存。
10、用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择添加文件到原代码组,如下图所示:
11、在弹出的添加文件框中,选择需要添加到项目中的文件。
12、点击编译连接的图标,对项目文件进行编译
13、点击“调试/启动/停止调试”进入调试界面
若要查看内存中的数据,点击“视图/存储器窗口”
(二)实训100例部分
LED显示
#include
sbitled=P3^2;
voiddelay_ms(unsignedcharx_ms)
{
unsignedchari;
while(x_ms--)
{
for(i=124;i>0;i--)
{
}
}
}
voidmain(void)
{
while
(1)
{
led=1;
delay_ms(100);
led=0;
delay_ms(100);
}
}3.78只数码管滚动显示单个数字
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
voidDelayMS(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
voidmain()
{
uchari,k=0x80;
while
(1)
{
for(i=0;i<8;i++)
{
P2=0xFF;
k=_crol_(k,1);
P0=DSY_CODE[i];
P2=k;
DelayMS(300);
}
}
}
3.88只数码管显示多个不同字符
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
voidDelayMS(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
voidmain()
{
uchark,m=0x80;
P0=0xff;
P2=0x00;
while
(1)
{
for(k=0;k<8;k++)
{
m=_crol_(m,1);
P2=m;
P0=DSY_CODE[k+1];
DelayMS
(2);
}
}
}
3.35定时器控制数码管动态显示
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF};
ucharcodeTable_OF_Digits[][8]=
{
{0,9,10,1,2,10,2,5},
{2,1,10,5,7,10,3,9}
};
uchari=0,j=0;
uintt=0;
voidmain()
{
P3=0x80;
TMOD=0x00;
TH0=(8192-4000)/32;
TL0=(8192-4000)%32;
IE=0x82;
TR0=1;
while
(1);
}
voidDSY_Show()interrupt1
{
TH0=(8192-4000)/32;
TL0=(8192-4000)%32;
P3=_crol_(P3,1);
P0=DSY_CODE[Table_OF_Digits[i][j]];
j=(j+1)%8;
if(++t!
=350)return;
t=0;
i=(i+1)%2;
}
3.42报警器和旋转灯
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitSPK=P3^7;
ucharFRQ=0x00;
voiddelayms(uintms)
{
uchari;
while(ms--)for(i=0;i<120;i++);
}
voidmain()
{
P2=0x00;
TMOD=0x11;
TH0=0x00;
TL0=0xFF;
IT0=0;
IE=0x8B;
IP=0x01;
TR0=0;
TR1=0;
while
(1)
{
FRQ++;
delayms
(1);
}
}
voidEX0_INT()interrupt0
{
TR0=!
TR0;
TR1=!
TR1;
if(P2==0x00)
P2=0xE0;
else
P2=0x00;
}
voidT0_INT()interrupt1
{
TH0=0xFE;
TL1=FRQ;
SPK=~SPK;
}
voidT1_INT()interrupt3
{
TH1=-45000/256;
TL1=-45000%256;
P2=_crol_(P2,1);
}
4.121602字符液晶滚动显示程序
#include"REG51.h"
#include"intrins.h"//包含此头文件可直接操作内核的寄存器以及一些定义好的宏
//thisfileforMCUI/Oportortheorther`shardwareconfig
//forLCDDisplay
//DefinefortheportusebyLCDDriver
sbitLCD_EP=P2^7;
sbitLCD_RW=P2^6;
sbitLCD_RS=P2^5;
#defineLCD_Data_BUS_OutP0
#defineLCD_Data_BUS_InP0
codeunsignedcharLCD_InitialCode[]={0x30,0x30,0x30,0x38,0x01,0x06,0x0c};
voidLCD_DataWrite(unsignedcharData)
{
unsignedintRead_Dat=0;
LCD_EP=0;//EP、RS端口为低,RW为高
LCD_RS=0;
LCD_RW=1;
do{
LCD_Data_BUS_In=0xff;
LCD_EP=1;
Read_Dat=LCD_Data_BUS_In&0x80;
LCD_EP=0;
}while(Read_Dat!
=0);//读状态字并判断是否可进行读写操作
LCD_RW=0;//EPRWtoLow
LCD_RS=1;//RSHight
LCD_Data_BUS_Out=Data;
LCD_EP=1;//EPtoHight
LCD_EP=0;//EPtolow
}
voidLCD_RegWrite(unsignedcharCommand)
{
unsignedintRead_Dat=0;
LCD_EP=0;//EP、RS置低,RW置高,表为读状态字
LCD_RS=0;
LCD_RW=1;
do{
LCD_Data_BUS_In=0xff;
LCD_EP=1;
Read_Dat=LCD_Data_BUS_In&0x80;
LCD_EP=0;
}while(Read_Dat!
=0);//读状态字并判断是否可进行读写操作
LCD_RW=0;//RWtoLow,表为写指令
LCD_Data_BUS_Out=Command;
LCD_EP=1;//EPtoHight
LCD_EP=0;
}
unsignedcharLCD_DataRead(void)
{
unsignedcharRead_Dat=0;
LCD_EP=0;//EP、RS置低,RW置高,表为读状态字
LCD_RS=0;
LCD_RW=1;
do{
LCD_Data_BUS_In=0xff;
LCD_EP=1;
Read_Dat=LCD_Data_BUS_In&0x80;
LCD_EP=0;
}while(Read_Dat!
=0);//读状态字并判断是否可进行读写操作
LCD_RS=1;//RS置高,表为读数据
LCD_EP=1;//EPtoHight
Read_Dat=LCD_Data_BUS_In;//读出数据
LCD_EP=0;
returnRead_Dat;
}
unsignedcharLCD_StatusRead(void)
{
unsignedcharRead_Dat=0;
LCD_EP=0;//EP、RS置低,RW置高,表为读状态字
LCD_RS=0;
LCD_RW=1;
LCD_Data_BUS_In=0xff;
LCD_EP=1;
Read_Dat=LCD_Data_BUS_In;//读状态字
LCD_EP=0;
returnRead_Dat;
}
include
#definelcdportP0
#defineH1
#defineL0
sbitlcdrs=P2^0;
sbitlcdrw=P2^1;
sbitlcden=P2^2;
voiddelay_ms(unsignedcharxms)
{
unsignedchari;
while(xms--){
for(i=125;i>0;i--){}}
}
voidlcd_write_data(unsignedchardat)
{
lcdrs=H;
lcdrw=L;
lcden=L;
lcdport=dat;
lcden=H;
delay_ms
(2);
lcden=L;
}
voidlcd_write_command(unsignedcharcom)
{}
voidlcd_init(void)
{}
验收:
用1602实现两行显示并闪烁
#include
#definelcdportP0
sbitlcdrs=P2^0;
sbitlcdrw=P2^1;
sbitlcden=P2^2;
voiddelay_ms(unsignedintms)
{
inti;
while(ms--)
{
for(i=125;i>0;i--)
{}
}
}
voidwrite_data(unsignedchardat)
{
lcdrs=1;
lcdrw=0;
lcden=0;
lcdport=dat;
lcden=1;
delay_ms
(2);
lcden=0;
}
voidwrite_command(unsignedcharc)
{
lcdrs=0;
lcdrw=0;
lcden=0;
lcdport=c;
lcden=1;
delay_ms
(2);
lcden=0;
}
voidlcd_busy()
{
do
{
lcdrs=0;
lcdrw=1;
lcden=0;
lcden=1;
delay_ms
(1);
}
while(lcdport&0x80);
lcden=0;
}
voidinit_lcd1602()
{
write_command(0x38);
write_command(0x01);
write_command(0x06);
write_command(0x0c);
}
voidmain()
{
init_lcd1602();
while
(1)
{
lcd_busy();
write_command(0x80+0x06);
write_data('w');
delay_ms(10);
write_command(0x80+0x07);
write_data('e');
delay_ms(10);
write_command(0x80+0x09);
write_data('a');
delay_ms(10);
write_command(0x80+0x0a);
write_data('r');
delay_ms(10);
write_command(0x80+0x0b);
write_data('e');
delay_ms(10);
write_command(0x80+0x47);
write_data('y');
delay_ms(10);
write_command(0x80+0x48);
write_data('o');
delay_ms(10);
write_command(0x80+0x49);
write_data('u');
delay_ms(10);
write_command(0x80+0x4a);
write_data('n');
delay_ms(10);
write_command(0x80+0x4b);
write_data('g');
delay_ms(10);
write_command(0x0c);
delay_ms(10);
write_command(0x08);
delay_ms(10);
}
}
第二阶段焊接电路板(指导老师:
王勇叶敦范)
2.1﹑单片机最小系统板焊接
1.地点:
信息楼405
2.目的:
完成电路板和JTAG下载线的硬件焊接
3.内容:
(1)首先对照元件清单和电路图,检查器件是否完整,型号﹑规格﹑安装是否
正确。
(2)然后将各器件根据焊接规则焊接到电路板上,其中对于器件的摆放方向和
位置需十分注意。
先焊发热器件电阻和较低的电容,再焊较大的器件
(3)而后,焊接JTAG线,JTAG线里面的芯片电阻,电阻电容均为贴片封装,
焊接时需小心谨慎,对于各条线引的焊接也需谨慎,按照其对应的顺序进行焊接,焊接结束后,自行组装。
第三阶段电路调试与程序设计
(指导老师:
陈分雄王勇叶敦范)
3.1﹑电路调试及功能测试
1.地点:
信息楼503
2.目的:
检查已经焊好的电路板和JTAG下载线是否无误
3.内容:
⑴﹑先用万用表检查电路板焊接是否都正确。
⑵﹑当检查没有短路,断路,虚焊,漏焊等错误后,给电路板供电,看二极管是否亮,是否有器件过热,有可能二极管或三极管会在焊接的过程中被烧坏,那样的话就要重新焊器件。
⑶﹑再用Keil软件给板子拷正确的程序,检查是否能按功能正常工作。
单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。
3.2﹑蜂鸣器调试
1.目的:
主要是检验程序能否下载到芯片,蜂鸣器能正常工作,掌握程序的编译下载到芯片的方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 电子 工程 实习 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)