课程设计报告.docx
《课程设计报告.docx》由会员分享,可在线阅读,更多相关《课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
课程设计报告
《单片机原理与应用》
课程设计报告
专业:
通信工程
班级:
08级一班
姓名:
李文强
学号:
200800800106
二零一零年七月十三日
一、设计题目:
单片机数字时钟设计
二,实验所需元件
名称
描述
位号
数量(每套)
AT89S51
Microcontroller
U0
1
MAX232CPE
+5VPoweredRS-232Driver/Receiver
U1
1
AT93C46
1KbSerialEEPROM
U2
1
TLC549
8BitSerialADC
U3
1
TLC5615
10BitSerialDAC
U4
1
74HC244
OctalBusBuffer
U100
1
22.1184MHz
CystalOscillostor
X1
1
Buzzer
Buzzer
Buzzer
1
0.1uF
C1,C2,C3,C4,C5,C9
6
Capacitor
18p
C6,C7
2
10uF
C8
1
Bi-PolarCapacitor
10uF
C111
1
330R
R11,R13,R15,R17,R19,R20,R21,R22,R23,R24,R25,R26,R27
13
1/4WResistor
10K
R30,R31,R10,R12,R14,R16,R18
7
4.7k
R101,R210,R244,R7,R28,R29,R228,R229
8
100R
R104,R105,R106,R108
4
1N4148
Diode
D1
1
Digitron
4DigitronCommonAnode
DS1,DS2,DS3,DS4,DS5,DS6,DS7,DS8,POWER
9
FUSE
Fuse
F1
1
USB-BConnector
RightAngle,Thru-Hole,BType
J1
1
PWR2.5
LowVoltagePowerSupplyConnector
J111
1
DB25/F
DB25Connector
J100
1
DB9/F
RS232DB9Connector
CN1
1
SW
Pushbutton
K1,K2,K3,K4,RST
5
LED_Array
4LEDArrary
LED1
1
Header8
Header,8-Pin2.54
P0,P1,P2
3
Header5
Header,5-Pin2.54
P3
1
Header2
Header,2-Pin2.54
P5',J2,J3,J4
4
JTAG10
IDC10PIN2.54
P6
1
S9012
Q1,Q6,Q2,Q3,Q222,Q333
6
Transistor
二、可提供的主要电子元器件3,设计过程
一硬件的装配与焊接:
1)实验的设备与器件
单片机开发板MCS51Lite一套、AT89S51芯片一块、PC机一台(含有单片机开发系统软件)、电烙铁、万用表、+5V电源。
2)实物装配焊接自制时实验电路板,需要单片机芯片内部工作原理的知识、封装知识,清楚的知道每一个引脚的功能,还需要数码管、按钮、排电阻、三端稳压器、二极管、电容、电阻、钮子开关等元件的知识,首先画电路图,然后买元件,再画电路板。
但本次实验开发板电路都已设计好,只剩下向上焊元件即可。
就只剩下焊接的问题了。
焊接起来有一定难度,方法如下:
首先在焊盘上涂上松香水,在松香水未干的情况下,将芯片放在焊盘上,注意芯片第一引脚的位置,并使引脚与焊盘对齐,将擦干净的电烙铁(不能有任何焊锡)接触引脚,引脚只要一热,焊盘上的焊锡就自动将引脚焊住了,千万注意电烙铁上不能有焊锡,焊接时最好配备一个放大镜。
焊接电路板时,每一个元件都要核对参数,可以用万用表测量的元件一定要测量。
3)焊接方法
a.在焊接之前先在焊盘上涂上助焊剂,用烙铁处理一遍,以免焊盘镀锡不良或被氧化,造成不好焊,芯片则一般不需处理。
b将元件安在对应的位置,并规定好。
c开始焊接所有的引脚时,应在烙铁尖上加上焊锡,将所有的引脚涂上焊剂使引脚保持湿润。
用烙铁尖接触芯片每个引脚的末端,直到看见焊锡流入引脚。
在焊接时要保持烙铁尖与被焊引脚并行,防止因焊锡过量发生搭接。
d.焊完所有的引脚后,。
在需要的地方吸掉多余的焊锡,以消除任何短路和搭接。
最后用镊子检查是否有虚焊,检查完成后,从电路板上清除焊剂,将硬毛刷浸上酒精沿引脚方向仔细擦拭,直到焊剂消失为止。
三开发板测试(DemoCode)
遵循以下步骤对开发套件上的单片机进行编程与测试。
1、在断电的状态下使用10PINIDC电缆连接开发板右下角的P102和左侧的P4JTAG接口
2、在断电的状态下将并口延长电缆连接到开发板下方的并口插座上
3、打开开发板电源
4、打开ISPlay软件,找到DemoCode目录下MCS51_Lite_Demo.hex文件,将其下载到单片机
5、断开电源,断开P102与P4的10PIN连接线,使用串口电缆连接计算机与开发板
6、在计算机上打开串口调试工具
7、打开开发板电源,这是可以看到DemoCode的运行情况如图11所示
图11DemoCode运行状态
8、在发送输入框中输入相应的测试项目序号即可对相应模块进行测试。
也可以直接选择1,对开发板的所有模块进行测试。
aLED测试信息
在发送输入框中输入2,并点击手动发送按钮,即可将输入框输入的‘2’通过串口发送给单片机。
单片机接收到命令‘2’后,会启动LED测试代码,这时会看到LED灯在闪烁,同时,串口调试助手会有如下信息显示,当测试完成后,会重新出现菜单。
图12LEDTesting
b蜂鸣器测试
在发送输入框输入‘3’,并点击手动发送按钮,会启动蜂鸣器测试程序,开发板的蜂鸣器会发出一长两短的蜂鸣声。
cADDA测试
在发送输入框输入‘4’,并点击手动发送按钮对AD和DA进行测试,进行测试前,需要先把电路板的AOUT(DA输出)与AIN(AD输入)相连,测试程序会循环对DA输出增加电压,这时AD相应的会测得不断增加的值,测试结果如图13所示。
图13ADDATesting
dE2PROM(93C46)测试
在发送输入框输入‘5’,并点击手动发送按钮,启动E2PROM的测试程序。
程序会在地址为12的地方写入一个数(初始为0,每次测试会自动加1)。
随后读出这个数,并且输出测试结果。
正确信息如图14所示。
图14E2PROMTesting
e按键测试
在发送输入框输入‘6’,并点击手动发送按钮,进行按键测试。
按键测试开始后会提示按任意键,然后按下某一个键后会弹出相应的键值并返回到主菜单。
图15KeyTesting
f数码管测试
在发送输入框输入‘7’,并点击手动发送按钮,进行数码管的测试。
测试开始后,数码管上的显示数字开始变化,串口调试信息会不断显示当前数码管的所显示的数字。
按以上过程进行调试,可以测得开发板能正常工作
4.课程设计报告内容:
4.1单片机数字时钟的组成框图及其工作原理:
4.2单片机数字时钟实物图见图
4.3数字时钟的组成框图见图。
4.4单片机数字时钟最小系统硬件电路原理图。
。
五
(1)主程序流程图及源程序代码:
(2)源程序代码:
#include
#defineucharunsignedchar
codeucharLED[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xaf,0xbf};//共阳段码
//0123456789abcdef熄灭r-
sbita1=P1^0;
sbita2=P1^1;
sbita3=P2^3;
sbita4=P2^6;
sbita5=P2^0;
sbitk1=P3^2;
sbitk2=P3^3;
sbitk3=P3^4;
sbitk4=P3^5;
ucharH=0,M=0,S=0;
uchart=1,t0=0;
bittt=1;
uchari,MM=0,SS=0;
voiddelays(uchartt)
{
uchari,j,k;
for(i=1;i<=tt;i++)
for(k=0;k<=5;k++)
{
j=150;
while(j)
j--;
}
}
voidmain()
{
uchari;
while
(1)
{
if(k1==0)
{
delays(2000);
if(k1==0)
{
t0=1;
while(((t0==1)||(t0==2)||(t0==3))&&(t==1))
{
a5=0;
switch(t0)
{
case1:
P0=0xfd;break;
case2:
P0=0x7f;break;
case3:
P0=0xbf;break;
}
if(k2==0)
{
delays(10);
if(k2==0){t=2;a5=1;}
}
if(k3==0)
{
delays(10);
if(k3==0){t=3;a5=1;}
}
if(k4==0)
{
delays(10);
if(k4==0){t=1;t0=0;a5=1;}
}
if(k1==0)
{
delays(2000);
if(k1==0)
{
t0++;
if(t0==4)t0=0;
}
}
}
}
}
if((t==1)&&(t0==0))//正常运行
{
for(i=0;i<20;i++)
{
a1=0;
if(H/10==0)P0=0xff;
elseP0=LED[H/10];
delays(5);
a1=1;
a2=0;
P0=LED[H%10]-0x80;
delays(5);
a2=1;
a3=0;
if(M/10==0)P0=0xff;
elseP0=LED[M/10];
delays(5);
a3=1;
a4=0;
P0=LED[M%10];
delays(5);
a4=1;
a5=0;
P0=0xfe;
delays(5);
a5=1;
}
for(i=0;i<20;i++)
{
a1=0;
if(H/10==0)P0=0xff;
elseP0=LED[H/10];
delays(5);
a1=1;
a2=0;
P0=LED[H%10]-0x80;
delays(5);
a2=1;
a3=0;
if(M/10==0)P0=0xff;
elseP0=LED[M/10];
delays(5);
a3=1;
a4=0;
P0=LED[M%10];
delays(5);
a4=1;
a5=1;
P0=0xfe;
delays(5);
a5=1;
}
S++;
if(S==60)
{
S=0;
M++;
if(M==60)
{
M=0;
H++;
if(H==24)H=0;
}
}
}
if((t==2)&&(t0==1))//向上调时针
{
H++;
if(H==24)H=0;
while(t==2)
{
for(i=0;i<20;i++)
{
a1=0;
if(H/10==0)P0=0xff;
elseP0=LED[H/10];
delays(5);
a1=1;
a2=0;
P0=LED[H%10]-0x80;
delays(5);
a2=1;
a3=0;
if(M/10==0)P0=0xff;
elseP0=LED[M/10];
delays(5);
a3=1;
a4=0;
P0=LED[M%10];
delays(5);
a4=1;
}
delays(400);
if(k2==0)
{
delays(10);
if(k2==0)
{
H++;
if(H==24)H=0;
}
}
if(k3==0)
{
delays(10);
if(k3==0)t=3;
}
if(k4==0)
{
delays(10);
if(k4==0){t=1;t0=0;}
}
}
}
if((t==3)&&(t0==1))//向下调时针
{
H--;
if(H==0)H=23;
while(t==3)
{
for(i=0;i<20;i++)
{
a1=0;
if(H/10==0)P0=0xff;
elseP0=LED[H/10];
delays(5);
a1=1;
a2=0;
P0=LED[H%10]-0x80;
delays(5);
a2=1;
a3=0;
if(M/10==0)P0=0xff;
elseP0=LED[M/10];
delays(5);
a3=1;
a4=0;
P0=LED[M%10];
delays(5);
a4=1;
}
delays(400);
if(k3==0)
{
delays(10);
if(k3==0)
{
H--;
if(H==0)H=23;
}
}
if(k2==0)
{
delays(10);
if(k2==0)t=2;
}
if(k4==0)
{
delays(10);
if(k4==0){t=1;t0=0;}
}
}
}
if((t==2)&&(t0==2))//向上调分针
{
M++;
if(M==60)M=0;
while(t==2)
{
for(i=0;i<20;i++)
{
a1=0;
if(H/10==0)P0=0xff;
elseP0=LED[H/10];
delays(5);
a1=1;
a2=0;
P0=LED[H%10]-0x80;
delays(5);
a2=1;
a3=0;
if(M/10==0)P0=0xff;
elseP0=LED[M/10];
delays(5);
a3=1;
a4=0;
P0=LED[M%10];
delays(5);
a4=1;
}
delays(400);
if(k2==0)
{
delays(10);
if(k2==0)
{
M++;
if(M==60)M=0;
}
}
if(k3==0)
{
delays(10);
if(k3==0)t=3;
}
if(k4==0)
{
delays(10);
if(k4==0){t=1;t0=0;}
}
}
}
if((t==3)&&(t0==2))//向下调分针
{
M--;
if(M==0)M=60;
while(t==3)
{
for(i=0;i<20;i++)
{
a1=0;
if(H/10==0)P0=0xff;
elseP0=LED[H/10];
delays(5);
a1=1;
a2=0;
P0=LED[H%10]-0x80;
delays(5);
a2=1;
a3=0;
if(M/10==0)P0=0xff;
elseP0=LED[M/10];
delays(5);
a3=1;
a4=0;
P0=LED[M%10];
delays(5);
a4=1;
}
delays(400);
if(k3==0)
{
delays(10);
if(k3==0)
{
M--;
if(M==0)M=60;
}
}
if(k2==0)
{
delays(10);
if(k2==0)t=2;
}
if(k4==0)
{
delays(10);
if(k4==0){t=1;t0=0;}
}
}
}
if((t==2)&&(t0==3))//秒表
{
while(t==2)
{
for(i=0;i<50;i++)
{
a1=0;
if(MM/10==0)P0=0xff;
elseP0=LED[MM/10];
delays(5);
a1=1;
a2=0;
P0=LED[MM%10]-0x80;
delays(5);
a2=1;
a3=0;
if(SS/10==0)P0=0xff;
elseP0=LED[SS/10];
delays(5);
a3=1;
a4=0;
P0=LED[SS%10];
delays(5);
a4=1;
}
S++;
if(S==60)
{
S=0;
M++;
if(M==60)
{
M=0;
H++;
if(H==24)H=0;
}
}
if(k2==0)
{
delays(10);
if(k2==0)tt=~tt;
}
if(tt)
{
SS++;
if(SS==60)
{
SS=0;
MM++;
if(MM==60)MM=0;
}
}
if(k3==0)
{
delays(10);
if(k3==0){MM=0;SS=0;}
}
if(k4==0)
{
delays(10);
if(k4==0){t=1;t0=0;}
}
}
}
}
}
六.总结:
这次课程设计让我受益匪浅,在设计过程中通过实践设计操作又掌握了一些单片机原理以及电路板焊接的相关知识,使得理论和实践得到良好的结合。
,进一步巩固了对单片机知识的理解,认识了单片机应用系统的设计、制作、调试方法以及功能扩展。
在设计时根据课题需求,与实际条件相结合,经过理论与实践的反复对比,最终确定可行方案,使得设计能够圆满完成。
这样的课程设计重点是通过实践操作和理论相结合。
提高实践动手能力、锻炼科学的思维能力。
在设计过程中也碰到了很多麻烦,在硬件设计阶段,焊接电路板基本顺利,可在调试阶段出现了很多问题。
再回去检查时,发现是电容焊错了。
在电子设计时一定要细心。