生产实习报告2Word下载.docx

上传人:b****6 文档编号:19212412 上传时间:2023-01-04 格式:DOCX 页数:22 大小:157.56KB
下载 相关 举报
生产实习报告2Word下载.docx_第1页
第1页 / 共22页
生产实习报告2Word下载.docx_第2页
第2页 / 共22页
生产实习报告2Word下载.docx_第3页
第3页 / 共22页
生产实习报告2Word下载.docx_第4页
第4页 / 共22页
生产实习报告2Word下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

生产实习报告2Word下载.docx

《生产实习报告2Word下载.docx》由会员分享,可在线阅读,更多相关《生产实习报告2Word下载.docx(22页珍藏版)》请在冰豆网上搜索。

生产实习报告2Word下载.docx

晶振通常选用6MHZ、12MHZ或24MHZ。

内部振荡方式如图3-3所示。

图中电容C1、C2起稳定振荡频率、快速起振的作用。

电容值一般为5~30pF。

内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。

外部振荡方式是把已有的时钟信号引入单片机内。

这种方式适宜用来使单片机的时钟与外部信号保持一致。

外部振荡方式电路如图3-4所示。

对HMOS的单片机(8031,8031AH等),外部时钟信号由XTAL2引入;

对于CHMOS的单片机(8XCXX),外部时钟信号由XTAL1引入。

图3-3内部振荡

图3-4外部振荡

2.4信号产生电路

DAC0808简介:

DAC0808是八位电流输出型D/A转换器件,由4脚输出转换电流,其简化电路图及引脚结构如图3-7所示。

VREF为参考电源,VEE负电压供电;

D0是高数据位(MSB),D7才是地数据位(LSB)。

DAC0808的电源极性:

VCC=+5V,VEE=-15V,VREF=+15V。

D0~D7是数据输入端,I0是电流输出端,COMP是接电容进行补偿。

在单片机应用系统中通常需要的是电压信号,电流信号与电压信号之间的转换可由运算放大器实现。

DAC0808不带锁存器,所以在使用时必须加一个74LS373进行数据锁存。

图3-7DAC0808简化电路框图和管脚排列

工作原理:

本系统由VREF提供参考电压,相应参考电流为I=VREF/R1。

电容C4提供补偿,OUT输出电流,经过LM324运算放大器转换成电压。

所以输出电压:

=5K

(3—5)

根据DAC0808的特性设计出本系统的D/A转换电路如图3-8所示。

图3-8系统D/A实现

2.3显示电路

本机显示采用软件译码动态显示,系统显示电路如图3-1所示。

采用软件译码动态显示的理由如下:

1)如果用静态显示,单片机的接口资源肯定不够用,那么还要进行接口的扩展,增加了系统的复杂度;

2)如果要制成印刷线路板,得占相当大一块面积;

3)另外,采用动态显示,可以明显的降低功耗,因为每一时刻只有一个LED发光,其功耗为静态显示的1/8。

一个LED最大电流为120mA,如用静态显示,8个LED就耗电流960mA综上分析,采用动态显示才是最经济的方案。

在显示的时候,只要把显示的字码输送到P2口,再经过74LS373进行数据锁存,P3口作为位选控制信号。

由于采用的是共阴极数码管,当需要显示哪一位的时候,只要在相应的位选控制信号输出低电平就行。

例如,要在第一个数码管显示P,那么在P2口就要输出73H字段码,同时P3口输出FEH位选码。

2.4键盘电路

工作原理如下:

1.检测键盘上是否有键按下:

将行线送入低电平,列线送入高电平。

读入P1口的状态来判别。

其具体过程如下:

P1口输出0FH,即所有行线置成高电平,所有列线置成低电平,然后将P1口状态读入与0FH比较。

如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为1。

2.识别键盘中哪一个键按下:

确认有键按下后,保存行扫描时有键按下时的状态X。

P1口输出F0H,进行列扫描,保存列扫描状态Y,取出键值Z=X|Y.例如第一行第一列有键按下,那么行扫描读入的状态为00001110,列扫描读入的状态为11100000,最后键值Z=11101110=EEH,然后转去执行相应的服务程序。

3系统的软件设计

3.1主程序(见附录2)

3.2信号产生

3.2.1方波产生

方波发生程序运用延时的方法实现,只用一个主程序即可,因为产生一个方波只需要高低两个数,所以程序比较简单。

要给一个频率,再计算所需的延时即可。

实现方波的程序如下:

elseif(wave_choice==3)//方波

{

k=zk*256/100;

d++;

if(d<

=k)

P0=0x00;

}

else

P0=0xff;

3.2.2锯齿波产生

锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。

适当选择循环的时间,可以得到不同周期的锯齿波。

锯齿波发生原理与方波类似,只是高低两个延时的常数不同,所以用延时法,来产生锯齿波。

elseif(wave_choice==4)//锯齿波

if(e<

=255)

P0=255-e;

else

P0=0;

e++;

3.2.3三角波产生

可直接通过如下程序段实现。

elseif(wave_choice==2)//三角波

if(c<

=128)

P0=c;

P0=255-c;

c++;

3.2.4正弦波产生

#include<

math.h>

main()

{

intn,i=0,j,k;

floaty=0,a=3.1415926,b=0,c=2.5000,d=0;

for(n=0;

n<

=64;

n++)

{

y=2.5*sin(a*n/128)+2.5;

b=y;

//b,y为当前幅度值

d=b-c;

//d为递增率

j=d/0.0196;

//j为数字递增率,0.0196为δ

k=128+j;

//k为数字量

printf(“%d,%f,%f,%d,%d\n”,i,y,d,j,k);

i++;

}

3.3键盘扫描

键盘扫描流程图如下:

键盘扫描源程序如下:

voidjudge(void)

{

unsignedcharX,Y,Z;

P1=0xff;

P1=0x0f;

//先对P1置数行扫描

if(P1!

=0x0f)//判断是否有键按下

delay10ms();

//延时,软件去干扰

if(P1!

=0x0f)//确认按键按下X=P1;

X=P1;

//保存行扫描时有键按下时状态

P1=0xf0;

//列扫描

Y=P1;

//保存列扫描时有键按下时状态

Z=X|Y;

//取出键值

switch(Z)//判断键值(那一个键按下)

{

case0x7d:

key1();

break;

case0xee:

key2();

//对键值赋值

case0xde:

key3();

case0xbe:

key4();

case0x7e:

key5();

case0xed:

key6();

case0xdd:

key7();

case0xbd:

key8();

}

3.5键盘处理

/*1键选择发波类型,1为正弦波,2为三角波,3为方波*/

voidkey1(void)

if(wave_choice<

4)

wave_choice=wave_choice+1;

{

wave_choice=1;

4系统的测试

在调试过程中,会有各种各样的问题,出现问题是,可以从两方面入手,一个是硬件方面,看原件是否焊接正确,是否存在虚焊;

另一个方面就是从软件入手,看程序中是否从在错误。

5总结

单片机控制多功能信号发生器可以用于“单片机技术”的教学实践,也可以用于实验信号的产生。

其比较典型的接口电路设计也为实际应用提供参考。

该仪器的研制既解决了实验教学的需求,也节约了实验设备投资,降低了实验成本。

经过进一步完善后,可由学生利用课程设计的机会,亲自动手制作,这样还可以进一步降低成本,同时极大地提高了学生的动手能力,是一件一举多得的好事。

随着科学技术的不断发展,以及实验教学要求的不断更新,要求我们开发的应用系统具有良好的可扩充性和更新能力,作为一名技术人员,应时刻跟踪科技发展的步伐,不断丰富专业知识,不断完善我们开发的系统。

参考文献

[1]周润景等编著.Proteus在MCS-51&

ARM7系统中的应用百例:

电子工业出版社,2006

[2]杨宁编著.单片机与控制技术.北京:

北京航空航天大学出版社,2005

[3]李朝青.单片机原理及接口技术[M].北京:

附录1原理图

1、系统总体结构框图设计:

2、初始化流程图:

3、信号发生器电路图:

附录2源程序清单

#include<

reg52.h>

#defineucharunsignedchar

ucharcodenumber_tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f};

//0---9数字共阴极

ucharcodeinit_tab[8]={0X73,0x73,0x73,0x76,0x79,0x38,0x38,

0x3f};

//PPP.HELLO共阴极

ucharcodeto_sin[256]=

{0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,

0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,

0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,

0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,

0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,

0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,

0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,

0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,

0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,

0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,

0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,

0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,

0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,

0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,

0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,

0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,

0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};

//正弦波数据

ucharb=0,c=0,d=0,e=0,i,k,tl,th;

intww=0,qw=0,bw=9,sw=8,gw=3,zkgw=0,zksw=5;

//ww为万位数字,qw为千位数字,bw为百位数字,

//sw为十位数字,gw为个位数字,zkgw为占空比个位数字,zksw为占空比十位数字

intt,f,m,wave_choice=1,zk=50;

//t为时间变量,f为频率变量,choice为波形类型选择变量,zk为占空比变量,默认占空比为50%

voiddelay10ms()//延时10ms程序

unsignedchari,j;

for(i=10;

i>

0;

i--)

for(j=120;

j>

0;

j--);

}

voidchushihua(void)//初始化显示PPP.HELLO

P3=0xfe;

P2=init_tab[0];

for(i=0;

i<

=60;

i++);

P3=0xfd;

P2=init_tab[1];

P3=0xfb;

P2=init_tab[2];

//小数点显示

P2=0x80;

P3=0xf7;

P2=init_tab[3];

P3=0xef;

P2=init_tab[4];

for(i=0;

i<

=60;

i++);

P3=0xdf;

P2=init_tab[5];

P3=0xbf;

P2=init_tab[6];

P3=0x7f;

P2=init_tab[7];

/*频率个位调整*/

voidkey2(void)

if(gw<

9)

gw=gw+1;

gw=0;

/*频率十位调整*/

voidkey3(void)

if(sw<

9)

sw=sw+1;

sw=0;

/*频率百位调整*/

voidkey4(void)

if(bw<

bw=bw+1;

bw=0;

/*频率千位调整*/

voidkey5(void)

if(qw<

qw=qw+1;

qw=0;

/*频率万位调整*/

voidkey6(void)

if(ww<

5)

ww=ww+1;

ww=0;

/*方波占空比加大*/

voidkey7(void)

if(zk<

100)

zk=zk+1;

zk=0;

/*方波占空比减小*/

voidkey8(void)

if(zk>

=1)

zk=zk-1;

/*计算显示数字*/

voidjisuan(void)

TR0=0;

//关闭定时器

f=100000*ww+1000*qw+100*bw+10*sw+gw;

t=1000000/f;

th=-t/256;

tl=-t%256;

ww=f/10000;

f=f%10000;

qw=f/1000;

f=f%1000;

bw=f/100;

f=f%100;

sw=f/10;

gw=f%10;

zkgw=zk%10;

zksw=zk/10;

TR0=1;

/*显示*/

voiddisplay(void)

P2=number_tab[wave_choice];

//小数点显示

P2=number_tab[ww];

P2=number_tab[qw];

P2=number_tab[bw];

P2=number_tab[sw];

P2=number_tab[gw];

if(wave_choice==3)

P2=number_tab[zkgw];

P2=number_tab[zksw];

P2=0x80;

/*键盘扫描*/

//先对P1置数行扫描

voidmain(void)//主函数

intn;

for(n=0;

n<

500;

n++)

chushihua();

TMOD=0X01;

tl=-t%156;

TH0=th;

TL0=tl;

ET0=1;

EA=1;

while

(1)

jisuan();

=50;

display();

judge();

//键盘扫描

voidtime0_int(void)interrupt1//

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

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1