学 号 10780216
实习报告
起止日期: 2013 年 6 月 24 日 至 2013 年 7 月 19 日
计算机与信息工程学院
20##年 7 月 19 日
目 录
第一章 实习的目的及意义...................................................... 1
1.1生产实习的目的......................................................... 1
1.2生产实习的意义......................................................... 1
1.3生产实习的重要性....................................................... 1
第二章 单片机的最小系统....................................................... 2
2.1部分芯片介绍........................................................... 2
2.1.1 STC12C5A60S2芯片................................................. 2
2.1.2 MAX232CPE芯片.................................................... 5
2.1.3 LCD1602液晶显示器................................................ 6
2.1.4 DS12C887+芯片.................................................... 6
2.2 最小系统的功能介绍..................................................... 7
第三章 单片机电路板焊接....................................................... 9
3.1 单片机焊接的元器件..................................................... 9
3.2焊接好的单片机图形..................................................... 9
3.3 焊接注意事项........................................................... 9
第四章 C51语言的应用程序..................................................... 11
4.1 Keil uVision的使用................................................... 11
4.2 流水灯程序............................................................ 11
4.3 P1.0闪亮程序......................................................... 12
4.4 按键控制数码管........................................................ 13
4.5 定时一秒.............................................................. 15
4.6 蜂鸣器音乐盒.......................................................... 16
4.7 调试中出现的问题...................................................... 21
第五章 实习体会.............................................................. 22
第一章 实习的目的及意义
1.1生产实习的目的
此次生产实习的目的是在理论学习的基础上,通过完成一个设计51单片机的多种资源应用并具有综合功能的最小系统目标板的设计与编程应用。
1.2生产实习的意义
将理论知识与实际应用相结合,从实际出发分析问题、研究问题和解决问题,将单片机的知识系统化,并能对电子电路、电子元器件、印制电路板等方面的知识有进一步的加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机的应用系统的开发设计打下一定基础。
1.3生产实习的重要性
生产实习是电子信息工程专业教学计划的一个重要部分,是培养学生理论学习与实践相结合的重要实践性教学环节。通过生产实习使学生了解实习单位的工作方式和工作流程;对以后大单片机课程设计,帝业设计做基础,了解一个开发板的开发制作的整个过程以及元器件的采购;对生产现场、生产过程中的电子信息设备、计算机设备的应用状况有较为深刻的认识,掌握常规电子信息设备的使用维护方法;在实践中进一步加强专业教育,了解本专业工程技术岗位和生产劳动岗位的工作情况和工作内容,培养团队精神和吃苦耐劳的精神;同时可以使学生学到企业的管理经验和工人师傅的艰苦创业精神,激励学生奋发向上的开拓精神。
第二章 单片机的最小系统
2.1部分芯片介绍
2.1.1 STC12C5A60S2芯片
STC12C5A60S2 为可电气烧录清洗的 8051 相容单芯片,其内部程序代码容量为4KB
STC12C5A60S2主要功能列举如下:
1、为一般控制应用的 8 位单芯片
2、晶片内部具时钟振荡器(传统最高工作频率可至 12MHz)
3、内部程式存储器(ROM)为 4KB
4、内部数据存储器(RAM)为 128B
5、外部程序存储器可扩充至 64KB
6、外部数据存储器可扩充至 64KB
7、32 条双向输入输出线,且每条均可以单独做 I/O 的控制
8、5 个中断向量源
9、2 组独立的 16 位定时器
10、1 个全多工串行通信端口
11、8751 及 8752 单芯片具有数据保密的功能
12、单芯片提供位逻辑运算指令
STC12C5A60S2各引脚功能介绍:
STC12C5A60S2 电源正端输入,接+5V。
VSS:
电源地端。
XTAL1:
单芯片系统时钟的反相放大器输入端。
XTAL2:
系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。
RESET:
STC12C5A60S2的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
EA/Vpp:
"EA"为英文"External Access"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。
ALE/PROG:
ALE是英文"Address Latch Enable"的缩写,表示地址锁存器启用信号。STC12C5A60S2可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为STC12C5A60S2是以多工的方式送出地址及数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。
PSEN:
此为"Program Store Enable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。AT89S51可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。
PORT0(P0.0~P0.7):
端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。
PORT2(P2.0~P2.7):
端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在STC12C5A60S2扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。
PORT1(P1.0~P1.7):
端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。
PORT3(P3.0~P3.7):
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。
其引脚分配如下:
P3.0:RXD,串行通信输入。
P3.1:TXD,串行通信输出。
P3.2:INT0,外部中断0输入。
P3.3:INT1,外部中断1输入。
P3.4:T0,计时计数器0输入。
P3.5:T1,计时计数器1输入。
P3.6:WR:外部数据存储器的写入信号。
P3.7:RD,外部数据存储器的读取信号。
2.1.2 MAX232CPE芯片
MAX232CPE是16针SMD封装IC,用于完成 计算机232端口数据电平转换,连接CMOS电路的,换言之,如果离开它,我们就无法用软件监控电源状态了(需要串口返回信号)。而PIC16F870则为24脚8位CMOS闪存控制器。 用于可监控UPS当中。MAX232CPE完成232电平与TTL电平转换,提供一个本地接口,为调试和维护提供方便。TXD接SX52的RA2脚,RXD接SX52的RA3脚,RS-RXD和RS-TXD是RS232电平,为标准串口电平。数据可以从串口输入 到单片机SX52,SX52再把数据送到RTL8019AS传出去。用于嵌入式设备上的应用 MAX232Cpe,采用双列直插封装方式。驱动芯片类型:线路驱动器/接收器接口:RS232, V.28 / V.24驱动器数:2电源电压范围:4.5V to 5.5V封装类型:双列直插针脚数:16工作温度范围:0°C to +70°C封装类型:DIP工作温度最低:0°C工作温度最高:70°C器件标号:232器件记:MAX232Cpe+接口类型:RS-232温度范围:商用电源电压 最大:5.5V电源电压 最小:4.5V芯片标号: 232表面安装器件:通孔安装逻辑功能号:232接收器数:2收发器数:2数据率:120Kbps电源电流:5mA线/总线驱动器/接收器/收发类型:CMOS 双 RS232 发送器及接收器通道数:2
图 2-2 MAX232CEP引脚图
2.1.3 LCD1602液晶显示器
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在
各类仪表和低功耗系统中得到广泛的应用。工业字符型液晶,能够同时显示
16x2即32个字符(16列2行)。引脚介绍:
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时
对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器
调整对比度(建议接地,弄不好有的模块会不显示)。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚(有的用来接背光)
图2-3 1602引脚图
2.1.4 DS12C887+芯片
Clock,Calendar,Alarm封装/箱体:eDIP时间格式:HH:MM:SS,Binary日期格式:DW:DM:M:Y,BinaryRTC存储容量:113B电源电压(最大值):5.5V电源电压(最小值):4.5V最大工作温度:+70C最小工作温度:0C安装风格:ThroughHoleRTC总线接口:Multiplexed
DS12C887实时时钟芯片功能丰富,可以用来直接代替IBM PC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。
由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决了“千年”问题; DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。在12小时制模式中,用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节 RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器,113字节通用RAM使用户使用;此外用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。
图2-4 DS12C887引脚图
2.2 最小系统的功能介绍
利用AT89S51的单片机的定时器、中断系统、串行口、4KFlashROM、扩展外部四个按键、8位LED、时钟电路等外设,焊接并实现一个具有综合功能的最小系统。市面上有STC、AVR、PIC系列的单片机。AT89S51的特点是低功耗、8位、支持ISP在线编程、JTAG仿真接口。LED 显示模块是在P2口上接8位发光二级管采用共阳极接法用于流水灯等;电源部分采用78L05为单片机提供5V稳压电源;复位电路采用K2按键复位;晶振Y1(11.0592)与2个电容C8、C9构成时钟电路;中断定时功能用四个按键控制,K1、K3、K4、K5分别控制外部中断0、外部中断1、定时器/计数器T0、定时器/计数器T1;在单片机的左上角J1是串行通信的9针串口母线,用于与单片机、计算机相连,此次是基于MAX232cep测评的串行通信;LCD液晶显示模块采用1602的5*8点字符型,用J8、J92个电位器调节背光与对比度;J5是拨码开关控制P2口的8个端位;J6是20针的扩展模块; J2是ISP下载线的接插端,利用一个U口可与单片机进行相连,从而实现在线编程。
第三章 单片机电路板焊接
3.1 单片机焊接的元器件
元件包含:1个按键开关(K1-K5),9个发光二极管(D1-D8,D10),1个单片机STC12C5A60S2芯片及对应接插器(U2),2个电位器(J8-J9),1个晶体振荡器11..0592(Y1),5个1uF电容(C1-C5),2个33uF电容(C10,C12),1个22uF电容(C6),2个22pF电容(C8-C9),2个0.1uF电容(C7,C11),10个1K电阻(R1-R10),1个200欧电阻(R11),1个拨码开关(J5),1个MAX232cep芯片及对应接插器(U1),1个三端稳压管(J3),1个RS-232串口(J1),1个LCD1602液晶显示模块(J7),1个扩展模块(J6),2个JUMPER,1个10针JTAG。焊好后的单片机如图7所示。
3.2焊接好的单片机图形
图3-1 实物图
3.3 焊接注意事项
焊接操作注意事项有:① 保持烙铁头的清洁,因为焊接时烙铁头长期处于高温状态,其表面很容易氧化并沾上一层黑色杂质形成隔热层,使烙铁头失去加热作用。② 采用正确的加热方法,要靠增加接触面积加快传热,而不要用烙铁对焊件加力。应该让烙铁头与焊件形成面接触而不是点接触。③ 加热要靠焊锡桥,要提高烙铁头加热的效率,需要形成热量传递的焊锡桥。④ 在焊锡凝固之前不要使焊件移动或振动用镊子夹住焊件时,一定要等焊锡凝固后再移去镊子。⑤ 焊锡量要合适,过量的焊锡会增加焊接时间,降低工作速度。⑥ 不要用过量的焊剂,适量的焊剂是非常有必要的。过量的松香不仅造 成焊后焊点周围脏不美观,而且当加热时间不足时,又容易夹杂到焊锡中形成“夹渣”缺陷。
一般焊接的顺序是:是先小后大、先轻后重、先里后外、先低后高、先普通后特殊的次序焊装。即先焊分立元件,后焊集成块。对外联线要最后焊接。(1)电烙铁,一般应选内热式20~35W恒温230℃的烙铁,但温度不要超过300℃的为宜。接地线应保证接触良好。(2)焊接时间在保证润湿的前提下,尽可能短,一般不超过3秒。(3)耐热性差的元器件应使用工具辅助散热。如微型开关、CMOS集成电路、瓷片电容,发光二极管,中周等元件,焊接前一定要处理好焊点,施焊时注意控制加热时间,焊接一定要快。还要适当采用辅助散热措施,以避免过热失效。(4)如果元件的引线镀金处理的,其引线没有被氧化可以直接焊接,不需要对元器件的引线做处理。(5)焊接时不要用烙铁头摩擦焊盘。(6)集成电路若不使用插座,直接焊到印制板上、安全焊接顺序为:地端→输出端→电源端→输入端。(7)焊接时应防止邻近元器件、印制板等受到过热影响,对热敏元器件要采取必要的散热措施。(8)焊接时绝缘材料不不允许出现烫伤、烧焦、变形、裂痕等现象。(9)在焊料冷却和凝固前,被焊部位必须可靠固定,可采用散热措施以加快冷却。(10)焊接完毕,必须及时对板面进行彻底清洗,以便残留的焊剂、油污和灰尘等赃物。
在我自己的焊接当中,也出现了焊锡量不足和过多的状况,最后导致接入电源后无法正常使用的现象。同时注意元件的焊接顺序也很重要,选择合适的焊接顺序,不仅便于焊接,而且不至于导致元件破损。
第四章 C51语言的应用程序
4.1 Keil uVision的使用
打开“Keil uVision”,点击“project”,在弹出的对话窗口中选择“new project”新建工程,建立工程文件。在弹出的窗口中选择“Atmel”中的“AT89S52”确定后即可添加8051源代码。选中工程文件右键点“Option for target”再点“Output”“Create HEX”创建HEX文件;点“File”之后点击“NEW”即可在出现的文本框中输入程序,保存路径与工程文件相同,且用英文名,格式为“.c”。再添加源文件到project。
程序输入完了要保存,编译查看有无错误,有就修改,如果没有,将PC机与单片机用ISP下载线连接起来,USB驱动文件中,选择isp编程下载软件中“progisp”运行程序,在文件夹下选“调入flash”,调入hex文件,之后点击“自动”即可运行程序查看现象。
串行通信的调试可利用串行通信助手软件,查看单片机是如何与PC机进行数据通信的。
4.2 流水灯程序
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
}
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
4.3 P1.0闪亮程序
#include
#define uchar unsigned char
sbit signal=P1^0;
void delay(t);
void main()
{
while(1)
{
signal=0;
delay(20);
signal=1;
delay(20);
}
}
void delay(int t)
{
int i;
for(i=0;i
{
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
}
4.4 按键控制数码管
#include
#include"anjian.h"
sbit A13=P2^5;
code uint8 number[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0xff};
int8 n=0;
void delay()
{
uint16 i=2000;
while(i--);
}
main()
{
WR=0;
A13=1;
P0=0xff;
WL4=0;
P0=number[0];
K4=0;
while(1)
{
if(!K0)
{
delay();
if(!K0)
{
if(n>=9)
n=0;
else
n++;
P0=number[n];
while(!K0);
}
}
if(!K1)
{
delay();
if(!K1)
{
if(n<=0)
n=9;
else
n--;
P0=number[n];
while(!K1);
}
}
}
}
4.5 定时一秒
#include
typedef unsigned char uint8;
typedef unsigned int uint16;
/*sbit A13=P2^5;*/
/*sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
*/
main()
{
uint8 counter;
int i=0;
/*WR=0;
A13=1;
*/
TMOD=0x01;
TH0=0xb8;
TL0=0x00;
TR0=1;
while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0xb8;
TL0=0x00;
counter++;
}
if(counter==50)
{
counter=0;
P1=~(1<
if(i==9)
{
i=0;
P1=0x00;
}
}
}
}
4.6 蜂鸣器音乐盒
/********************************************************************
* 文件名 : 蜂鸣器唱歌.c
* 描述 : 该程序实现控制蜂鸣器演奏音乐。
* 创建人 : 东流,20##年4月9日
* 版本号 : 2.0
***********************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
uchar Count;
sbit Speak =P1^2; //蜂鸣器器控制脚
sbit P36=P3^6;
sbit RS=P2^5;
unsigned char code LED[8]={0xfe,0xfb,0xf8,0xf0,0xe0,0xb0,0x80,0x00};
/*以下数组是音符编码*/
unsigned char code SONG[] ={ //祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
//路边的野华不要采
0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,
};
/********************************************************************
* 名称 : Time0_Init()
* 功能 : 定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振,10ms
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Init()
{
TMOD = 0x01;
IE = 0x82;
TH0 = 0xDC;
TL0 = 0x00;
}
/********************************************************************
* 名称 : Time0_Int()
* 功能 : 定时器中断,中断中实现 Count 加一
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Int() interrupt 1
{
TH0 = 0xDC;
TL0 = 0x00;
Count++; //长度加1
}
/********************************************************************
* 名称 : Delay_xMs()
* 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us.
* 输入 : x
* 输出 : 无
***********************************************************************/
void Delay_xMs(uint x)
{
uint i,j;
for(i=0; i
{
for(j=0; j<3; j++);
}
}
/********************************************************************
* 名称 : Play_Song()
* 功能 : 播放蜂鸣器控制程序
* 输入 : i (选择播放哪首歌曲,0为“祝你平安”,1为“路边的野花你不要采”
* 输出 : 无
***********************************************************************/
void Play_Song(uchar i)
{
uchar Temp1,Temp2;
int a;
uint Addr;
Count = 0; //中断计数器清0
Addr = i * 217;
while(1)
{
Temp1 = SONG[Addr++]; //音符地址加一
if (Temp1 == 0xFF) //休止符
{
TR0 = 0;
Delay_xMs(100);
}
else if (Temp1 == 0x00) //歌曲结束符
{
return;
}
else
{
Temp2 = SONG[Addr++]; //街拍地址加一 注释: 音符地址始终是偶数 节拍地址是奇数
TR0 = 1;
while(1)
{
Speak = ~Speak; //音符① 这两句话是确定音符的
a=(int)(Temp1/8); // LED 一 有音符判断LED亮多少
P0=LED[a]; // LED 二 让LED亮相应的个数
Delay_xMs(Temp1); //音符② 一二组合确定音符
if(Temp2 == Count) //有Temp2 判断节拍
{
Count = 0;
break;
}
}
}
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
RS=1;
P36=0;
Time0_Init(); //定时器0中断初始化
while(1)
{
Play_Song(0); //Play_Song(0)为祝你平安 Play_Song(1)为路边的野花你不要裁
// Play_Song(1);
}
}
4.7 调试中出现的问题
学STC12C5A60S2的时候都是用汇编语言编写程序的,对于用C51语言来编写程序不是很熟,但在看了很多书查了很多资料之后,熟悉了C51语言,在编程时也就比较顺利了。流水灯调试时没有出现大问题;中断控制流水灯的时候一定要初始化寄存器,考虑周到,否则中断就不会起作用;在调1602液晶字符显示程序时我的现象怎么也不能出现,可是检查程序又没有错误,后来自习看1602引脚才注意到它的4脚RS、5脚R/W、6脚E分别与52芯片的P2.0、P2.1、P2.2相连,而拨码开关又控制着P2的端位,当时我的拨码开关应该都是处于接地状态,把控制P2.0、P2.1、P2.2三个端口的开关拨到高点平时显示器就可一正常显示了。
这些程序调试完之后,让我真正了解了单片机的软件与硬件的联系:按键是如何控制数码管的,如何控制单片机复位;ISP下载线与PC机的连接使用;9针的串行通信与PC 机的连接使用;调LCD的灯,J9调字符显示,J5拨码开关又起着控制作用;电源插的时间不宜过长,加重78L05稳压作用,
第五章 实习体会
生产实习是电子信息工程专业教学计划的一个重要部分,是培养学生理论学习与实践相结合的重要实践性教学环节。通过生产实习使学生了解实习单位的工作方式和工作流程,它要求学生在掌握坚实的电子信息工程的理论知识的基础上,对生产现场、生产过程中的电子信息设备、计算机设备的应用状况有较为深刻的认识,掌握常规电子信息设备的使用维护方法;掌握理论学习与实践相结合的方法;在实践中进一步加强专业教育,了解本专业工程技术岗位和生产劳动岗位的工作情况和工作内容,培养团队精神和吃苦耐劳的精神;同时可以使学生学到企业的管理经验和工人师傅的艰苦创业精神,激励学生奋发向上的开拓精神。
在实习中,我们进行了各种实战行的练习,把平时课本上学到了知识运用到生产实际中,我从中发现。原来实际生产没有那么简单,从电路板的焊接到元器件调试都遇到了课本中没有的这样和那样的问题,但经过老师的指导和自己的钻研是这些问题最终都被我攻破。
此次实习中我们分组互相帮助…其中遇到的好多问题都是在同学们的集思广益下成功解决的!这次实习又增加了同学之间的团队精神。此外最重要的一点是老师的耐心帮助讲解让我们学习的激情空前的高啊。
通过这次生产实习,使我对本专业和以后的就业路线有了更进一步的认识,以及让我明白了,只学会了课本上的知识是没有用了,会动手才是我们今后在社会工作立足的根本。
最后还要谢谢我们尊敬的导师,谢谢老师这一个月以来的帮助与教导!