视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
2012单片机原理与接口技术课程设计报告
2025-09-26 22:05:52 责编:小OO
文档
洛 阳 理 工 学 院

课 程 设 计 报 告 

课程名称                  

设计题目                    

专    业                               

班    级                                

学    号                                

姓    名                              

完成日期                               

课 程 设 计 任 务 书

设计题目:    基于51系列单片机的实验平台开发设计     

设计内容与要求:

一、设计内容

利用STC系列单片机作为微控制器开发一套软、硬件相结合的单片机实验平台,主要包括以下内容:

1.电路原理图设计,主要包括集LCD显示模块、串口通信模块、数码管显示模块、LED发光二极管、键盘等接口电路的设计;

2.学习集成电路等芯片的焊接方法与技巧,进行实际元器件的识别,进行电路板焊接;

3.在Keil C环境下,进行软件设计。主要包括流水灯、计数器、定时器、LCD字符显示、键盘的控制等功能程序设计;

4.针对所开发的实验板,结合器件选择、原理图设计、硬件焊接、软件编程调试、软硬件联调等方面写出课程设计报告。

二、设计要求

1.完成综合实验平台的电路结构分析,进行模块分解,掌握各部分电路的工作原理;

2.完成电路板的焊接,掌握故障排除方法,完成实验平台的硬件设计及开发;

3.结合Keil C软件在焊接无误的单片机实验平台上开发出流水灯、LCD显示模块,通信模块等程序设计;

4.按照要求撰写课程设计论文。

                       指导教师:  

                                   年 月 日

课 程 设 计 评 语

 

 成绩:                         指导教师:_______________

                                      年   月   日

基于51系列单片机的实验平台开发设计

摘 要

本设计是根据我们所学习的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。

单片机 即单片微型计算机。(Single-Chip Microcomputer ),是集 CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于工业自动化上和智能产品。在信息技术急速发展的今天,计算机科学日新月异。而单片机作为计算机科学的一个分支,在微机控制领域得到长足的发展。随着单片机的发展与科学技术的提高,单片机已经成为人类生产生活中不可缺少的工具。现在,单片机的应用已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。 单片机要解决的问题多数仍是老问题,新颖之处是比以前用较少的元件。尤其是设计逻辑关系复杂的控制系统,过去用通用的逻辑门集成电路芯片将需要几十片甚至上百片,而现在只用几片就能够实现,而且方便灵活,做设计修改或改动功能时,只需改写软件,硬件几乎不需要改动,这样就大大减少芯片个数主要是靠单片机的可编程性和高度集成化。使开发周期更短,制造成本更低,用电更省和可靠性更高。

关键词: STC单片机,实验平台,数码管,流水灯

51 series microcontroller comprehensive experimental board development design

ABSTRACT

The design is based on what we learn the course syllabus, according to the requirements of our first course examination, is the necessary training course of our mission, and SCM are of great help. Master microcontroller technology is one of the indispensable to our future technology, the work and the life and learning are very close connection. In recent years, with the electronic technology and the rapid development of the microcomputer chip, continuously improve the grade, its applications are constantly expanding in industrial control, has advanced science, intelligent instrument, electrical appliances, automobile electronic system, office automation equipment, personal information terminals and communication products has been widely used in modern electronic system, become the most important core components of intelligence. In this design, process and no use original learn in books, but the assembler language using C language program, using the simulation software, and popular PROTEUS keil joint simulation, convenient debug program and modify the hardware, the results show that the scheme design of hardware correct procedures also meets the requirement.

Microcontroller chip microcomputer. (Single-Chip Microcomputer), is set to the CPU, RAM, ROM, timing, counting and a variety of interfaces in one of the micro-controller. His small size, low cost, functional, and are widely used in industrial automation and smart products. In the rapid development of information technology, computer science, with each passing day. Microcontroller as a branch of computer science, been considerable development in the field of computer control. With the improvement of microcontroller development with science and technology, SCM has become an indispensable tool for human production and life. The microcontroller applications has now penetrated into all areas of our lives, almost difficult to find which areas of the trail without microcontroller. Problems to be solved by the microcontroller majority is an old problem, the novelty is that with fewer components than before. Especially complex relationships of design logic control system, in the past, the common logic gate integrated circuit chip will require dozens of tablets or even hundreds of sheet, and now only a few pieces can be achieved, and convenient and flexible, do the design is modified or altered function simply rewrite almost do not need to change the software, hardware, thus greatly reducing the number of chips by single-chip programmable and highly integrated. Shorter development cycle, lower manufacturing costs, electricity cheaper and more reliable.

KEYWORDS: STC microcontroller, comprehensive experimental board, software and hardware combined with, and the program development design

前 言

“单片机原理及应用”是工科院校及机械系、电气与电子信息类、计算机类各专业的重要技术基础课程。而本次课程设计就是加强同学们对单片机的具体应用能力,巩固基础知识的掌握,以提升大家的应用能力为目的,掌握进行软件程序的设计能力,通过在电路板上进行验证程序是否能够正常运行,不断进行调试和修改,是设计更加完善,更加方便快捷。

而单片机的具体应用是比较广泛的,在家用电器领域、办公自动化领域、商业营销领域、工业自动化领域、、智能仪表与集成智能传感器传统的控制电路、汽车电子与航空航天电子系统等领域都有涉及,应用防伪很广,实用性较强,对于大家对单片机的学习热情有很大的提升。在本次课程设计中,主要通过在集成电路板上,将各个模块进行实物焊接,并注意焊接过程中的注意事项,通过大家的亲身经历,更进一步的了解其工作原理和设计思路,在可设过程中学习电路的排布,尽管本次课设所用电路板线路是设计好的,只需将各元器件正确的插入进行焊接就可以了,但是我们要学习其电路排布的能力,自己要设计个实物,实现一些功能,在焊接时自己就会遇到电路如何排布的问题;其次,本次课设主要实现以下一些功能:如流水灯、数码显示(自动加1)、LCD液晶显示一些字符等功能,这些都需要通过按键进行控制,还有一些其他的功能,如计数器、中断和定时等,由于课程设计时间有限,就不在进行设计验证,而流水灯、数码显示和LCD液晶显示是本次课设的重点,主要是通过软件设计实现其具体功能。

实物的设计焊接是比较简单的,主要是程序的设计,是检验大家能力重点,不仅实现单个功能的程序要能够设计,而且实现多个功能的综合程序也要学会设计,进行编写,这就牵涉到两个软件:Protues和Keil C软件,通过一学期的学习,大家对这两个软件的使用也比较熟悉,在本课程设计中就得到了很好的运用,通过对课设内容的具体设计和程序编写,提高了大家的编程能力,对单片机的应用有了更深的理解。

课程设计是检验大家对书本知识学习的具体应用能力,是检验大家是否能够进行学习的能力和动手能力,相信通过本次课设,我们的各种能力都会有很大的提升,所学知识也会有很好的巩固。

第1章系统概述

1.1设计题目

基于51系列单片机的实验平台开发设计

1.2系统设计目的和内容

1.2.1设计目的

(1)通过课程设计最为主要的是提升大家的应用能力,要学以致用,通过对课本知识的学习,经过课设进行检验学习成果,检验大家是否真正掌握,是否能够理论联系实际,是否能够通过课设改善大家对单片机具体应用的认识。

(2)通过在课程设计的过程中,检验大家综合应能力,包括:软件的仿真技术、电路焊接技术、元器件的选用以及对其的辨认能力、程序的编写能力、程序下载之电路板中进行综合验证的技术等。

(3)通过课程设计加强大家对书本上基础知识的巩固,了解自身的掌握程度,然后根据自己的具体情况进行不断的完善,弥补自身的不足,提升对基础知识的掌握深度,为今后的进一步学习打下坚实的基础。

(4)通过本次单片机课程设计的全部过程,使大家了解其具体过程,增长经验,并检验大家的综合能力,查找不足,不断的完善自身我,提高我们的综合运用能力,提升大家的技术水平,真正地掌握所学知识,并要能够灵活运用,实现其自身的价值,并要开发期还未开发出的价值,不断深化对其研究与学习,加强自身的能力。

1.2.2设计内容

基于51系列单片机实验平台,实现流水灯、数码管显示、LCD液晶显示一些字符等具体功能。课设中的51单片机电路板集成度较高,通过具体设计,由按键进行控制,能够实现多种功能,其应用范围较广,研发价值较高,具有很广的可开发能力。

流水灯主要通过与单片机的P2口连接,由按键进行控制,并运用并行I/O口扩展技术,有延时函数进行等时间间隔依次循环闪亮,这些都需要通过软件来实现,具体过程在整体设计方案中具体描述。

数码管显示是运用LED数码管来实现的,LED数码管具有显示亮度高、响应速度快的特点。最常用的是七段LED显示器,该显示器内部有七个条形发光二极管和一个小圆点发光二级管。这种显示器分为共阴极和共阳极两种,共阳极LED显示器的发光二级管的所有阳极连接在一起,为公共端;共阴极LED显示器的发光二级管的所有阳极连接在一起,为公共端;一般共阴极较为常用。本次课程设计采用两个数码管相连,依次显示0-60的数字,到59时,在下一次显示时,自动清零,从0再次开始显示,采用自动加1措施,有延时函数进行设置延时间隔。

LCD液晶显示一些字符,而液晶显示器(LCD)具有体积小、重量轻、功耗低、可以显示图形图像、便于用集成电路直接驱动、易于实现全彩色等特点,因此在仪器仪表、便携工具、监控系统及消费电子等领域有着广泛的应用。液晶显示器分为段式、字符式、点阵式等。段式只能显示固定的一些符号或字符,价格低廉;字符式可以显示数字和字符,驱动方便,但无法显示汉字。点阵式可以显示汉字,但价格较高。汉字液晶显示器又分为带字库和不带字库的两种。

字符型液晶显示器是一种用5×7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字,RT1602C液晶模块就属于此类型。课设中设计的显示字符是”HELLO BOY”。

1.2.3设计要求

(1)根据指导老师的要求,设计过程中要注意一些元器件的正负极不要接错;此外,焊接时要注意焊接的要领,尽可能地将焊接点焊的规范一些,美观一些。

(2)设计过程要完成,而电路焊接时有三个人为一组进行焊接,通过自己所学的知识,设计自己的程序进行验证,获得属于自己的劳动成果。

(3)在进行计算机平台上的仿真实验时,要找准所需的元器件,而晶振电路、电源电路和串路接口不用再画,Protues软件中51单片机内部已经含有。

(4)仔细总结课程设计过程所遇问题,以及解决方案,尽可能的实现较多的功能,综合应用所学知识,灵活应变。

1.2.4设计步骤

(1)首先要预习老师所发的电路图,了解各个模块是实现的具体功能,掌握各种元器件的构造和功能,并通过Protues软件在计算机上进行仿真。

(2)其次通过仿真,熟悉了课设的具体内容,接下来就是进行实物焊接,大家要在焊接室进行,老师将各种元器件发给大家,然后注意一些注意事项,接着就是在老师的指导下,开始进行焊接,电路板上的电路都是现成的,只需照着将各元器件插入焊牢固即可。

(3)接着要要用万用表对焊好的电路板进行测量,检测电路是否有短路或是否有一些节点没有焊好,而USB接口并不需要焊接,要将与其连接的线路隔断,避免发生短路。

(4)最为重要的就是程序设计,要根据电路的设计,进行程序设计,实现各种功能的程序可以分开写,也可以写综合程序,有一个程序实现多种功能,这种是较为复杂和麻烦的,考验大家的综合应用能力,大家可以先分模块设计,然后根据各模块的程序,综合到一块就可以成为综合程序。

(5)下载验证,将编写的没有错误的程序下载到电路板上进行验证,看是否能够事先预定的目标,通过按键进行控制,然后根据验证的情况进行修改或完善。

(6)答辩,各组的同学要带上本组焊接的电路板,到老师的办公室进行答辩,大家要根据自己设计的程序回答老师提出的问题,并当场在电路板上进行验证。

(7)书写课程设计报告,总结本次课程设计的收获与得失,作为本学期的一次宝贵的经验,为以后的学习奠定基础,巩固基础,完善自我。

第2章 整体设计方案

2.1开发板整体外观

2.2整板电路PROTUES仿真电路

2.3软件功能描述

软件主要实现流水灯、数码管显示(自动加1)和LCD液晶显示一些字符的功能,程序设计在第四章将有详细介绍。

2.4 仿真软件PROTUES中

 (1)流水灯仿真效果:

(2)数码显示器仿真效果:

(3)LCD液晶显示一些字符:

第3章 硬件电路设计

3.1两位一体共阴数码管

3.1.1数码管概述

大多数的单片机应用系统,都要配置输入和输出设备。常用的输入外设有键盘、BCD码拨盘等;常用的输出外设有LED数码管、LCD显示器、打印机等。

LED(Light Emitting Diode)数码管是由发光二极管构成的。

常见的LED数码管为“8”字型的,共计8段。每一段对应一个发光二极管。有共阳极和共阴极两种,如图8-1所示。共阴极发光二极管的阴极连在一起,通常公共阴极接地。当阳极为高电平时,发光二极管发光。

    同样,共阳极发光二极管的阳极连接在一起,公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管发光,显示相应的段。

LED数码管中还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。通过七个发光二极管亮暗的不同组合,可以显示各种数字。

为了使数码管显示不同的符号或数字,实际上是确定哪些段发光、哪些段不发光,就要为LED数码管提供段码(字型码)。

表1段码与字节中各位对应关系

代码位D7D6D5D4D3D2D1D0
显示段dpgfedcba
除 “8”字型的LED数码管外,还有“±1”型、“米”字型和“点阵”型LED显示器,如图8-2所示。本章均以“8”字型的LED数码管为例。

                      图8-2   其他各种字型的LED显示器

3.1.2数码管内部结构

3.1.3两位一体共阴数码管和74LS373锁存器接口电路

74LS273高电平输出电流为6.5mA,低电平灌入电流为20mA

74LS373高电平输出电流为6.5mA,低电平灌入电流为20mA

3.2LCD1602液晶

3.2.1LCD1602液晶简介

具有体积小、重量轻、功耗低、可以显示图形图像、便于用集成电路直接驱动、易于实现全彩色等特点,因此在仪器仪表、便携工具、监控系统及消费电子等领域有着广泛的应用。液晶显示器分为段式、字符式、点阵式等。段式只能显示固定的一些符号或字符,价格低廉;字符式可以显示数字和字符,驱动方便,但无法显示汉字。点阵式可以显示汉字,但价格较高。汉字液晶显示器又分为带字库和不带字库的两种。

字符型液晶显示器(LCD1602)是典型的代表,字符型液晶显示器是一种用5×7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字,RT1602C液晶模块就属于此类型。

3.2.2LCD1602液晶引脚介绍

显示容量:16×2个字符;工作电流2.0mA(5.0V);字符尺寸:2.95×4.35mm。

RT-1602C采用标准的16脚接口,各引脚情况如下:

第1脚:VSS为电源地;

第2脚:VDD为+5V电源;

第3脚:VL为液晶显示对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时,会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为数据/命令选择端,高电平时选择数据寄存器、低电平时选择命令寄存器。[RS:Register Selection]

第5脚:,读写操作选择(1-读,0-写)。

RS寄存器及操作
00指令寄存器写入
01忙信号和地址计数器读出
10数据寄存器写入
11数据寄存器读出
第6脚:E端为使能端,当E端由高电平跳变成低电平时(负跳变),液晶模块执行命令。

第7~14脚:D0~D7,为8位双向数据总线,与单片机的数据总线相连,三态。

第15脚:BLA,背光电源,通常为+5V,并联一个电位器,调节背光亮度。

第16脚:BLK,背光电源地。

3.2.3LCD1602液晶外围接口电路 

LCD1602与单片机接口的具体连接方式,LCD1602液晶连接插槽位JP4。在使用液晶时,在第三引脚连接了一个10K的电位器用来调整对比度,若程序运行后液晶无显示,则可调整此电位器。

            LCD1602与单片机接口 

3.3 串口通信

3.3.1串口通讯概述

(1)串行通信是一种能把二进制数据按位(逐位)进行传送的一种通信方式。

计算机与外界的通信有两种基本方式:并行通信和串行通信。

并行数据传送串行数据传送
原理各位数据同时传送数据按位顺序传送
优点传送速度快、效率高最少需要一对传输线即可完成:成本低
缺点数据位数→传输线根数:成本高速度慢,成本低
应用传送距离<30米,用于近距离或内部

几米~几千公里,用于计算机与外设之间
(2) 串行通信按信息的格式又可分为异步通信和同步通信两种方式。

    在异步通信中,每一个字符要用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个地发送和接收。

串行异步通信方式的特点是:数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。传送一个字符又称为一帧信息,传送一帧信息时,每一个字符前加一个低电平的起始位,然后是数据位,数据位可以是5~8位,低位在前,高位在后,数据位后可以带(也可以不带)一个奇偶校验位,最后是停止位,停止位用高电平表示,它可以是1位、1位半或2位(通常采用1位)

(3)串行口工作方式:

方式0:移位寄存器方式

方式0为移位寄存器输入/输出方式,用于扩展并行I/O接口。

该方式并不用于两个单片机之间的异步串行通信,而是用于串行口外接移位寄存器,扩展并行I/O口。

在方式0时,8位数据为一帧,无起始位和停止位,先发送或接收最低位。波特率固定为fosc/12。

发送过程:当数据写入发送缓冲器SBUF时,串行口将8位数据以fosc/12的波特率由RXD引脚输出,同时由TXD引脚输出同步脉冲。当字符发送完成时,置TI=1。

接收过程:除控制字置方式0外,还应置REN=1,且清RI=0,接收器启动后,RXD为数据输入端,TXD为同步脉冲输出端。接收器以fosc/12的波特率采样RXD引脚输入的数据。当接收完8位数据时,由硬件置RI=1。

方式1: 8位数据异步通讯方式

设定为10位异步通信方式:1个起始位(“0”),8位数据位,1个停止位(“1”)。

波特率:用T1作为波特率发生器

                     

发送:在TI=0时,当把数据写入SBUF后,即可启动发送,串行口内自动把发送缓冲器中的数据送入发送移位寄存器。发送移位寄存器先发一位起始位,接着按先低位后高位,再发停止位,从而完成一帧的发送。串行数据均由TXT端输出,TI在发送停止位时,由硬件置TI=1。

接收:在RI=0和REN=1的条件下。在接收到第9数据位(即停止位)时,接收电路必须满足以下两个条件:

RI=0且SM2=0;

接收到的停止位为“1”时,

才能把接收到的8位字符存入“SBUF(接收)”中,把停止位送入RB8中,使RI=1并发出串行口中断请求(若中断开放)。若上述条件不满足,则这次收到的数据就被舍去,不装入“SBUF(接收)”中,这是不能允许的,因为这意味着丢失了一组接收数据。

方式2和方式3都是11为异步收发。

两者的差异仅在于通信波特率有所不同:方式2的波特率由fosc经过32或分频后提供;方式3的波特率由定时器T1(或T2)的溢出率经32分频后提供。

方式2和方式3的发送过程类似于方式1,所不同的是方式2和方式3有9位有效数据位。发送时,CPU除要把发送字符装入“SBUF(发送)”外,还要把第9位数据位预先装入SCON的TB8中。第9数据位可由用户安排,可以是奇偶校验位,也可以是其它控制位。

第9数据位的值装入TB8后,便可用一条以SBUF为目的的传送指令把发送数据装入SBUF来启动发送过程。一帧数据发送完后,TI=1,CPU便可通过查询TI来以同样方法发送下一个字符帧。

方式2和方式3的接收过程也和方式1类似。所不同的是:方式1时RB8中存放的是停止位,方式2和方式3时RB8中存放的是第9数据位。因此,方式2和方式3时必须满足接收有效字符的条件变为:RI=0且SM2=0或收到的第9数据位为“1”,只有上述两个条件同时满足,接收到的字符才能送入SBUF,第9数据位才能装入RB8中,并使RI=1;否则,这次收到的数据无效,RI也不置位。

  四种工作方式的波特率比较:

方式波特率传送位数发送端接收端用途
01/12 Fosc

(固定不变)

8(数据)

RXDRXR接移位寄存器,扩充并口
12SMOD/32T1溢出率

10(起始位、8位数据位、

停止位)

TXDRXR单机通信
22SMOD/T1fosc

11(第9位为1:地址;

为0:数据)

TXDRXR多机通信
32SMOD/32T1溢出率

11位(同方式2)

TXDRXR多机通信
3.3.2MAX232接口电路

MAX232是一款可以实现EIA-232接口的低功耗电平转换芯片,低功耗、单电源双路RS-232发送/接收器,可以完成TTL和RS-232串行双向电平的转换。通过MAX232的TTL和RS-232输入/输出口,可以自动调节TTL和RS-232串行通信信号的电平匹配。数据传输速率可以达到250kbps。

            MAX232串行接口电路

第4章 软件设计

4.1程序整体流程图

综合程序流程图:

                 开  始

 

                 P3.2=0               

             

        P3.3=0                P3.4=0                  P3.5=0 

       流水灯显示      数码显示器显示      LCD液晶显示

                                 P3.2=1

                                按键复位,

               等待下一次开始

4.2程序清单

(1)流水灯程序:

#include                         //51单片机头文件

#include

#define uint unsigned int               //定义无符号整形变量

#define uchar unsigned char             //定义无符号字符型变量

uchar temp;

void delay(uint);                      //延时函数声明

int  num;                              //定义整型变量

void main()              //主函数声明

{

  while(1)

   {    

      temp=0xfe;

        for(num=0;num<7;num++)    //for语句实现L0-L7的循环

        {

          P2=temp;

          delay(100);

          temp=_crol_(temp,1);          //左移赋给temp

          P2=0xff;                      //P1口各位均为1

          delay(100);    

        }

      temp=0x7f;                        

        for(num=0;num<7;num++)          //for语句实现L7-L0的循环

        {

          P2=temp;

          delay(100);

          temp=_cror_(temp,1);

          P2=0xff;

          delay(100);    

        }    

    }

}

(2)数码显示器程序:

#include

unsigned  char count=0;     //定义中断次数计数器

unsigned   char second=0;       //定义秒计数器

unsigned  char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

 timer0()  interrupt  1    {       //定义秒计数器

         TH0=0x3c;            //初值重装载

         TL0=0xb0;

         count++;             //中断次数增1

         if(count==20){       //若中断20次,相当于1秒

         count=0;             //中断次数清零

         second++;            //秒计数器清0

         }

         if(second==60) second=0;  //若秒计数器=60,清零

          P0=table[second/10];    //P0口输出显示

          P0=table[second%10];    //P0口输出显示

        }

        void shumaxianshi(){ TMOD=0x01;  //定义T0定时方式1

        TH0=0x3c;                 //50ms溢出初值

        TL0=0xb0;                 

        P0=table[second/10];      //P0口输出显示

        P0=table[second%10];      //P0口输出显示

        TR0=1;                    //启动定时器

        ET0=1;                    //打开定时器0中断

        EA=1;                    //打开总中断

        while(1){} 

    }

(3)LCD液晶显示器程序:

#include

sbit P16=P1^6;

sbit P15=P1^5;

sbit P17=P1^7;

sbit P27=P2^7; 

sbit P26=P2^6;

sbit P25=P2^5;

unsigned char LCD_Status;

void delay(unsigned int count)

{ unsigned char i;

 while(count--)

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

}

unsigned char Busy_Check()         //检查忙函数

{  P16=0;                

   P17=1;

   P15=0;

   P27=0;P26=1;P25=0;

   P15=1;

   delay(2);

   LCD_Status=P0;

   delay(2);

   P27=0;P26=0;P25=0;

   return LCD_Status;

}

void wcmd(unsigned char cmd)     

{     //&0x80取出最高位D7,见命令9(读忙标志BF及光标地址AC命令格式)

while((Busy_Check()&0x80)==0x80);  

  P16=0;

  P17=0;

  P15=0;            

  P27=0;P26=1;P25=0;

  P15=1;            

  P0=cmd;             

  delay(2);

   P27=0;P26=0;P25=0;                

void wdat(unsigned char dat)        //写数据函数,RS=1;RW=0 

{while((Busy_Check()&0x80)==0x80);      //写数据前先检查设备是否忙

  P16=1;

  P17=0;

     P15=0;

  P27=0;P26=1;P25=0;

     P15=1;

  P0=dat;        

  delay(2);            

  P27=0;P26=0;P25=0;            

}

void init()                             // 初始化函数,主要写命令

{  wcmd(0x38);                //38H=0011 1000,使用8位,用5×7字型

   delay(20);                  //改为0x3c=0011 1100,就用5×10字型 

   wcmd(0x01);               //改为0x3c=0011 1100,就用5×10字型

   delay(20);               

   wcmd(0x06);            //06H=0000 0110,字符不动,光标自动右移一格

   delay(20);

   wcmd(0x0e);           //0eH=0000 1110,开显示,有光标,字符不闪动

   delay(20);

}

void  lcd()               //主函数

{unsigned char x=245;

  init();                  //0x80,见命令8

  wcmd(0x80);            //写入显示缓冲区起始地址为第一行第一列

  wdat('H');            //第一行第一列显示字符”H”

  wdat('E');            //第一行第二列显示字符”E”

  wdat('L');            //第一行第三列显示字符”L”

  wdat('L');          //第一行第四列显示字符”L”

  wdat('O');            //第一行第五列显示字符”O”

  wcmd(0x80+0x45);     //写入显示缓冲区起始地址为第二行第六列

  wdat('B');            //第二行第六列显示字符”B”

  wdat('O');             //第二行第七列显示字符”O”

  wdat('Y');                 //第二行第八列显示字符”Y”

  while(1);

}

(4)实现三种功能的综合程序:

#include

#include

unsigned  char count=0;

unsigned   char second=0;

unsigned  char code  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned int number;

unsigned int temp;

unsigned  int  num;

sbit P16=P1^6;

sbit P15=P1^5;

sbit P17=P1^7;

sbit P27=P2^7; 

sbit P26=P2^6;

sbit P25=P2^5;

sbit P3_2=P3^2;

sbit P3_3=P3^3;

sbit P3_4=P3^4;

sbit P3_5=P3^5;

sbit RS=P2^0;

sbit RW=P2^1;

sbit E=P2^2;

unsigned char LCD_Status;

   timer0()  interrupt  1    {         //数码管显示模块

         TH0=0x3c;

         TL0=0xb0;

         count++;

         if(count==20){

         count=0;

         second++;

         }

         if(second==60) second=0;

          P0=table[second%10];

          if(P25=0,P26=0,P27=0)

          return;

          P25=1;P26=0;P27=0;

          P0=table[second/10];

          return;

        }

        shumaxianshi(){ TMOD=0x01;

        TH0=0x3c;

        TL0=0xb0;

        P0=table[second%10];

        P0=table[second/10];

        TR0=1;

        ET0=1;

        EA=1;

        while(1){}

    }

 void delay(unsigned char time)          //流水灯模块

{

  unsigned char j=500;

for(;time>0;time--)

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

}

void  led()

  {

  while(1)

   {    

      temp=0xfe;

        for(num=0;num<7;num++)

        {

          P2=temp;

          delay(100);

          temp=_crol_(temp,1);

          P2=0xff;

          delay(100);    

        }

      temp=0x7f;

        for(num=0;num<7;num++)

        {

          P2=temp;

          delay(100);

          temp=_cror_(temp,1);

          P2=0xff;

          delay(100);    

        }    

    }

}

unsigned char Busy_Check()            //LCD模块

{  P16=0;                

   P17=1;

   P15=0;

   P27=0;P26=1;P25=0;

   P15=1;

   delay(2);

   LCD_Status=P0;

   delay(2);

   P27=0;P26=0;P25=0;

   return LCD_Status;

}

void wcmd(unsigned char cmd)     

{     

while((Busy_Check()&0x80)==0x80);  

  P16=0;

  P17=0;

  P15=0;            

  P27=0;P26=1;P25=0;

  P15=1;            

  P0=cmd;             

  delay(2);

   P27=0;P26=0;P25=0;                

void wdat(unsigned char dat)

{while((Busy_Check()&0x80)==0x80);      

  P16=1;

  P17=0;

     P15=0;

  P27=0;P26=1;P25=0;

     P15=1;

  P0=dat;        

  delay(2);            

  P27=0;P26=0;P25=0;            

}

void init()           

{  wcmd(0x38);      

   delay(20);       

   wcmd(0x01);       

   delay(20);

   wcmd(0x06);      

   delay(20);

   wcmd(0x0e);       

   delay(20);

}

void lcd()            

{unsigned char x=245;

  init();          

  wcmd(0x80);      

  wdat('H');      

  wdat('E');     

  wdat('L');      

  wdat('L');

  wdat('O');      

  wcmd(0x80+0x45);     

  wdat('B');      

  wdat('O');      

  wdat('Y');                        

  while(1);

}

void main()

  {

      if(P3_2==0)

    

 while(1)

 {if(P3_2==0)

  led();

  delay(100);

  shumaxianshi();

  delay(100);

  lcd();

  delay(100);

 }

 if(P3_2==1)

  while(1)

  {if(P3_3==0)

   led();

  if(P3_4==0)

   shumaxianshi();

  if(P3_5==0)

   lcd();

   }

  }

第5章 调试及故障分析

5.1 焊接准备阶段元器件测试、电路原理图故障分析

(1)焊接准备阶段,对排阻的认识与检测:要找出公共端,排电阻也叫集成电阻,其外形及内部结构见图:

          

图中BX表示产品型号,10表示有效数字,3表示有效数字后边加“0”的个数,103即10000Ω(10K)。半字线“--”后面的9表示此电阻有9个引脚,其中的一个引脚是公共引脚,一般都在两边,用色点标志。A512是51*100=5100 欧=5.1K;排电阻的误差表示方法:L±0.01%;B±0.1%;F±1%;G±2%;J±5%;K±10%; M±20%

注意:焊接排电阻的时候,一定要注意公共端的方向。

(2)电容的认识与检测:电容在电路中一般用”C”加数字表示(如C13表示编号13的电容)。电容是有两片金属膜紧靠中间用的绝缘材料隔开面组成的元件,电容特性主要是隔直流通交流。,电容容量的大小就是表示能贮存电能的大小,电容对交流信号的阻碍作用称为容抗,它与交流信号的频率和电容量有关。

如果标值473,即为47×1000pF=0.047uF。(后面的4、3,都表示10的多少次方)。又如:332=33×100pF=3300pF;102=10×102pF=1000pF;             224=22×104pF=0.22uF。

在各种电子设备中,调谐、耦合、滤波、去耦、隔断直流电、旁路交流电等,都需要用到电容器。电容器通常又叫做电容。电容的种类也很多,常见的电容有以下几种:电解电容、贴片电容、铝电解电容器、电力电容器、薄膜电容器等。

这些电容的外表皮上都标有其容值,而正负极一般是长引脚的是正极,短引脚的是负极,其他类型的电容正负极,一般会标在引脚附近。

(3)电阻的测试:色环电阻的识别方法不是随便规定的,这个方法是科学的、严谨的。色环表示实际上是数学方法的演绎和变通;它和10的整数幂、乘方的指数具有密切的逻辑关系;它是国际上通用的科学计数法的“色彩化”。这个方法既是十分美妙,又是十分巧妙!

(1)颜色和数字的对应关系:

    颜色和数字之间的对应关系是国际上公认的识别方法,记住它对进一步学习很有帮助。

颜色绿
颜色绿
数字1234567890
所谓“四色环电阻”就是指用四条色环表示阻值得电阻。从左向右数,第一、第二环表示两位有效数字,第三环表示数字后面添加“0”的个数。所谓“从左到右”,是指把电阻按照图中所画的方向放置----四条色环中,有三条相互之间的距离得比较近,而第四环距离稍微大一点。

四环电阻的偏差环一般是金或银,一般不会识别错误,而五环电阻则不然,其偏差还有与第一环(有效数字环)相同的颜色,如果读反,识读结果将完全错误。

五环电阻阻制表示方法:

第一、二、三为有效数字,第四环为倍数,第五环为误差(依颜色)

例如:红棕红棕棕 阻值为 212×101Ω=2.12 KΩ±1%

颜色和数字的对应关系:

首先我们向你介绍颜色和阿拉伯数字之间的对应关系,这种规定是国际上公认的识别方法,记住它对我们进一步学习很有帮助。                                                                        

五色环对应的数值

颜色数字颜色数字
16
27
38
49
绿50
建议分两段背诵,容易记忆: 

棕 红 橙 黄 绿 

兰 紫 灰 白 黑 

金色代表误差±5%,银色代表误差±10% 

(4)电路原理图故障分析:在Protues软件仿真时,电路容易出错的地方是晶振电路、串行口电路、电源电路和51单片机两边的底座都不用画,只需要将其余的元器件画上即可;此外是上拉电阻的选用,要仔细地对准原理图上的符号,以免选错;还有是各引脚的符号容易出错,由于引脚较多,一定要仔细辨认,避免出错。

5.2 电路焊接过程中的故障分析

一般在焊接过程中,出错的几率较小,只要将各元器件的正负极辨认好即可,而元器件的排布就只需按照电路板上安装就好。接着就说明几点容易出错的地方:

  (1)各元器件焊接的先后顺序,由于电阻较多,就先焊接电阻,而电阻中要先从个数较少的焊起,依次由少到多的进行焊接,这样不容易出错。

(2)其次,是焊接电容和二极管,电容和二极管要辨认出正负极,一般是长引脚是正极,短引脚是负极,安排进行焊接即可。

(3)按键焊接时,特别要注意,在同个侧面的两个引脚是一对,按照上面一对下面一对进行焊接,不要焊成了左右排布。

(4)最后是LED数码管和LCD显示器的焊接,先要焊接底座,焊接好之后,将显示器插入即可,而晶振与电源电路都按照电路板插入即可。

(5)此外就是USB电路那一条线要割断,以免线路短路。

5.3 程序编写过程中的故障分析

(1)在编写流水灯程序时,要注意是从L0-L7,再由L7-L0循环流动,对于字符段码的算法要注意些,其次是延时函数要设置适当。以免流水灯闪亮过快。

(2)在编写数码管显示时,两个7段显示的数码管现实的数字一样,而不是每个固定的一段时间,个位自动加1,各位每逢9时,在下一时刻各位清0,十位加1,出现此情况的原因是由于译码器是由P2.5、P2.6和P2.7进行选通的,而两个锁存器的LE分别是由译码器选通的引脚Y0和Y1进行控制锁存器中的8路D触发器的时钟控制引脚。由于在p2.5=0,p2.6=0,p2.7=0的情况下,选通的是Y0,接的是个位,p2.5=0-1,p2.6=0,p2.7=0选通的是Y1,接的是十位,只要将十位与个位的选通分离开即可,由second/10和second%10进行判别。此外还有就是十位与个位显示的问题,十位变个位,个位变十位,这是由于在书写程序时将second/10和second%10顺序写反啦,将其调整一下即可。

(3)在编写LCD液晶显示程序时,要了解如何写入指令,设置显示位置和LCD初始化的设定,这些都是较为主要的程序设置,编写是要较为注意。

(4)在综合程序中,首先要注意如何将三个程序编写成一个程序,不能简单的将三个分程序需进行叠加,要简化其过程,将不必要的程序要删除,例如多余的主函数和延时函数,在定义综合程序的主函数时,只需一个即可,主要内容是按键控制程序,如何实现按键控制三个分程序,这在第四章中有了详细的说明,在此不再庠序。

5.4 实物演示效果

(1)流水灯演示效果:

(2)数码显示器演示效果:

(3)LCD液晶显示器演示效果:

结论

通过本次课程设计我们获益颇多。既巩固了单片机的一些相关基本知识,又熟悉了Keil C与Protues软件的相关操作。对一个整体的电子设计项目,有了一定的认识,初步学会了一定的设计方法,明白了如何用这种方法去实现一个系统的设计。 

在电子技术应用领域中,单片机的应用愈来愈多地应用到各行各业。如:工业控制、仪器仪表、电讯技术、办公自动化和计算机外部设备、汽车与节能、商用产品、家用电器等。目前,单片机正朝着大容量片上存储器、多功能I/O接口、宽范围工作电源和低功耗方向发展。要开发单片机的应用,不但要掌握单片机硬件和软件方面的知识,而且还要深入了解各应用系统的专业知识,只有将这两方面的知识融会贯通和有机结合,才能设计出优良的应用系统。一个好的工程设计师不仅要掌握单片机的工作原理,而且还要不断了解各公司最新芯片的结构和应用,在实际应用中找到最好的性能价格比。所以以后还要注意培养接受新知识的自学能力,掌握芯片发展动态。 同时也让我们找到了自己在某些知识上的欠缺,并通过这次机会得到弥补,取得进步!

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在的辛勤指导下,终于游逆而解。同时,在的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢

谢辞

本次实验使我受益匪浅,首先要感谢的的悉心指导,每当我们遇到较为棘手的问题是,老师都会耐心的指导讲解,是我们真正的学会如何正确的在电路板上焊接各种电子元器件,并在焊接完成之前,通过该软件进行设计和仿真,而焊接完成之后,进行验证电路板是否能够正常运行,并不断的进行调试。在不断地练习中学会了自己的处理一些较小的问题,自主的去完成设计内容,巩固对单片机的基础知识和各种元器件的工作原理,提高自身的综合应用能力,真正地理解其实现过程,真正的将知识学到手中,能过灵活灵用,变固定的知识为灵活的应用。

同时要感谢同学们无私的帮助,正是他们我才能在实物焊接与软件程序设计的道路上走得更轻松,让我觉得学习是一个快乐的过程。在与他人的交流和讨论中我也收获很多,同时也被同学们刻苦钻研的精神所深深感染。乐于助人,耐心的解答我提出的问题,对我的设计的程序提出了许多中肯的修改意见,并对一些技术上的细节给予了很大的帮助。 

最后再次感谢老师的谆谆教导,是我们掌握到了本领和技术,以及再次感谢帮助过我的同学,使我感到了集体的温暖,互帮互助,共同解决课程设计过程中所遇到的问题,以使我能过顺利的完成本次课程设计,受益匪浅。

参考文献

[1]李蒙 毛建东编 单片机原理及应用[M].  北京:中国轻工业出版社, 2010

[2]《单片机原理及应用技术》,黄仁欣主编,清华大学出版社

[3]阎石主编.数值电子技术基础.北京:高等教育出版社,1998

[4]谭浩强.C程序设计.北京:清华大学出版社,2005

[5]钟睿.MCS-51 单片机原理及应用开发技术.北京:中国铁道出版社,2006

[6]蓝清华等.单片机应用教程.北京:清华大学出版社,1999

[7] 《单片机的C语言应用程序设计》,马忠梅等,北京航空航天大学出版社

[8]《单片微型计算机与接口技术》,李群芳等,电子工业出版社

附 录 

单片机(Single-Chip-Microcomputer),又称为单片微型计算机,是一片集成电路芯片,采用超大规模集成电路技术,把具有数据处理能力的处理器CPU、随机存储器RAM、只读存储器ROM、输入接口、输出接口(I/O)和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路PWM、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而“完善”的计算机系统。

51系列单片机一般采用40只引脚的双列直插式(DIP:Dual In-line Package)封装结构。

单片机不是完成某一个单一逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型计算机,和微型计算机相比,单片机只缺少了I/O设备。概括地讲:一块芯片就成了一个计算机。它的体积小、质量轻、价格便宜、为应用和开发提供了便利条件。

单片机内部也有和PC机功能类似的模块,比如CPU,内存(RAM),并行总线(AB、DB、CB),还有和硬盘作用相同的存储器件(ROM),不同的是它的这些部件性能都相对微型计算机来讲弱很多,不过价钱也很低的,一般在10元左右。用它嵌入到应用系统中,来做一些控制电器一类不是很复杂的工作完全可以,使应用系统实现智能化。

现代人类生活中所用的大多数的电子和机械产品中都集成有单片机。手机、电话、计算器、家用电器(全自动滚筒洗衣机、排烟罩、VCD等等)、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2个单片机【计算机的键盘中,就有一个单片机】。一部汽车上一般配备40多个单片机,复杂的工业控制系统上甚至可能有数百个单片机在同时工作!现在的电动车的电池管理系统,就有利用了很多的单片机。

所以通过本次课程设计,提高大家的单片机的设计与编程能力,以适应当今社会的发展,为今后能够找到较好的工作打下坚实的基础,功夫不负有心人,愿大家都能将单片机学得更好,拥有更强的实力,迎接未来的挑战。下载本文

显示全文
专题