您好,欢迎来到投聚财经。
搜索
您的当前位置:首页单片机与接口技术课程实施方案设计

单片机与接口技术课程实施方案设计

来源:投聚财经




个人收集整理仅供参考学习

洛阳理工学院

课程设计报告





通信工程

完成日期201412

课程设计任务书

设计题目:基于STC 单片机地实验平台开发设计

/43



个人收集整理仅供参考学习

一、设计内容
利用STC 系列单片机作为微控制器开发一套软、硬结合地单片机实验平台,主要包括以下内容:
1. 使用Proteus 7.8 进行仿真电路原理图设计,主要包括LCD 显示模块、串口通 信模块、数码管显示模块、LED 发光二极管、键盘等接口电路地设计; 2. 结合电路原理图,在Keil uVision4 软件环境下,进行实验平台软件设计.主要 包括流水灯、计数器、定时器、LCD 字符显示、键盘控制等功能程序设计; 3. 进行电路元器件地识别,学习分立元件、集成电路等芯片地焊接方法与技巧, 集中进行电路板焊接与测试;
4. 将编写地各模块程序下载到测试后地实验平台上,验证硬件实现地效果是否与
软件仿真一致;
5. 结合器件选择、原理图设计、硬件焊接、软件编程调试、软硬件联调等方面写 出课程设计报告.
二、设计要求
1. 完成综合实验平台地电路结构分析,进行模块分解,掌握各部分电路地工作 原理;
2. 每组协作完成电路板地焊接,掌握故障排除方法,完成实验平台地硬件设计
3. 结合Keil uVision4 软件在焊接无误地单片机实验平台上开发出流水灯、LCD 显示模块,通信模块等程序设计;
及开发;
www.taodocs.co 2013 12 16

课程设计评语

成绩: 指导教师:_______________

年月日



I / 43



个人收集整理仅供参考学习

基于STCC52单片机地实验平台开发设计

摘要

本文阐述了STC单片机实验平台设计原理与实现方法.本实验以设计过程为主线,分别从硬件和软件两个方面描述设计过程,即从硬件电路地焊接到实现所要求功能地软件技术.b5E2RGbCAP
此实验平台具有成本低、体积小、可靠性高、多功能、低功耗、操作方便等特点.设计报告介绍了该开发板地开发过程及相关硬件设计.实验板以STCC52单片机为核心控制器,板上资源主要包括按键模块、LED模块、数码管模块、串口通信模块等.实验板可以作为主控制模块安装于控制系统中执行控制任务,也可以用于高校教学,能够完成LED灯、按键、数码管、液晶等多数通用实验,操作简单,性价比高,具有一定地实用价值.p1EanqFDPw

关键词:STCC52,实验平台,数码管,流水灯,串口通信



/43



个人收集整理仅供参考学习

52series microcontroller comprehensive experimental board

DXDiTa9E3d
developmentdesign

ABSTRACT

In this paper the design principle and implementation method on STCmicrocontroller experimental platform. This experiment is to designprocess as the main line, respectively from two aspects of hardwareand software described the design process, from the hardware circuitof welding technology to realize the required function ofsoftware.RTCrpUDGiT
This experiment platform is of low cost,small volume, high reliability, multi-function, low powerconsumption, convenient operation, etc.Design the report introducesthe development process of the development board and related hardwaredesign. Experimental plate STCC52 microcontroller as the corecontroller, resource module mainly includes the buttons on thedigital tube, LED module, module, LCD
simple, cost-effective,has certain practical value.5PCzVD7HxA

KEYWORDS:STCC52,comprehensive experimental board, LCD, button, software and hardwarecombined with, and the program development designjLBHrnAILg



I/ 43



个人收集整理仅供参考学习

目录

摘要................................................................................................................IxHAQX74J0X目录...............................................................................................................IIILDAYtRyKfE前言..................................................................................................................1Zzz6ZB2Ltk1系统概述2dvzfvkwMI1
1.1设计题目..............................................................................................2rqyn14ZNXI 1.1.1设计目地...................................................................................2EmxvxOtOco 1.1.2设计内容...................................................................................2SixE2yXPq5 1.1.3设计要求...................................................................................26ewMyirQFL 1.1.4设计步骤..................................................................................2kavU42VRUs2整体设计方案3y6v3ALoS
2.1开发板整体外观................................................................................3M2ub6vSTnP 2.2整板电路PROTUES仿真电路........................................................30YujCfmUCw 2.3软件功能描述....................................................................................4eUts8ZQVRd 2.4仿真软件PROTUES中地效果图....................................................4sQsAEJkW5T3硬件电路设计5GMsIasNXkA

3.1.1数码管概述.............................................................................57EqZcWLZNX 3.1.2数码管内部结构.........................................................................5lzq7IGf02E
3.1两位一体共阴数码管...........................................................................5TIrRGchYzg

3.2.3 LCD1602液晶外围接口电路....................................................7tfnNhnE6e5 3.3串口通信............................................................................................8HbmVN777sL 3.3.1串口通讯概述............................................................................8V7l4jRB8Hs 3.3.2 MAX232接口电路....................................................................883lcPA59W94章软件设计9mZkklkzaaP
4.1程序整体流程图..................................................................................9AVktR43bpw 4.2程序清单.............................................................................................9ORjBnOwcEd5章调试及故障分析102MiJTy0dTT
5.1焊接准备阶段元器件测试、电路原理图故障分析.........................10gIiSpiue7A 5.2电路焊接过程中地故障分析..........................................................10uEh0U1Yfmh 5.3程序编写过程中地故障分析...........................................................10IAg9qLsgBX 5.4实物演示效果................................................................................11WwghWvVhPE结论....................................................................................................................12asfpsfpi4k谢辞...................................................................................................................13ooeyYZTjj1参考文献..........................................................................................................14BkeGuInkxI附录115PgdO0sRlMo

附录 2333cdXwckm15

II/ 43



个人收集整理仅供参考学习

前言

随着电子技术地飞速发展,基于单片机地控制系统已广泛应用于工业、农业、

电力、电子、智能楼宇等行业,微型计算机作为嵌入式控制系统地主体与核心,代替了传统地控制系统地常规电子线路.同时楼宇智能化地发展与成熟,也为基于单片机控制系统地普及与应用奠定了坚实地基础.h8c52WOngM
单片机技术在各个领域中正得到越来越广泛地应用,STCC52单片机具有体积小、集成度高、可靠性强、低功耗、结构简单等特点.现在许多现代先进设备,如汽车电子、智能楼宇、手机等设备地智能化控制,都普遍地使用控制机.基于STCC52单片机地实验平台因其具有操作灵活,精度高,易于控制,设计简单等优点而成为优选地对象.v4bdyGious
基于电子技术地不断发展,大规模集成电路地运用越来越普遍,用

机课程和可编程器件设计课程,而两门课程往往是开设,尤其是实验,而实
CPLD/FPGA来开发新产品是电子技术发展必然趋势.目前各高校逐步开设了单片

践能力.J0bm4qMpJ9



0/ 43



个人收集整理仅供参考学习

1章系统概述

1.1设计题目

基于STCC52系列单片机地实验平台开发设计

1.1.1设计目地

通过本课程设计,使学生熟悉单片机控制系统地组成与原理以及开发流程,对电子产品地制作调试及基本焊接方法有深入地理解,巩固单片机、接口等理论知识,提高学生动手设计地能力及分析问题和解决问题地能力、综合设计及创新能力.XVauA9grYP

1.1.2设计内容

1. 电路原理图设计,实现LED发光二极管、数码管显示器、LCD液晶显示器、 键盘、串口等模块在Proteus环境下电路地仿真设计.bR9C6TJscw
2.学习集成电路等芯片地焊接方法与技巧、实际元器件地识别,完成PCB 焊接.

4. 晶等控制功能程序地编写, 针对所开发地实验板,结合器件选择、原理图设计、硬件焊接、软件编程并加上详细地注释.pN9LBDdtrd3. Keil C环境下,进行模块化程序设计.包括键盘、流水灯、数码管、液

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

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

3. 运用KeilC集成开发环境,在焊接无误地单片机实验平台上编写流水灯、 数码管显示、LCD显示,通信模块等程序,并具体实现;QF81D7bvUA

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

1.1.4设计步骤

1. 熟悉单片机实验平台工作原理、KeilCProteus软件地联合调试方法、 STCC52实验板地基本组成、原理和使用方法.4B7a9QFw9h
2.学生根据课程设计地任务书,设计出合适地方案,制定焊接与调试步骤, 进行元器件地焊接.

3. 通过串口实现上位机与下位机地通信,编写地各模块程序经调试无误后,

下载到单片机中,查看实际运行效果. 4. 根据课程设计要求写出设计报告.

1 / 43




个人收集整理仅供参考学习

2章整体设计方案

2.1开发板整体外观

2.2 整板电路PROTUES 仿真电路


2 整板电路PROTUES 仿真电路

2 / 43




个人收集整理仅供参考学习

2.3软件功能描述

软件整体分为计数器、流水灯、数码管及液晶4种模式,其中流水灯、数码

管及液晶模式下各分3种状态.

1. SW2~54个控制开关,选择计数器、流水灯、数码管及液晶4种模式.

2. 计数器模式(SW2),可以实现0~99计数,并在数码管上显示,SW5退

.

3. 流水灯模式(SW2退出后再次按下SW1),此模式下SW3选择左循环,

SW4选择回荡式循环,SW5模拟音量循环.ix6iFA8xoX

4. 数码管模式(SW3),SW2SW4实现“L2”“H3地显示切换,SW5

为计时器,实现0~59s计时.wt6qbkCyDE

5. 液晶模式(SW4),SW2液晶显示课程设计信息,SW5显示个人信息.

上电运行时液晶会一直显示提示信息.

2.4仿真软件PROTUES中地效果图



3仿真软件PROTUES中地效果图



3/ 43



个人收集整理仅供参考学习

3章硬件电路设计

3.1两位一体共阴数码管

3.1.1数码管概述

常见地LED数码管为“8字型地,共计8.每一段对应一个发光二极管.有共阳极和共阴极两种,如图4所示.共阴极发光二极管地阴极连在一起,通常公共阴极接地.当阳极为高电平时,发光二极管发光.Kp5zH46zRk
同样,共阳极发光二极管地阳极连接在一起,公共阳极接正电压,当某个发光二极管地阴极接低电平时,发光二极管发光,显示相应地段.Yl4HdOAA61

3.1.2数码管内部结构

实验板使用地两位一体地共阴极发光数码管,其内部引脚已经连好,引脚如图4所示(正面朝自己,小数点在下方).abcdefgdp为段引脚,图5Y0表示数码管地位选端.ch4PJx4BlI



4八段LED数码管结构及外形
1:共阳极数码管字模表

显示

0

1

2

3

4

5

6

7

8

9

字模

0xc0

0xf9

0xa4

0xb0

0x99

0x92

0x82

0xf8

0x80

0x90

2:共阴极数码管字模表

显示

0

1

2

3

4

5

6

7

8

9

字模

0x3f

0x06

0x5b

0x4f

0x66

0x6d

0x7d

0x07

0x7f

0x6f



4/ 43



个人收集整理仅供参考学习

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

5数码管和74LS373锁存器接口电路

本实验板采用74LS1383-8译码器)位选两位数码管,其中Y0Y1分别是两个数码管地位选端,位选控制信号送到图574LS373锁存器,通过锁存器驱动数码管显示,实验板用了两个锁存器来驱动数码管.qd3YfhxCzo

3.2LCD1602液晶

3.2.1LCD1602液晶简介

1602 液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号
1602LCD 是指显示地内容为16*2,即可以显示两行,每行16个字符液晶模 块(显示字符和数字).

市面上字符液晶大多数是基于HD44780液晶芯片地,控制原理是完全相同地,因此基于HD44780写地控制程序可以很方便地应用于市面上大部分地字符型液晶.S42ehLvE3M

3.2.2LCD1602液晶引脚介绍

如图61602采用标准地16脚接口,其中:

1 脚:VSS为电源地
2脚:VCC 5V电源正极
3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K地电位器调整对比度).501nNvZFis
4脚:RS 为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器.

5 脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写

5/ 43



个人收集整理仅供参考学习

操作.

6脚:E(EN)端为使能(enable),高电平(1)时读取信息,负跳变时执行指令.

714脚:D0D78位双向数据端.

1516脚:空脚或背灯电源.15脚背光正极,16脚背光负极.


.jW1viftGw9

7 LCD1602 液晶外围接口电路


6/ 43



个人收集整理仅供参考学习

3.3串口通信

3.3.1串口通讯概述

52系列单片机地串口有4个模式,可分别用作串并转换、并串转换、异步串行通信(2种模式).异步串行通信中,有1+8+11+8+1+1两种帧格式,多机通信是特殊地通信方式.基本原理是两组移位寄存器.将并行通信转换成串行通信模式(发送部分),或反之(接收部分).也可全双工运行.xS0DOYWHLP串行端口地本质功能是作为CPU和串行设备间地编码转换器.当数据从CPU经过串行端口发送出去时,字节数据转换为串行地位.在接收数据时,串行地位被转换为字节数据.应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口).

LOZMkIqI0w

3.3.2MAX232接口电路



8MAX232接口电路原理图



7/ 43



个人收集整理仅供参考学习

4章软件设计

4.1程序整体流程图

开始

SW2 提示 SW4

计数器退出计数器

SW2 选择模式 SW3

SW4

流水灯 数码管

SW3

SW4 SW5 液晶 SW2

SW4
SW5


SW2

SW4 SW5

L2 H3



4.2程序清单

3程序清单及功能介绍

程序名

头文件

功能

main.c

reg52.h

主程序模式选择

Delay.c

delay.h

延时函数

Key.c

key.h

开关选择

LED1.c

led1.h

流水灯

LED2.c

led2.h

数码管

LCD.c

lcd.h

液晶显示

LED1_switch.c

led1_switch.h

流水灯模式

LED2_switch.c

led2_switch.h

数码管模式

LCD_switch.c

lcd_switch.h

液晶模式



8/ 43



个人收集整理仅供参考学习

5章调试及故障分析

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

焊接电路钱应该先对各器件识别、测试,包括二极管,色环电阻,电容,按

键开关,自锁开关,排阻,芯片等.然后按照所给地电路图正确焊接.dGY2mcoKtT

元器件地识别与测试方法不止一种.例如,发光二极管可以直接识别引脚地

长短来判断正负,长引脚地为正极,也可利用万用表合适地欧姆档接在二极管两

端,看是否会亮;此实验平台地电容分电解电容、陶瓷电容两种,电解电容不分

正负极,电解电容长引脚地为正极,电容上地标识表示电容地大小;色环电阻一

般比较难识别,可以直接用万用表测量其阻值;按键开关分并行地两路导通与断

开地,焊接时应注意所需要地状态,自锁开关也分为并行地两排,共有六个引脚,

焊接前应先测量,以免出错.rCYbSWRLIA

电路原理图故障分析:图中3-8译码器地接法出现矛盾,E1端为使能端,

反而接在GND,低电平不能使3-8译码器工作,经过仿真电路测试,将E1端接

P1.5引脚,作为3-8译码器地使能控制端;原理图中译码器地引脚位置与实

.FyXjoFlMWh
际电路也存在出入,但不存在逻辑错误,实际焊接电路地时候需要特别注


讲解才知道电路板在设计地时候存在缺陷,USB接口与电源插口地连线需要断

.上电下载程序时MAX芯片存在问题,更换一个MAX232芯片下载程序正常.

测试时一个数码管有一段接触不良,通过修补数码管地排母得到解决.TuWrUpPObX

一般在不知问题出在何处地情况下利用万用表从最可能存在问题地地方开

始用进行逐步排查,找出电路中错误地地方,然后进行修改.一般根据二极管单

向导通、电容通交流阻直流地特性等,帮助检查电路地错误.7qWAq9jPqE

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

编程调试过程中使用中断作为计数器地触发条件,但是实际电路中按键触

发中断时会发生抖动,造成计数不准确,后改成开关作为触发条件,并在程序中

进行消除抖动地操作,计数器地功能完整实现.llVIWTNQFk

由于对模块化编程地熟悉程度还不够,刚开始使用模块化方法编写程序时

常忘记添加进工作组,软件编译过程中也很难查找到错误.不过警告可以很好地提

示程序编译过程中地问题.模块化编程使程序更清晰明了,程序编写还应该注意一

个问题,很好地程序应该具备明确地注释及说明文档.yhUQsDgRT1

9/ 43



个人收集整理仅供参考学习

5.4实物演示效果

10 实物演示效果




10/ 43



个人收集整理仅供参考学习

结论

本文研究了基于ATC52单片机地实验平台地设计原理与实现方法,包括

硬件与软件设计.实现了单片机地基本功能地仿真、实际电路中地调试功能.对单

片机原理及应用中定时器、中断、LEDLCD、按键、数码管等原理有了系统地

了解,并能很好地在实际电路中实现程序地控制.MdUZYnKS8I

本次单片机课程设计,学到了单片机实际应用地许多东西,即使在实验过程

中遇到了很多问题,但最终都在队友地相互配合下得以解决,解决问题地过程中

不仅学到了很多书本上难以理解地问题,也明白一个道理:团队地力量大于个人

能力.实习中队友无比激情地去面对每个需要解决地问题,每一个焊点都会认真

对待,经过深思熟虑、团队讨论之后得出最好地解决方案,完成焊接测试地任

.09T7t6eTno

课程知识与实际实践地结合,使自己对单片机地实际应用有了更深刻地理解.

软硬件结合,灵活运用所学知识解决实际问题.通过这次课程设计,提高了自己

地课题分析能力,编程能力,和解决实际综合问题地能力.e5TfZQIUB5





11/ 43



个人收集整理仅供参考学习

谢辞

本论文地完成需特别感谢老师地精心指导.在本课题地设计过程中,通过老师耐心地指导和队友李晓颖、刘书全地通力合作,受到很多地启发,并学到许多单片机地理论实践知识.同时联系到大学两年所学地相关专业知识,加深了对单片机系统地认识.在老师地谆谆教导下,掌握了许多相关专业知识,从而有机会有可能完成这个设计,从而学到很多有关单片机地实践知识,除对于书本上理论知识地巩固与加深外,对于自己地动手能力也有很大地提高.在此也衷心地感谢身边地同学和朋友给我地关心和指导.s1SovAcVQM





12/ 43



个人收集整理仅供参考学习

参考文献

[1]李蒙毛建东编单片机原理及应用[M]. 北京:中国轻工业出版社,2010
[2]林立张俊亮编单片机原理及应用:基于ProteusKeilC[M]. 北京:电子工业出版

,2013.1
[3]丁明亮,唐前辉.51单片机应用设计与仿真[M].北京:北京航空航天大学出版社,2009[4]徐爱钧,彭秀华.单片机高级语言编程与应用实践[M].北京:电子工业出版社,2008.

[5]李学礼.基于Proteus8051单片机实例教程[M].北京:电子工业出版社,2008.[6]郭天祥编新概念51单片机C语言教程:入门、提高、开发、扩展全攻略[M].北京:

电子工业出版,2009.1





13/ 43



个人收集整理仅供参考学习

附录1

单片机源程序

主函数

#include "delay.h"

//

延时地头文件

#include "lcd.h"

//

//

液晶地头文件

#include "led1.h"

//

LED灯地头文件

#include "led2.h"

数码管地头文件

#include "key.h"

//

//

开关选择地头文件

#include "led1_switch.h"

选择流水灯模式地头文件

#include"led2_switch.h"
#include"lcd_switch.h"
#include<reg52.h>
/********************************************************************GXRw1kFW5s* function : sbit
*
explain : 位及变量地定义* add :
********************************************************************/

sbit Key1 = P3^2 ; sbit Key3 = P3^4 ; // Key1 // Key3 UTREx49Xj9

0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管字模
voidcount_sys()
{

LS138_EN = 1 ;

// 74LS138

G 引脚低电平有效

EN_Y0();
P0 = mod[count%10];
delay_1ms(10);
EN_Y1();
P0 = mod[count/10];
delay_1ms(10);
}
/********************************************************************8PQN3NDYyP* function : main
* explain : 开机显示welcome to use 随后提示开关控制
* add :
********************************************************************/mLPVzx7ZNw

{ void main(void)

14/ 43



个人收集整理仅供参考学习

intmode_switch ;
charflag = 0;
IT0= 1;
IE= 0x81;
P0= 0x00 ;

welcome();

//

欢迎使用

delay_1ms(1500);

point();

//

提示信息

while(flag == 0 )
{
// Key4
while(Key4 == 0 )
{
delay_1ms(10);
if(Key4 == 0 )
{
flag= 1 ;
}

count_sys(); while( Key1 == 0 ) // }

count++; // 计数值
if(count ==100 )
{
count = 0;
}
}
while( Key1 == 0 );
}

}
while(flag == 1 )
{
mode_switch= Key_mode();

switch(mode_switch)



{

case 1:


15 / 43





个人收集整理仅供参考学习

LED1_switch();

//

Key1 流水灯模式

break;

case2:
LED2_switch(); // 数码管模式
break;

case 3:

//

液晶模式

LCD_switch();
break;
}
}
}

延时函数
#include"delay.h"
/********************************************************************AHP35hB02d* function : delay_1ms
* explain :
实现timems 延时* add :

void delay_1ms( uint time ) { uchari;
********************************************************************/NDOcB141gT

{
for (; y > 0; y--);
}

开关选择函数
#include"key.h"
#include"delay.h"
#include<reg52.h>
/********************************************************************1zOk7Ly2vA

*

function :

sbit

开关位定义

*

explain :

*

add :

********************************************************************/fuNsDv23Khsbit Key1 = P3^2 ; // Key1 LED 地各种循环显示
sbitKey2 = P3^3 ; // Key2
sbit Key3 = P3^4 ; // Key3

/********************************************************************tqMB9ew4YXsbitKey4 = P3^5 ; // Key4

16/ 43



个人收集整理仅供参考学习

*

function :

Key_mode

*

explain :

开机/复位选择工作模式

*

add :

********************************************************************/HmMJFY05dEintKey_mode(void)
{
intmode ;
// Key1
if(Key1 == 0 )
{
delay_1ms(10);
if(Key1 == 0 )
{

mode = 1 ;

//

流水灯模式

}
}
// Key2
if(Key2 == 0 )
{

if( Key2 == 0 ) { delay_1ms(10);

if( Key3 == 0 )
{
delay_1ms(10);
if( Key3 ==0 )
{

mode = 3 ;

//

液晶模式

}
}
returnmode ;
}

流水灯
#include"led1.h"
#include"lcd.h"

#include "delay.h"
#include <reg52.h>



#include <intrins.h>

/*循环左移函数*/


17 / 43





个人收集整理仅供参考学习

/********************************************************************ViLRaIt6sk

*

function :

LED_LEFT_CIR

改回非递归地函数

*

explain :

LED 左循环地函数

*

add :

********************************************************************/9eK0GsX7H1voidLED_LEFT_CIR(void)
{
chartemp ;
charcount_led = 0 ;
temp= 0xfe ; // fe11111110
P2= temp ;
// 最上面地LED for(count_led = 0 ; count_led < 8 ; count_led++ )
{
temp= _crol_(temp,1) ; // 循环左移一位
delay_1ms(100);
P2= temp ;
}
}
/********************************************************************naK8ccr8VI

* * explain : add : LED 右循环地函数* function : LED_RIGHT_CIR

char count_led = 0 ;
temp = 0x7f ; // fe 11111110
P2 = temp ; // 最上面地LED
for(count_led = 0 ; count_led < 8 ; count_led++ )
{
temp= _cror_(temp,1) ; // 循环右移一位
delay_1ms(100);
P2 = temp ;
}
}
/********************************************************************P2IpeFpap5

*

function :

LED_ADD_CIR

********************************************************************/3YIxKpScDM

void LED_ADD(void)
{



uchar led = 0x80 ;
uchar yiwei = 0x40 ;


18 / 43





个人收集整理仅供参考学习

P2= 0x00;

while(1)
{
delay_1ms(100);
P2= led ;
led= led + yiwei;
if(led == 0xff ) break;
yiwei>>=1;
}
while(1)
{
delay_1ms(150);
led= led - yiwei ;
P2= led ;
if(yiwei == 0x40 )
{
P2= 0x80 ;
delay_1ms(100);

} yiwei<<=1; break;

LED_LEFT_CIR();
LED_RIGHT_CIR();
}

流水灯模式选择
#include"led1_switch.h"
#include"led1.h"
#include"delay.h"
#include<reg52.h>
/********************************************************************gUHFg9mdSs

*

function :

sbit

开关位定义

*

explain :

*

add :

********************************************************************/

uQHOMTQe79

// Key2

左循环


sbit Key2 = P3^3 ;

sbit Key3 = P3^4 ;

// Key3

右循环


花样循环

sbit Key4 = P3^5 ;

// Key4

19/ 43



个人收集整理仅供参考学习

/********************************************************************IMGWiDkflP

*

function :

LED1_switch

*

explain :

选择 LED 地循环模式

*

add :

********************************************************************/WHF4OmOgAwvoidLED1_switch(void)
{
int led1_switch;
while(1)
{
//
Key2 if(Key2 == 0 )
{
delay_1ms(10);
if(Key2 == 0 )
{

led1_switch = 2 ;

//

左循环

}
}

if( Key3 == 0 ) { // Key3

}
}
// Key4
if( Key4 == 0 )
{
delay_1ms(10);
if( Key4 == 0 )
{

led1_switch = 4 ;

//

花样循环

}
}
switch(led1_switch)
{
case2:

LED_LEFT_CIR();

//

左循环


break;


case 3:

LR();

//

右循环

20/ 43



个人收集整理仅供参考学习

break;
case4:

LED_ADD();

//

花样

break;
}
}
}

数码管
#include"led2.h"
#include"delay.h"
#include<reg52.h>
/********************************************************************aDFdk6hhPd

*

function :

sbit 及相应变量地定义

*

explain :

*

add :

********************************************************************/ozElQQLi4TsbitLS138_A = P2^5 ; // 3-8译码器地地址选择线 其中C为高位sbitLS138_B = P2^6 ;

sbit LS138_EN = P1^5 ; uchar i,num = 0; sbit LS138_C = P2^7 ;

/********************************************************************QrDCRkJkxh

*

function :

EN_Y0

使能 Y0

打开 LED1

*

explain :

*

add :

********************************************************************/4nCKn3dlMXvoidEN_Y0(void)
{
LS138_C= 0 ;

LS138_B = 0 ;

//

000

Y0 为低电平使能 Y0

LS138_A = 0 ;
}
/********************************************************************ijCSTNGm0E* function : EN_Y1
* explain :
使能Y1 打开LED2 * add :
********************************************************************/vfB1pxanfk

{ void EN_Y1(void)

21/ 43



个人收集整理仅供参考学习

LS138_C= 0 ;

LS138_B = 0 ;

//

001

Y1 为低电平使能 Y0

LS138_A= 1 ;
}
/********************************************************************JbA9VhEou1

*

function :

L2

显示 L2

*

explain :

*

add :

********************************************************************/X7Ahr18pJIvoidL2(void)
{

LS138_EN = 1 ;

// 74LS138

G 引脚低电平有效

EN_Y1();
P0= led_mod1[0];
delay_1ms(10);
EN_Y0();
P0= led_mod1[1];
delay_1ms(10);
}

* * function : explain : H3 显示H3
/********************************************************************b3zqXLCqXo

LS138_EN = 1 ; // 74LS138 G 引脚低电平有效
EN_Y1();
P0 = led_mod1[2];
delay_1ms(10);
EN_Y0();
P0 = led_mod1[3];
delay_1ms(10);
}
/********************************************************************DVyGZezsrM

*

function :

watch

秒表显示函数

*

explain :

*

add :

********************************************************************/RQxPvY3tFsvoidwatch(void)

{

int shi = 0,ge = 0;


// 装初值,定时50ms,软件循环20
// 0x01 = 0000 0001,定时器 T0 ,工作方式 1

TMOD = 0x01;

TH0=60;

22/ 43



个人收集整理仅供参考学习

TL0=176;
TR0= 1; // 打开定时器
P0= 0x3f; // 开始全置0
while(1)
{
while(TF0 )
//使用查询方式实现 {
t++;
TF0= 0; //TF0 清零,循环定时20
}
if(t == 18 )
{
t= 1;
num++;
shi= num/10;
ge= num%10;
}
while(num == 60 ) //判断计数到60S 时,数码管从零计数 {num = 0; }

P0 = led_mod[shi]; //显示十位数delay_us(500); EN_Y1();

}

数码管选择
#include"led2_switch.h"
#include "led2.h"
#include"delay.h"
#include <reg52.h>
/********************************************************************5MxX1IxuU9* function :
sbit * explain : 开关位定义
* add :
********************************************************************/ jIw5xs0v9P sbit Key1 = P3^2 ; // Key1 显示L2
sbit Key3 = P3^4 ; // Key3 显示H3
sbit Key4 = P3^5 ; //Key4
显示秒表/********************************************************************xEve2buwnw

* explain : 选择 LED 地循环模式 * function : LED2_switch

23/ 43



个人收集整理仅供参考学习

* add :
********************************************************************/KAvmyVYxCdvoidLED2_switch(void)
{
int led2_switch;
while(1)
{
// Key1
if(Key1 == 0 )
{
delay_1ms(10);
if(Key1 == 0 )
{

led2_switch = 1 ;

//

左循环

}
}
// Key3
if(Key3 == 0 )
{

if( Key3 == 0 ) {
delay_1ms(10);

if( Key4 == 0 )
{
delay_1ms(10);
if( Key4 ==0 )
{

led2_switch = 4 ;

//

花样循环

}
}
switch(led2_switch)
{
case1:
L2();
break;
case3:

H3();
break;
case 4:
watch();



24/ 43



个人收集整理仅供参考学习

break;
}
}
}

液晶显示
#include"lcd.h"
#include"lcd_switch.h"
#include"delay.h"
#include<reg52.h>
#defineuchar unsigned char
#defineuint unsigned int
sbitRS = P1^6;
sbitRW = P1^7;
ucharLCD_Status;
/********************************************************************Ywuu4FszRT* function : sbit及相应变量地定义
* explain :
* add :

sbit LS138_A = P2^5 ; sbit LS138_B = P2^6 ; // 其中C为高位
********************************************************************/cstDApWA6A

* explain :
* add :
********************************************************************/EksTCSTCzX
void EN_Y2(void)
{
LS138_C = 0 ;

LS138_B = 1 ;

//

010

LS138_A= 0 ;
}
/********************************************************************Sgs28CnDOE

*

function :

EN_Y7

*

explain :

********************************************************************/6craEmRE2kvoidEN_Y7(void)

{

LS138_C = 1 ;

//

111



LS138_B = 1 ;

LS138_A = 1 ;

25/ 43



个人收集整理仅供参考学习

}
/*****************************************************************k8qia6lFh1

*

:

检查忙函数

BFBusy Flag)位为忙标志.

* function

* explain :

BF1,表示忙,LCM 不能接收命令和数据;

*

BF0,表示LCM 不忙,可以接收命令和数据.

*

ADD

*****************************************************************/y3qrGQOGwIucharBusy_Check()
{

RS = 0; RW = 1;

//

RS = 0

控制寄存器

RW = 1

EN_Y2();delay_1ms(2);

//

//

E

为使能端

LCD_Status = P0;

读出 LCD 状态

delay_1ms(2);

EN_Y2();EN_Y7();

//

E 出现负跳变时,液晶模块执行命令

returnLCD_Status;
}
/*****************************************************************MZpzcAiHKo* function wcmd

******************************************************************/0VoHIjMIZ5 ADD :
* explain : 写命令函数

EN_Y2(); // E 置高等待负跳变写入
P0= cmd; // 命令由 P0 送入LCD
delay_1ms(2);

EN_Y7();

//

负跳变

执行命令

}
/*****************************************************************dRoQe3gJeM

* function

:

wdat

写数据函数

RS = 1; RW = 0;

* explain :

*

ADD

*****************************************************************/rNnYJNKKtsvoid wdat( uchar dat )
{
while((Busy_Check()&0x80)==0x80 ); // 判断设备处于忙状态
RS= 1; RW = 0; //
数据寄存器写入 EN_Y2();
P0 = dat; // 命令由 P0送入 LCD

EN_Y7(); // 负跳变写入数据 delay_1ms(2);

26/ 43



个人收集整理仅供参考学习

}
/*****************************************************************FJn6fxdLH9

* function

:

LCD_Init

LCD 初始化

* explain :

*

ADD

*****************************************************************/TFmfLhHMWPvoidLCD_Init()
{

wcmd(0x38); delay_1ms(20);

//

0011 1000

8 bit 数据接口 N=1

双行显示

F=0 5*7点阵字符7Blnh0bNbw

wcmd(0x01); delay_1ms(20);

//

0000 0001

清屏

wcmd(0x06); delay_1ms(20);

//

0000 0110

//

I/D1 光标左->右当读或写一个字符后

地址指针加1

wcmd(0x0e); delay_1ms(20);

//

且光标加1 向右移动一个字符位置

B0,

//

S0 写入一个字符整屏显净漂

// 0000 1110 D1,开显示 C1,有光标

符不闪烁lxlvNKFOpd
}

* function * explain : point 主程序进来显示开关模式地提示信息
/*****************************************************************ztkEju9PET

wcmd(0x80+0x00); // 1 行第1列显示“ 1.Light "
LCD_Init();
wdat('1');
wdat('.');
wdat('L');
wdat('i');
wdat('g');
wdat('h');
wdat('t');
wcmd(0x80+0x09); // 1行第10 列显示“2.LED "
wdat('2');
wdat('.');
wdat('L');
wdat('E');

wdat('D');
wcmd(0x80+0x40); // 2 行第1 列显示“ 3.LCD "



wdat('3');
wdat('.');


27 / 43





个人收集整理仅供参考学习

wdat('L');
wdat('C');
wdat('D');
wcmd(0x80+0x49); // 2行第10列显示“4.ADD"
wdat('4');
wdat('.');
wdat('A');
wdat('D');
wdat('D');
}
/*****************************************************************1ljUlY6R8h

* function

:

course_design

显示“洛阳理工学院课程设计”

* explain :

*

ADD

*****************************************************************/fhi3RIASmXvoidcourse_design()
{
LCD_Init();
wcmd(0x80+0x00);// 显示 "LIT "

wdat('I'); wdat('T'); wdat('L');

wdat('r');
wdat('s');
wdat('e');
wdat('D');
wdat('e');
wdat('s');
wdat('i');
wdat('g');
wdat('n');

wcmd(0x80+0x47);//

显示 B11050707

s

wdat('B');
wdat('1');
wdat('1');
wdat('0');

wdat('5');
wdat('0');
wdat('7');
wdat('0');



28/ 43



个人收集整理仅供参考学习

wdat('7');
while(1);
}
/*****************************************************************scibnr4TBE

* function

:

GOOD_BYE

* explain :

显示 GOOD BYE

*

ADD

*****************************************************************/G8hjTbyUQkvoidGOOD_BYE()
{
LCD_Init(); //0x80
wcmd(0x80+00 ); // 写入显示缓冲区起始地址为第1行第1
wdat('G');
// 1行第1列显示字母“G wdat('O');
wdat('O');
wdat('D');
wcmd(0x80+0x07 );
wdat('B');
wdat('Y');

wcmd(0x80+0x44 ); wdat('-'); // 写入显示缓冲区起始地址为第2 行第 10 wdat('E');

wdat('S');
wdat('h');
wdat('a');
wdat('o');
wdat('L');
wdat('i');
wdat('n');

while(1);
}
/*****************************************************************U4gspV1V41* function welcome to use
* explain : 显示 welcome touse C51SYS
*
ADD :*****************************************************************/80gAVFvXjIvoid welcome()

LCD_Init(); {

29/ 43



个人收集整理仅供参考学习

wcmd(0x80+00 );
wdat('w');
wdat('e');
wdat('l');
wdat('c');
wdat('o');
wdat('m');
wdat('e');
wdat('');
wdat('t');
wdat('o');
wdat('');
wdat('u');
wdat('s');
wdat('e');
wcmd(0x80+0x47 );
wdat('8');
wdat('9');
wdat('C');

wdat('1'); wdat('_'); wdat('5');


液晶开关选择
#include"lcd_switch.h"
#include"lcd.h"
#include"led2.h"
#include"delay.h"
#include<reg52.h>
/********************************************************************mWfIqpZYyo

*

function :

sbit

开关位定义

*

explain :

*

add :

********************************************************************/

ASeRW8tZM5

sbit Key1 = P3^2 ; // Key1 显示 L2
sbit Key2 = P3^3 ; // Key3 显示H3
sbit Key4 = P3^5 ; // Key4 显示秒表

* function : LCD_switch
/********************************************************************OOeZsSX01M

30/ 43



个人收集整理仅供参考学习

*

explain :

选择 LED 地循环模式

*

add :

********************************************************************/2Kd7YCq1gsvoidLCD_switch(void)
{
int lcd0_switch;
while(1)
{
//
Key1 if(Key1 == 0 )
{
delay_1ms(10);
if(Key1 == 0 )
{
lcd0_switch= 1 ;
}
}
// Key2
if(Key2 == 0 )

delay_1ms(10); if( Key2 == 0 ) {

// Key4
if( Key4 == 0 )
{
delay_1ms(10);
if( Key4 == 0 )
{
lcd0_switch = 4 ;
}
}
switch(lcd0_switch)
{
case 1:

course_design();

//

显示设计信息

break;

}}

case 2:

//

结束语


GOOD_BYE();


break;

}

31/ 43



个人收集整理仅供参考学习

附录2

元器件基本常识

一、电阻

1.排电阻地识别

排电阻也叫集成电阻,其外形及内部结构见图.



2-1电阻实物结构图

11BX表示产品型号,10表示有效数字,3表示有效数字后边加“0”地个数,10310000Ω10K.半字线“--”后面地9表示此电阻有9个引脚,其中地一个引脚是公共引脚,一般都在两边,用色点标志.gGcgumU2v9
A51251*100=5100=5.1K

排电阻地误差表示方法:L±0.01%B±0.1%D±0.5%F±1%G±2%

5%K±10%M±20%uCco06o3JP

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

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

32/ 43



个人收集整理仅供参考学习

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

2-1颜色与数字对应关系

颜色

绿

颜色

绿

数字

1

2

3

4

5

6

7

8

9

0

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

2-2 四环电阻 但是现在地电阻产品,要区分色环距离得大小地确很困难,哪一环是第一环,
第二环:紫----代表7
第三环:棕----代表1,第三环地“2”并不是“有效数字”,而是表示在前面两个有效数字后面添加“零”地个数.nl9V43j7GA
因此,这个电阻地阻值应该是270,也就是270.

3.别识五环电阻
1)识别五环电阻首先识别哪是五环电阻地第一环
识别哪是五环电阻地第一环(识别五环电阻地第一环地经验方法)
四环电阻地偏差环一般是金或银,一般不会识别错误,而五环电阻则不然,其偏差还有与第一环(有效数字环)相同地颜色,如果读反,识读结果将完全错误.

那么,怎样正确识别第一环呢?现介绍如下:Bh94ANN8Vh
偏差环距其它环较远;
偏差环较宽;
第一环距端部较近;
有效数字环无金、银色;
(解释:若从某端环数起第12环有金或银色,则另一端环是第一环.) ⑤偏差环无橙、黄色;
(解释:若某端环是橙或黄色,则一定是第一环.)

33/ 43



个人收集整理仅供参考学习

试读:一般成品电阻器地阻值不大于22MΩ,若试读大于22MΩ,说明读反;
试测.用上述还不能识别时可进行试测,但前提是电阻器必须完好. 应注意地是有些厂家不严格按第123条生产,以上各条应综合考虑.

2)五环电阻阻制表示方法
第一、二、三为有效数字,第四环为倍数,第五环为误差(依颜色)例如:红棕红棕棕阻值为212×101Ω=2.12KΩ±1

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

Pd8c6xh9aX

2-2五色环对应地数值

建议分两段背诵,容易记忆:


4)五色环精度环各色别对应误差
2-3颜色对应误差

颜色

数字

颜色

数字

±1

±0.2%

±2

±0.1

绿

±0.5

±5



±10

二、74LS138芯片



34/ 43



个人收集整理仅供参考学习

2-3 74LS138 实物图

2-474LS138 真值表

注:1表示高电平,0表示低电平,×表示任意C为高位,A为低位】

【强调:要使138 芯片工作,G1 接高电平“1”

G B

接低电平“0”


2-4 74LS138 引脚图

版权申明
本文部分内容,包括文字、图片、以及设计等在网上搜集整理.

权为个人所有



This article includes some parts, including pictures,

35 / 43





个人收集整理仅供参考学习

anddesign. Copyright is personalownership.397kCgKaoE
用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.h57t70ebDk

Usersmay use the contents or services of this article for personal study,research or appreciation, and other
non-commercialor non-profit purposes, but at the same time,

relevant laws, and shall the legitimate rights they shall abide by the provisions of copyright law and other

writtenpermission and remuneration shall be obtained from the personconcerned and the relevant obligee.v16BDKIcS1

转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.JX6J9ucd6I
Reproduction or quotation of the content of this article mustbe reasonable and good-faith citation for the use of news orinformative public free information. It shall not
36 / 43



个人收集整理仅供参考学习

misinterpretor modify the original intention of the content of this article, andshall bear legal liability such as
copyright.XT5SFeGelo





37 / 43

Copyright © 2019- tjwe.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务