单片机生产实习报告

学   号

 

实习报告

起止日期:   2013 6 24 日 至   2013 7 19

  计算机与信息工程学院

20## 7 19




目录

第一章  生产实习介绍... 1

1.1  生产实习的目的. 1

1.2  生产实习的意义. 2

1.3  生产实习的内容. 2

1.4  生产实习的要求. 2

第二章  单片机的焊接... 2

2.1  焊前准备. 2

2.2  焊接要领. 3

2.3  焊接的注意事项. 3

2.3  焊接的成品图. 5

第三章  单片机系统介绍... 6

3.1  系统原理及功能介绍. 6

3.2  单片机最小系统原理图. 7

3.3  部分芯片介绍. 7

3.3.1  AT89S52芯片的介绍. 7

3.3.2  MAX232 芯片介绍. 9

3.3.3  DS12887芯片介绍. 10

3.3.4  78L05介绍. 11

3.4  复位电路. 11

3.5  串口通信模块. 12

3.6  ISP下载电路. 13

3.7  定时中断电路. 13

第四章  单片机开发板应用... 14

4.1  调试过程. 14

4.2  程序. 14

4.2.1  流水灯. 14

4.2.2  LED1的亮灭. 15

4.2.3  按键控制LED1的亮灭. 15

4.2.4  8个发光二极管两边到中间点亮. 16

4.2.5  8个发光二极管从低到高点亮,到全灭,再从高到低点亮. 16

4.2.6  由D0到D7逐一点亮再返回的流水灯. 17

4.2.7  1602字符液晶显示. 18

4.2.8  数码管从低位循环移位显示0-F 21

第五章  开发课题设计... 23

5.1  设计要求... 23

5.2   设计内容... 23

第六章  实习总结... 27


第一章  生产实习介绍

1.1    生产实习的目的

此实习的目的旨在理论学习的基础上,通过完成一个涉及52单片机多种资源应用并具有综合功能的最小系统目标板的设计与编程应用,通过我们独立进行单片机开发板的焊接、调试以及应用扩展,提高我们的专业技能,为今后工作或是深造打好坚实的基础,让我们真正从这次实习中收获到对自己有价值的东西。

1.2    生产实习的意义

     此次生产实习是将理论知识与实际应用结合起来,从实际出发分析、研究和解决问题,将单片机的知识系统化,而且能对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、纠错、调试、焊接技术相关仪器设备的使用技能方面得到全面的锻炼和提高。

    通过生产实习使学生了解实习单位的工作方式和工作流程;它要求学生在掌握坚实的电子信息工程的理论知识的基础上,对生产现场、生产过程中的电子信息设备、计算机设备的应用状况有较为深刻的认识,掌握常规电子信息设备的使用维护方法;掌握理论学习与实践相结合的方法;拓宽知识面,提高分析能力和解决实际问题的能,在实践中进一步加强专业教育。

1.3    生产实习的内容

本次生产实习一共持续4个星期,在这4周中我们主要是利用主控芯片AT89S52单片机的定时器、中断、串口、8K Flash ROM、扩展外部4个按键、时钟电路等外设,实现并焊接制作一个具有最小功能的最小系统板。然后在已有的单片机基础上利用Keil uVision2软件编写程序,并借助ISP编程下载软件将源程序“烧”进芯片,实现流水灯、闪烁灯、按键、外部中断、定时中断、JTAG接口、和串口的调试,达到人机交互的目的。此外在原有开发板的基础上外扩简单电路,例如有多路打分器、蜂鸣器、密码锁等课题的设计。

1.4  生产实习的要求

    了解芯片功能完成开发板的焊接与调试学会编写程序实现简单应用。

第二章  单片机的焊接

2.1  焊前准备

    首先,对照电路图和元件清单仔细查对元器件;仔细分析电路图,预设各个元器件的摆放位置和焊接顺序。其次,准备好制作工具,万用表、镊子、吸锡器、斜口钳、剥线钳、烙铁、焊锡等。最后,插上烙铁,预热,并将烙铁头镀上焊锡以防止烙铁头氧化。

2.2      焊接要领

焊接过程的要领有以下几点:

(1)焊接表面处理

手工烙铁焊接中遇到的焊件是各种各样的电子零件和导线,一般情况下遇到的焊件往往都需要进行表面清理工作,去除焊接面上的锈迹、油污、灰尘等影响焊接质量的杂质。

(2)预焊

预焊就是将要锡焊的元器件引线或导电的焊接部位预先用焊锡润湿。称预焊的准确,因为其过程和机理都是锡焊的全过程——焊料润湿焊件表面靠金属的扩散形成结合层后而使焊件表面“镀”上一层焊锡。

(3)焊剂不要过量

    适量的焊剂是必不可缺的但不要认为越多越好。过量的松香不仅造成焊后焊点周围需要清洗的工作量,而且延长了加热时间,降低工作效率,而当加热时间不足时又容易夹杂到焊锡中形成“夹渣”缺陷;对开关元件的焊接过量的焊剂容易流到触点处从而造成接触不良。

(4)保持烙铁头的清洁

    因为焊接时烙铁头长期处于高温状态,又接触焊剂等受热分解的物质,其表面很容易氧化而形成一层黑色杂质,这些杂质几乎形成隔热层,使烙铁头失去加热作用。

2.3  焊接的注意事项

焊接操作注意事项有:① 保持烙铁头的清洁,因为焊接时烙铁头长期处于高温状态,其表面很容易氧化并沾上一层黑色杂质形成隔热层,使烙铁头失去加热作用。② 采用正确的加热方法,要靠增加接触面积加快传热,而不要用烙铁对焊件加力。应该让烙铁头与焊件形成面接触而不是点接触。③ 加热要靠焊锡桥,要提高烙铁头加热的效率,需要形成热量传递的焊锡桥。④ 在焊锡凝固之前不要使焊件移动或振动用镊子夹住焊件时,一定要等焊锡凝固后再移去镊子。⑤ 焊锡量要合适,过量的焊锡会增加焊接时间,降低工作速度。⑥ 不要用过量的焊剂,适量的焊剂是非常有必要的。过量的松香不仅造  成焊后焊点周围脏不美观,而且当加热时间不足时,又容易夹杂到焊锡中形成“夹渣”缺陷。

一般焊接的顺序是:是先小后大、先轻后重、先里后外、先低后高、先普通后特殊的次序焊装。即先焊分立元件,后焊集成块。对外联线要最后焊接。(1)电烙铁,一般应选内热式20~35W恒温230℃的烙铁,但温度不要超过300℃的为宜。接地线应保证接触良好。(2)焊接时间在保证润湿的前提下,尽可能短,一般不超过3秒。(3)耐热性差的元器件应使用工具辅助散热。如微型开关、CMOS集成电路、瓷片电容,发光二极管,中周等元件,焊接前一定要处理好焊点,施焊时注意控制加热时间,焊接一定要快。还要适当采用辅助散热措施,以避免过热失效。(4)如果元件的引线镀金处理的,其引线没有被氧化可以直接焊接,不需要对元器件的引线做处理。(5)焊接时不要用烙铁头摩擦焊盘。(6)集成电路若不使用插座,直接焊到印制板上、安全焊接顺序为:地端→输出端→电源端→输入端。(7)焊接时应防止邻近元器件、印制板等受到过热影响,对热敏元器件要采取必要的散热措施。(8)焊接时绝缘材料不不允许出现烫伤、烧焦、变形、裂痕等现象。(9)在焊料冷却和凝固前,被焊部位必须可靠固定,可采用散热措施以加快冷却。(10)焊接完毕,必须及时对板面进行彻底清洗,以便残留的焊剂、油污和灰尘等赃物。

  另外焊接时需要注意四点事项:

(1)    掌握好加热时间

大多数情况延长加热时间对电子产品是有害的,所以在保证焊料润湿焊件前提下,时间越短越好。

(2)  不要对焊点施力

烙铁头把热量传给焊点主要靠增加接触面积,用烙铁对焊点加力对加热是徒劳的。很多情况下会造成被焊件的损伤。

(3)  不要带芯片焊接

由于焊接时温度较高,如果此时插座上有芯片的话容易损坏芯片。

(4)  特别注意

烙铁带电时,注意烙铁头远离电线,以免烫坏电线。烙铁不用时一定要拔下烙铁插头。

在我自己的焊接当中,也出现了焊锡量不足和过多的状况,最后导致接入电源后无法正常使用的现象。同时注意元件的焊接顺序也很重要,选择合适的焊接顺序,不仅便于焊接,而且不至于导致元件破损。

2.3      焊接的成品图

图2-1 单片机焊接电路板

第三章       单片机系统介绍

3.1      系统原理及功能介绍

此次单片机开发是利用AT89S52单片机的定时器、中断、串口、8KB Flash ROM、4个按键、8个共阳极LED灯、时钟电路、外部扩展等外设,实现并焊接制作一个具有综合功能的最小系统板。

在单片机的开发中,我们用到了一个最重要的器件AT89S52单片机,它是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash 存储器,并且模块间各自独立,接口均由排针引出。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、高效率的解决方案。

表1 最小系统功能介绍

3.2  单片机最小系统原理图

图3-1  单片机1原理图

图3-2  单片机2总体电路图

3.3  部分芯片介绍

  3.3.1  AT89S52芯片的介绍

AT89S52 功能特性描述:AT89S52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

AT89S52的主要特性是:与MCS-51单片机产品兼容;8K字节在系统可编程Flash存储器;1000次擦写周期;全静态操作:0Hz~33Hz;三级加密程序存储器;32个可编程I/O口线;三个16位定时器/计数器;八个中断源;全双工UART串行通道;低功耗空闲和掉电模式;掉电后中断可唤醒;看门狗定时器;双数据指针;掉电标识符。

图3-3  AT89S52功能引脚图

功能引脚说明:

VCC:电源

GND:接地

RST:复位输入

P0口:是一个8位漏极开路的双向I/O口,也被作为低8位地址/数据复用。

P1口:是一个有内部上拉电阻的8位双向I/O口。在flash编程和校验时,P1口接收低8位地址字节。

P2口:是一个具有内部上拉电阻的8 位双向I/O 口,也接收高8位地址字节和一些控制信号。

P3口:是一个具有内部上拉电阻的8 位双向I/O 口,亦作为AT89S52特殊功能(第二功能)使用。

ALE/PROG:地址锁存控制信号。

PSEN:外部程序存储器选通信号。

EA/VPP:访问外部程序存储器控制信号。

XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2:振荡器反相放大器的输出端。

3.3.2    MAX232 芯片介绍

     MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。

主要特点:符合所有的RS-232C技术标准;只需要单一 +5V电源供电;片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V- ;4、功耗低,典型供电电流5mA;内部集成2个RS-232C驱动器;内部集成两个RS-232C接收器。

引脚介绍:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。 TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。

图3-4  MAX232引脚图

3.3.3  DS12887芯片介绍

DS12887内部由振荡电路分频电路周期中断方波选择电路,14字节时钟和控制单元,114字节用户非易失RAM,十进制/二进制累加器总线接口电路,电源开关写保护单元和内部锂电池等部分组成。

图3-5  DS12887引脚图

功能引脚说明:

VCC:直流电源+5V电压。当5V电压在正常范围内时,数据可读写;当Vcc低于4.25V,读写被禁止,计时功能仍继续;当Vcc下降到3V以下时,RAM和计时器供电被切换到内部锂电池。

MOT(模式选择):MOT引脚接到Vcc时,选择MOTOROLA时序,当接到GND时,选择Intel时序。

SQW(方波信号输出):SQW引脚能从实时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。

AD0-AD7(双向地址/数据复用线):总线接口,可与Motorola微机系列和Intel微机系列接口。

AS(地址选通输入):用于实现信号分离,在AD/ALE的下降沿把地址锁入DS12887。

DS(数据选通或读输入):DS/RD引脚有两种操作模式,取决于MOT引脚的电平,当使用Motorola时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS指示DS12887驱动双向总线的时刻;在写周期,DS的后沿使DS12887锁存写数据。选择Intel时序时,DS称作(RD),RD与典型存贮器的允许信号(OE)的定义相同。

R/W(读/写输入):R/W引脚也有两种操作模式。选Motorola时序时,R/W是低电平信号时,指示当前周期是读或写周期,DS为高电平时,R/W高电平指示读周期,R/W信号一低电平信号,称为WR。在此模式下,R/W引脚与通用RAM的写允许信号(WE)的含义相同。

CS(片选输入):在访问DS12887的总线周期内,片选信号必须保持为低。

IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断的条件满足时,IRQ处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。

IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断的条件满足时,IRQ处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。

3.3.4  78L05介绍

78L05是78Lxx系列单片集成电路稳压器的一种型号。 此类元件应用十分广泛,全系列的稳压器中都有滤波电路,从而有效地降低了噪声和外界的干扰,每种稳压器均能 达到100mA的电流输出 内部设有过流、过热自动保护功能。

CYT78L05 是一颗三端稳压电源调整器。CYT78L05 能被用作齐纳二极管/电阻器组合替换。它提供二个数量级的有效的产品改善阻抗,低静态电流。这些特性使稳压器可以给本机或板卡稳压提供一个很好的解决噪声干扰问题的方案。

    主要特点:输出电流可达150mA,输出电压5.0V,输出精度可达±4%,简单的外围电路,静电防护ESD可达2.7KV。

图3-6  三极管实物图

图3-7  78L05引脚图

3.4  复位电路

复位主要有上电复位和按键复位两种,AT89S52作为此次的开发板主要控制芯片是采用按键复位的,根据元器件的要求时间常数,可以选定电容和电阻的规格。

图3-8  开发板复位电路

3.5  串口通信模块

串行通信模块传送可靠性高,并行传输速率高。在串行通信中按照数据传送方向,串行通信可分为单工、半双工和全双工三种制式。在进行串行通信接口设计时,必须根据需要确定选择标准接口、传输介质及电平转换等问题。和并行传送一样,现在已经有很多种串行标准总线,如RS-232C,RS-422、RS-485和20mA电流环等。采用标准接口后,能够方便地把单片机和外设、测量仪器等有机地连接起来,从而构成一个测控系统。

此次开发板采用的是MAX232芯片提供由电脑串口到开发板的+10V到+5V的电平转换。

MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。主要特点为符合所有的RS-232C技术标准,只需要单一 +5V电源供电,片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V- 功耗低,典型供电电流5mA 内部集成2个RS-232C驱动器,内部集成两个RS-232C接收器。

图3-9  串口通信电路

3.6  ISP下载电路

本次单片机调试是在线编程,直接用下载线将ISP下载电路的JTAG接口与电脑相连,通过ISP编程下载软件将编好的程序直接下装到单片机的Flash中以实现程序功能。

图3-10  ISP下载电路

3.7  定时中断电路

此开发板定时中断电路主要有四个按键K1、K3、K4、K5,K4、K5与T0和T1相连,另两个K1、K3与INT0和INT1相连。AT89S52 有6个中断源:两个外部中断(INT0 和INT1),三个定时中断(定时器0、1、2)和一个串行中断。每个中断源都可以通过置位或清除特殊寄存器IE 中的相关中断允许控制位分别使得中断源有效或无效。对于AT89S52,IE.5位也是不能用的。用户软件不应给这些位写1。定时器2可以被寄存器T2CON中的TF2和EXF2的或逻辑触发。程序进入中断服务后,这些标志位都可以由硬件清0。中断服务程序必须判定是否是TF2 或EXF2激活中断,标志位也必须由软件清0。定时器0和定时器1标志位TF0 和TF1在计数溢出的那个周期的S5P2被置位。定时器2 的标志位TF2 在计数溢出的那个周期的S2P2被置位,在同一个周期被电路捕捉下来。中断允许控制位=1,允许中断;中断允许控制位=0,禁止中断。

图3-11  中断电路图

第四章  单片机开发板应用

4.1  调试过程

打开“Keil uVision”,点击“project”,在弹出的对话窗口中选择“new project”新建工程,建立文件名。在窗口中选择“Atmel”中“AT89S52”确定后即可添加8051源代码。再点“File”之后点击“NEW”即可在出现的文本框中输入程序,其中文本框名称注意要选择英文名,格式为“.asm”。再添加源文件到project。

在USB驱动文件中,选择isp变成下载软件中“progisp”运行程序,在文件夹下选“调入flash”,同时编辑器及接口选择“USBASP”,之后点击“自动”即可运行程序进行检查电路板。

4.2    程序

4.2.1  流水灯

org 0000h

ljmp loop

org 0080h

loop:

mov p1,#0ffh

clr p1.0

lcall delay

clr p1.1

lcall delay

clr p1.2

lcall delay

clr p1.3

lcall delay

clr p1.4

lcall delay

clr p1.5

lcall delay

clr p1.6

lcall delay

clr p1.7

lcall delay

ljmp loop

delay:mov r5,#20

d1:mov r6,#20

d2:mov r7,#248

   djnz r7,$

   djnz r6,d2

   djnz r5,d1

   ret

end

4.2.2  LED1的亮灭

#include<reg52.h>

    sbit L1=P1^0   ;

    void delay02s(void)

    {unsigned char i,j,k;

     for(i=20;i>0;i--)

     for(j=20;j>0;j--)

     for(k=248;k>0;k--);

     }

     void main()

     {while(1)

     {L1=0;

     delay02s();

     L1=1;

     delay02s();

     }

4.2.3  按键控制LED1的亮灭

#include<reg52.h>

      sbit p10=P1^0;

      sbit k1=P3^2;

      sbit k3=P3^3;

      void main(void)

      {while(1)

      {if(!k1)

      {p10=0;

      }

      if(!k3)

      {p10=1;

      }

      }

      }

4.2.4  8个发光二极管两边到中间点亮

#include<reg52.h>

   char l[]={0x7e,0xbd,0xdb,0xe7};

   void delay02s(void)

    {unsigned char i,j,k;

     for(i=20;i>0;i--)

     for(j=20;j>0;j--)

     for(k=248;k>0;k--);

     }

     void main(void)

     {unsigned int n;

     while(1)

     {for(n=0;n<4;n++)

    {P1=l[n];

     delay02s();

     }

     }

     }

4.2.5  8个发光二极管从低到高点亮,到全灭,再从高到低点亮

#include<reg52.h>

  char l[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};

   void delay02s(void)

    {unsigned char i,j,k;

     for(i=20;i>0;i--)

     for(j=20;j>0;j--)

     for(k=248;k>0;k--);

     }

     void main(void)

     {unsigned int n;

     while(1)

     {for(n=0;n<18;n++)

    {P1=l[n];

     delay02s();

     }

     }

     }

4.2.6  由D0到D7逐一点亮再返回的流水灯

#include<reg52.h>

unsigned char s[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned int i;

void delay(void)

{

unsigned char i,j,k;

for(i=20;i>0;i--)

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

void main(void)

{

while(1)

for(i=0;i<17;i++)

{

P1=s[i];

delay ();

}

}

4.2.7  1602字符液晶显示

调节J8,J9,另J7的15、16脚的电压差为4V左右;调2脚和3脚电压差为4.5~5V即1、3脚电压差小于1V,具体数值根据亮度而定。

#include <reg52.h>

#include <intrins.h>

sbit rs= P2^0;

sbit rw = P2^1;

sbit ep = P2^2;

unsigned char code dis1[] ={"ZHANGXUHONG"};

unsigned char code dis2[] ={" 08700229 "};

void delay(unsigned char ms)

{

unsigned char i;

while(ms--)

{

for(i = 0; i< 250; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

bit lcd_bz()

{

bit result;

rs = 0;

rw = 1;

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result = (bit)(P0 & 0x80);

ep = 0;

return result;

}

void lcd_wcmd(unsigned char cmd)

{

while(lcd_bz());//判断LCD是否忙碌

rs = 0;

rw = 0;

ep = 0;

_nop_();

_nop_();

P0 = cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;

}

void lcd_pos(unsigned char pos)

{

lcd_wcmd(pos | 0x80);

}

void lcd_wdat(unsigned char dat)

{

while(lcd_bz());//判断LCD是否忙碌

rs = 1;

rw = 0;

ep = 0;

P0 = dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;

}

void lcd_init()

{

lcd_wcmd(0x38);

delay(1);

lcd_wcmd(0x0c);

delay(1);

lcd_wcmd(0x06);

delay(1);

lcd_wcmd(0x01);

delay(1);

}

void main(void)

{

unsigned char i;

lcd_init();// 初始化LCD

delay(10);

lcd_pos(0x01);//设置显示位置

i = 0;

while(dis1[i] != '\0')

{

lcd_wdat(dis1[i]);//显示字符

i++;

}

lcd_pos(0x42);// 设置显示位置

i = 0;

while(dis2[i] != '\0')

{

lcd_wdat(dis2[i]);// 显示字符

i++;

}

}

}

4.2.8  数码管从低位循环移位显示0-F

#include "reg52.h"

#include "intrins.h"

#include"absacc.h"

#include"math.h"

typedef unsigned char BYTE;

typedef unsigned int WORD;/* LED口地址 */

#define led_data XBYTE[0x6000] //写命令

BYTE led_w;

BYTE

led_dm[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0:0xc0,1:0xf9

,2:0xa4,3:0xb0,4:0x99,5:0x92,6:0x82,7:0xf8,8:0x80,9:0x90

BYTE di;

/*****************LED显示位置 ********************/

void LED_crt(BYTE val)

{

led_data=led_dm[val];//0:0xc0,1:0xf9,2:0xa4,3:0xb0,4:0x99,5:0x92,6:0x82,7:0xf

8,8:0x80,9:0x90

P2 |= 0xff;

P2 &= led_w;

led_w>>=1;

if (led_w==0x0f) led_w=0xf7;

}

void Delay(WORD n)

{

WORD x;

while(n--)

{

x=500;

while(x--);

}

}

void main()

{

led_w=0xf7;

di=0;

while(1)

{

LED_crt(di);

di++;

if(di>0x09) di=0;

Delay(1000);

}

}

第五章  开发课题设计

5.1       设计要求

    电子密码锁设计:利用键盘实现,要求功能,可设置密码并修改密码,当正确使用时,可控制液晶显示开锁成功,当输入密码错误时,可提示输入错误,错误超过三次时,可通过蜂鸣器进行声音报警,并可通过输入正确密码取消报警。

5.2   设计内容

该课题设计的程序为:

nclude<reg52.h>

#include"sky.h"

#include"1602.h"

sbit baojing=P2^6;

unsigned char num1=0;

void change()

{

    write_com_1602(0xc0);

    write_date_1602(' ');

    write_date_1602(' ');

    write_date_1602('C');

    write_date_1602('H');

    write_date_1602('A');

    write_date_1602('N');

    write_date_1602('G');

    write_date_1602('E');

}

void wrong()

{

    start_1602();

    write_com_1602(0x80);

    write_date_1602(' ');

    write_date_1602(' ');

    write_date_1602(' ');

    write_date_1602(' ');

    write_date_1602('W');

    write_date_1602('R');

    write_date_1602('O');

    write_date_1602('N');

    write_date_1602('G');

    while(num1==3)

    {

       baojing=0;

       delay(100);

    }

}

void true()

{

    start_1602();

    write_com_1602(0x80);

    write_date_1602(' ');

    write_date_1602(' ');

    write_date_1602(' ');

    write_date_1602(' ');

    write_date_1602('T');

    write_date_1602('R');

    write_date_1602('U');

    write_date_1602('E');

}

void main()

{

    unsigned char i,j,gai=0,num=0;

    unsigned char a[4]={0,1,2,3};

    unsigned char b[4]={0,0,0,0};

    while(1)

    {  

   

       num1++;

       for(i=0;i<4;i++)

       {

           j=1;

           while(j)

           {

              b[i]=sky();

              if(b[i]==112)

                  j=1;

              else

                  j=0;

           }

             

       }

       for(i=0;i<4;i++)

       {

           if(a[i]==b[i])

              num++;

           else

              num=0;

       }

       if(num==4)

       {

           true();

           j=1;

           while(j)

           {

              num=sky();

              if(num==112)

                  j=1;

              else

                  j=0;

           }

           if(num==15)

           {

              change();

              for(i=0;i<4;i++)

              {

                  j=1;

                  while(j)

                  {

                     a[i]=sky();

                     if(a[i]==112)

                         j=1;

                     else

                         j=0;

                  }

                    

              }

              write_com_1602(0x01);

           }

           num=0;

      

       }

       else

       {

           wrong();

       }

          

    }

}

图5-1  密码锁电路图

第六章  实习总结

为期四周的生产实习结束了,在这段时间的学习中,我收获了很多。

通过这次实习,我发现自己什么都是略会一些,却不是很精通,认识到了自己的不足,我会在课下能找些相关的书来看,来弥补自己的不足,希望课后自己弄懂。

生产实习是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和过程。就我自身而言,我的最大收获是——学会了如何发现问题、研究问题和解决问题,以前有了问题总是等着老师或同学去解决,现在不同了,有了问题我会去查找问题的源头,然后根据所学的知识去分析,能解决是最好了,不能解决我也会尽力攻克。

同时,在实习中,不论是焊接还是调试,都存在有一定的问题,焊接中还有虚焊的现象,而调试中,编程就显得特别重要。这是学习与实践相结合的重要过程,是学以致用的真实体现。在参观学习的进一步展示下,我对我所学习的专业以后的就业路线有了更进一步的了解,以后的学习生活中,更应该注重动手能力,譬如焊接,看起来简单,但是真要焊接好一样东西,不论是外形,还是材料的使用上,都是一门学问,不可小觑。

相关推荐