普中HC6800-ES V2.0单片机开发板教程.doc

上传人:sk****8 文档编号:4255782 上传时间:2019-10-08 格式:DOC 页数:291 大小:14.21MB
下载 相关 举报
普中HC6800-ES V2.0单片机开发板教程.doc_第1页
第1页 / 共291页
普中HC6800-ES V2.0单片机开发板教程.doc_第2页
第2页 / 共291页
普中HC6800-ES V2.0单片机开发板教程.doc_第3页
第3页 / 共291页
普中HC6800-ES V2.0单片机开发板教程.doc_第4页
第4页 / 共291页
普中HC6800-ES V2.0单片机开发板教程.doc_第5页
第5页 / 共291页
点击查看更多>>
资源描述

1、HC6800-ES V2.0 单片机开 发板 学习指南 普中科技 目录 997a2ffc1bd0690d954d744f1ae57abf.pdf 第一讲 开发板资源介绍 1 第二讲 软件安装 .3 第三讲 程序下载 .16 第四讲 KEIL 软件使用及入门 LED 灯 .21 第五讲 蜂鸣器 .31 第六讲 独立按键 .32 第七讲 静态数码管 37 第八讲 矩阵键盘 .42 第九讲 动态数码管 45 第十讲 电机 49 第十一讲 中断 .56 第十二讲 1602 液晶显示 .60 第十三讲 定时器 .68 第十四讲 时钟芯片 DS130271 普中科技 第十五讲 串口通信 83 第十六讲 温

2、度传感器 18B20.89 第十七讲 EEPROM 操作 24C0299 第十八讲 红外遥控显示 110 第十九讲 AD/DA 模数/数模转换 XPT2046 116 第二十讲 液晶屏显示 127 附录 A 单片机 C 语言介绍 140 附录 B 电路板绘制软件 PROTEL 介绍 .170 997a2ffc1bd0690d954d744f1ae57abf.pdf 1 第一讲 开发板资源介绍 本开发板相对以往开发板的特点是综合性比较高、把短路冒去掉了 省去接 线的麻烦更加方便了初学者、是一款性价比极高的产品,提供USB2.0和串口两 种通信方式,USB实现供电、编程、仿真、通信多种功能,另外还

3、提供了Atmel 单片机的ISP接口。此板兼容STC、SST、Atmel、Philips等51家族的所有单片机。 如果使用ISP编程建议使用开发板自带的单片机,因为每个厂烧录程序的方式不 一样。HC6800开发板有着丰富的外部资源, 通过对该开发实验仪的学习,学员不仅可以轻松快速地掌握单片机软件系 统的开发(C语言、汇编语言),而且还能快速掌握硬件电路的设计及嵌入系统 开发流程。 本套件配有丰富的实例源码、原理图等,特别适合单片机初学者,大中专院 校师生,单片机开发工程师选用,也是毕业设计和电子竞赛不可多得的参考板 单片机采用 STC90c516 1280 SRAM 64K Flash 2.1

4、 寸彩色液晶屏 超声波接口 1602 液晶屏接口 12864 液晶屏接口 温度传感器 DS18B20 EEPROM 24C02 存储器 8 位动态数码管 AD/DA 转换 XPT2046 DS1302 实时时钟 4*4 矩阵键盘 4 个独立键盘 2*8 路 led 灯 USB 接口,实现下载,供电,串行通信。通过 USB 转串口芯片 CH340T 转换 IR 红外接收头,红外数据传输 板载继电器 蜂鸣器 普中科技 2 步进电机 ULN2003 达林顿管驱动 997a2ffc1bd0690d954d744f1ae57abf.pdf 3 第二讲 软件安装 1、USB 转串口驱动的安装 双击 USB

5、 驱动 SERIAL 程序的 Setup 安装成功后,会出现一下提示画面 点“确定”即可以结束安装过程。 安装完驱动程序成功后,把开发板与电脑连接可以看到设备管理器中的 COM 口。 在图标“我的电脑”右键,属性,硬件,设备管理器(这是 XP 系统, 普中科技 4 WIN 系统与其相似找到设备管理器) 显示成功的 COM 口 安装不成功解决办法 如果发现是下图感叹号, 则没有安装成功或者没有安装、右键点击更新驱动程 997a2ffc1bd0690d954d744f1ae57abf.pdf 5 序 选择“从列表或指定位置安装(推荐)” 普中科技 6 出现此对话框,选择不要搜索,自己选择安装 点“

6、下一步” 点击“下一步“ 997a2ffc1bd0690d954d744f1ae57abf.pdf 7 出现此对话框、点击“从磁盘安装” 点击“浏览” 到 USB 驱动文件夹找到安装文件打开 普中科技 8 点击“确定”和“下一步” 点击“完成“安装结束 997a2ffc1bd0690d954d744f1ae57abf.pdf 9 KEIL 软件安装 我们用现在新版本的 uVision 4 KEIL 开发环境,使用的版本是破解版, 仅供大家学习使用。如做商业开发,请购买正版,可以获得更多 keil 软件原厂 技术支持。 即将安装软件如下,一个 keil 安装程序,一个注册机(右侧)。 打开 C5

7、1V901.EXE 安装程序 点击 Next 普中科技 10 I agree all the tems of 选中 点击 Next 设置安装目录,根据自己的情况选中安装目录,重新设置点击 Browse,这里默 认 C 盘,设置好安装目录后 点击 Next 997a2ffc1bd0690d954d744f1ae57abf.pdf 11 输入相关信息(随便输入),输入完毕后点击 Next 开始安装,安装过程中等待安装完成 普中科技 12 安装完成,点击 Finish 即可。 接下来破解软件。 打开注册机软件 Target:选择 C51 997a2ffc1bd0690d954d744f1ae57ab

8、f.pdf 13 打开刚刚安装好的 keil 软件 点击 File 菜单 普中科技 14 选择 License Management。 现在没有破解 复制 CID 码,之后点击 Generate 生成注册码 复制 CID 码到注册机中 从 KEIL 复制的 CID 码粘贴到这里 复制生成的注册码到 keil 997a2ffc1bd0690d954d744f1ae57abf.pdf 15 复制完注册码后,点击右侧的 ,即可完成破解。提示 如下: 以上软件安装完毕。接下来看程序了。 复制到这里 普中科技 16 第三讲 程序下载 我们可以通过 USB 接口方式下载对我们开发板的单片机下载程序。 下载

9、软件又可分为 STC 官方软件 和普中科技自己开发的软件 利用官方软件下载程序需要手动重启单片机,需要给单片机重新上电启动。 普中开发的下载软件及所设计的开发板实现了全自动下载功能,省去了手动操 作,极大方便了学习及开发人员。接下来就来讲一下下载程序的方式。 1. USB 口,普中软件 我们插上 USB 口,打开开发板电源开关。然后打开普中 ISP 下载软件,如下图 : 官方软件 普中软件 997a2ffc1bd0690d954d744f1ae57abf.pdf 17 在 usb 转串口驱动安装成功后,打开软件应该有串口号,如图指示。一般笔记 本建议使用低速下载,台式可以使用高速下载,如果笔记

10、本使用高速下载的话 那么会报警波特率超时。 2. 芯片类型选择 STC90C5XX(具体的要根据您板子上使用的单片机型号) 如下图。 加载我们要下载到单片机里的程序,单击 ,选择下载的后缀为.Hex 的文件, 串口号 10 普中科技 18 打开后,会在文件名处有提示:文件路径,还有代码大小。 4 最后一步:点击下载程序 ,下载成功如图显示。 此时继电器工作会有小的啪啪的响声。 接下来我们用官方 STC 下载软件下载 代码大小 下载成功 ! 997a2ffc1bd0690d954d744f1ae57abf.pdf 19 1. 选择开发板上单片机型号,我们选 STC90C516 2. 选择串口,可

11、通过设备管理器查看 3. 打开需要下载到单片机的程序 4. 点击下载 点击下载按钮后会有这样的信息: 这时需要手动按开关键,关闭开关,打开开关这样一个过程,主要是给单片机 冷启动。 重新上电后,会出现 1 2 3 4 普中科技 20 开始下载程序,下载完成。上图表示下载成功。 现在用官方软件下载几乎都要手动重新给单片机上电过程。市面的开发板主要 也都是采用这种下载方式。 建议使用普中软件自动下载。 997a2ffc1bd0690d954d744f1ae57abf.pdf 21 第四讲 KEIL 软件使用及入门 led 灯 单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程 序要变

12、为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器 汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序 变为机器码,用于 MCS-51 单片机的汇编软件有早期的 A51,随着单片机开发 技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开 发软件也在不断发展,Keil 软件是目前最流行开发 MCS-51 系列单片机的软件, 这从近年来各仿真机厂商纷纷宣布全面支持 Keil 即可看出。Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完 整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一

13、起。运行 Keil 软件需要 Pentium 或以上的 CPU,16MB 或更多 RAM、20M 以上空闲的硬 盘空间、WIN98、NT、WIN2000、WINXP 等操作系统。掌握这一软件的使用对于 使用 51 系列单片机的爱好者来说是十分必要的,如果你使用 C 语言编程,那 么 Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真 机也很可能只支持该软件) ,即使不使用 C 语言而仅用汇编语言编程,其方便易 用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 我们将通过一些实例来学习 Keil 软件的使用,在这一部份我们将学习如 何输入源程序,建立工程、对工程进行详

14、细的设置,以及如何将源程序变为目 标代码。 在这里利用第二个例程,led 闪烁实验来建立 keil 工程。 打开 keil 软件,版本 Vision2 ,vision3, vision4 都一样,在这 里用 vision4 版本演示,打开之后如下图,有的时候会默认打开上次使用的 工程,单击 Project 菜单,选择 Close Project 关闭了默认打开的工程,显 示下图界面: 普中科技 22 我们要建立新的工程,选择 Project new vision projiect 选择工程要保存的路径,输入工程文件名,如图 点击保存后会弹出一个对话框,要求用户选择单片机型号,可以根据用 户使用

15、的单片机来选择,我们使用的 STC90 单片机是兼容 51 内核的,Keil 997a2ffc1bd0690d954d744f1ae57abf.pdf 23 C51 几乎支持所有的 51 内核单片机,51 内核具有通用型,如果程序用的资 源不是太复杂,我们可以选择任意一款 51 单片机内核就行。在稍后我们会 继续讲解怎么将 STC 单片机官方的头文件添加进来,在这暂不多介绍。Keil 软件的关键是程序代码的编写,而非是用户选择什么硬件。例程以添加 Atmel 的 AT89C51 来说明。如图,然后,单击 确定(OK) 。 如果出现下面的界面:单击是就可以,意思是将单片机的启动代码添加 到工程,

16、我们不用修改。 到目前我们还没建立一个完整的工程,只是有工程的名字,框架,工程 中还没有任何文件代码, (除了启动代码,有的 keil 版本不显示启动代码) , 接下来我们添加文件及代码。 单击菜单 FileNew 选项,或者单击界面上的快捷图标 ,新建文 件串口如下。 功能描述 普中科技 24 界面显示的 Text1 就是我们刚刚加入的文件,但是这个文件与我们的工 程还没有直接联系起来,单击图标 ,保存我们当前的 text1 文件,输 入要保存的文件名,同时要输入文件扩展名,扩展名很关键,用 C 语言编写 的程序,则必须为*.c,汇编语言必须为*.asm(*为文件名) ,文件名是用 户自己取

17、的。填好文件名后单击保存。 997a2ffc1bd0690d954d744f1ae57abf.pdf 25 回到编辑界面,单击 Target1 前面的“+”号,然后在 Source Group 1 上右键单击,选择 Add Files to Group Source Group1,选中我们刚才建立 的.c 文件,这里是 led test.c,单击 add,只需单击一次。之后单击 Close 就 可以。 回到主界面后,单击 Source Group 1 前的“+”号,刚刚添加的文件显示在里 面。 通过以上步骤我们就建立好了一个工程。接下来就可以写代码了。 在写代码之前介绍介个常用的按钮: 按钮:

18、用来编译我们正在操作的文件。 按钮:用来编译修改过的文件,并生成应用程序共单片机下载。 按钮:用来重新编译当前工程中所有的文件,并生成应用程序共单片机下 普中科技 26 载。 因为很多工程不止有一个文件,当有多个文件时,用它进行编译。 按钮:用来打开 “Option for Target”对话框,对当前工程进行设置。 工程的各个参数都可以在这里设置,具体的设置方法用到的时候,再和大家 详细讲述。 以上几个按钮是常用的,其他按钮在使用的时候再介绍。 1. 编写程序 我们以一个程序为例来练习编写:led 闪烁。 这个程序大家一定要弄懂,也算是一个基础,懂了这个程序,也算是进入单 片机的领域了接下来

19、我会详细讲解这个例程。另外需要注意的是单片机写程序 的时候,一定是英文状态下的字符,尤其注意“;”,往往就因为这个分号,程 序出现问题,所以输入时一定要注意是在英文状态下的。 我们在编辑框中输入以下程序: /* * LED 闪烁的简单试验 * */ #include /此文件中定义了 51 的一些特殊功能寄存器 void delay(unsigned int i); /声明延时函数 void main() while(1) P2 = 0x00; /置 P0 口为低电平 delay(600); /调用延时程序 P2 = 0xff; /置 P0 口为高电平 delay(600); / 调用延时程序

20、 /*延时函数*/ void delay(unsigned int i) unsigned char j; 997a2ffc1bd0690d954d744f1ae57abf.pdf 27 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(十六进制)文件。 没有错误,没有警告。 在这里说明一点:生成

21、 HEX 文件是我们自己设置的,默认的情况下不会生成 HEX 文件。单击 进行设置,如下图,选择 Output,勾选 Creat hex,后单 击确定。 普中科技 28 2. 接下来我们分析上面的程序: /* */作用,它是用来注释一段内容的,编译器不对其进行编译,只要在/* */直接的内容都被注释掉。 / 是用来注释其后面的内容,只能注释一行。 #include /这句告诉我们包涵 51 的头文件,那这个头文件里面 放的是什么东西呢?放的是 51 单片机对应的操作的寄存器地址,如我们直接用 来操作的 P1 口就是代表 0x90 地址,我们可以将光标低位在上然后右 键 打开头文件, #ifnd

22、ef _REG51_H_ #define _REG51_H_ /* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; /* SCON */ 997a2ffc1bd0690d954d744f1ae57abf.pdf 29 sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit

23、 TI = 0x99; sbit RI = 0x98; #endif 头文件中定义了 51 系列单片机的所有功能寄存器,我们直接使用其代号就 可以,P0,P1 等。 如:sfr P0=0x80,意思是把单片机内部地址 0x80 处的寄存器重新起名字叫 P0,以后我们在程序中直接操作 P0,就相当于对单片机内部 0x80 地址处的寄存 器进行操作。通俗的讲,也就是说,通过 sfr 这个关键字,让 Keil 编译器在单 片机与人之间搭建一个桥梁,我们操作 P0 口,单片机对应就去操作内部 0x80 的地址。所以我们写程序要在开始处直接包涵单片机的头文件。 sbit SM0 = 0x9F;是定义位操

24、作地址 0x9F 的,这个地址只代表一个位。 我们操作 SM0,对应单片机就是操作位地址 0x9F。 总结起来 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 = 0x00;

25、/置 P0 口为低电平 从这句开始,你现在控制单片机了,告诉单片机把你的 P2 口都输出 0,如 果你不操作 P2 口了,那么 P2 口一直保持这个状态,直到你去改变它。 普中科技 30 delay(1000); /调用延时程序 调用子函数 delay(),告诉单片机去执行 delay 那个函数,那么 P2 口一直保 持 0 这状态。 P2 = 0xff; /置 P0 口为高电平 这时告诉 P2 口全部输出 1,(0xff=1111 1111).状态从 0 变成 1 了,对应的 灯的输出也由低电平变成高电平了 delay(1000); / 调用延时程序,再进行延时, 这个程序里执行完了一次又干

26、什么呢, Keil 编译器会编译成一直重复执行 main()函数里面的代码,整个代码的效果就 是: P2 输出低电平 延时一段时间,目的是 P2 输出的低电平保持一段时间 P2 输出高电平 延时一段时间,目的是 P2 输出的高电平保持一段时间 重复到的过程 实际效果就是 led 一闪一闪 通过更改 delay(延时时间 i) ,参数 i,可以改变闪烁频率。 实际操作: 1. 打开软件 (提前装好驱动),点击打开文件,打开我们 刚刚编译的 led.hex 文件,下载程序,就会看到 led 闪烁。 997a2ffc1bd0690d954d744f1ae57abf.pdf 31 我们再看一个例程,就

27、是单片机最经典的流水灯例程: 以下是我们的硬件电路,led 一段接单片机 P2 口的 8 个引脚,另外一边接排阻 RP12 和 RP13,然后接到电源 基础知识介绍: 排阻: 一般在排阻上都标有阻值号,其公共端附近也有明显标记。如下下图表示为 472, 表示 47* =4700 欧姆,还有的标号如 3R0,表示阻2 值为 3 欧姆, 4K7 表示阻值为 4.7k, R002 表示阻值为 0.002 欧姆。 (2)发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越 大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在 3 mA-20mA 之间。在这里,给发光二极管串联一个

28、电阻的目的就是为了限制通过发光二极 管的电流不要太大,因此这个电阻又称为“限流电阻” 。当发光二极管发光时, 测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降” 。图 2.2.9 和图 2.2.10 分别为直插式发光二极管和贴片式发光二极管实物图。发光二极管 正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管 长脚为阳极,短脚为阴极。仔细观察贴片式发光二极管正面的一端有彩色标记, 通常有标记的一端为阴极。 普中科技 32 图 2.2.9 图 2.2.10 关于排阻大小的选择:欧姆定律想必大家都清楚,U=IR,当发光二极管正常 导通时,其两端电压约为 1.7V

29、,发光管的阴极为低电平,即 0V,阳极串接一电 阻,电阻的另一端为 Vcc , 为 5V,因此加在电阻两端的电压为 5V- 1.7V=3.3V,计算穿过电阻的电流,3.3 V/ 1000=3.3mA。即穿过发光管的电 流也为 3.3mA,若想让发光管再亮一些,我们可以适当减小该电阻。 看我们的原理图,可以知道:LED 的正极接在 VCC 上,只要给了低电平,那 么 LED 就会亮,低电平对应到单片机的逻辑就是 0,只要单片机的某一个管脚 输出 0,那么对应的发光二极管就会亮。我们看一下源码: /* * 实验名 : 左右流水灯实验 * 使用的 IO : P2 * 实验效果 : 点亮的 LED 从

30、右边往左边移动,到达左边再往右边移动,依此循环。 * 注意 : */ #include #include /因为要用到左右移函数,所以加入这个头文件 #define GPIO_LED P2 /将 P2 口另外取名为 GPIO_LED void Delay10ms(unsigned int); /误差 0us /* * 函数名 : main * 函数功能 : 主函数 * 输入 : 无 * 输出 : 无 */ void main(void) unsigned char n; GPIO_LED=0xfe; while(1) 997a2ffc1bd0690d954d744f1ae57abf.pdf 3

31、3 for(n=0;n0;b-) for(a=130;a0;a-); 以上程序实现点亮一盏 LED 之后左右移动。 讲解:移位操作 ,每执行一次右移指令,被操作的数将最低位 移入单片机 PSW 寄存器的 CY 位,CY 位中原来的数丢弃,最高位补 0,其他 普中科技 34 位依次向右移动一位,如下图所示。 3. 循环左移。最高位移入最低位,其他位依次向左移一位。C 语言中没有专门 的指令,通过移位指令与简单逻辑运算可以实现循环左移,或直接利用 C51 库中自带的函数_crol_实现,如下图所示。_crol_函数所在的头文件是 4. 循环右移。最低位移入最高位,其他位依次向右移一位。C 语言中没

32、有专门 的指令,通过移位指令与简单逻辑运算可以实现循环右移,或直接利用 C51 库中自带的函数-cror 实现,如下图所示。_cror_函数所在的头文件是 5. 讲解:PSW 寄存器 PSW (Program Status Word)全称为程序状态字标志寄存器,是一个 8 位寄 存器,位于单片机片内的特殊功能寄存器区,字节地址 DOH,用来存放运算结 果的一些特征,如有无进位、借位等,使用汇编编程时 PSW 寄存器很有用,但 在利用 C 语言编程时,编译器会自动控制该寄存器,很少人为操作它,大家只 需做简单了解即可.其每位的具体含义如下图所示. 997a2ffc1bd0690d954d744f

33、1ae57abf.pdf 35 1) CY 一进位标志位,它表示运算是否有进位(或借位).如果操作结果在最 高位有进位(加法)或者借位(减法),则该位为 1,否则为 0. 2) AC 一辅助进位标志,又称半进位标志,它指两个 8 位数运算低四位是 否有半进位,即低四位相加(或相减)是否进位(或借位),如有 AC 为 1,否则为 0e 3) FO 一由用户使用的一个状态标志位,可用软件来使它置 1 或清 0,也可 由软件来测试它,以控制程序的流向. 4) RS1, RSO-4 组工作寄存器区选择控制位,在汇编语言中这两位用来选 择 4 组工作寄存器区中的哪一组为当前工作寄存区. 5) OV 一溢

34、出标志位,反映带符号数的运算结果是否有溢出.有溢出时,此 位为 1,否则为 0. 6) P 一奇偶标志位,反映累加器 ACC 内容的奇偶性,如果 ACC 中的运算结果有偶数 个 I(如 11001100B,其中有 4 个 1),则 P 为 0,否则 P 为 1. 6. _cror_() ;函数 循环右移函数,包含在 intrins.h 的库函数里面。 7. _crol_() ;函数 循环左移移函数,包含在 intrins.h 的库函数里面。 普中科技 36 第五讲 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于 计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、

35、电话机、定时 器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂 鸣器或直流蜂鸣器(自激式蜂鸣器) 。 直流蜂鸣器是给一定的驱动直流电压就 会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有 PWM 波控制蜂 鸣器的频率。脉冲就是高低电平的切换,如下图:一个方波脉冲 我们用单片机的 IO 口实现一种这样高低电平的方波,驱动蜂鸣器发音。我们板 子上配的就是交流蜂鸣器。 接下来我们看一下蜂鸣器的硬件电路: 997a2ffc1bd0690d954d744f1ae57abf.pdf 37 蜂鸣器通过 ULN2003 驱动。 这里 ULN2003 暂不多做介绍,详细介绍可参考步进

36、电机篇。 我们看一下程序源码: /* * * 实验名 : 蜂鸣器实验 * 使用的 IO : P15 * 实验效果 : 蜂鸣器响。 * 注意 : * / #include sbit Beep = P15 ; void Delay(unsigned int i) ; /* * 函数名 : main * 函数功能 : 主函数 * 输入 : 无 * 输出 : 无 */ void main() Beep= 1; Delay(5); Beep= 0; Delay(5); /* * 函数名 : Delay() * 函数功能 : 延时函数 * 输入 : 无 * 输出 : 无 普中科技 38 */ void D

37、elay(unsigned int i) char j; for(i; i 0; i-) for(j = 200; j 0; j-); 下载生成的 hex 文件,就可听到蜂鸣器发音。 第六讲 独立按键 按键是什么东西,我想这个就不必由我向各位阐述了。嗯,如你所见,按 键种类繁多,功能有简有繁,极大的充斥着我们的生活。但是无论如何,所有 的按键其实都有一个原型,来源于同一种原理,所有的按键无论多复杂,多华 丽,都是从这样一个原型发展而成的。好比你就算长的再帅,你也是只猩猩变 来的,呵呵。我们平日所见到的绝大部分的按键,其实都可以归类为一种,叫 “接触式按键” 。下图为一个典型的接触式按键(又称轻

38、触开关) 。 997a2ffc1bd0690d954d744f1ae57abf.pdf 39 需要特别说明的是,这里说的“接触”,是指机械层面上的接触,而不是 感光或者某些特殊涂层(比如触摸屏)一类的接触。所以,按键的工作特性其 实是一种机械特性,下文会详细说明。 , 如上图,请对照图一想象,1、2、3、4 分别对应按键的四个引脚,其中蓝 色的线表示按键未被按下之时的状态,我成为初始状态,它是不导通的;而绿 色的线是却永久导通的。各位明白了么,其实是两个相同的结构连在一起了。 我们只要将需要按键开关作用的线路分别接在1、3 和2、4 的任意取一组合, 概括起来就是(1,2)、(1,4)、(3,

39、2)、(3,4)四种组合,都可以起 到我们预期的开关作用。 相信以上说明使大家对按键的工作原理有了个比较清晰的认识了,现在来 说说一个小知识。先看下图(图4): 首先说明的是,上图的连法是不允许的,因为当按键按下之后,电源和地 短接,会将导线直接烧毁。但是此处用作特例,假设导线不会烧毁。现在来提 出一个问题,当按键按下以后,请问如果这时用万用表测量导线上任何一处的 电压,得到的结果是VCC 还是GND 的电压? 答案是:GND,即表示测出的电压为0V。为什么呢,因为导线上,对于两端 的电平是一种类似于程序语言逻辑运算里面的“与”,即对于导线两端:有零 普中科技 40 即为零,只有全为一是才为一

40、。理解了这点,按键的工作前提就有了。 键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码 器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编 程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是 非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘) 。在 这一讲中我们介绍一下单片机中键盘使用。 单片机的 IO 口既可作为输出也可作为输入使用,当检测按键时用的是它的 输入功能,我们把按键的一端接地,另一端与单片机的某个 I/O 口相连,开始 时先给该 IO 口赋一高电平,然后让单片机不断地检测该 I/O 口是杏变为低电平, 当按键闭合

41、时,即相当于该 I/O 口通过按键与地相连,变成低电平,程序一旦 检测到 I/O 口变为低电平则说明按键被按下,然后执行相应的指令。 我们先来说一下,按键常常遇到的问题抖动问题。 还以图四为例,按键未按下之前,图四按键左端的导线因为连在VCC 上而 显示高电平,右端显示低电平,按键按下后,按键闭合,整个导线都显示低电 平,然后按键松开,又回到按键按下之前的点评状态。如果只考察按键左端的 电平变化,应该是上图中所显示的一个负脉冲波形。但是,实际上,正确的波 形应该是下图。相比于上图,大家都看到了在高低电平直接有一段锯齿一样的 波形,这就是所谓的按键抖动。 为什么会有按键抖动呢,原因很简单,接触式

42、按键是靠机械的接触来实现 997a2ffc1bd0690d954d744f1ae57abf.pdf 41 开关作用的。这种接触方式就注定了它要经历一个“接触不稳定正在稳定 中彻底稳定”的一种过程。就好比你用手抓紧一颗石头,即使你一开始就 很用力的握紧,也不可能马上就达到最紧的状态,也要经历一个从握住到最紧 握的过程。那么在这个过程里,接触式按键就处于一种徘徊在“闭合”与“断 开”两者之间的状态。体现在电路中,就是在一小段时间内有非常多的“按下 抬起”动作。而这段抖动的时间,大概是1020 毫秒,依不同的环境条件 而定。 解决这个问题常见的方法有软件去抖动和硬件去抖动。 我们解释一下抖动:关于按

43、键去抖动的解释,我们在手动按键的时候,由 于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下 一次键然后接着释放,按键两片金属膜接触的时间大约为 50ms 左右,在按下 瞬间到稳定的时间为 5-10ms,在松开的瞬间到稳定的时间也为 5-10ms,如果我 们再首次检测到键被按下后延时 10ms 左右再去检测,这时如果是干扰信号将 不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的 原理。 独立按键: 我们先将一下独立按键的使用方法,开发板独立按键电路图如下: 独立按键一共 5 个,分别连接在单片机的 P3.0 到 P3.4 口。去抖动的方式,我 们采用软件延

44、时的方法。过程如下: 1. 先设置 IO 口为高电平(一般上电默认就为高) 普中科技 42 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=P30; sbit K2=P31; sbit K3=P32; sbit K4=P33; void Delay10ms( ); /延时10ms /* * 函数名 : main * 函数功能 : 主函数 * 输入 : 无 * 输出 : 无 */ void main(void) unsigned int i,j; while(1) if(K1=0) /检测按键K1是否按下 Delay10ms(); /消除抖动 if(K1=0) /再次检测按键是否按下

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 自然科学

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。