大学电子工程实习报告.doc

上传人:文库蛋蛋多 文档编号:3430654 上传时间:2023-03-13 格式:DOC 页数:40 大小:834KB
返回 下载 相关 举报
大学电子工程实习报告.doc_第1页
第1页 / 共40页
大学电子工程实习报告.doc_第2页
第2页 / 共40页
大学电子工程实习报告.doc_第3页
第3页 / 共40页
大学电子工程实习报告.doc_第4页
第4页 / 共40页
大学电子工程实习报告.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《大学电子工程实习报告.doc》由会员分享,可在线阅读,更多相关《大学电子工程实习报告.doc(40页珍藏版)》请在三一办公上搜索。

1、中国地质大学(武汉) 课 程: 电子工程实习报告 学 号: 班 级: 姓 名: 指导老师:陈分雄、叶敦范、罗大鹏、杨勇、王勇目 录第一阶段 软件使用与仿真31.1 单片机系统原理图绘制31.2 PCB制板31.3 编程训练4第二阶段 焊接电路板182.1单片机最小系统板焊接 18第三阶段 电路调试与程序设计183.1 电路调试及功能测试183.2 蜂鸣器调试193.3 串口通信调试 193.4 液晶显示调试193.5 数码管及键盘控制调试203.6 系统综合功能设计20附录21实习小结38第一阶段 软件使用与仿真1.1单片机系统原理图绘制(指导老师:罗大鹏)1.地点:信息楼5032.目的:熟练

2、掌握protel99的使用方法,绘制单片机最小系统原理图,且保证ERC校验无误,并生成网络报表3.内容:文件管理先新建设计数据库,再在数据库中新建各种文件,主要用到Schematic Document和PCB Document。在使用中学会及时保存原理图或PCB文件以及熟练文件的导入导出。protel的绘图方法 通过学习掌握绘图的一些方法。要对键盘上的快捷键熟练应用,比如:把原理图的放大Page UP,缩小Page Down,追踪鼠标视野Home,删除Delete,空格键转换元件以及撤销选择区域X-A等。元器件或区域的复制,粘贴,删除等。熟悉界面中的工作条功能。绘制原理图首先添加元件库,包括自

3、制元件和下载的元件库,加上protel自带的元件库。把需要用到的元件在自定义合适大小的图纸上合理摆布,再用导线把各器件连接起来,注意各电源及接地符号,节点,总线等的设置方法,使用绘图工具实现文字注释或其他注释。ERC校验待原理图绘制完毕,然后进行电气法则测试,即ERC校验,若产生错误,则根据错误提示对原电路图进行修改,直至通过ERC校验,原理图无误。修改元器件封装当ERC校验无错时,然后对照元件清单及PCB元件库,对每一个元器件封装进行修改,产生元件清单。修改器件封装,修改其属性中的footprint即可。修改完以后,再进行一次ERC校验,若出现错误,则根据错误提示修改,直至能通过ERC校验无

4、错误产生。生成网络报表待修改封装之后,并再次通过ERC校验无错误产生,生成网络报表。然后对照原电路图把网络报表仔细检查一遍,检查每一个器件与其他器件间的连接是否有误,及是否有元器件的丢失,检查VCC与GND的连接,是否全部连上。若有遗漏或错误,则返回修改,在进行ERC校验,生成网络报表,直至无遗漏和错误。此工作非常繁琐,需耐心和仔细对待。 但由于前些工作比较仔细所以原理图基本没有太大错误。原理图见附录1。1.2PCB制板1.地点:信息楼5032.目的:熟练掌握protel99的使用方法,绘制单片机最小系统原理图3.内容:新建PCB文件,并添加老师要求的PCB元件库。导入网络报表导入上一阶段产生

5、的网络报表,在导入过程中会进行错误检查,若产生错误,则需返回上一阶段,根据错误提示,修改元器件的封装等等,然后按步骤生成网络报表,再次导入网络报表,直至导入无错误。手工布局在PCB图纸上KeepOutLayer层放置线定义板宽,在导入网络报表无错误之后,然后执行,在将导入的各元器件进行布局摆放,其中键盘按照矩阵形式排列,我们所用的是16个键,按44矩阵进行排列,其中外部扩展及下载口及电源及串口等等器件应放置在PCB板边缘,在元件布局应按原理图的各个模块的具体分布进行,把每一模块的各器件尽量摆放在一起,并标注各个模块,再逐步调整,使所用PCB板面积尽量小,利用效率最大。自动布线及手工改动首先设计

6、规则,主要是电线宽度,孔大小约束。待手工布局结束后,进行自动布线,自动布线结束后,仔细检查布线效果,布线应遵循导线走钝角,线尽量走近路,尽量保证TopLayer层走横线,BottomLayer层走竖线。然后去掉自动布线所产生的毛刺,修改走直角或锐角的连线,并使线程尽量短。此过程中应逐个局部仔细检查修正。修正结束后,可以对PCB添加泪滴焊盘,进行覆铜或放置汉字,防止实际硬件电路静电干扰。 PCB板见附录2。设计规则检查对已经布局布线的PCB图进行设计规则检查,对PCB图进行查错,以保证其正确无误。观看3D图 单PCB图画好后,可以观看其3D效果图,以验证其布局布线合理,和提前知晓制成板后的效果。

7、 PCB3D效果图见附录3生成PCB报表最后可以生成PCB报表,包括电路板状态信息报表,引脚信息报表,元件信息报表,网络分析信息报表等,以对板子有个清晰的认识。1.3、编程训练:(指导老师:杨勇)(一 )熟悉keil软件的使用和仿真步骤Keil集成开发软件基本操作1、 新建一个项目文件2、 首先点击 Keil uVision2 ,进入uVision2界面。点击工具栏Project选项中的NewProject,准备开始建立自己的项目3、 输入工程文件名称,并选择保存工程文件的目录。 4、 为项目文件选择一个目标器件(如AT89C51),如图所示。 5、 用鼠标对项目工作区的目标1,点击右键在弹出

8、的菜单中选择“为目标目标1设置选项”如下图所示。 6、 在“为目标目标1设置选项”中,点击“调试”菜单,在此菜单中可选择是使用硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的设置选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。7、 点击“文件/新建”创建源程序文件并输入程序代码。8、 在文本框中输入原程序9、 点击“文件/保存“对程序进行保存。 10、 用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择添加文件到原代码组,如下图所示: 11、 在弹出的添加文件框中,选择需要添加到项目中的文件。 12、 点击编译连接的图标,对项目文件进行编译13、

9、 点击“调试/启动/停止调试”进入调试界面若要查看内存中的数据,点击“视图/存储器窗口” (二)实训100例部分LED显示#include sbit led=P32;void delay_ms(unsigned char x_ms)unsigned char i;while(x_ms-)for(i=124;i0;i-)void main(void)while(1)led=1;delay_ms(100);led=0;delay_ms(100);3.7 8只数码管滚动显示单个数字#include#include#define uchar unsigned char#define uint unsi

10、gned intuchar code DSY_CODE=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);void main()uchar i,k=0x80;while(1)for(i=0;i8;i+)P2=0xFF;k=_crol_(k,1);P0=DSY_CODEi;P2=k;DelayMS(300);3.8 8只数码管显示多个不同字符#include#include#define uchar unsigned char#defin

11、e uint unsigned intuchar code DSY_CODE=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);void main()uchar k,m=0x80;P0=0xff;P2=0x00;while(1)for(k=0;k8;k+)m=_crol_(m,1);P2=m;P0=DSY_CODEk+1;DelayMS(2);3.35 定时器控制数码管动态显示#include#include#define uchar

12、unsigned char#define uint unsigned intuchar code DSY_CODE=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF;uchar code Table_OF_Digits8=0,9,10,1,2,10,2,5,2,1,10,5,7,10,3,9;uchar i=0,j=0;uint t=0;void main()P3=0x80;TMOD=0x00;TH0=(8192-4000)/32;TL0=(8192-4000)%32;IE=0x82;TR0=1;while(1);void DSY_S

13、how() interrupt 1TH0=(8192-4000)/32;TL0=(8192-4000)%32;P3=_crol_(P3,1);P0=DSY_CODETable_OF_Digitsij;j=(j+1)%8;if(+t!=350) return;t=0;i=(i+1)%2;3.42 报警器和旋转灯#include#include#define uchar unsigned char#define uint unsigned intsbit SPK=P37;uchar FRQ=0x00;void delayms(uint ms)uchar i;while(ms-) for(i=0;i

14、120;i+);void main()P2=0x00;TMOD=0x11;TH0=0x00;TL0=0xFF;IT0=0;IE=0x8B;IP=0x01;TR0=0;TR1=0;while(1)FRQ+;delayms(1);void EX0_INT() interrupt 0TR0= !TR0;TR1= !TR1;if( P2=0x00)P2=0xE0;else P2=0x00;void T0_INT() interrupt 1TH0=0xFE;TL1=FRQ;SPK=SPK;void T1_INT() interrupt 3TH1=-45000/256;TL1=-45000%256;P2=

15、_crol_(P2,1);4.12 1602字符液晶滚动显示程序#include REG51.h#include intrins.h /包含此头文件可直接操作内核的寄存器以及一些定义好的宏/ this file for MCU I/O port or the orthers hardware config/ for LCD Display/ Define for the port use by LCD Driversbit LCD_EP=P27;sbit LCD_RW=P26;sbit LCD_RS=P25;#define LCD_Data_BUS_Out P0#define LCD_Data

16、_BUS_In P0code unsigned char LCD_InitialCode=0x30,0x30,0x30,0x38,0x01,0x06,0x0c;void LCD_DataWrite(unsigned char Data)unsigned int Read_Dat=0;LCD_EP = 0; /EP、RS端口为低,RW为高LCD_RS = 0;LCD_RW = 1;doLCD_Data_BUS_In = 0xff;LCD_EP = 1;Read_Dat = LCD_Data_BUS_In&0x80;LCD_EP = 0;while(Read_Dat!=0); /读状态字并判断是否

17、可进行读写操作LCD_RW = 0; /EP RW to LowLCD_RS = 1; /RS HightLCD_Data_BUS_Out = Data;LCD_EP = 1; /EP to HightLCD_EP = 0; /EP to lowvoid LCD_RegWrite(unsigned char Command)unsigned int Read_Dat=0;LCD_EP = 0; /EP、RS置低,RW置高,表为读状态字LCD_RS = 0;LCD_RW = 1;doLCD_Data_BUS_In = 0xff;LCD_EP = 1;Read_Dat = LCD_Data_BUS

18、_In&0x80;LCD_EP = 0;while(Read_Dat!=0); /读状态字并判断是否可进行读写操作LCD_RW = 0; /RW to Low,表为写指令LCD_Data_BUS_Out = Command;LCD_EP = 1; /EP to HightLCD_EP = 0;unsigned char LCD_DataRead(void)unsigned char Read_Dat=0;LCD_EP = 0; /EP、RS置低,RW置高,表为读状态字LCD_RS = 0;LCD_RW = 1;doLCD_Data_BUS_In = 0xff;LCD_EP = 1;Read_D

19、at = LCD_Data_BUS_In&0x80;LCD_EP = 0;while(Read_Dat!=0); /读状态字并判断是否可进行读写操作LCD_RS = 1; /RS置高,表为读数据LCD_EP = 1; /EP to HightRead_Dat = LCD_Data_BUS_In; /读出数据LCD_EP = 0;return Read_Dat;unsigned char LCD_StatusRead(void)unsigned char Read_Dat=0;LCD_EP = 0; /EP、RS置低,RW置高,表为读状态字LCD_RS = 0;LCD_RW = 1;LCD_Da

20、ta_BUS_In = 0xff;LCD_EP = 1;Read_Dat = LCD_Data_BUS_In; /读状态字LCD_EP = 0;return Read_Dat;include #define lcdport P0#define H 1#define L 0sbit lcdrs = P20;sbit lcdrw = P21;sbit lcden = P22;void delay_ms(unsigned char xms)unsigned char i;while(xms-)for(i=125;i0;i-)void lcd_write_data(unsigned char dat)

21、lcdrs = H;lcdrw = L;lcden = L;lcdport = dat;lcden = H;delay_ms(2);lcden = L;void lcd_write_command(unsigned char com)void lcd_init(void)验收:用1602实现两行显示并闪烁#include#define lcdport P0sbit lcdrs = P20;sbit lcdrw = P21;sbit lcden = P22;void delay_ms(unsigned int ms) int i; while(ms-) for(i=125;i0;i-) void

22、 write_data(unsigned char dat) lcdrs=1; lcdrw=0; lcden=0; lcdport=dat; lcden=1; delay_ms(2); lcden=0;void write_command(unsigned char c) lcdrs=0; lcdrw=0; lcden=0; lcdport=c; lcden=1; delay_ms(2); lcden=0;void lcd_busy() do lcdrs=0; lcdrw=1; lcden=0; lcden=1; delay_ms(1); while(lcdport&0x80); lcden=

23、0;void init_lcd1602() write_command(0x38); write_command(0x01); write_command(0x06); write_command(0x0c); void main() 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_dat

24、a(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

25、_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.地点:信息楼4052.目的:完成电路板和JTAG下载线的硬件焊接3.内容:(1)首先对照元件清单和电路图,检查器件是否完整,型号规格安装是否正确。(2)然后将各器件根据焊接规

26、则焊接到电路板上,其中对于器件的摆放方向和位置需十分注意。先焊发热器件电阻和较低的电容,再焊较大的器件(3)而后,焊接JTAG线,JTAG线里面的芯片电阻,电阻电容均为贴片封装,焊接时需小心谨慎,对于各条线引的焊接也需谨慎,按照其对应的顺序进行焊接,焊接结束后,自行组装。第三阶段 电路调试与程序设计 (指导老师:陈分雄 王勇 叶敦范 )3.1电路调试及功能测试1.地点:信息楼5032.目的:检查已经焊好的电路板和JTAG下载线是否无误3.内容:先用万用表检查电路板焊接是否都正确。当检查没有短路,断路,虚焊,漏焊等错误后,给电路板供电,看二极管是否亮,是否有器件过热,有可能二极管或三极管会在焊接

27、的过程中被烧坏,那样的话就要重新焊器件。再用Keil软件给板子拷正确的程序,检查是否能按功能正常工作。单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。3.2蜂鸣器调试1.目的:主要是检验程序能否下载到芯片,蜂鸣器能正常工作,掌握程序的编译下载到芯片的方法。2.内容:在Keil环境中用C语言编写简单是蜂鸣器程序或音乐播放程序。对Keil软件和程序下载软件进行相关配置设置。将编译产生的hex文件下载到芯片,检测其工作是否正常,若工作不正常,则从软件及硬件两方面进行检查。 有用的报警声程序见附录33.3串口通信调试1.地点:信息楼5032.目的:实现计算机与单片

28、机之间相互通讯功能3.内容:将编写的串口调试程序经过编译,下载到单片机。串口实现功能为在计算机上能显示单片机的输出。检测串口是否能正常工作,此阶段需用到串口软件及串口线。若不能正常工作,则需从软件和硬件两方面进行检查。正确功能为在电脑超级终端不停显示输出内容,与预期相同,工作正常。串口调试程序见附录43.4液晶显示调试1.地点:信息楼5032.目的:保证液晶屏LCD能正常工作,输出效果有所扩展。3.内容:在编写程序前,认真阅读LCD液晶屏资料,掌握LCD1602及1602液晶模块数据手册(中文)中的液晶的使用和编程方法,了解其工作时序,及各个指令及初始化。对照电路图中LCD连接情况,编写LCD

29、1602移动显示程序,经编译下载至单片机,检测输出,若无输出,则调整电位器,若仍无输出则从软件及硬件两方面进行检查,找出错误原因,直至液晶屏能正常工作。在程序编写时应时刻注意各个指令间的延时控制。以保证液晶屏呈现效果移动循环显示,液晶屏工作正常。之后也可用LCD做数字钟,这将在综合程序里被用到,液晶移屏显示程序见附录53.5数码管及键盘控制调试1.地点:信息楼5032.目的:保证数码管能正常显示,以及按键能控制数码管的显示3.内容:在编写程序前,应认真阅读LED和ZLG7289A资料,了解和掌握其工作时序,及各个指令及初始化,在程序编写时应时刻注意各个指令间的延时控制。对照电路图中ZLG728

30、9模块的连接情况,编写程序,经过编译,然后下载到单片机,检测展现效果,是否与程序预期相同。实现效果逐个闪烁,逐个消隐,键盘控制改变数据并移动,与预期相同,工作状态正常。再利用单片机内部时钟中断,编写数码管时钟程序,使数码管能够实现计时功能,键盘能够控制时分秒。数码管显示及键盘控制程序见附录63.6系统综合功能设计1.地点:信息楼5032.目的:综合单片机开发板上的各个功能模块,以实现一个完整的系统功能3.内容:根据前面对各模块功能的理解和程序编写,结合各个模块实现一个整体系统,把各模块功能综合起来。设计一综合系统。系统设计程序见附录7。验收程序设计:仿手机按键 如图功能概述:1,LED:12个

31、按键仿手机按键(按“按键”一下LED显示对应的数字,按两下显示后面的字母,以此类推2,蜂鸣器:有按键按下则响一下3,数码管部分:0,1位置显示按下的按键的对应键值附录附录1:附录2:附录3:#include #define uchar unsigned charsbit BUZZ=P33;void delay()uchar i;for(i=0;i1000;i+)main()while(1)BUZZ=0;delay();BUZZ=1;delay();附录4:#include #include #ifdef MONITOR51 char code reserve 3 _at_ 0x23;#endi

32、fvoid main (void) unsigned int i=100;#ifndef MONITOR51SCON = 0x50;TMOD |= 0x20; TH1 = 0xE6; TR1 = 1; TI = 1; #endifwhile (i-) printf(%d,i); printf (Hello everyonen); while(1);附录5:#include unsigned char codedispcode1=happy birthdy!; /要显示的字符串unsigned char codedispcode2=happy everyday!;unsigned char i,

33、j,k,l;sbit RS=P20; /IO口定义sbit RW=P21;sbit E=P22;void delay() /延时函数 for(l=0;l=100;l+);void LCD_cmd(unsigned char cmd)/写指令函数P0=cmd;RS=0;RW=0;E=0;delay();E=1;void LCD_dat(unsigned char dat) /写数据函数 P0=dat;RS=1;RW=0;E=0;delay();E=1;void LCD_table(unsigned char table,int n) /写字符串函数int i=0;for(i=0;in;i+)LC

34、D_dat(tablei);void initializtion() /初始化函数LCD_cmd(0x01); LCD_cmd(0x38); LCD_cmd(0x0f); LCD_cmd(0x06);void main() initializtion(); LCD_cmd(0x80); LCD_table(dispcode1 ,16); LCD_cmd(0xc0); LCD_table(dispcode2 ,16);附录6: #includesbit CS=P10; /IO定义sbit CLK=P11;sbit DIO=P12;sbit INT=P32;void delay(unsigned

35、int n)while(n-); void write(char dat)int t=8;doDIO= (bit)(dat & 0x80);dat=1; CLK=1;delay(30);CLK=0; delay(30);while(-t!=0) ;char read() char dat; int t=8; DIO=1; do CLK = 1;delay(50); dat 2 ) mod = 2;d1 = ModDatmod;x &= 0x07;d1 |= x;d2 = dat & 0x7F;if ( dp ) d2 |= 0x80;cmd_dat(d1,d2); /下载数据并且按方式0 进行

36、译码char key() /读按键值的函数char key;CS = 0;delay(200);write(0x15);delay(200);key = read();CS = 1;delay(100);return key;void keydisp() /数码管显示按键的函数char k,dat;char i=150;while(i)if ( INT = 0 ) /有键按下k = key();switch(k)case 10:cmd_dat(0x88,0);break;/闪烁 case 11:cmd_dat(0x88,0xff);break;/ 去闪烁case 12:cmd(0xa1);br

37、eak;/ 右移case 13:cmd(0xa0);break;/ 左移case 14:cmd_dat(0x98,0xaa);break;/ 消影case 15:cmd_dat(0x98,0xff);break;/ 显示default: cmd(0xa2); Download(1,3,0,k); /显示09 while ( !INT ); i-=1; void init()/初始化函数unsigned char x;CS = 1;CLK = 0;DIO = 1;INT = 1;for ( x=0; x8; x+ ) /点亮所有数码管/Download(1,x,1,8); void main()init();cmd(0xa4);keydisp();/调用函数以在数码管上显示按键值while(1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号