HC6800-ES-V2.0实验指导书

上传人:xgs****56 文档编号:12959400 上传时间:2020-06-04 格式:DOC 页数:289 大小:14.31MB
返回 下载 相关 举报
HC6800-ES-V2.0实验指导书_第1页
第1页 / 共289页
HC6800-ES-V2.0实验指导书_第2页
第2页 / 共289页
HC6800-ES-V2.0实验指导书_第3页
第3页 / 共289页
点击查看更多>>
资源描述
HC6800 ES V2 0 单片机开 发板 学习指南 普中科技 4119b4c45d2889c13b452f487296c7bc pdf 目录 第一讲 开发板资源介绍 1 第二讲 软件安装 3 第三讲 程序下载 16 第四讲 KEIL 软件使用及入门 LED 灯 21 第五讲 蜂鸣器 31 第六讲 独立按键 32 第七讲 静态数码管 37 第八讲 矩阵键盘 42 第九讲 动态数码管 45 第十讲 电机 49 第十一讲 中断 56 第十二讲 1602 液晶显示 60 第十三讲 定时器 68 普中科技 第十四讲 时钟芯片 DS1302 71 第十五讲 串口通信 83 第十六讲 温度传感器 18B20 89 第十七讲 EEPROM 操作 24C02 99 第十八讲 红外遥控显示 110 第十九讲 AD DA 模数 数模转换 XPT2046 116 第二十讲 液晶屏显示 127 附录 A 单片机 C 语言介绍 140 附录 B 电路板绘制软件 PROTEL 介绍 170 普中科技 0 第一讲 开发板资源介绍 本开发板相对以往开发板的特点是综合性比较高 把短路冒去掉了 省去接 线的麻烦更加方便了初学者 是一款性价比极高的产品 提供USB2 0和串口两 种通信方式 USB实现供电 编程 仿真 通信多种功能 另外还提供了Atmel 单片机的ISP接口 此板兼容STC SST Atmel Philips等51家族的所有单片机 如果使用ISP编程建议使用开发板自带的单片机 因为每个厂烧录程序的方式不 一样 HC6800开发板有着丰富的外部资源 通过对该开发实验仪的学习 学员不仅可以轻松快速地掌握单片机软件系 统的开发 C语言 汇编语言 而且还能快速掌握硬件电路的设计及嵌入系统 开发流程 本套件配有丰富的实例源码 原理图等 特别适合单片机初学者 大中专院 校师生 单片机开发工程师选用 也是毕业设计和电子竞赛不可多得的参考板 单片机采用 STC90c516 1280 SRAM 64K Flash 2 1 寸彩色液晶屏 超声波接口 1602 液晶屏接口 12864 液晶屏接口 温度传感器 DS18B20 EEPROM 24C02 存储器 8 位动态数码管 AD DA 转换 XPT2046 DS1302 实时时钟 4 4 矩阵键盘 4 个独立键盘 2 8 路 led 灯 USB 接口 实现下载 供电 串行通信 通过 USB 转串口芯片 CH340T 转换 IR 红外接收头 红外数据传输 板载继电器 蜂鸣器 4119b4c45d2889c13b452f487296c7bc pdf 1 步进电机 ULN2003 达林顿管驱动 普中科技 2 第二讲 软件安装 1 USB 转串口驱动的安装 双击 USB 驱动 SERIAL 程序的 Setup 安装成功后 会出现一下提示画面 点 确定 即可以结束安装过程 安装完驱动程序成功后 把开发板与电脑连接可以看到设备管理器中的 COM 口 在图标 我的电脑 右键 属性 硬件 设备管理器 这是 XP 系统 4119b4c45d2889c13b452f487296c7bc pdf 3 WIN 系统与其相似找到设备管理器 显示成功的 COM 口 安装不成功解决办法 如果发现是下图感叹号 则没有安装成功或者没有安装 右键点击更新驱动程 普中科技 4 序 选择 从列表或指定位置安装 推荐 4119b4c45d2889c13b452f487296c7bc pdf 5 出现此对话框 选择不要搜索 自己选择安装 点 下一步 点击 下一步 普中科技 6 出现此对话框 点击 从磁盘安装 点击 浏览 到 USB 驱动文件夹找到安装文件打开 4119b4c45d2889c13b452f487296c7bc pdf 7 点击 确定 和 下一步 点击 完成 安装结束 普中科技 8 KEIL 软件安装 我们用现在新版本的 uVision 4 KEIL 开发环境 使用的版本是破解版 仅供大家学习使用 如做商业开发 请购买正版 可以获得更多 keil 软件原厂 技术支持 即将安装软件如下 一个 keil 安装程序 一个注册机 右侧 打开 C51V901 EXE 安装程序 点击 Next 4119b4c45d2889c13b452f487296c7bc pdf 9 I agree all the tems of 选中 点击 Next 设置安装目录 根据自己的情况选中安装目录 重新设置点击 Browse 这里默 认 C 盘 设置好安装目录后 点击 Next 普中科技 10 输入相关信息 随便输入 输入完毕后点击 Next 开始安装 安装过程中 等待安装完成 4119b4c45d2889c13b452f487296c7bc pdf 11 安装完成 点击 Finish 即可 接下来破解软件 打开注册机软件 Target 选择 C51 普中科技 12 打开刚刚安装好的 keil 软件 点击 File 菜单 4119b4c45d2889c13b452f487296c7bc pdf 13 选择 License Management 现在没有破解 复制 CID 码 之后点击 Generate 生成注册码 复制 CID 码到注册机中 从 KEIL 复制的 CID 码粘贴到这里 复制生成的注册码到 keil 普中科技 14 复制完注册码后 点击右侧的 即可完成破解 提示 如下 以上软件安装完毕 接下来看程序了 复制到这里 4119b4c45d2889c13b452f487296c7bc pdf 15 第三讲 程序下载 我们可以通过 USB 接口方式下载对我们开发板的单片机下载程序 下载软件又可分为 STC 官方软件 和普中科技自己开发的软件 利用官方软件下载程序需要手动重启单片机 需要给单片机重新上电启动 普中开发的下载软件及所设计的开发板实现了全自动下载功能 省去了手动操 作 极大方便了学习及开发人员 接下来就来讲一下下载程序的方式 1 USB 口 普中软件 我们插上 USB 口 打开开发板电源开关 然后打开普中 ISP 下载软件 如下图 官方软件 普中软件 普中科技 16 在 usb 转串口驱动安装成功后 打开软件应该有串口号 如图指示 一般笔记 本建议使用低速下载 台式可以使用高速下载 如果笔记本使用高速下载的话 那么会报警波特率超时 2 芯片类型选择 STC90C5XX 具体的要根据您板子上使用的单片机型号 如下图 加载我们要下载到单片机里的程序 单击 选择下载的后缀为 Hex 的文件 串口号 10 4119b4c45d2889c13b452f487296c7bc pdf 17 打开后 会在文件名处有提示 文件路径 还有代码大小 4 最后一步 点击下载程序 下载成功如图显示 此时继电器工作会有小的啪啪的响声 接下来我们用官方 STC 下载软件下载 代码大小 下载成功 普中科技 18 1 选择开发板上单片机型号 我们选 STC90C516 2 选择串口 可通过设备管理器查看 3 打开需要下载到单片机的程序 4 点击下载 点击下载按钮后会有这样的信息 这时需要手动按开关键 关闭开关 打开开关这样一个过程 主要是给单片机 冷启动 重新上电后 会出现 1 2 3 4 4119b4c45d2889c13b452f487296c7bc pdf 19 开始下载程序 下载完成 上图表示下载成功 现在用官方软件下载几乎都要手动重新给单片机上电过程 市面的开发板主要 也都是采用这种下载方式 建议使用普中软件自动下载 普中科技 20 第四讲 KEIL 软件使用及入门 led 灯 单片机开发中除必要的硬件外 同样离不开软件 我们写的汇编语言源程 序要变为 CPU 可以执行的机器码有两种方法 一种是手工汇编 另一种是机器 汇编 目前已极少使用手工汇编的方法了 机器汇编是通过汇编软件将源程序 变为机器码 用于 MCS 51 单片机的汇编软件有早期的 A51 随着单片机开发 技术的不断发展 从普遍使用汇编语言到逐渐使用高级语言开发 单片机的开 发软件也在不断发展 Keil 软件是目前最流行开发 MCS 51 系列单片机的软件 这从近年来各仿真机厂商纷纷宣布全面支持 Keil 即可看出 Keil 提供了包括 C 编译器 宏汇编 连接器 库管理和一个功能强大的仿真调试器等在内的完 整开发方案 通过一个集成开发环境 uVision 将这些部份组合在一起 运行 Keil 软件需要 Pentium 或以上的 CPU 16MB 或更多 RAM 20M 以上空闲的硬 盘空间 WIN98 NT WIN2000 WINXP 等操作系统 掌握这一软件的使用对于 使用 51 系列单片机的爱好者来说是十分必要的 如果你使用 C 语言编程 那 么 Keil 几乎就是你的不二之选 目前在国内你只能买到该软件 而你买的仿真 机也很可能只支持该软件 即使不使用 C 语言而仅用汇编语言编程 其方便易 用的集成环境 强大的软件仿真调试工具也会令你事半功倍 我们将通过一些实例来学习 Keil 软件的使用 在这一部份我们将学习如 何输入源程序 建立工程 对工程进行详细的设置 以及如何将源程序变为目 标代码 在这里利用第二个例程 led 闪烁实验来建立 keil 工程 打开 keil 软件 版本 Vision2 vision3 vision4 都一样 在这 里用 vision4 版本演示 打开之后如下图 有的时候会默认打开上次使用的 工程 单击 Project 菜单 选择 Close Project 关闭了默认打开的工程 显 示下图界面 4119b4c45d2889c13b452f487296c7bc pdf 21 我们要建立新的工程 选择 Project new vision projiect 选择工程要保存的路径 输入工程文件名 如图 点击保存后会弹出一个对话框 要求用户选择单片机型号 可以根据用 户使用的单片机来选择 我们使用的 STC90 单片机是兼容 51 内核的 Keil 普中科技 22 C51 几乎支持所有的 51 内核单片机 51 内核具有通用型 如果程序用的资 源不是太复杂 我们可以选择任意一款 51 单片机内核就行 在稍后我们会 继续讲解怎么将 STC 单片机官方的头文件添加进来 在这暂不多介绍 Keil 软件的关键是程序代码的编写 而非是用户选择什么硬件 例程以添加 Atmel 的 AT89C51 来说明 如图 然后 单击 确定 OK 如果出现下面的界面 单击是就可以 意思是将单片机的启动代码添加 到工程 我们不用修改 到目前我们还没建立一个完整的工程 只是有工程的名字 框架 工程 中还没有任何文件代码 除了启动代码 有的 keil 版本不显示启动代码 接下来我们添加文件及代码 单击菜单 File New 选项 或者单击界面上的快捷图标 新建文 件串口如下 功能描述 4119b4c45d2889c13b452f487296c7bc pdf 23 界面显示的 Text1 就是我们刚刚加入的文件 但是这个文件与我们的工 程还没有直接联系起来 单击图标 保存我们当前的 text1 文件 输 入要保存的文件名 同时要输入文件扩展名 扩展名很关键 用 C 语言编写 的程序 则必须为 c 汇编语言必须为 asm 为文件名 文件名是用 户自己取的 填好文件名后单击保存 普中科技 24 回到编辑界面 单击 Target1 前面的 号 然后在 Source Group 1 上右键单击 选择 Add Files to Group Source Group1 选中我们刚才建立 的 c 文件 这里是 led test c 单击 add 只需单击一次 之后单击 Close 就 可以 回到主界面后 单击 Source Group 1 前的 号 刚刚添加的文件显示在里 面 通过以上步骤我们就建立好了一个工程 接下来就可以写代码了 在写代码之前介绍介个常用的按钮 按钮 用来编译我们正在操作的文件 按钮 用来编译修改过的文件 并生成应用程序共单片机下载 按钮 用来重新编译当前工程中所有的文件 并生成应用程序共单片机下 4119b4c45d2889c13b452f487296c7bc pdf 25 载 因为很多工程不止有一个文件 当有多个文件时 用它进行编译 按钮 用来打开 Option for Target 对话框 对当前工程进行设置 工程的各个参数都可以在这里设置 具体的设置方法用到的时候 再和大家 详细讲述 以上几个按钮是常用的 其他按钮在使用的时候再介绍 1 编写程序 我们以一个程序为例来练习编写 led 闪烁 这个程序大家一定要弄懂 也算是一个基础 懂了这个程序 也算是进入单 片机的领域了接下来我会详细讲解这个例程 另外需要注意的是单片机写程序 的时候 一定是英文状态下的字符 尤其注意 往往就因为这个分号 程 序出现问题 所以输入时一定要注意是在英文状态下的 我们在编辑框中输入以下程序 LED 闪烁的简单试验 include 此文件中定义了 51 的一些特殊功能寄存器 void delay unsigned int i 声明延时函数 void main while 1 P2 0 x00 置 P0 口为低电平 delay 600 调用延时程序 P2 0 xff 置 P0 口为高电平 delay 600 调用延时程序 延时函数 void delay unsigned int i unsigned char j 普中科技 26 for i i 0 i 循环 600 255 次 for j 255 j 0 j 我们先编译一下 第一次编译我们点击 看一下结果 结果的意思 编译 led2 c 链接 data 9 0 占用内部 RAM9 个字节 xdata 0 外部 RAM 0 字节 Code 56 代码长度为 56 字节 生成单片机可下载的 HEX 十六进制 文件 没有错误 没有警告 在这里说明一点 生成 HEX 文件是我们自己设置的 默认的情况下不会生成 HEX 文件 单击 进行设置 如下图 选择 Output 勾选 Creat hex 后单 击确定 4119b4c45d2889c13b452f487296c7bc pdf 27 2 接下来我们分析上面的程序 作用 它是用来注释一段内容的 编译器不对其进行编译 只要在 直接的内容都被注释掉 是用来注释其后面的内容 只能注释一行 include 这句告诉我们包涵 51 的头文件 那这个头文件里面 放的是什么东西呢 放的是 51 单片机对应的操作的寄存器地址 如我们直接用 来操作的 P1 口就是代表 0 x90 地址 我们可以将光标低位在上然后右 键 打开头文件 ifndef REG51 H define REG51 H BYTE Register sfr P0 0 x80 sfr P1 0 x90 sfr P2 0 xA0 sfr P3 0 xB0 sfr PSW 0 xD0 sfr ACC 0 xE0 SCON 普中科技 28 sbit SM0 0 x9F sbit SM1 0 x9E sbit SM2 0 x9D sbit REN 0 x9C sbit TB8 0 x9B sbit RB8 0 x9A sbit TI 0 x99 sbit RI 0 x98 endif 头文件中定义了 51 系列单片机的所有功能寄存器 我们直接使用其代号就 可以 P0 P1 等 如 sfr P0 0 x80 意思是把单片机内部地址 0 x80 处的寄存器重新起名字叫 P0 以后我们在程序中直接操作 P0 就相当于对单片机内部 0 x80 地址处的寄存 器进行操作 通俗的讲 也就是说 通过 sfr 这个关键字 让 Keil 编译器在单 片机与人之间搭建一个桥梁 我们操作 P0 口 单片机对应就去操作内部 0 x80 的地址 所以我们写程序要在开始处直接包涵单片机的头文件 sbit SM0 0 x9F 是定义位操作地址 0 x9F 的 这个地址只代表一个位 我们操作 SM0 对应单片机就是操作位地址 0 x9F 总结起来 sfr 与 sbit 区别 sfr 是定义字节的 8 位 sbit 是定义位的 1 位 我们在返回主程序 void delay unsigned int i unsigned char j for i i 0 i for j 100 j 0 j 定义一个函数 delay 与 c 语言一样 要用一个函数 先定义 我们可以叫 它子函数 可以调用的 void main 结构同 c 语言一样 main 函数开始 大括号 P2 0 x00 置 P0 口为低电平 从这句开始 你现在控制单片机了 告诉单片机把你的 P2 口都输出 0 如 果你不操作 P2 口了 那么 P2 口一直保持这个状态 直到你去改变它 delay 1000 调用延时程序 4119b4c45d2889c13b452f487296c7bc pdf 29 调用子函数 delay 告诉单片机去执行 delay 那个函数 那么 P2 口一直保 持 0 这状态 P2 0 xff 置 P0 口为高电平 这时告诉 P2 口全部输出 1 0 xff 1111 1111 状态从 0 变成 1 了 对应的 灯的输出也由低电平变成高电平了 delay 1000 调用延时程序 再进行延时 这个程序里执行完了一次又干什么呢 Keil 编译器会编译成一直重复执行 main 函数里面的代码 整个代码的效果就 是 P2 输出低电平 延时一段时间 目的是 P2 输出的低电平保持一段时间 P2 输出高电平 延时一段时间 目的是 P2 输出的高电平保持一段时间 重复 到 的过程 实际效果就是 led 一闪一闪 通过更改 delay 延时时间 i 参数 i 可以改变闪烁频率 实际操作 1 打开软件 提前装好驱动 点击打开文件 打开我们 刚刚编译的 led hex 文件 下载程序 就会看到 led 闪烁 我们在看一个例程 就是单片机最经典的流水灯例程 普中科技 30 以下是我们的硬件电路 led 一段接单片机 P2 口的 8 个引脚 另外一边接排阻 RP12 和 RP13 然后接到电源 基础知识介绍 排阻 一般在排阻上都标有阻值号 其公共端附近也有明显标记 如下下图表示为 472 表示 47 4700 欧姆 还有的标号如 3R0 表示阻 值为 3 欧姆 4K7 表示阻值为 4 7k R002 表示阻值为 0 002 欧姆 2 发光二极管 它具有单向导电性 通过 5mA 左右电流即可发光 电流越 大 其亮度越强 但若电流过大 会烧毁二极管 一般我们控制在 3 mA 20mA 之间 在这里 给发光二极管串联一个电阻的目的就是为了限制通过发光二极 管的电流不要太大 因此这个电阻又称为 限流电阻 当发光二极管发光时 测量它两端电压约为 1 7V 这个电压又叫做发光二极管的 导通压降 图 2 2 9 和图 2 2 10 分别为直插式发光二极管和贴片式发光二极管实物图 发光二极管 正极又称阳极 负极又称阴极 电流只能从阳极流向阴极 直插式发光二极管 长脚为阳极 短脚为阴极 仔细观察贴片式发光二极管正面的一端有彩色标记 通常有标记的一端为阴极 4119b4c45d2889c13b452f487296c7bc pdf 31 图 2 2 9 图 2 2 10 关于排阻大小的选择 欧姆定律想必大家都清楚 U IR 当发光二极管正常 导通时 其两端电压约为 1 7V 发光管的阴极为低电平 即 0V 阳极串接一电 阻 电阻的另一端为 Vcc 为 5V 因此加在电阻两端的电压为 5V 1 7V 3 3V 计算穿过电阻的电流 3 3 V 1000 3 3mA 即穿过发光管的电 流也为 3 3mA 若想让发光管再亮一些 我们可以适当减小该电阻 看我们的原理图 可以知道 LED 的正极接在 VCC 上 只要给了低电平 那 么 LED 就会亮 低电平对应到单片机的逻辑就是 0 只要单片机的某一个管脚 输出 0 那么对应的发光二极管就会亮 我们看一下源码 实验名 左右流水灯实验 使用的 IO P2 实验效果 点亮的 LED 从右边往左边移动 到达左边再往右边移动 依此循环 注意 include include 因为要用到左右移函数 所以加入这个头文件 define GPIO LED P2 将 P2 口另外取名为 GPIO LED void Delay10ms unsigned int 误差 0us 函数名 main 函数功能 主函数 输入 无 输出 无 void main void unsigned char n GPIO LED 0 xfe while 1 普中科技 32 for n 0 n 7 n 左移 7 次 这样子就会到达最左边 GPIO LED crol GPIO LED 1 将 GPIO LED 左移一位 Delay10ms 50 延时 for n 0 n0 c for b 38 b 0 b for a 130 a 0 a 以上程序实现点亮一盏 LED 之后左右移动 讲解 移位操作 1 左移 C51 中操作符为 每执行一次右移指令 被操作的数将最低位 移入单片机 PSW 寄存器的 CY 位 CY 位中原来的数丢弃 最高位补 0 其他 4119b4c45d2889c13b452f487296c7bc pdf 33 位依次向右移动一位 如下图所示 3 循环左移 最高位移入最低位 其他位依次向左移一位 C 语言中没有专门 的指令 通过移位指令与简单逻辑运算可以实现循环左移 或直接利用 C51 库中自带的函数 crol 实现 如下图所示 crol 函数所在的头文件是 4 循环右移 最低位移入最高位 其他位依次向右移一位 C 语言中没有专门 的指令 通过移位指令与简单逻辑运算可以实现循环右移 或直接利用 C51 库中自带的函数 cror 实现 如下图所示 cror 函数所在的头文件是 5 讲解 PSW 寄存器 PSW Program Status Word 全称为程序状态字标志寄存器 是一个 8 位寄 存器 位于单片机片内的特殊功能寄存器区 字节地址 DOH 用来存放运算结 果的一些特征 如有无进位 借位等 使用汇编编程时 PSW 寄存器很有用 但 在利用 C 语言编程时 编译器会自动控制该寄存器 很少人为操作它 大家只 需做简单了解即可 其每位的具体含义如下图所示 普中科技 34 1 CY 一进位标志位 它表示运算是否有进位 或借位 如果操作结果在最 高位有进位 加法 或者借位 减法 则该位为 1 否则为 0 2 AC 一辅助进位标志 又称半进位标志 它指两个 8 位数运算低四位是 否有半进位 即低四位相加 或相减 是否进位 或借位 如有 AC 为 1 否则为 0e 3 FO 一由用户使用的一个状态标志位 可用软件来使它置 1 或清 0 也可 由软件来测试它 以控制程序的流向 4 RS1 RSO 4 组工作寄存器区选择控制位 在汇编语言中这两位用来选 择 4 组工作寄存器区中的哪一组为当前工作寄存区 5 OV 一溢出标志位 反映带符号数的运算结果是否有溢出 有溢出时 此 位为 1 否则为 0 6 P 一奇偶标志位 反映累加器 ACC 内容的奇偶性 如果 ACC 中的运算结果有偶数 个 I 如 11001100B 其中有 4 个 1 则 P 为 0 否则 P 为 1 6 cror 函数 循环右移函数 包含在 intrins h 的库函数里面 7 crol 函数 循环左移移函数 包含在 intrins h 的库函数里面 4119b4c45d2889c13b452f487296c7bc pdf 35 第五讲 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器 采用直流电压供电 广泛应用于 计算机 打印机 复印机 报警器 电子玩具 汽车电子设备 电话机 定时 器等电子产品中作发声器件 我们开发板上常用的蜂鸣器就是常常说的交流蜂 鸣器或直流蜂鸣器 自激式蜂鸣器 直流蜂鸣器是给一定的驱动直流电压就 会响 而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响 常见的有 PWM 波控制蜂 鸣器的频率 脉冲就是高低电平的切换 如下图 一个方波脉冲 我们用单片机的 IO 口实现一种这样高低电平的方波 驱动蜂鸣器发音 我们板 子上配的就是交流蜂鸣器 接下来我们看一下蜂鸣器的硬件电路 普中科技 36 蜂鸣器通过 ULN2003 驱动 这里 ULN2003 暂不多做介绍 详细介绍可参考步进电机篇 我们看一下程序源码 实验名 蜂鸣器实验 使用的 IO P1 5 实验效果 蜂鸣器响 注意 include sbit Beep P1 5 void Delay unsigned int i 函数名 main 函数功能 主函数 输入 无 输出 无 void main Beep 1 Delay 5 Beep 0 Delay 5 函数名 Delay 函数功能 延时函数 输入 无 输出 无 4119b4c45d2889c13b452f487296c7bc pdf 37 void Delay unsigned int i char j for i i 0 i for j 200 j 0 j 下载生成的 hex 文件 就可听到蜂鸣器发音 第六讲 独立按键 按键是什么东西 我想这个就不必由我向各位阐述了 嗯 如你所见 按 键种类繁多 功能有简有繁 极大的充斥着我们的生活 但是无论如何 所有 的按键其实都有一个原型 来源于同一种原理 所有的按键无论多复杂 多华 丽 都是从这样一个原型发展而成的 好比你就算长的再帅 你也是只猩猩变 来的 呵呵 我们平日所见到的绝大部分的按键 其实都可以归类为一种 叫 接触式按键 下图为一个典型的接触式按键 又称轻触开关 普中科技 38 需要特别说明的是 这里说的 接触 是指机械层面上的接触 而不是 感光或者某些特殊涂层 比如触摸屏 一类的接触 所以 按键的工作特性其 实是一种机械特性 下文会详细说明 如上图 请对照图一想象 1 2 3 4 分别对应按键的四个引脚 其中蓝 色的线表示按键未被按下之时的状态 我成为初始状态 它是不导通的 而绿 色的线是却永久导通的 各位明白了么 其实是两个相同的结构连在一起了 我们只要将需要按键开关作用的线路分别接在1 3 和2 4 的任意取一组合 概括起来就是 1 2 1 4 3 2 3 4 四种组合 都可以起 到我们预期的开关作用 相信以上说明使大家对按键的工作原理有了个比较清晰的认识了 现在来 说说一个小知识 先看下图 图4 首先说明的是 上图的连法是不允许的 因为当按键按下之后 电源和地 短接 会将导线直接烧毁 但是此处用作特例 假设导线不会烧毁 现在来提 出一个问题 当按键按下以后 请问如果这时用万用表测量导线上任何一处的 电压 得到的结果是VCC 还是GND 的电压 答案是 GND 即表示测出的电压为0V 为什么呢 因为导线上 对于两端 的电平是一种类似于程序语言逻辑运算里面的 与 即对于导线两端 有零 4119b4c45d2889c13b452f487296c7bc pdf 39 即为零 只有全为一是才为一 理解了这点 按键的工作前提就有了 键盘分为编码键盘和非编码键盘 键盘上闭合键的识别由专用的硬件编码 器实现 并产生键编码号或键值的称为编码键盘 如计算机键盘 而靠软件编 程来识别的键盘称为非编码键盘 在单片机组成的各种系统中 用的较多的是 非编码键盘 非编码键盘又分为独立键盘和行列式键盘 常说的矩阵键盘 在 这一讲中我们介绍一下单片机中键盘使用 单片机的 IO 口既可作为输出也可作为输入使用 当检测按键时用的是它的 输入功能 我们把按键的一端接地 另一端与单片机的某个 I O 口相连 开始 时先给该 IO 口赋一高电平 然后让单片机不断地检测该 I O 口是杏变为低电平 当按键闭合时 即相当于该 I O 口通过按键与地相连 变成低电平 程序一旦 检测到 I O 口变为低电平则说明按键被按下 然后执行相应的指令 我们先来说一下 按键常常遇到的问题 抖动问题 还以图四为例 按键未按下之前 图四按键左端的导线因为连在VCC 上而 显示高电平 右端显示低电平 按键按下后 按键闭合 整个导线都显示低电 平 然后按键松开 又回到按键按下之前的点评状态 如果只考察按键左端的 电平变化 应该是上图中所显示的一个负脉冲波形 但是 实际上 正确的波 形应该是下图 相比于上图 大家都看到了在高低电平直接有一段锯齿一样的 波形 这就是所谓的按键抖动 为什么会有按键抖动呢 原因很简单 接触式按键是靠机械的接触来实现 普中科技 40 开关作用的 这种接触方式就注定了它要经历一个 接触不稳定 正在稳定 中 彻底稳定 的一种过程 就好比你用手抓紧一颗石头 即使你一开始就 很用力的握紧 也不可能马上就达到最紧的状态 也要经历一个从握住到最紧 握的过程 那么在这个过程里 接触式按键就处于一种徘徊在 闭合 与 断 开 两者之间的状态 体现在电路中 就是在一小段时间内有非常多的 按下 抬起 动作 而这段抖动的时间 大概是10 20 毫秒 依不同的环境条件 而定 解决这个问题常见的方法有软件去抖动和硬件去抖动 我们解释一下抖动 关于按键去抖动的解释 我们在手动按键的时候 由 于机械抖动或是其它一些非人为的因素很有可能会造成误识别 一般手动按下 一次键然后接着释放 按键两片金属膜接触的时间大约为 50ms 左右 在按下 瞬间到稳定的时间为 5 10ms 在松开的瞬间到稳定的时间也为 5 10ms 如果我 们再首次检测到键被按下后延时 10ms 左右再去检测 这时如果是干扰信号将 不会被检测到 如果确实是有键被按下 则可确认 以上为按键识别去抖动的 原理 独立按键 我们先将一下独立按键的使用方法 开发板独立按键电路图如下 独立按键一共 5 个 分别连接在单片机的 P3 0 到 P3 4 口 去抖动的方式 我 们采用软件延时的方法 过程如下 1 先设置 IO 口为高电平 一般上电默认就为高 4119b4c45d2889c13b452f487296c7bc pdf 41 2 读取 IO 口电平确认是否有按键按下 3 如有 IO 电平为低电平后 延时几个 ms 4 再读取该 IO 电平 如果任然为低电平 说明对应按键按下 5 执行相应按键的程序 实验名 独立按键实验 使用的IO LED使用P2 键盘使用P3 0 P3 1 P3 2 P3 3 实验效果 按下K1键 灭掉LED 按下K2键 打开所有的LED 按下K3键 LED左移一位 按下K4键 LED右移一位 注意 由于P3 2口跟红外线共用 所以做按键实验时为了 不让红外线影响实验 效果 最好把红外线先取下来 include include define GPIO LED P2 sbit K1 P3 0 sbit K2 P3 1 sbit K3 P3 2 sbit K4 P3 3 void Delay10ms 延时10ms 函数名 main 函数功能 主函数 输入 无 输出 无 void main void unsigned int i j while 1 if K1 0 检测按键K1是否按下 Delay10ms 消除抖动 if K1 0 再次检测按键是否按下 j 0 while i 50 i i 0 if K2 0 检测按键K2是否按下 Delay10ms if K2 0 j 0 xff while i 50 i i 0 if K3 0 检测按键K3是否按下 Delay10ms if K3 0 if j 0 j 0 xff 如果当前状态是全亮的或者全灭 的 就点亮他的第一盏灯 j 0 xfe else j crol j 1 左移一位 while i 50 i i 0 if K4 0 检测按键K4是否按下 Delay10ms if K4 0 4119b4c45d2889c13b452f487296c7bc pdf 43 if j 0 j 0 xff j 0 xfe else j cror j 1 右移一位 while i0 c for b 38 b 0 b for a 130 a 0 a 下载独立按键控制 led 灯 hex 观察实验结果 实验效果是 按下 K1 键 灭掉 LED 按下 K2 键 打开所有的 LED 按下 K3 键 LED 左移一位 按下 K4 键 LED 右移一位 普中科技 44 第七讲 静态数码管 我们先看看什么是数码管 上图就是各种长相各种样子的数码管了 肯定很眼熟了吧 4119b4c45d2889c13b452f487296c7bc pdf 45 不管将几位数码管连在一起 数码管的显示原理都是一样的 都是靠点亮 内部的发光二极管来发光 下面就来我们讲解一个数码管是如何亮起来的 数 码管内部电路如下图所示 从右图可看出 一位数码管的引脚是 10 个 显示一 个 8 字需要 7 个小段 另外还有一个小数点 所以其内部一共有 8 个小的发光 二极管 最后还有一个公共端 生产商为了封装统一 单位数码管都封装 10 个 引脚 其中第 3 和第 8 引脚是连接在一起的 而它们的公共端又可分为共阳极 和共阴极 中间图为共阴极内部原理图 右图为共阳极内部原理图 上图展出了常用的两种数码管的引脚排列和内部结构 总所周知 点亮发 光二极管就是要给予它足够大的正向压降 所以点亮数码管其实也就是给它内 部相应的发光二极管正向压降 如上图左 一共a b c d e f g DP 八 段 如果要显示 1 则要点亮b c 两段LED 显示 A 则点亮 a b c e f g 这六段LED 我们还知道 既然LED 加载的是正向压降 它 的两端电压必然会有高低之分 如果八段LED 电压高的一端为公共端 我们称 之为共阳极数码管 如上图中 如果八段LED 电压低的一段为公共端 则称 之为共阴极数码管 上图右 所以 要点亮共阳极数码管 则要在公共端给 予高于非公共端的电平 反之点亮共阴极数码管 则要在非公共端给予较高电 平 对共阴极数码来说 其8个发光二极管的阴极在数码管内部全部连接在一起 所以称 共阴 而它们的阳极是独立的 通常在设计电路时一般把阴极接地 当我们给数码管的任意一个阳极加一个高电平时 对应的这个发光二极管就点 普中科技 46 亮了 如果想要显示出一个8字 并且把右下角的小数点也点亮的话 可以给8 个阳极全部送高电平 如果想让它显示出一个0字 那么我们可以除了给第 g dp 这两位送低电平外 其余引脚全部都送高电平 这样它就显示出0字了 想 让它显示几 就给相对应的发光二极管送高电平 因此我们在显示数字的时候 首先做的就是给0 9十个数字编码 在要它亮什么数字的时候直接把这个编码送 到它的阳极就行了 共阳极数码管其内部8个发光二极管的所有阳极全部连接在一起 电路连接 时 公共端接高电平 因此我们要点亮的那个发光管二极管就需要给阴极送低 电平 此时显示数字的编码与共阳极编码是相反的关系 数码管内部发光二极 管点亮时 也需要5mA以上的电流 而且电流不可过大 否则会烧毁发光二极管 由于单片机的I O口送不出如此大的电流 所以数码管与单片机连接时需要加驱 动电路 可以用上拉电阻的方法或使用专门的数码管驱动芯片 本实验板上使 用的是74HC573锁存器 其输出电流较大 电路接口简单 可借鉴使用 一般共阳极数码管更为常用 为什么呢 这是因为数码管的非公共端往往 接在IC 芯片的IO上 而IC 芯片的驱动能力往往是比较小的 如果采用共阴极 数码管 它的驱动端在非公共端 就有可能受限于IC芯片输出电流不够而显示 昏暗 比如51单片机 要外加上拉电阻或者是三极管加大驱动能力 所以使 用共阳数码管的好处是 将驱动数码管的工作交到公共端 一般接驱动电源 加大驱动电源的功率自然要比加大IC芯片IO口的驱动电流简单许多 另一方面 这样也能减轻MCU的负担 当多位一体时 它们内部的公共端是独立的 而负责显示什么数字的段线 全部是连接在一起的 独立的公共端可以控制多位一体中的哪一位数码管点亮 而连接在一起的段线可以控制这个能点亮数码管亮什么数字 通常我们把公共 端叫做 位选线 连接在一起的段线叫做 段选线 有了这两个线后 通 过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了 一般单位数码管有10个引脚 二位数码管也是10个引脚 四位数码管是12 个引脚 关于具体的引脚及段 位标号大家可以查询相关资料 最简单的办法 就是用数字万用表测量 若没有数字万用表也可用5V直流电源串接1k电阻后测 量 将测量结果记录 通过统计便可绘制出引脚标号 4119b4c45d2889c13b452f487296c7bc pdf 47 知识点 如何用万用表检浏数码管的引脚排列 对数字万用表来说 红色表笔连接表内部电池正极 黑色表笔连接表内部 电池负极 当把数字万用表置于二极管档时 其两表笔间开路电压约为1 5V 把两表笔正确加在发光二极管两端时 可以点亮发光二极管 如下图所示 将数字万用表置于二极管挡 红表笔接在 脚 然后用黑表 笔去接触其他各引脚 假设只有当接触到 脚时 数码管的a段发光 而接触其 余引脚时则不发光 由此可知 被测数码管为共阴极结构类型 脚是公共阴 极 脚则是数码管的a段 接下来再检测各段引脚 仍使用数字万用表二极管 档 将黑表笔固定接在 脚 用红表笔依次接触 引脚时 数码管的其他段先后分别发光 据 此便可绘出该数码管的内部结构和引脚排列图 检测中 若被测数码管为共阳极类型 则需将红 黑表笔对调才能测出上 述结果 在判别结构类型时 操作时要灵活掌握 反复试验 直到找出公共端 为止 大家只要懂得了原理 检测出各个引脚便不在是问题了 数码管静态显示 当多位数码管应用于某一系统时 它们的 位选 是可独立控制的 而 段选 是连接在一起的 我们可以通过位选信号控制哪几个数码管亮 而在 同一时刻 位选选通的所有数码管上显示的数字始终都是一样的 因为它们的 段选是连接在一起的 所以送入所有数码管的段选信号都是相同的 那么它们 显示的数字必定一样 数码管的这种显示方法叫做静态显示 普中科技 48 从电路图可以看出 本开发板使用的是共阴极数码管 在每段数码管端加 上一个限流电阻 下面我们来看一下程序 打开 实验名 静态数码管实验 使用的IO 数码管使用P0 键盘使用P3 0 P3 1 P3 2 P3 3 实验效果 按下K1键 显示1 按下K2键 显示 2 按下K3键 显示3 按下 K4键 显示4 注意 由于P3 2口跟红外线共用 所以做按键实验时为了 不让红外线影响实验 效果 最好把红外线先取下来 4119b4c45d2889c13b452f487296c7bc pdf 49 include include define GPIO DIG P0 sbit LSA P2 2 sbit LSB P2 3 sbit LSC P2 4 sbit K1 P3 0 sbit K2 P3 1 sbit K3 P3 2 sbit K4 P3 3 DIG CODE 10 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 显示0 9 的值 void Delay10ms 延时10ms 函数名 main 函数功能 主函数 输入 无 输出 无 void main void unsigned int i j LSA 0 LSB 0 LSC 0 while 1 if K1 0 检测按键K1是否按下 Delay10ms 消除抖动 if K1 0 j 1 while i 50 i 普中科技 50 i 0 if K2 0 检测按键K2是否按下 Delay10ms if K2 0 j 2 while i 50 i i 0 if K3 0 检测按键K3是否按下 Delay10ms if K3 0 j 3 while i 50 i i 0 if K4 0 检测按键K4是否按下 Delay10ms if K4 0 j 4 while i0 c for b 38 b 0 b for a 130 a 0 a 下载HEX文件 观察实验效果 实验的效果是 按下K1键 显示1 按下K2 键 显示2 按下K3键 显示3 按下K4键 显示4 第八讲 矩阵键盘 独立键盘与单片机连接时 每一个按键都需要单片机的一个 I O 口若某单 片机系统需较多按键 如果用独立按键便会占用过多的 I O 口资源 单片机系 统中 I O 口资源往往比较宝贵 当用到多个按键时为了节省 I O 口口线 我们 引入矩阵键盘 我们以 4X4 矩阵键盘为例讲解其工作原理和检测方法 将 16 个按键排成 4 行 4 列 第一行将每个按键的一端连接在一起构成行线 第一列将每个按键的 另一端连接在一起构成列线 这样便一共有 4 行 4 列共 8 根线 我们将这 8 根 线连接到单片机的 8 个 I O 口上 通过程序扫描键盘就可检测 16 个键 用这种 方法我们也可实现 3 行 3 列 9 个键 5 行 5 列 25 个键 6 行 6 列 36 个键等 无论是独立键盘还是矩阵键盘 单片机检测其是否被按下的依据都是一样 的 也就是检测与该键对应的 I O 口是否为低电平 独立键盘有一端固定为低 普中科技 52 电平 单片机写程序检测时比较方便 而矩阵键盘两端都与单片机 I O 口相连 因此在检测时需人为通过单片机 I O 口送出低电平 检测时 先送一列为低电 平 其余几列全为高电平 此时我们确定了列数 然后立即轮流检测一次各行 是否有低电平 若检测到某一行为低电平 这时我们又确定了行数 则我们便 可确认当前被按下的键是哪一行哪一列的 用同样方法轮流送各列一次低电平 再轮流检测一次各行是否变为低电平 这样即可检测完所有的按键 当有键被 按下时便可判断出按下的键是哪一个键 当然我们也可以将行线置低电平 扫 描列是否有低电平 这就是矩阵键盘检测的原理和方法 首先看一下电路图 上图是一个4X4 的矩阵键盘 一共是16 个按键 我们照习惯称横为 行 竖 为列 那么5 6 7 8 我们称之为 行线 则1 2 3 4 称为 列 线 要正确记住各个行列线各自对应的IO 注意看 每一个按键的两端 都 分别接在某一个列线和行线上 即 行线和列线是通过某个按键的按下和抬 起实现联通和断开的 和 导线两端上的信号是经过 与 的关系再体现到 导线上的 这两句话便构成了矩阵键盘扫描的全部 要理解好 理解不了就 背下来 现在详细讲述一下矩阵键盘扫描的原理和步骤 扫描矩阵键盘 即是把某一条 只有一条 行线置为低电平 而列线全部 置为输入方向 然后检测列线 如果检测到某一条列线是低电平 那么就表示 5 6 7 8 123 4 4119b4c45d2889c13b452f487296c7bc pdf 53 位于这条列线与输出低电平的行线的交点处的按键被按下了 要扫描16个按键 就依次以这样的方法扫描16次 之后就可以确定哪一个按键被按下了 当然这 里也少不了延时消除按键抖动的环节 下面看一下程序 打开 实验名 矩阵键盘实验 使用的IO 数码管使用P0 键盘使用P3 0 P3 1 P3 2 P3 3 实验效果 按矩阵键盘分别显示在数码管上面显示十六进制的0到F 注意 include define GPIO DIG P0 define GPIO KEY P1 sbit LSA P2 2 sbit LSB P2 3 sbit LSC P2 4 unsigned char code DIG CODE 17 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 0 1 2 3 4 5 6 7 8 9 A b C d E F的显示码 unsigned char KeyValue 用来存放读取到的键值 普中科技 54 void Delay10ms 延时10ms void KeyDown 检测按键函数 函数名 main 函数功能 主函数 输入 无 输出 无 void main void LSA 0 给一个数码管提供位选 LSB 0 LSC 0 while 1 KeyDown GPIO DIG DIG CODE KeyValue 函数名 KeyDown 函数功能 检测有按键按下并读取键值 输入 无 输出 无 void KeyDown void char a GPIO KEY 0 x0f if GPIO KEY 0 x0f Delay10ms if GPIO KEY 0 x0f 测试列 GPIO KEY 0X0F switch GPIO KEY case 0X07 KeyValue 0 break case 0X0b KeyValue 1 break case 0X0d KeyValue 2 break case 0X0e KeyValue 3 break 4119b4c45d2889c13b452f487296c7bc pdf 55 default KeyValue 17 检测出错回复17意思是把数码管全灭 掉 测试行 GPIO KEY 0XF0 switch GPIO KEY case 0X70 KeyValue KeyValue break case 0Xb0 KeyValue KeyValue 4 break case 0Xd0 KeyValue KeyValue 8 break case 0Xe0 KeyValue KeyValue 12 break default KeyValue 17 while a0 c for b 38 b 0 b for a 130 a 0 a 下载HEX文件 观察实验效果 实验的效果是 按矩阵键盘分别显示在数码 管上面显示十六进制的0到F 普中科技 56 第九讲 动态数码管 1 动态扫描的原理 在实际的单片机系统中 往往需要多位显示 动态显示是一种最常见的 多位显示方法 应用非常广泛 所有数码管段选都连接在一起的时候 怎么 让数码管显示不一样的数字呢 动态显示是多个数码管 交替显示 利用人 的视觉暂停作用使人看到多个数码管同时显示的效果 首先我们来看一下开发板上的电路原理图 4119b4c45d2889c13b452f487296c7bc pdf 57 本开发板上使用的是 通过P22 P23 P24控制3 8译码器来对数码管进行 位选 通过P0口经过573的驱动控制数码管的段选 通过P13控制573的使能端 为低电平时573才会有输出 打开 下面看一下程序 普中科技 58 实 验 名 动态显示数码管实验 使用的IO 数码管使用P0 P2 2 P2 3 P2 4键盘使用P1 实验效果 按矩阵键盘分别显示在数码管上面显示十六进制的0到F 注 意 include include define GPIO DIG P0 define GPIO KEY P1 sbit LSA P2 2 sbit LSB P2 3 sbit LSC P2 4 unsigned char code DIG CODE 17 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 0 1 2 3 4 5 6 7 8 9 A b C d E F的显示码 unsigned char KeyValue 用来存放读取到的键值 unsigned char KeyState 记录按键的状态 0没有 1有 unsigned char DisplayData 8 用来存放要显示的8位数的值 unsigned char Num 用来存放中断的时候显示的第位数值 void Delay50us 延时50us void KeyDown 检测按键函数 void DigDisplay 动态显示函数 4119b4c45d2889c13b452f487296c7bc pdf 59
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!