电子产品设计制作Word文件下载.docx
《电子产品设计制作Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子产品设计制作Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
注:
实习日志“实习内容概述”要求手写,防止雷同抄袭,不允许打印。
《电子产品设计制作》报告
一、设计制作目的与意义
1.通过专项训练,验证所学的理论知识和实践技能,为进一步提高专业应用能力提供实践锻炼机会。
2.在指导教师和技术人员的指导下,通过实际项目的设计制作和操作,增强工程意识,并使工程技能得到综合训练,加深对专业或课程所学理论的认识和理解。
3.通过具体项目(简易电子琴、数字钟)的强化训练和针对性训练,借鉴CDIO工程教育模式,培养学生构思、设计、实现和调试电子产品设计研制的综合应用能力,以电子产品设计制作为载体,让学生以主动的、实践的、课程之间有机联系等方式学习电子产品的设计、制作和调试过程。
4.通过对设计制作过程的考核,培养学生观察问题、分析问题和解决问题的能力。
5.通过撰写设计制作报告,培养训练书写规范和文字表达能力。
二、设计制作内容
(一)八按键简易电子琴的设计制作
1.任务功能说明与方案论证
(1)任务功能说明
采用AT89C2051CPU,设计时钟电路和复位电路,手动复位,3V供电(2节电池);
PCB尺寸:
长×
宽=10cm×
6cm,单面板。
具有电子琴输入按键8个,包含1~7和高音1,一排布局,左边为低音。
具有手动复位键1个,播放音乐和弹奏切换功能按键1个,在PCB图上标注“复位”、“功能切换”字样。
有发光二极管显示程序运行状态(用1个发光二极管指示对应的1个按键,实际是8个发光二极管,只用1个代表)。
采用扬声器输出声音信号。
实现电子琴功能并且至少有一首存储歌曲(编程文件为.HEX文件,小于2k)。
(2)方案论证
电子琴有10个按键,一个作为模式转换按键,一个作为手动复位键,8个作为音符输入,另外实现用户存放的自动播放歌曲。
8个按键分别代表8个音符,包括中音段的全部音符,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。
实验中每按下一个琴键,单片机能够根据检测到的键盘的位置,使喇叭发出不同频率(音调)的声音,等到按键放开之后,声音停止。
然后再继续扫描,看是否有键按下。
如此循环,即可实现基本的琴键功能。
AT89C2051
时钟电路
复位电路
输入按键
扬声器
LED
图1简易电子琴电路组成原理框图
2.电路原理设计和PCB设计
(1)电路原理设计
图2复位电路
AT89C2051的复位是由外部的复位电路实现的复位是单片机的初始化操作,只需给AT89C2051的复位引脚RST加上大于两个机器周期(即24个时钟震荡周期)的高电平就可使AT89C2051复位。
如图3-2所示.当AT89C2051进行复位时,PC初始化为0000H,使AT89C2051单片机从程序储存器的0000H单元开始执行程序。
除了进入系统的正常初始化之外,当程序运行出错(如程序“跑飞”)或操作错误使系统处于“死锁”状态时,也需按复位键即RST脚为高电平,使AT89C2051摆脱“跑飞”或“死锁”状态而重新启动程序。
复位电路通常采用上电复位和按钮复位两种方式。
图3时钟电路
时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。
因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
AT89C2051单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。
按键电路
图4按键输入电路
利用所给键盘的1,2,3,4,5,6,7,8,9九个键,能够发出8个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。
前面的发音停止,转到后按的键的发音程序。
发出后按的键的音调。
声光电路
图5声光电路
驱动方式为独立端口驱动,占用P3.4端口。
用PNP管来放大,其中发射极接5V电源,集电极接扬声器,LED接P3.7,扬声器发声,LED频闪。
(2)PCB设计
图6带黄框和文字的PCB图
图7去掉黄框的PCB图
3.软件设计与调试说明
图8程序流程图
4.硬件调试和存在的问题
由于电路比较简单,焊接的也比较顺利,将硬件做好后,将生成的.HEX文件通过烧录器烧录到AT89C2051进行测试,效果比较满意,仿真时出现了一些问题,没有达到预想效果经检查是电路连接错误。
尝试了录音播放,没能实现。
(二)基于AT89C2051的智能数字电子钟设计
全日历计时。
12/24小时转换。
大、小月,润年,周,自动追踪。
具有时间校准功能开关K,按住开关2秒钟后进入校准时间状态及换档和退出,快速点触用于调整时间数值。
AT89C51
按键输入
驱动
位选
六位数码管
图9数字电子钟组成原理框图
2.电路原理图设计和PCB设计
图10复位电路
AT89C2051单片机的复位是由外部的复位电路来实现的。
上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。
上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。
为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。
上电自动复位是通过外部复位电路的电容充电来实现的。
只要VCC的上升时间不超过1ms,就可以实现自动上电复位。
图11时钟电路
数码管显示电路
图12智能数字电子钟数码管显示电路
显示部分主要器件为3只两位一体共阳极数码管,驱动采用PNP型三极管驱动,各端口配有限流电阻,驱动方式为动态扫描,占用P3.0~P3.5端口,段码由P1.0~P1.7输出。
冒号部分采用4个的红色发光二极管,驱动方式为独立端口P1.7驱动。
图13智能数字电子钟PCB
3.Proteus仿真说明
首先是软件调试,在单片机开发综合实验装置上进行硬件仿真来调试程序是否正确执行。
试运行后,根据时钟运行情况来做一些相应的修改,比如说,时钟显示不稳定,易乱跳,显示乱码,是由于单片机的运行与程序的执行不能同步进行造成的,如某些需要复位的地方单片机没有立即复位就执行下一操作,造成了单片机运行混乱,因此应该将程序做一些修改,尽量减少跳转指令的使用而采用调用子程序的方法来代替。
而在修改了程序之后,时钟的运行就稳定了很多。
其次是实物调试,测试线路确定无误时连接5V电源调试。
当连接到5V电源的时候,数码管显示模糊不清,亮度很小,这是由于单片机管脚的输出电流太小不能够完全驱动数码管,因此需要在P1的每个端口并联一个1K的电阻使数码管有足够的亮度来显示。
主要器件简介
本设计使用的是美国Atmel公司的AT89C51单片机[1-5],它作为控制系统的核心部件,除了具备数值计算功能外,还具有灵活强大的控制功能,以便实时检测系统的输入量和控制系统的输出量,实现自动控制。
LED数码管
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
动态显示驱动:
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"
a,b,c,d,e,f,g,dp"
的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。
三、设计制作总结
通过这次实训设计,我感觉收获了很多:
通过这次的单片机实训,我加深了对单片机系列知识及其系统的认识。
但从中体现到了个系统开发设计的过程,让我受益匪浅。
在这次的实训中,让我更进一步的提高了动手能力,也重新复习了一次单片机的程序编程能力,在这期间,让我更加深刻了体会到了编程的思路,加强了对编程能力的理解和对相应资料的查阅。
本次课程设计是用AT89C2051单片机CPU,遇到了不少困难。
通过在前期的程序编写和几天的上机调试,使我又获得了很多新的知识,因为前期编写程序时查了很多资料学到了很多知识,这几天的调试更时获得很新的知识,因为程序中又很多的错误,为了修改错误必须看书或向别人请教,在这个过程中无意识的获得了很多知识。
同时也使我对单片机更感兴趣了,这点我觉得很重要,因为兴趣是最好的老师,相信在以后的单片机相关的学习中会表现的更好。
本次设计,通过制作电子琴,对使用单片机设计简易电子琴进行了分析,并接受了基于单片机电子期硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大。
并且系统的了解了实时时钟的设计流程,尤其是硬、软件的设计方法,掌握了键盘显示电路的基本功能及编程方法,掌握了键盘电路和显示电路的一般原理,也进一步掌握了定时器的使用和中断处理器程序的编程方法。
开拓了思路,锻炼了实践动手能力,提高了分析问题,解决问题的能力,达到了本次课程设计的目的。
2.对本次实习的建议。
设计题目并不怎么新颖。
四、主要参考文献
[1]林海波,王秀艳.电子工艺实训基础[M].北京:
中国电力出版社,2009.7.
[2]林卫星.单片机应用系统的软硬件开发[J].工业控制计算机.2002,9,5-7.
[3]江志红.51单片机技术与应用系统开发案例精选[M].北京:
清华大学出版社,2008.12.123-156
[4]曾峰.印刷电路板(PCB)设计与制作[M].北京:
电子工业出版社,2005.8.234-256
附录1
附录2
#include<
reg2051.h>
#defineuintunsignedint
#defineucharunsignedchar
uintcodettable[]={64400,64524,
64580,64684,64777,64820,64898,64968,65030,
65058,65110,65157,65178,65217,65252,65283};
ucharcodejmszl[]={
0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,
0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,0xff};
sbitled=P3^7;
sbitbeep=P3^4;
sbitb=P3^2;
uchartimeh,timel,i;
ucharkeynum=90,temp,yj;
uintsoundT;
staticints=1;
voiddelay(uintz)
{uintx,y;
for(x=z;
x>
0;
x--)
for(y=19000;
y>
y--);
}
voiddelay1(uintz)
for(y=112;
voidsong()
{
uinttemp;
ucharjp;
//jpÊ
Ç
¼
ò
Æ
×
i=0;
while(jmszl[i]!
=0xff)
temp=jmszl[i];
jp=temp/16;
if(jp!
=0)
timeh=ttable[jp]/256;
timel=ttable[jp]%256;
else
TR0=0;
beep=1;
delay(temp%16);
delay1(8);
TR0=1;
i++;
voidkeytest()
temp=P1;
switch(temp)
case0x7f:
keynum=0;
break;
case0xbf:
keynum=1;
case0xdf:
keynum=2;
case0xef:
keynum=3;
case0xf7:
keynum=4;
case0xfb:
keynum=5;
case0xfd:
keynum=6;
case0xfe:
keynum=7;
case0xff:
keynum=9;
default:
voidintinit()
TMOD=0x01;
TH0=soundT/256;
TL0=soundT%256;
ET0=1;
EX0=1;
IT0=1;
EA=1;
P1=0xff;
//beep=0;
voidt0serv()interrupt1
TH0=timeh;
TL0=timel;
beep=~beep;
led=~led;
voidduan()interrupt0
if(b==0)
{delay1(20);
s=~s;
voidmain()
intinit();
while
(1)
if(s==1)
keytest();
if(keynum!
=9)
timeh=ttable[keynum]/256;
timel=ttable[keynum]%256;
song();
附录3
附录4
智能数字电子钟源程序
reg51.h>
sbitdula=P2^6;
sbitwela=P2^7;
sbitbeep=P2^3;
sbitms=P3^0;
sbitja=P3^1;
sbitjn=P3^2;
sbitqh=P3^3;
unsignedchars=8,f=30,m=00,msf=1,qhf=1,xz=0;
unsignedchara1,a0,b1,b0,c1,c0,j,k;
unsignedintpp;
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelay(unsignedchari)
for(j=i;
j>
j--)
for(k=125;
k>
k--);
voiddisplay(ucharshi2,ucharshi1,ucharfen2,ucharfen1,ucharmiao2,ucharmiao1)
dula=0;
P0=table[shi2];
dula=1;
wela=0;
P0=0xfe;
wela=1;
delay(5);
P0=table[shi1];
P0=0xfd;
P0=0x40;
P0=0xfb;
P0=table[fen2];
P0=0xf7;
P0=table[fen1];
P0=0xef;
P0=0xdf;
P0=table[miao2];
P0=0xbf;
P0=table[miao1];
P0=0x7f;
voidjsxs24()
if(pp==20)
{pp=0;
m++;
if(m==60)
m=0;
f++;
if(f==60)
f=0;
s++;
if(s==24){
s=0;
a0=s%10;
a1=s/10;
b0=f%10;
b1=f/10;
c0=m%10;
c1=m/10;
display(a1,a0,b1,b0,c1,c0);
voidjsxs12()
intt;
t=s;
t=t%12;
a0=t%10;
a1=t/10;
voidjsxs()
displays(a1,a0,b1,b0,c1,c0);
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
if(ms==1)
if(msf==1)
if(qh==1)
if(qhf==1)//24Ð
¡
Ê
±
Ö
jsxs24();
jsxs12();
/}
qhf=~qhf;
while(ms!
=1);
if(xz==0)
if(ja==1)
if(jn==1)
jsxs();
if(m==0)
{m=59;
while(ja!
{m--;
{if(m==59)
{m=0;
{m++;
elseif(xz==1)
{if(ja==1)
{if(jn==1)
{jsxs();
{if(f==0)
{f=59;
{f--;
{if(f==59)
{f=0;
{f++;
elseif(xz==2)
}//
if(s==0)
f=23;
{s--;
{if(s==23)
{s++;
xz=0;
{while(qh!
if(xz<
3)
xz++;
else{
msf=~msf;
voidtime0()interrupt1
{TH0=(65536-46080)/256;
pp++;