




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单单 片片 机机 原原 理理 及及 应用应用 实实 验验 指指 导导 书书 C 语言 华南师范大学物电学院 微机教研室 宋晖 2011 09 前前 言言 由于单片机具有高可靠性 超小型 低价格 容易产品化等特点 在仪 器仪表智能化 实时工业控制 实时数据采集 智能终端 通信设备 导航 系统 家用电器等控制应用领域 具有十分广泛的用途 由于目前在国内单 片机应用中 MCS 51 系列单片机仍然是一种主流单片机 所以本实验指导 书为学习 MCS 51 单片机的学生 配合 单片机原理 及应用 课程的教学 结合本学院自制 单片机教学实验 板编写了这本实验指导书 单片机原理 应用及 是一门实践性很强的课程 提高教学质量的一 个重要环节是上机实习和训练 无论是学习汇编语言程序设计 还是学习接 口电路和外设与计算机的连接 或者软硬兼施地研制单片机应用系统 不通 过加强动手是不能获得预期效果的 本实验指导书提供多个实验的指导性 材料 有些实验还有一些有一定难度的选做项目 可以根据课时的安排和教 学要求进行取舍 为了达到某些实验的目的 书中提供的参考程序与实际应 用中的程序会有些差别 所以不一定是最优的 由于时间紧迫 需要赶课程进度与实验时间的同步 加上编者学识有 限 如有不妥之处 欢迎读者批评指正 实实 验验 须须 知知 1 实验前必须阅读教科书的有关部分和本实验指导书 了解 实验目的 内容 步骤 做好实验前的准备工作 编写好实验中 要求自编或修改的程序 完成实验前要求完成的准备工作后方可 以上机实验 否则不得上机操作 2 各种电源的电压和极性不能接错 严禁带电接线和接插元 器件 通电前须经过指导教师检查认可后方能通电 3 不准随意拨弄各种与实验无关的旋钮和开关 凡与本次实 验无关的任何设备都禁止动用和摸弄 注意安全 4 严禁用手触摸实验系统印制电路板和元器件的引脚 防止 静电击穿芯片 5 实验中若损坏仪器或元器件 应及时向指导教师报告 6 在实验室内保持安静和卫生 不得随意走动和喧哗 集中 精力完成实验 7 实验完成后 关掉电源 及时整理实验台桌面 保持环境 整洁 8 按规定认真完成实验报告 在规定的时间内缴上实验报告 9 凡实验或实验报告未能按规定完成的学员 不能参加本课 程的考试或考查 单片机实验报告格式 实验报告标题 一 实验目的 二 实验内容 三 实验设计及调试 1 实验分析及内容 2 实验电路 画出与实验内容有关的简单实验电路 3 实验设计及调试步骤 根据内容写出实验程序 调试程序 观 察结果 4 实验调试过程中所遇到的问题 解决问题的思路和解决的方法 四 实验后的经验教训总结 五 对实验课的建议 目 录 实验一实验一 实验板使用 实验板使用 KEIL C51 软件使用软件使用 6 实验二实验二 单片机控制单片机控制 LED 灯点亮灯点亮 12 实验三实验三 模拟开关灯模拟开关灯 16 实验四实验四 单片机控制数码管实验单片机控制数码管实验 21 实验五实验五 中断系统应用实验中断系统应用实验 25 实验六实验六 LED 数码管的动态驱动数码管的动态驱动 29 实验七实验七 定时器定时器 计数器使用计数器使用 32 实验八实验八 数字电子钟数字电子钟 36 实验九实验九 矩阵键盘识别实验矩阵键盘识别实验 37 实验十实验十自动演奏乐曲自动演奏乐曲 41 实验十一实验十一 综合实验综合实验 交通信号灯控制器的设计交通信号灯控制器的设计 45 实验十二实验十二 教学板自检程序设计教学板自检程序设计 46 实验十三实验十三 综合实验 数据采集综合实验 数据采集 火灾报警装置的软硬件设计火灾报警装置的软硬件设计 47 附录 实验教学板电路原理图附录 实验教学板电路原理图 48 实验一实验一 实验板使用 实验板使用 Keil C51 软件使用软件使用 一 实验目的一 实验目的 1 熟悉单片机实验板 Keil C51软件使用 二 实验说明二 实验说明 本实验介绍实验板的组成 Keil C51 软件使用以及烧录软件的使用 通过该实验学生 可以了解单片机编程 调试方法 三 实验内容及步骤三 实验内容及步骤 1 启动 PC 机 安装好 Keil C51 软件以及烧录软件 用串口线连接计算机与实验板 USB 线提供电源 2 打开 Keil uVision2 仿真软件 首先建立本实验的项目文件 接着建立源程序 编译 无误后 全速运行程序 3 可把源程序编译成可执行文件 用烧录器烧录到 89 芯片中 四 四 Keilc 软件使用说明软件使用说明 1 打开程序 双击程序 2 新建工程 Project New Project 保存工程 选择 CPU 一般选 ATMEL 公司的 AT89S51 17 3 设置工程 右击 Options for Target 1 选择 Create HEX 输出 HEX 文件 18 4 新建源文件 选 File New 输入 编辑源程序 保存 汇编源程序 文件名 asm C 源程序 文件名 c 5 为工程添加源文件 在 Project 出口 File 页上单击文件组 选择 Add Files to Group Source Group 1 选项 选择你的源文件和文件类型 然后点击 ADD 再点击 close 19 6 编译 点击 或右击 Target 1 Build Target F7 就可对源程序进行编译 当程序有语法错误时 会在输出窗口 Output Windows 中显示错误信息和警告信息 修改编译成功后会生成 HEX 文件 7 下载 调试 编译成功后 用在线烧录程序将 HEX 文件下载到单片机内部 ROM 中 运行 在运行过程中若发现错误要重新修改程序 并编译后再下载运行 五 烧录软件的使用五 烧录软件的使用 1 打开在线烧录程序 2 选择 MCU 类型 STC89C51RC 1 点击 打开工程目录下的 hex 文件 2 选择端口 一般是 COM1 3 点击 Download 烧录程序 4 打开实验板上的电源 如果烧录的时候出现问题 点击 stop 注意 注意 5 5 6 6 两步骤的顺序不能颠倒 即在两步骤的顺序不能颠倒 即在点击 Download 之前要先关掉实验板上的电源 实验二实验二 单片机控制单片机控制 LED 灯点亮灯点亮 一 实验目的一 实验目的 1 进一步熟悉编程和程序调试 2 学习 P1 口的使用方法 3 学习延时子程序的编写和使用 二 实验说明二 实验说明 1 输出控制 如图 1 所示 当 P1 0 端口输出高电平 即 P1 0 1 时 根据发光二极管的单向导电性 可知 这时发光二极管 L1 熄灭 当 P1 0 端口输出低电平 即 P1 0 0 时 发光二极管 L 1 亮 我们可以使用 SETB P1 0 指令使 P 1 0 端口输出高电平 使用 CLR P1 0 指令 使 P1 0 端口输出低电平 XTAL1A 11 0592MHz C3A 22pF C2A 22pF P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 RST 9 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 5 T1 15 P3 6 WR 16 P3 7 RD 17 XTAL2 18 XTAL1 19 VSS 20 P2 0 21 P2 1 22 P2 2 23 P2 3 24 P2 4 25 P2 5 26 P2 6 27 P2 7 28 PSEN 29 ALE PROG 30 EA 31 P0 7 32 P0 6 33 P0 5 34 P0 4 35 P0 3 36 P0 2 37 P0 1 38 P0 0 39 VCC 40 89C51 U1F C3F 10uF VCC VCC P3 0 P3 1 P1 0 P1 1 P1 2 P1 3 P1 4 P1 5 P1 6 P1 7 P0 0 P0 1 P0 2 P0 3 P0 4 P0 5 P0 6 P0 7 EA ALE PSEN P2 7 P2 6 P2 5 P2 4 P2 3 P2 2 P2 1 P2 0 P3 2 P3 3 P3 4 P3 5 P3 6 P3 7 510 8 VCC P1 0 P1 1 P1 2 P1 3 P1 4 P1 5 P1 6 P1 7 RESET R2F 100 R1F 1K L0 L1 L2 L3 L4 L5 L6 L7 2 延时子程序的设计方法 作为单片机的指令的执行时间是很短的 数量达微秒级 因此 如果我们要求的闪烁时间 间隔为 0 2 秒 相对于微秒来说 相差太大 所以我们在执行某一指令时 插入延时程序 来达到我们的要求 但这样的延时程序是如何设计呢 下面具体介绍其原理 石英晶体为 12MHz 因此 1 个机器周期为 1 微秒 机器周期 微秒 MOV R6 20 2 个机器周期 2 D1 MOV R7 248 2 个机器周期 2 20 DJNZ R7 2 个机器周期 2 248 20 DJNZ R6 D1 2 个机器周期 2 20 40 10002 因此 上面的延时程序时间为 10 002ms XTAL1A 11 0592MHz C3A 22pF C2A 22pF P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 RST 9 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 5 T1 15 P3 6 WR 16 P3 7 RD 17 XTAL2 18 XTAL1 19 VSS 20 P2 0 21 P2 1 22 P2 2 23 P2 3 24 P2 4 25 P2 5 26 P2 6 27 P2 7 28 PSEN 29 ALE PROG 30 EA 31 P0 7 32 P0 6 33 P0 5 34 P0 4 35 P0 3 36 P0 2 37 P0 1 38 P0 0 39 VCC 40 89C51 U1F C3F 10uF VCC VCC P3 0 P3 1 P1 0 P1 1 P1 2 P1 3 P1 4 P1 5 P1 6 P1 7 P0 0 P0 1 P0 2 P0 3 P0 4 P0 5 P0 6 P0 7 EA ALE PSEN P2 7 P2 6 P2 5 P2 4 P2 3 P2 2 P2 1 P2 0 P3 2 P3 3 P3 4 P3 5 P3 6 P3 7 510 8 VCC P1 0 P1 1 P1 2 P1 3 P1 4 P1 5 P1 6 P1 7 RESET R2F 100 R1F 1K L0 L1 L2 L3 L4 L5 L6 L7 由以上可知 当 R6 10 R7 248 时 延时 5ms R6 20 R7 248 时 延时 10ms 以此 为基本的计时单位 如要求 0 2 秒 200ms 10ms R5 200ms 则 R5 20 汇编延时子程 序如下 DELAY MOV R5 20 D1 MOV R6 20 D2 MOV R7 248 DJNZ R7 DJNZ R6 D2 DJNZ R5 D1 RET C 语言延时子程序如下 void delay02s void 延时 0 2 秒子程序 unsigned char i j k for i 20 i 0 i for j 20 j 0 j for k 248 k 0 k 三 实验步骤及参考例子三 实验步骤及参考例子 实验步骤说明 实验步骤说明 本实验需要用到单片机最小应用系统 用 P1 口做输出口 程序功能使发光二极管点亮 1 用串行数据通信线连接计算机与实验板 用 USB 给实验板提供电源 3 打开 Keil uVision2 仿真软件 首先建立本实验的项目文件 输入源程序 参考程序 1 进行编译 直到编译无误 生成 hex 文件 5 通过 STC ISP 下载软件 将 hex 文件下载到实验板内 观察发光二极管显示情况 参考例子参考例子 1 点亮板子上的第一个灯 D0 2 让第一个灯闪烁 四 参考程序四 参考程序 一 适用于 mini80E 实验板 1 include void main P1 0 xfe 2 include define uint unsigned int define uchar unsigned char delay void main while 1 P1 0 xfe delay P1 0 xff delay void delay uint x y for x 100 x 0 x for y 600 y 0 y 二 适用于自制最小系统实验板 1 include void main void P2 0 x00 P2 0 x10 P0 0 xfe 2 include void delay void void main void P2 0 x00 while 1 P2 0 x10 P0 0 xfe delay P2 0 x00 P0 0 xff delay void delay void int x y for x 600 x 0 x for y 100 y 0 y 六 实验内容六 实验内容 请在 keil 环境下编写以下程序 1 点亮最后一个 LED 或者任意一个 LED 或者任意几个 LED 2 让点亮的 LED 闪烁 3 点亮板子上的 D0 D2 D4 D6 灯 与 D1 D3 D5 D7 灯交替闪烁 4 设计出流水灯程序 从 D7 D0 或从 D0 D7 实验三实验三 模拟开关灯模拟开关灯 1 实验目的 1 进一步熟悉编程和程序调试 2 学习独立按键的使用方法 2 实验说明 如果系统只需几个按键 可直接采用 I O 线构成单个按键电路 各个按键之间相互独 立 一根线上的按键状态不会影响其他输入线上的工作状态 又称独立式键盘接口电路 检测是否有键闭合 如有键闭合 则去除键抖动 判断键号并转入相应的按键处理 编写单片机的键盘检测程序时 一般在检测按下时加入去抖延时 检测松手时就不用加了 3 参考例子参考例子 1 通过四个按键来控制 LED 灯的显示情况 S1 D0 点亮 S2 D1 点亮 S3 D2 点亮 S4 D3 点亮 4 参考程序 一 适用于自制实验板 include define uint unsigned int define uchar unsigned char uchar flag uchar key down sbit LED2 P0 0 sbit LED3 P0 1 sbit LED4 P0 2 sbit LED5 P0 3 void delay uint k uint data i j for i 0 i k i for j 0 j 121 j uchar scan key void uchar temp temp P3 return temp void main void key down 0 P3 0 xf7 P2 0 x10 P0 0 xff while 1 P3 0 xf7 if P3 0 xf7 if P3 0 xf7 key down 1 switch flag case 0 xe7 LED2 LED2 break case 0 xd7 LED3 LED3 break case 0 xb7 LED4 LED4 break case 0 x77 LED5 LED5 break default break if P3 0 xf7 key down 0 二 适用与 mini80E 板 include define uint unsigned int define uchar unsigned char uchar flag void delay uint k uint data i j for i 0 i k i for j 0 j 121 j uchar scan key void uchar temp temp P3 return temp void main void while 1 P3 0 xff if P3 0 xff delay 20 if P3 0 xff flag scan key else flag 0 switch flag case 0 xfe P1 0 xfe break case 0 xfd P1 0 xfd break case 0 xfb P1 0 xfb break case 0 xf7 P1 0 xf7 break default P1 0 xff break 或者 include define uint unsigned int define uchar unsigned char uchar flag uchar key down sbit LED2 P1 0 sbit LED3 P1 1 sbit LED4 P1 2 sbit LED5 P1 3 void delay uint k uint data i j for i 0 i k i for j 0 j 121 j uchar scan key void uchar temp temp P3 return temp void main void key down 0 P3 0 xff P1 0 xff while 1 P3 0 xff if P3 0 xff if P3 0 xff key down 1 switch flag case 0 xfe LED2 LED2 break case 0 xfd LED3 LED3 break case 0 xfb LED4 LED4 break case 0 xf7 LED5 LED5 break default break if P3 0 xff key down 0 5 实验内容 1 8 个按键分别对应 8 盏 led 灯的亮灭 针对自制教学板 2 通过四个按键来控制 LED 灯的显示情况 S1 D0 D3 点亮 S2 D2 点亮 S3 D0 D7 点亮 S4 D0 D5 点亮 实验四实验四 单片机控制数码管实验单片机控制数码管实验 一 实验目的一 实验目的 1 掌握数码管是如何显示出字符 2 进一步掌握延时子程序的使用 二 实验原理二 实验原理 1 数码管两种接法数码管两种接法 2 共阴极数码管编码共阴极数码管编码 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 1 2 3 4 5 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 6 7 8 9 A B 0 x39 0 x5e 0 x79 0 x71 0 x00 C D E F 无显示 请思考共阳极数码管的编码 三 参考例子参考例子 1 让第一个数码管显示一个 8 字 A 对于 MINI80E 实验板 共阴极共阴极 数码管的选通是通过 P2 口控制三八译码器得 到的 要让第一个数码管显示 8 字 那么别的数码管的位选就要关闭 即只打开第一 个数码管的位选 控制位选的 P2 口要输出的数据位 0 xf7 二进制为 1111 0111 位选 确定后 在确定段选 要显示的是 8 那么只有 dp 段为 0 其余段为 1 所以 P0 口要 输出 0 x7f 二进制 0111 1111 B 对于自制实验板 共阳极 数码管的选通是通过 P2 口控制的 要让第一个数码管 显示 8 字 那么别的数码管的位选就要关闭 即只打开第一个数码管的位选 控制位 选的 P2 口要输出的数据位 0 x08 二进制为 0000 1000 位选确定后 在确定段选 要 显示的是 8 那么只有 dp 段为 1 其余段为 0 所以 P0 口要输出 0 x80 二进制 1000 0000 ab cde g GND f dp GND a b c e f g d dp a b c d e f g dp dp g f e d c b a 5V a b 2 在四个数码管上显示 1 2 3 4 位选 接 P2 口 左边四个数码管 DS3 DS2 DS1 DS0 对应的 P2 口 0 xf3 0 xf2 0 xf1 0 xf0 右边四个数码管 DS3 DS2 DS1 DS0 对应的 P2 口 0 xf7 0 xf6 0 xf5 0 xf4 段选 接 P0 口 四 参考程序四 参考程序 一 一 mini80e 实验板实验板 1 include void main void while 1 P2 0 xf7 P0 0 x7f 2 include define uint unsigned int define uchar unsigned char void delay void main void while 1 P2 0 xf7 P0 0 x66 delay P2 0 xf6 P0 0 x4f delay P2 0 xf5 P0 0 x5b delay P2 0 xf4 P0 0 x06 delay void delay 延时程序 1 uint x y for x 2 x 0 x for y 112 y 0 y 二 自制教学实验板 共阳极数码管 1 include void main void while 1 P2 0 x08 P0 0 x80 2 include define uint unsigned int define uchar unsigned char void delay void main void while 1 P2 0 x08 P0 0 x99 delay P2 0 x04 P0 0 xb0 delay P2 0 x02 P0 0 xa4 delay P2 0 x01 P0 0 xf9 delay void delay 延时程序 1 uint x y for x 2 x 0 x for y 112 y 0 y 五 原理图五 原理图 六 实验内容六 实验内容 1 用一位数码管循环显示 0 9 2 用数码管显示字母 A F 3 交替点亮 4 个数码管 例如 开始时在数码显示器的最右边一位上显示 1 个 0 字 以后每隔 0 5 秒将 0 字左移 1 位 直到最左边一位后则停止显示 4 结合实验 3 实现按键与数字的一一对应 实验五实验五 中断系统应用实验中断系统应用实验 一 实验目的一 实验目的 1 掌握外部中断技术的基本使用方法 2 掌握中断处理程序的编写方法 二 实验说明二 实验说明 1 外部中断的初始化设置共有三项内容 中断总允许即 EA 1 外部中断允许即 EXi 1 i 0 或 1 中断触发方式设置 中断触发方式设置一般有两种方式 电平触发方式 和脉冲 边沿 触发方式 本实验选用后者 其前一次为高电平后一次为低电平时为有效 中断请求 因此高电平状态和低电平状态至少维持一个周期 中断请求信号由引脚 INT0 P3 2 和 INT1 P3 3 引入 本实验由 INT0 P3 2 引入 2 中断控制原理 中断控制是提供给用户使用的中断控制手段 实际上就是控制一些寄存器 51 系列用 于此目的的控制寄存器有四个 TCON IE SCON 及 IP 3 中断响应的过程 首先中断采样然后中断查询最后中断响应 采样是中断处理的第一步 对于本实验的 脉冲方式的中断请求 若在两个相邻周期采样先高电平后低电平则中断请求有效 IE0 或 IE1 置 1 否则继续为 0 所谓查询就是由 CPU 测试 TCON 和 SCON 中各标志位的状态 以确定有没有中断请求发生以及是那一个中断请求 中断响应就是对中断请求的接受 是 在中断查询之后进行的 当查询到有效的中断请求后就响应一次中断 4 8051 的中断系统 8051 的中断系统包括 5 个中断源 并提供两个优先级 允许用户对中断源进行独立控制 和中断优先级设置 8051 支持的 5 个中断源分别为外部中断 0 定时器 0 溢出中断 外部中 断 1 定时器 1 溢出中断和串口中断 对应的中断号为 0 1 2 3 4 寄存器有 4 个工 作组可以切换 为 0 3 C51 中 中断服务程序是以中断函数的方式来时实现的 5 中断函数格式如下 void 函数名 interrupt 中断号 using 工作组 中断服务程序内容 三 参考例子三 参考例子 1 右边的三个数码管从 000 开始进行加法计数 按动按键时计数暂停 再按继续计 数 四 参考程序四 参考程序 一 适用于自制教学实验板 一 适用于自制教学实验板 include define uchar unsigned char define uint unsigned int sbit P37 P3 7 uchar code table 10 0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 x82 0 xf8 0 x80 0 x90 uchar code wei 4 0 x08 0 x04 0 x02 0 x01 uint cnt bit flag void init void bit flag 0 设置标志 EA 1 开中断 EX0 1 外部中断 0 开中断 IT0 1 外部中断 0 的触发方式 void delay uint k uint data i j for i 0 i k i for j 0 j999 cnt 0 for i 0 i 100 i P0 table cnt 100 P2 wei 2 delay 1 P0 table cnt 100 10 P2 wei 1 delay 1 P0 table cnt 10 P2 wei 0 delay 1 void extern int0 void interrupt 0 using 0 flag flag 二 适用于 二 适用于 MINI80E 实验板实验板 include define uchar unsigned char define uint unsigned int sbit P37 P3 7 uchar code table 10 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f uchar code wei 4 0 xf7 0 xf6 0 xf5 0 xf4 uint cnt bit flag void init void bit flag 0 设置标志 EA 1 开中断 EX0 1 外部中断 0 开中断 IT0 1 外部中断 0 的触发方式 void delay uint k uint data i j for i 0 i k i for j 0 j999 cnt 0 for i 0 i 100 i P0 table cnt 100 P2 wei 2 delay 1 P0 table cnt 100 10 P2 wei 1 delay 1 P0 table cnt 10 P2 wei 0 delay 1 void extern int0 void interrupt 0 using 0 flag flag 五 实验内容五 实验内容 1 使用外部中断 使用外部中断 1 实现上述功能 注意实现上述功能 注意 C51 中的不同中断号 中的不同中断号 2 数码管从 数码管从 0000 开始计数 高两位和低两位独立计数 采用两个按键 一个对应开始计数 高两位和低两位独立计数 采用两个按键 一个对应 前两位的暂停和继续 另一个对应后两位的暂停和继续 前两位的暂停和继续 另一个对应后两位的暂停和继续 实验六实验六 LED 数码管的动态驱动数码管的动态驱动 一 实验目的 1 学习 LED 数码管的动态驱动编程 2 学习使用定时 计数器 二 实验内容 编写程序 使实验板上的 4 个 LED 数码管稳定显示 4 个不同的数字 并使这四位数从 0000 开始 每秒钟加一 三 实验说明 在前面实验中 我们已经能够让某一个 LED 数码管显示需要的数字 比如选让第一 个 LED 显示 1 隔一较短的时间 如 5 毫秒 后关闭第一个 LED 让第二个 LED 显示 2 如此周而复始 让 4 个 LED 依次显 1 2 3 4 我们就能看到 4 个 LED 上稳 定地显示 4 个不同的数字 当然 每个瞬间只有一个 LED 被点亮 大家亮的时间相同 均为 5 毫秒 4 个 LED 数码管点亮一遍需要 20 毫秒 一秒钟各亮 50 次 所以看上去 不会有闪烁感 但亮度只是实验四中 LED 亮度的四分之一 要实现每隔 5 毫秒变换一个 LED 最好的方法是使用定时器中断 四 参考程序 一 自制实验教学板 C51 参考程序如下 include define U8 unsigned char U8 tab 0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 x82 0 xf8 0 x80 0 x90 U8 scn 0 x01 0 x02 0 x04 0 x08 先点亮左边一个数码管 U8 buf 4 0 0 0 0 显示缓冲区 开机先显示 0000 U8 cnt 0 扫描计数 void main void EA 1 允许中断 TMOD 0 x01 设定时器 0 为模式 1 16 位 ET0 1 定时器 0 中断允许 TH0 0 xee 晶振 11 0592MHz 5mS TL0 0 TR0 1 开始计数 while 1 死循环 等待中断 void timeint void interrupt 1 定时器 0 中断服务程序 char i TH0 0 xee 设置定时器时间常数 TL0 0 i cnt 求应点亮的 LED 号 从左到右依次为 0 1 2 3 P0 tab buf i 笔划代码送 P0 口 P2 scn i 控制扫描码送 P2 口 if cnt 200 cnt 0 到 1 秒钟 显示的数字加一 for i 3 i 0 i buf i if buf i 10 buf i 0 加到 10 向前进位 else break cnt 二 mini80e 实验板 C51 参考程序如下 include define U8 unsigned char U8 tab 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f U8 scn 0 xf4 0 xf5 0 xf6 0 xf7 先点亮左边一个数码管 U8 buf 4 0 0 0 0 显示缓冲区 开机先显示 0000 U8 cnt 0 扫描计数 void main void EA 1 允许中断 TMOD 0 x01 设定时器 0 为模式 1 16 位 ET0 1 定时器 0 中断允许 TH0 0 xee 晶振 11 0592MHz 5mS TL0 0 TR0 1 开始计数 while 1 死循环 等待中断 void timeint void interrupt 1 定时器 0 中断服务程序 char i TH0 0 xee 设置定时器时间常数 TL0 0 i cnt 求应点亮的 LED 号 从左到右依次为 0 1 2 3 P0 tab buf i 笔划代码送 P0 口 P2 scn i 控制扫描码送 P2 口 if cnt 200 cnt 0 到 1 秒钟 显示的数字加一 for i 3 i 0 i buf i if buf i 10 buf i 0 加到 10 向前进位 else break cnt 五 实验内容 1 每个按键控制一个数码管 按任意一个键 可在相应的数码管上实现数字加 1 2 如何让 4 个 LED 数码管从 0000 开始 每秒钟自动加 1 前两位代表分 后两位代 表秒 实验七实验七 定时器定时器 计数器使用计数器使用 一 实验目的一 实验目的 1 学习 89C51 内部定时计数器的使用和编程方法 2 进一步掌握中断处理程序的编写方法 二 实验说明二 实验说明 1 51 单片机有 两个 16 位内部定时器 计数器 T C Timer Counter 若是计数内 部晶振驱动时钟 则是定时器 若是计数 8051 的输入引脚的脉冲信号 则它是计数器 定 时器实际上也是工作在计数方式下 只不过对固定频率的脉冲计数 由于脉冲周期固定由 计数值可以计算出时间 有定时功能 定时器有关的寄存器有工作方式寄存器 TMOD 和控制寄存器 TCON TMOD 用于设 置定时器 计数器的工作方式 0 3 并确定用于定时还是用于计数 TCON 主要功能是为定 时器在溢出时设定标志位 并控制定时器的运行或停止等 2 TMOD 1 M1M0 工作方式控制位 2 C T 定时器方式或计数器方式选择位 若 C T 1 时 为计数器方式 C T 0 时 为定时器方式 3 GATE 定时器 计数器运行门控标志位 当 GATE 1 时 T C 的启动受双重控制 即要求 INT0 或 INT1 引脚为高电平且 TR0 或 TR1 置 1 时 相应的 T C 才被选通工作 若 GATE 0 T C 的启动仅受 TR0 或 TR1 控制 即置 1 T C 就被选通 而不管 INT0 或 INT1 的电平是高还是低 3 TCON TF0 TF1 分别是定时器 计数器 T0 T1 的溢出中断标志位 加法计数器计满溢出时 置 1 申请中断 在中断响应后自动复 0 TF 产生的中断申请是否被接受 还需要由中断 是否开放来决定 TR1 TR0 分别是定时器 计数器 T1 T0 的运行控制位 通过软件置 1 后 定时器 计数器才开始工作 在系统复位时被清 0 4 初始化 1 初始化步骤 在使用 51 系列单片机的 T C 前 应对它进行编程初始化 主要是对 TCON 和 TMOD 编程 还需要计算和装载 T C 的计数初值 一般完成以下几个步骤 1 确定 T C 的工作方式 编程 TMOD 寄存 2 计算 T C 中的计数初值 并装载到 TH 和 TL 3 T C 在中断方式工作时 必须开 CPU 中断和源中断 编程 IE 寄存器 4 启动定时器 计数器 编程 TCON 中 TR1 或 TR0 位 2 计数初值的计算 1 定时器的计数初值 在定时器方式下 T C 是对机器周期脉冲计数的 fOSC 6MHZ 一个机器周期为 12 fOSC 2us 则 方式 0 13 位定时器最大定时间隔 213 2us 16 384ms 方式 1 16 位定时器最大定时间隔 216 2us 131 072ms 方式 2 8 位定时器最大定时间隔 28 2us 512us 若 T C 工作在定时器方式 1 时 要求定时 1ms 求计数值 如设计数初值为 x 则 有 216 x 2us 1000us 推出 x 216 500 因此 TH TL 可置 65 536 500 2 计数器的计数初值 在计数器方式下 方式 0 13 位计数器的满计数值 213 8192 方式 1 16 位计数器的满计数值 216 65 536 方式 2 8 位计数器的满计数值 28 256 若 T C 工作在计数器方式 2 时 则要求计数 10 个脉冲的计数初值 如设计数初值 为 x 则有 28 x 10 即 x 28 10 因此 TH TL 256 10 三 参考例子三 参考例子 1 设单片机晶振频率为 12 MHz 利用定时器在 P1 0 脚输出周期为 2 ms 的方波 分析 选用定时器 计数器 T0 作定时器 输出为 P1 0 引脚 2 ms 的方波可由间隔 1 ms 的高低电平相间而成 因而只要每隔 1 ms 对 P1 0 取反一次即可得到这个方波 机器周期 12 12MHz 1 s 1 ms 内 T0 需要计数 N 次 N 1 ms 1 s 1000 由于计数器向上计数 为得到 1000 个计数之后的定时器溢出 必须给定时器置初值为 65 536 1000 2 在 P1 7 端接有一个发光二极管 要求利用 T C 控制 使 LED 亮 1s 灭 1s 周而复始 分析 要求定时 1s T C 的三种工作方式都不能满足 为什么 对于较长时间的定时 应采用符合定时的方法 使 T C0 工作在定时器方式 1 定时 100ms 定时时间到后 P1 0 反相 即 P1 0 端输 出周期 200ms 的方波脉冲 另设 T C1 工作在计数器方式 2 对 T1 输出的脉冲计数 当计满 5 次 定时 1s 时间到 将 P1 7 端方向 改变灯的状态 采用 6MHZ 晶振 方式 1 的最大定时才能达到 100 多 ms 对于 100ms 机器周期 为 12 fOSC 2us 需要计数的次数 100 1000 2 50 000 即初值为 65 536 50 000 方式 2 满 5 次溢出中断 初值为 256 5 四 参考程序四 参考程序 一 适用于自制实验教学板 1 设置周期为 2ms 的方波 查询方式 include sbit P1 0 P1 0 void main TMOD 0 x01 T CO 工作在定时器方式 1 16 位定时器 TR0 1 启动 T C0 for 主程序循环 TH0 65536 1000 256 预置计数初值 TL0 65536 1000 256 do P1 0 P1 0 P1 0 取反 TF0 0 软件清 TF0 while TF0 查询等待 TF0 置位 中断方式 include sbit P1 0 P1 0 void timer0 void interrupt 1 using 1 T C 中断服务程序入口 TF0 0 清楚中断标志位 P1 0 P1 0 P1 0 取反 TH0 65536 1000 256 计数初值重装载 TL0 65536 1000 256 void main TMOD 0 x01 T CO 工作在定时器方式 1 P1 0 0 TH0 65536 1000 256 预置计数初值 TL0 65536 1000 256 EA 1 CPU 开中断 TF0 0 ET0 1 T C0 开中断 TR0 1 启动 T C0 开始定时 do while 1 2 灯的闪烁 时间间隔为 1s P1 0 与 P3 5 相连 作为定时器 1 的输入 include sbit P1 0 P1 0 sbit P0 7 P0 7 timer0 interrupt 1 using 1 T C0 中断服务程序入口 TF0 0 清楚中断 T0 标志位 P1 0 P1 0 P1 0 取反 TH0 65536 1000 256 计数初值重装载 TL0 65536 1000 256 timer1 interrupt 3 using 2 T C1 中断服务程序入口 TF1 0 清楚中断 T1 标志位 P0 7 P0 7 1s 到 灯改变状态 void main P2 0 x10 打开 LED 电源开关 P0 7 1 置灯初始灭 P1 0 1 保证第一次方向便开始计数 TMOD 0 x61 T CO 工作在定时器方式 1 T C1 工作在计数器方式 2 TH0 65536 10000 256 预置计数初值 10 毫秒 TL0 65536 10000 256 TH1 256 100 TL1 256 100 IP 0X08 置优先级存储器 EA 1 CPU 开中断 TF0 0 清除中断 T0 标志位 TF1 0 清除中断 T1 标志位 ET0 1 T C0 开中断 ET1 1 T C1 开中断 TR0 1 启动 T C0 开始定时 TR1 1 启动 T C1 do while 1 二 适用于 MINI80E 实验板 2 P0 7 与 P3 5 相连 作为定时器 1 的输入 include sbit P1 0 P1 0 sbit P0 7 P0 7 timer0 interrupt 1 using 1 T C0 中断服务程序入口 TF0 0 清除中断 T0 标志位 P0 7 P0 7 P1 0 取反 TH0 65536 1000 256 计数初值重装载 TL0 65536 1000 256 timer1 interrupt 3 using 2 T C1 中断服务程序入口 TF1 0 清除中断 T1 标志位 P1 0 P1 0 1s 到 灯改变状态 void main P2 0 x10 打开 LED 电源开关 P0 7 1 置灯初始灭 P1 0 1 保证第一次方向便开始计数 TMOD 0 x61 T CO 工作在定时器方式 1 T C1 工作在计 数器方式 2 TH0 65536 10000 256 预置计数初值 10 毫秒 TL0 65536 10000 256 TH1 256 100 TL1 256 100 IP 0X08 置优先级存储器 EA 1 CPU 开中断 TF0 0 清除中断 T0 标志位 TF1 0 清除中断 T1 标志位 ET0 1 T C0 开中断 ET1 1 T C1 开中断 TR0 1 启动 T C0 开始定时 TR1 1 启动 T C1 do while 1 五 电路图五 电路图 六 实验内容六 实验内容 1 利用定时 计数器 T1 产生定时时钟 由 P1 口 或 P0 口 控制 8 个发光二极管 使 8 个指 示灯依次一个一个闪动 闪动频率为 10 次 秒 8 个灯依次亮一遍为一个周期 循环 GATE C T M1 M0 GATE C T M1 M0 TH1TL1TH0TL0 T1方式 T0方式 T1引脚 T0引脚 机器周 期脉冲 内部总线 TMOD TCON 外部中断相关位 TF1 TR1 TF0 TR0 实验八实验八 数字电子钟数字电子钟 一 实验目的 进一步熟悉定时 计数器的使用 二 实验内容 在实验板上编写程序 实现电子钟功能 时间显示格式为 HH MM 中间的小数点每秒钟 闪烁一次 用两个按键控制分和小时的调整 每按一次分或者小时加 1 三 实验说明 前面实验钟 LED 数码管的笔划代码均不含小数点 h 位为 1 小数点不亮 为了让第 2 个 LED 的小数点在每一秒的前半秒亮 后半秒灭 应在定时器的中断子程序中 判断当 前时间为前半秒 而且动态扫描到第 2 个 LED 时 将其笔划代码取出 和 0 xDF 相与 后再写入 P0 口 实验九实验九 矩阵键盘识别实验矩阵键盘识别实验 一 实验目的一 实验目的 1 掌握矩阵键盘的检测原理 二 实验说明二 实验说明 1 矩阵式键盘中 行 列线分别连接到按键开关的两端 行线通过上拉电阻接到 5V 上 当无键按下时 行线处于高电平状态 当有键按下时 行 列线将导通 此时 行线电平 将由与此行线相连的列线电平决定 这一点是识别矩阵按键是否被按下的关键 然而 矩 阵键盘中的行线 列线和多个键相连 各按键按下与否均影响该键所在行线和列线的电平 各按键间将相互影响 因此 必须将行线 列线信号配合起来作适当处理 才能确定闭合 键的位置 扫描方式是利用 CPU 完成其他工作的空余调用键盘扫描子程序来响应键盘输入的要求 在执行键功能程序时 CPU 不再响应键输入要求 直到 CPU 重新扫描键盘为止 键盘扫 描程序一般应包括以下内容 1 判别有无键按下 2 键盘扫描取得闭合键的行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通运输法规条文
- 消防安全培训学员建议课件
- 检验科青年文明号汇报
- 严重痔疮手术后的护理
- 异位妊娠的抢救及护理
- 监理过程汇报材料
- 环保管家工作总结
- 工作汇报图文结合技巧
- 幼儿园副院长工作总结
- 消防安全培训-工会课件
- 客服岗位职责培训
- 高一下学期《学生宿舍卫生和内务》主题班会课件
- 露营基地管理制度调查
- 食品防护知识培训
- 格拉斯哥(GCS)昏迷评估量表(详xi操作)
- 2025年北京中考英语阅读考纲外高频词汇(复习必背)
- 电网工程设备材料信息参考价(2024年第四季度)
- 数据中心运维服务投标方案(技术标)
- 公安情报干部培训授课
- GB/T 44988-2024过程工业安全仪表系统在线监视要求
- 机器学习技术与应用 课件 第3课 协作机器人
评论
0/150
提交评论