《单片机原理及应用》
实 验 指 导 书
--学生用书 V2012--
信息与机电工程学院实验中心
倪继锋 编
2012-01-20
第 1 页
第一章 基础篇--单片机开发系统的学习
一、学习目的:
本章节要求掌握单片机开发系统中的软硬件的使用方法,其中包括单片机开发板硬件原理图的熟悉和掌
握、单片机软件开发环境 Keil C51 的熟练使用和单片机仿真软件 PROTEUS 的熟练使用。
二、单片机开发系统主要硬件简介
单片机开发系统的硬件采用的是天津锐志电子的 RZ-51 单片机开发实验仪,主要资源包括的具有“实验、
编程、仿真、ISP 下载线”多功能合一的新一代单片机开发系统。该 51 单片机学习实验板除了支持 ATMEL 公
司的 AT89S 所有系列之外,还支持 STC 的所有系列增强型 51 单片机和 SST 系列的增强型 51 单片机的实验、
编程与仿真功能,同时也兼容 AVR 系列单片机的烧写和实验。
1、 硬件布局
标号 资源说明 标号 资源说明
1 P0 一线扩展接口 21 7805 外接电源稳压管(输出 5V 电压)
2 P1 一线扩展接口 22 DS1302 时钟芯片备用电池
3 P2 一线扩展接口 23 可更换的系统晶振(插座)
4 P3 一线扩展接口 24 DS1302 实时时钟芯片(RTC)
5 +5V 电源扩展端 25 51 单片机复位按钮
6 GND 地线扩展端 26 AVR 单片机复位按钮
7 24C08&DS1302 跳线端 27 实验板电源指示灯
8 24C08I
2
C 接口存储器 28 51/AVR 单片机切换开关
9 跳线集中管理设置端 29 实验板电源开关
10 继电器 30 串口通讯指示灯
11 继电器控制接线端 31 18B20 数字测温传感器接口
第 2 页
12 无源蜂鸣器 32 AT&AVR 单片机 ISP 下载接口
13 红外线接收头 33 MAX232 串口通讯电平转换芯片
14 P1 口控制的 8 个 LED 流水灯 34 RS232 串口接口
15 P0 口控制的 8 个 LED 流水灯 35 外接电源供电接口
16 4*4 矩阵键盘 36 USB 供电接口
17 4 位独立键盘 37 12864 液晶对比度调节电位器
18 4 位中断键盘 38 1602 液晶对比度调节电位器
19 锁紧座(放置 51/AVR/SST 仿真芯片) 39 12864 图形点阵液晶接口
20 8 位共阳数码管 40 1602 字符液晶接口
2、 实验板跳线以及扩展端口资源说明
跳线集中管理设置组的跳线详细说明(按照从上倒下的顺序):
标号 资源说明
① 数码管显示控制跳线(JPSMG)
② P0 口 8 位 LED 灯跳线(JPP0)
③ P1 口 8 位 LED 灯跳线(JPP1)
④ 蜂鸣器控制跳线(JPFMG)
⑤ 继电器控制跳线(JPJDQ)
⑥ 1602/12864 液晶背光跳线(JPBG)
⑦ P0 口上拉电阻跳线(JPPR0)
⑧ P1 口上拉电阻跳线(JPPR1)
⑨ P2 口上拉电阻跳线(JPPR2)
⑩ P3 口上拉电阻跳线(JPPR3)
跳线及端口的详细说明:
① 数码管显示控制跳线(JPSMG)
此跳线控制数码管的工作与否。插上此跳线数码管工作,拔掉后数码管不工作
② P0 口 8 位 LED 灯跳线(JPLEDP0)
此跳线控制 P0 口的 8 个 LED 灯的亮灭。拔掉不工作,插上 LED 工作
第 3 页
③ P1 口 8 位 LED 灯跳线(JPLEDP1)
此跳线控制 P1 口的 8 个 LED 灯的亮灭。拔掉不工作,插上 LED 工作
④ 蜂鸣器跳线(JPFMG)
此跳线是有源蜂鸣器通断跳线。插上跳线蜂鸣器工作,拔掉跳线蜂鸣器不工作
⑤ 继电器跳线(JPFMG)
此跳线是继电器通断跳线。插上跳线继电器工作,拔掉跳线继电器不工作
⑥ 1602/12864 液晶背光跳线(JPBG)
此跳线控制 1602 液晶和 12864 液晶的背光的亮灭。拔掉后背光熄灭,插上后背光打开
⑦--⑩ 4 个 P 口上拉电阻跳线
这四个跳线是控制各 IO 口的外接上拉电阻的跳线。拔掉跳线,对应的 P 口的上拉电阻不起作用,插
上后起作用(这几个跳线一般都不需要拔)
3、 实验板端口资源分配
端口 资源 1 资源 2 资源 3 资源 4
P0.0 流水灯(L0.0) 数码管(段 a) 1602LCD(D0) 12864LCD(D0)
P0.1 流水灯(L0.1) 数码管(段 b) 1602LCD(D1) 12864LCD(D1)
P0.2 流水灯(L0.2) 数码管(段 c) 1602LCD(D2) 12864LCD(D2)
P0.3 流水灯(L0.3) 数码管(段 d) 1602LCD(D3) 12864LCD(D3)
P0.4 流水灯(L0.4) 数码管(段 e) 1602LCD(D4) 12864LCD(D4)
P0.5 流水灯(L0.5) 数码管(段 f) 1602LCD(D5) 12864LCD(D5)
P0.6 流水灯(L0.6) 数码管(段 g) 1602LCD(D6) 12864LCD(D6)
P0.7 流水灯(L0.7) 数码管(段 dp) 1602LCD(D7) 12864LCD(D7)
P1.0 流水灯(L1.0) 矩阵键盘(行 1) DS1302(CLK)
P1.1 流水灯(L1.1) 矩阵键盘(行 2) DS1302(I/O)
P1.2 流水灯(L1.2) 矩阵键盘(行 3) DS1302(RST)
P1.3 流水灯(L1.3) 矩阵键盘(行 4)
P1.4 流水灯(L1.4) 矩阵键盘(列 1) 独立按键(K5)
P1.5 流水灯(L1.5) 矩阵键盘(列 2) 独立按键(K6)
P1.6 流水灯(L1.6) 矩阵键盘(列 3) 独立按键(K7)
P1.7 流水灯(L1.7) 矩阵键盘(列 4) 独立按键(K8)
P2.0 数码管(位选 1) 1602LCD(RS) 12864(RS)
P2.1 数码管(位选 2) 1602LCD(RW) 12864(RW)
P2.2 数码管(位选 3) 1602LCD(EN) 12864(EN)
P2.3 数码管(位选 4) 12864(CS1)
P2.4 数码管(位选 5) 12864(CS2)
P2.5 数码管(位选 6) 12864(RSTB)
P2.6 数码管(位选 7)
第 4 页
P2.7 数码管(位选 8)
P3.0(RXD) 串口(RXD)
P3.1(TXD) 串口(TXD)
P3.2(INT0) 红外接收头 独立按键(K1)
P3.3(INT1) DS18B20 独立按键(K2)
P3.4(T0) 24C08(SCL) 独立按键(K3)
P3.5(T1) 24C08(SDA) 独立按键(K4)
P3.6(WR) 蜂鸣器
P3.7(RD) 继电器
三、单片机开发软件简介
1、Keil C51软件开发系统简介
单片机开发中除必要的硬件外,同样离不开软件,汇编语言源程序要变为 CPU 可以执行的机器码有两种
方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
单片机在发展了这么多年来,出现了各种各样的编译软件,Keil C51 是美国 Keil Software 公司出品的 51
系列兼容单片机 C 语言软件开发系统,是目前开发 51 系列单片机的主流工具。与汇编相比,C 语言在功能上、
结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用 C 来开发,体会更加深刻。
C 语言是一个通用的编程语言,它提供高效的代码、结构化的编程和丰富的操作符。C 语言不是一种大语
言,不是为任何特殊应用领域而设计,它一般来说限制较少,可以为各种软件任务提供方便和有效的编程。许
多应用用 C 比其他语言编程更方便和有效。
优化的 Cx51 的 C 编译器完整的实现了 ANSI 的 C 语言
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
,对 8051 来说,Cx51 不是一个通用的 C 编译
器,它首先的目标是生成针对 8051 的最快和最紧凑的代码。Cx51 具有 C 编程的弹性和高效的代码和汇编语言
的速度。
C 语言不能执行的操作如输入和输出,需要操作系统的支持的一部分提供,因为这些
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
和语言本身无关,
所以 C 特别适合对多平台提供代码。
8051 系列是增长最快的微处理器构架之一,从不同的芯片厂家提供了 400 新扩展的 8051 芯片,如 PHILIPS
第 5 页
的 8051MX 有几 M 字节的代码和数据空间大的应用中。为了支持这些不同的 8051 芯片,Keil 提供了几种开发
工具输出文件格式,OMF2 允许支持最多 16MB 代码和数据空间的 PHILIPS 8051MX 结构。
Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。另外重要的一点,只
要看一下编译后生成的汇编代码,就能体会到 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代
码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。本实验指导书中的程序基本用 C 来编写。
下面详细介绍 Keil C51 开发系统基本功能和使用。
2、Keil C51快速入门
① 启动程序
双击 Keil 图标 ,会弹出 Keil logo 图片,如下图所示:
当见到 Keil 的启动图片时,之后会自动进入 Keil 的开发环境,如下图:
② 创建工程
Keil C51 环境下的文件是以工程项目的方式进行管理的。
第一步:点击菜单的【Project】【New Project】,弹出【Create New Project】对话框,如下图所示:
第 6 页
第二步:输入工程名“Test1”,点击【保存】退出,弹出【Select Device For Target】对话框,如下图所示:
第三步:选择【Atmel】,单机“+”号,然后选择【AT89C52】,如下图所示:
第 7 页
第四步:点击【确定】,弹出如下对话框,如下图所示:
第五步:点击【是(Y)】,然后开发环境自动为我们建立好一个包含启动代码项目的空文件,该启动代码
为 STARTUP.A51,如下图所示:
从上图可以看到,这个项目只包含一个汇编文件 STARTUP.A51 的启动代码,除非非常必要,我们不必修
改这个文件,我们只要写 C 语言就可以了,这就是 Keil 开发环境的方便之处。
重点:
√熟练掌握 Keil 环境下创建项目的流程
第 8 页
③ 编写程序
接着上面②的内容,我们继续进行下一步操作:
第六步:点击菜单【FILE】,然后选择【New】,如下图所示:
第七步:点击【保存】,弹出对话框,如下图所示:
第八步:输入文件名 main.c,点击【保存】,然后在左边的工程窗口选中【Source Group 1】并右键点击出
现右键菜单,选择【Add Files to Group ` Source Group 1】,弹出对话框,如下图所示:
第 9 页
第九步:选择 main.c 文件,点击【Add】,最后点击【Close】,如下图所示:
第十步:开始编写小程序,如下图所示:
第十一步:开始编译,点击【Rebuild all target files】,最后在输出窗口显示编译信息,如下图所示:
第 10 页
编译信息窗口显示“0 error(s),0 warning(s)”。程序编译成功了,我们迈出了关键性的一步,如下图所示:
不过还有一步要设置,默认 Keil 不会帮我们生成 Hex 文件,因为 Hex 文件用于烧写到单片机里面的,即
单片机没有程序是不能运行的。那么,为了生成 Hex 文件,我们必须勾选【Create Hex】选项,让 Keil 编译代
码时生成 Hex 文件。
右键点击工程窗口【Target 1】,然后从右键菜单选中【Options for Target‘Target 1’】,如下图所示:
从弹出的【Options for Target‘Target 1’】,选中【Output】选项卡,然后勾选【Create Hex】,如下图所示:
第 11 页
第十二步:再点击【Rebuild all target files】,最后在输出窗口显示编译信息,最终生成 Test1.hex 文件,如
下图所示:
我们再来看工程中的代码:
好奇的你肯定想知道 reg52.h 头文件到底里面有什么内容呢?P0=0x00 中的 P0 到底从哪里冒出来的?
3、深入 Keil C51
① 剖析头文件(reg52.h)
字节寄存器:寄存器的地址是单个字节的
重点:
√熟练掌握在 Keil 环境下添加*.c 和*.h 文件
√熟练掌握编写和编译程序
第 12 页
sfr 是 Keil 中用来定义硬件寄存器地址的关键字,具有定义硬件特性。在以往编写 C 程序的时候,都没有
见过 sfr 这个关键字。所以 sfr 不是标准 C 语言的关键字,而是 Keil 为能直接访问 80C51 中的 SFR 而提供了一
个新的关键词。
位寄存器:字节寄存器中的一位
在 C51 里,利用 sbit 可访问 RAM 中可位寻址的位或 SFR 中可位寻址的位。
② 剖析优化
重点:(sbit 三种用法)
√ sbit 位变量名=地址值
√ sbit 位变量名=SFR 名称^变量位地址值
√ sbit 位变量名=SFR 地址值^变量位地址值
重点:
√ sfr 变量名=地址值
第 13 页
Keil 默认的优化效果其实已经很不错了,如果真的要想方设法榨进单片机的所有资源,让单片机的潜能全
部逼出来,需要对 Keil 编译器的优化选项有所熟悉的,同时要对自己的代码进行评估,到底适合哪一种优化,
否则会出现反效果。进入“目标选项”设置,如下图所示:
设置目标
选中【Target】即目标选项卡,平时做项目只要设置好 Code 和 Ram 配置就够了,如下图所示:
“Memory Model”和“Code Rom Size”同样会影响到生成代码的执行效率,如果实际生成的代码符合 Small
存储模式,尽量将“Memory Model”和“Code Rom Size”选中为 Small 存储模式,如果没有特殊情况,不推荐选择
为 Compact、Large 存储模式。关于对“Xtal(MHz)”填入的是单片机当前工作频率,而不是晶振频率,因为
STC89C52RC 单片机支持 6T/指令周期和 12T/指令周期,假若 STC89C52RC 单片机外部晶振频率为 12MHz,
工作在 6T/指令周期,那时当前单片机实际的工作频率是 24MHz 的,那么必须在“Xtal(MHz)”处填入数据为 24,
这里单片机工作频率的输入主要是面向于软件仿真的,特别是定时器、软件延时、串口波特率等精确仿真。
在【Operating system】选项中默认选中“None”,这个选项告诉用户是否使用 Keil 内自带的多任务操作系统,
当选中“RTX-51Tiny”,Cx51 编译器提供 RTX-51 精简版实时多任务操作系统的支持;当选中“RTX-51 Full”,
Cx51 编译器提供对 RTX51 完整版实时多任务操作系统的支持。初学者一般设置默认方式即可。
第 14 页
设置优化
选中【 C51 】选项卡, Keil 默认帮我们配置好优化选项,默认的优化已经足够了,如下图所示:
Keil 提供了 10 个优化级别,不同的级别生成代码大小有所有不同。根据编写代码去选择相对应的优化级
别,从而使生成的代码效率又高、占用空间又小,Keil 的优化级别如下表所示:
级别 说明
0
常数合并:编译器计算时,只要可能,就用常数代替表达式。这包括运行地址计算。
优化简单访问:编译器优化访问 8051 系统的内部数据和位地址。
跳转优化:编译器经常拓展跳转最终目标。多次跳转被删除。
1
死代码删除:没有用的代码段删除。
拒绝跳转:严密的检查条件跳转,以确定是否可以倒置测试逻辑来改进或删除。
2
数据覆盖:适合静态覆盖的数据和位段是确定的,并内部标识。BL51 连接/定位器可以,通过全局数
据流分析,选择可被覆盖的段。
第 15 页
3
Peephole 优化:清除多余的 MOV 指令。这包括不必要的存储区目标加载和常数加载。当存储空间或
执行时间可节省时,用简单操作代替复杂操作。
4
寄存器变量:如果可能,自动变量和函数参数定位在寄存器上。为这些变量保留的存储区就省略了。
优化拓展访问:IDATA、XDATA、PDATA 和 CODE 的变量直接包含在操作中。在多数时间中间寄存
器是没有必要的。
局部公共字表达式删除:如果用一个表达式重复的进行相同的计算,则保存第一次计算结果,后面有
可能就用这结果。多余的计算就被删除。
Case/Switch 优化:包含 Switch 和 Case 的代码优化为跳转表或跳转队列。
5
全局公共字表达式删除:一个函数内相同的字表达式有可能只计算一次。中间记过保存在寄存器中,
在一个新的计算中使用。
简单循环优化:用一个常数填充存储区的循环程序被修改和优化。
6 回路循环:如果结果程序代码更快和有效,则程序回路循环。
7 优化拓展的索引访问:当适当时对寄存器变量用 DPTR 指针和数组访问对执行速度和代码大小优化。
8 公共的尾部合并:当一个函数有多个调用,一些设置代码可以复用,因此减少程序大小。
9 公共块子程序:检测循环指令序列,并转换成子程序。Cx51 甚至重排代码可以得到更大的循环序列。
注意:优化级别不是越高越好,要根据当前代码的实现进行优化,否则会出现单片机不能够正常工作的反
效果,选择优化就是“对症下药”。
Keil 在不仅提供了代码的优化级别,而且为用户提供了优化代码速度还是优化代码大小的选项。当选择为
“Favor speed”时,代码的执行效率最理想,但是生成的代码比较大;当选择为“Favor size”生成的代码占用空间
最小,但是代码的执行效率比较低。
③ 详解 STARTUP.A51
在 Keil 新建的所有工程中,一般都包含 STARTUP.A51,如下图所示:
该文件主要作用于上电时初始化单片机的硬件堆栈、初始化 RAM、初始化模拟堆栈和跳转到主函数,即
main 函数。硬件堆栈是用来存放函数调用地址、变量和寄存器值的;模拟堆栈是用来存放可重入函数的,可重
入函数就是同时给多个任务调用,而不必担心数据的丢失,可重入函数一般在嵌入式系统有所体现。如果不加
载该 STARTUP.A51 文件,编译的代码可能会使单片机工作异常。
那么什么是堆栈呢?在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没
有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))
对数据项进行插入和删除。
第 16 页
栈,在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令的地址,然后是函数的各个参数,
在大多数的 C 编译器中,参数是由右往左入栈的,然后是函数中的局部变量,注意静态变量是不入栈的。当本
次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下
一条指令,程序由该点继续运行。
通过 STARTUP.A51 文件对单片机的上电初始化,RAM 区的状态如下图所示:
STARTUP.A51 文件并不复杂,只要用户有基本的汇编基础,就可以看懂。
4、程序烧录
程序烧录需要用到 AVR 单片机 ISP 下载编程软件 。运行后如下图所示:
烧录程序步骤:
1) 将单片机开发系统板上电,并设置在 51 系列单片机的状态
2) 芯片选择中选择“AT89S52”
3) 点击“装 Flash”图标,选择要烧录的 Hex 文件,如下图所示:
要点:
√ 堆:顺序随意
√ 栈:先进后出(Last-In/First-Out)
第 17 页
4) 点击“芯片编程”或“编程”按钮,完成程序烧录
5) 若选中“更新-自动编程”,则在 Keil 环境下重新编译程序的同时将程序烧录到单片机
以上简单介绍了 Keil 使用,需要具体详细的操作指南,参考 Keil 操作
手册
华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载
等相关资料。
5、Proteus软件的使用
① 简介
Proteus 是由英国 Labcenter electronics 公司开发的 EDA 工具软件。它从 1989 年出现到现在已经有十多年
的历史,在全球广泛使用。Proteus 安装以后,主要由两个程序组成:Ares 和 Isis。前者主要用于 PCB 自动或
人工布线及其电路仿真,后者主要采用原理布图的方法绘制电路并进行相应的仿真。除了上述基本应用之外,
Proteus 革命性的功能在于它的电路仿真是互动的,针对微处理器的应用,可以直接在基于原理图的虚拟原型上
编程,并实现软件代码级的调试,还可以直接实时动态地模拟按钮、键盘的输入,LED、液晶显示的输出,同
时配合虚拟工具如示波器、逻辑分析仪等进行相应的测量和观测。
设计和仿真软件 Proteus VSM 是一个很有用的工具,它可以帮助学生和专业人士提高他们的模拟和数字电
路的设计能力。它允许对电路设计采用图形环境,在这种环境中,你可以使用一个特定符号来代替元器件,并
完成不会对真实电路造成任何损害的电路仿真操作。它可以仿真仪表以及可描述在仿真过程中所获得的信号的
图表。更让人兴奋的是,它可以仿真目前流行的单片机,如 PIC,AVR,Motorola,8051 系列等。在设计综合
性
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
中,你可以利用 ARES 开发印制电路板。
② 入门
双击图标 启动软件,出现软件窗口,如下图所示:
第 18 页
为了方便介绍,我分别对窗口内各部分进行中文说明(见上图)。下面简单介绍各部分的功能:
原理图编辑窗口(The Editing Window):顾名思义,它是用来绘制原理图的。蓝色方框内为可编辑区,
元件要放到它里面。注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。
预览窗口(The Overview Window):它可显示两个内容,一个是:当你在元件列表中选择一个元件时,
它会显示该元件的预览图;另一个是:当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口
后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方
框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,
从而改变原理图的可视范围。
模型选择工具栏(Mode Selector Toolbar):
主要模型(Main Modes):(从左到右)
用于即时编辑元件参数(先单击该图标再单击要修改的元件)
选择元件(components)(默认选择的)
放置连接点
放置标签(用总线时会用到)
放置文本
绘制总线
放置子电路
配件(Gadgets):
终端接口(terminals):有 VCC、地、输出、输入等接口
器件引脚:用于绘制各种引脚
仿真图表(graph):用于各种分析,如 Noise Analysis
录音机
信号发生器(generators)
电压探针:使用仿真图表时要用到
电流探针:使用仿真图表时要用到
第 19 页
虚拟仪表:有示波器等
2D 图形(2D Graphics):
画各种直线
画各种方框
画各种圆
画各种圆弧
画各种多边形
画各种文本
画符号
画原点等
元件列表(The Object Selector):
用于挑选元件(components)、终端接口(terminals)、信号发生器(generators)、仿真图表(graph)等。
举例,当你选择“元件(components)”,单击“P”按钮会打开挑选元件对话框,选择了一个元件后(单击
了“OK”后),该元件会在元件列表中显示,以后要用到该元件时,只需在元件列表中选择即可。
方向工具栏(Orientation Toolbar):
旋转: 旋转角度只能是 90 的整数倍。
翻转: 完成水平翻转和垂直翻转。
使用方法:先右键单击元件,再点击(左击)相应的旋转图标。
仿真工具栏: 仿真控制按钮
运行 单步运行 暂停 停止
以上是关于 Proteus 软件基本的功能介绍,若要深入了解和学习,请参考 Proteus 相关教程。我们在这里引
入 Proteus,是因为它基本可以替代单片机开发板的功能。这样,在电脑上安装 Keil 和 Proteus,就可以学习单
片机硬件的设计和软件的编程。另外,硬件电路可以随时更改,非常方便,一般建议在没有开发板的时候,Proteus
软件是一个模拟硬件平台很好的软件。
第 20 页
第二章 实验篇--单片机实验项目的学习
学习目的:本章节要求通过各个实验项目的学习,由浅入深、由简到繁,从单片机基本的 GPIO 应用开始到
定时器、计数器及串口等中断资源的学习,掌握单片机的软硬件开发的整个过程,初步形成工程项目开发的能
力。
实验项目:
实验一 GPIO 口输出实验①(LED 流水灯) 【必做】
实验二 GPIO 口输出实验②(数码管显示) 【必做】
实验三 GPIO 口输入实验①(独立按键) 【必做】
实验四 GPIO 口输入实验②(矩阵键盘) 【必做】
实验五 定时器应用实验(交通灯控制) 【必做】
实验六 外部中断应用实验(计数器) 【必做】
实验七 秒表实验 【必做】
实验八 单片机串行口与 PC 机的通信实验 【必做】
实验九 A/D 转换实验 【必做】
实验十 D/A 转换实验 【选做】
实验十一 LED 点阵显示实验 【选做】
实验十二 LCD 显示实验 【选做】
实验十三 AT24C08 读写实验 【选做】
实验十四 步进电机控制实验 【选做】
说明:实验项目根据专业发展需要不断进行修订完善。
第 21 页
实验一 GPIO 口输出实验①(LED 流水灯)
实验目的:
学习单片机 GPIO 口(P1 口)输出功能及 LED 使用方法
实验要求:
实现 P1 口所连接的 8 个 LED 灯输出流水灯(由右向左)的效果,硬件连接见实验原理图。即第一时刻,
L1.0 灯亮,其他灯灭;第二时刻,L1.1 灯亮,其他灯灭;第三时刻,L1.2 灯亮,其他灯灭;第四时刻,L1.3 灯
亮,其他灯灭;第五时刻,L1.4 灯亮,其他灯灭;第六时刻,L1.5 灯亮,其他灯灭;第七时刻,L1.6 灯亮,其
他灯灭;第八时刻,L1.7 灯亮,其他灯灭;之后上述现象无限循环。
实验原理图:
实验内容:
1、 学习 LED 灯点亮的条件和原理(参考相关资料)
2、 实现点亮 L1.0 灯(单灯),程序如下:
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。
3、 实现流水灯,如实验要求所述。其中由右向左的循环(左循环)由多种方法实现,如指令“<<”或者
函数“_crol_(a,b)”。其中每个状态之间都有个时间间隔。一般情况下,这个时间间隔通过延时程序来
实现,下面给出延时程序的子函数,根据要求和延时程序完成流水灯实验,编写程序并下载观察实验
第 22 页
结果。
延时程序(子函数写法):
4、 习题
1) 上述流水灯现象是单灯由右向左(左循环)的无限循环,若要实现单灯由左向右(右循环)的循
环,如何实现?编写程序并调试,在开发板上实现。
2) 若要求两个灯的左循环,程序如何修改?编写程序并调试,在开发板上实现。
第 23 页
实验二 GPIO 口输出实验②(数码管显示)
实验目的:
学习单片机 GPIO 口(P0、P2 口)输出功能和数码管使用方法(静态扫描和动态扫描)
实验要求:
利用 8 位数码管(P0 口控制数码管段、P2 口控制位)显示自己学号的后 8 位
实验原理图:
实验内容:
1、 学习数码管的显示 0~9,A~F 字符的原理(见相关参考资料)
2、 根据上述原理图,用一个数码管静态显示单个字符,如“5”,程序如下。
第 24 页
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。
3、 参考 2 中程序并修改,实现实验要求的结果,编写程序并下载观察实验结果。
提示:
可以在 2 中程序中加入一个动态显示的子函数来实现动态显示
为显示多个数字,可以设置一个数据缓冲区(一维数组)
使用延时子函数
4、 习题
1) 若显示 8 位学号并闪烁(约 500ms),如何实现?编写程序并调试,在开发板上实现。
2) 若 8 位学号从右向左移入显示(500ms)并循环,如何实现?编写程序并调试,在开发板上实现。
第 25 页
实验三 GPIO 口输入实验①(独立按键)
实验目的:
学习单片机 GPIO 口(P1 口)输入功能和独立按键使用方法
实验要求:
LED 连接 P0 口,独立按键(K5~K8)连接 P1 口,具体电路参考原理图。编写程序,实现初始 L0.0 灯灭;
当按一次 K8 后,L0.0 灯亮;再按一次 K8 后,L0.0 灯闪烁(约 500ms 间隔),次数 10 次;再按一次 K8 后,
L0.0 又熄灭,如此循环。同时,在按键的时候用“哔”声提示。
实验原理图:
实验内容:
1、 自学独立按键使用中的消除抖动原理(见相关参考资料)
2、 按原理图,实现按下 K8 后点亮 L0.0,再按下 K8 后熄灭 L0.0;之后再按,循环上述现象。程序如下。
第 26 页
在 keil 环境下建立项目并输入上述程序,编译无错误后下载至单片机查看结果。
3、 参考 2 中程序并修改,实现实验要求的结果,编写程序并下载观察实验结果。
提示:
按键次数可以用个变量来计数,按不同的值来分支做不同任务
4、 习题
1) 2 中的参考程序第 41 行有什么作用?若删除此行指令,将会出现什么情况?实验并
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
。
2) 增加 K7、K6 按键,和 K8 各自实现如下功能:K8 按下,L0.0 闪烁(500ms);K7 按下 P0 口的 8
个 LED 灯流水灯现象(左循环);K6 按下,全灭 L0.0~L0.7 灯。编写程序并调试,在开发板上实
现。
第 27 页
实验四 GPIO 口输入实验②(矩阵键盘)
实验目的:
学习单片机 GPIO 口(P1 口)输入功能和矩阵键盘键值输出
实验要求:
P1 口低四位为矩阵键盘的行线,P1 口的高四位为矩阵键盘的列线。运用线反转法,编写程序,实现按键
值显示在数码管上(单个数码管,位置任意)。同时,在按键的时候用“哔”声提示。
实验原理图:
实验内容:
1、 自学矩阵键盘键值输出的原理(见相关参考资料),学会扫描法和线反转法。
2、 按原理图,用扫描法实现 16 个按键值的输出,程序如下:
第 28 页
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。
3、 参考 2 中程序并修改,实现实验要求的结果,编写程序并下载观察实验结果。
提示:
理解矩阵键盘的线反转法的关键:P1=0x0f,暂存 P1 口值后,P1=0xf0,再暂存 P1 口值,将两个暂
存的值拼接成一个值,即为按键特征码,查码表得到键号值
4、 习题
1) 修改 3 的程序,实现学号的输入并显示
第 29 页
实验五 定时器应用实验(交通灯控制)
实验目的:
学习 51 单片机内部定时器的使用和编程方法,掌握中断处理程序的编程方法
实验要求:
十字路口的交通灯一般分为东西方向和南北方向,交通灯的状态一般为如下情况:第一个状态,即东西方
向绿灯,南北方向红灯,持续 10s(实验需求);之后转为第二状态,即东西方向绿灯灭,黄灯闪烁 5 次(时间
为 500ms),南北方向依然红灯;之后转为第三状态,即东西方向红灯,南北方向绿灯,持续 10s(实验要求);
之后转为第四状态,东西方向依然红灯,而南北方向绿灯灭,黄灯闪烁 5 次(时间为 500ms);之后又回到第
一状态。就这样无限循环。其中每个状态持续的时间、闪烁的时间要求用单片机定时器中断功能实现,其工作
方式任意。硬件电路利用 L0.0、L0.1、L0.2 代表东西方向绿、黄、红灯,L0.5、L0.6、L0.7 代表南北方向绿、
黄、红灯。
实验原理图:
实验内容:
1、 自学定时器定时功能的工作原理(见相关参考资料)。
2、 根据实验要求,实验程序如下:
第 30 页
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。
3、 习题
1) 上面程序中,采用的是哪个定时器?哪种工作方式?定时时间为多少?
2) 修改 2 程序,将 Timer 改为另一个 Timer,工作方式改为其他一种方式,编写程序并下载观察实
验结果。
第 31 页
实验六 外部中断应用实验(计数器)
实验目的:
学习 51 单片机外部中断的使用方法,进一步掌握中断处理的编程方法。
实验要求:
51 单片机的 P3.2 和 P3.3 引脚为外部中断信号输入端口。将独立按键 K1 一端连接外中断 0 引脚(P3.2),
另一端接地,K1 模拟外部脉冲的产生。编写程序,利用外部中断实现对 K1 按键的计数,并在数码管上显示(两
位数码管(左边两位),计数范围 0~99)。
实验原理图:
实验内容:
1、 自学外部中断功能的工作原理(见相关参考资料)。
2、 根据上述原理图,实现单个数码管显示 K1 按键计数值,实验程序如下:
第 32 页
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。
3、 参考 2 中程序并修改,实现实验要求的结果,编写程序并下载观察实验结果。
提示:
利用动态显示的子函数
显示两位时,要进行数据缓存和处理
4、 习题
1) 上面程序中,采用的是哪个外部中断?使用何种触发信号?
2) 修改 2 程序,改为另一个外部中断,编写程序并下载观察实验结果。
第 33 页
实验七 秒表实验
实验目的:
学习 51 单片机按键扫描和数码管动、静态显示的编程方法及定时器的使用
实验要求:
设计一个由单独按键启、停、清零的秒表。秒表时间范围为 100 秒(00~99),显示用数码管右边两位显示。
单独按键为 K5(P1.4),此按键按下一次,启动秒表;再按一次,暂停秒表;再按一次,秒表清零。
实验原理图:
实验内容:
1、 巩固定时中断功能、数码管、独立按键使用(见相关参考资料)。
2、 根据上述原理图,实现 10s(0~9)的秒表,按键具有启动和暂停的功能。实验程序如下:
第 34 页
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。
3、 参考 2 中程序并修改,实现实验要求的结果,编写程序并下载观察实验结果。
提示:
利用动态显示的子函数
显示两位时,要进行数据缓存和处理
4、 习题
1) 上面程序中,采用的是哪个定时器?定时时间多少?
2) 修改 2 程序,实现 3 位数码管显示 60s(00~59),最后一位显示十分之一秒,第二位带小数点。
编写程序并下载观察实验结果。
第 35 页
实验八 单片机串行口与 PC 机的通信实验
实验目的:
学习 51 单片机串行口发送接收数据编程知识和方法
实验要求:
实现单片机和 PC 串口之间数据互相通信,即单片机可接收 PC 发送的数字字符(0~9),并在单个数码管
上循环显示(10 个数据),按下单片机的 K1 键后,单片机可向 PC 发送字符串(如“这是由 8051 单片机发送
的字符串!”)。
实验原理图:
实验内容:
1、 自学单片机串口收发数据编程知识、巩固数码管、外部中断的使用(见相关参考资料)。
2、 根据上述原理图,实现单片机向 PC 发送单个字符(如“a”)。实验程序如下:
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。并在此基础上修改 2 的程序
实现单片机向 PC 发送字符串(如“abcdefgh”)。提示:
定义一个字符串数组,如 uchar code Str[]="abcdefgh",字符串在保存时候,最后一个单元为“\0”
第 36 页
编写一个发送字符串的子函数,如 void Sends_to_SerialPort(uchar *s){……}
3、 根据上述原理图,实现单片机接收 PC 发送数字字符(0~9)(中断方式)并显示在数码管上。实验程
序如下:
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。注意,若要缓存多个接收的
字符,则可以定义一个缓存单元(大小自定义)。
4、 参考 2、3 中程序并修改,实现实验要求的结果,编写程序并下载观察实验结果。
5、 习题
1) 上面程序中,若要将数据显示到 8 个数码管,如何修改?编写程序并下载观察实验结果。
第 37 页
实验九 A/D 转换实验
实验目的:
掌握 A/D 转换与 8051 单片机的接口方法,了解 A/D 芯片 0809 转换性能及编程方法,并学习 Proteus 使用
实验要求:
设计一个简易电压表,即电位器模拟 0~5V 电压输入变化,由 ADC0809 采集并转换,将结果显示在数码
管上(3 位,精确到 0.01,如 x.xx),原理图见下图所示
实验原理图:
实验内容:
1、 自学 ADC0809 的 datasheet(见相关参考资料)了解相关功能。
2、 在 Proteus 环境下画出上述原理图,实验程序如下:
第 38 页
在 keil 环境下建立项目并输入上述程序,编译无错误后下载单片机查看结果。
3、 习题
上述程序实现是什么功能?数码管显示的是什么数据?
4、 修改 3 的程序,实现实验要求中的目的
第 39 页
实验十 D/A 转换实验
实验目的:
实验要求:
实验原理图:
实验内容:
第 40 页
实验十一 LED 点阵显示实验
实验目的:
实验要求:
实验原理图:
实验内容:
第 41 页
实验十二 LCD 显示实验
实验目的:
实验要求:
实验原理图:
实验内容:
第 42 页
实验十三 AT24C08 读写实验
实验目的:
实验要求:
实验原理图:
实验内容:
第 43 页
实验十四 步进电机控制实验
实验目的:
实验要求:
实验原理图:
实验内容: