《片机实例之跑马》PPT课件.ppt_第1页
《片机实例之跑马》PPT课件.ppt_第2页
《片机实例之跑马》PPT课件.ppt_第3页
《片机实例之跑马》PPT课件.ppt_第4页
《片机实例之跑马》PPT课件.ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课题三 实例 之跑马灯 任务一一只LED的闪烁任务二跑马灯任务三任意变化的彩灯控制 学习目标 知识目标 KeiluVision2软件的使用和调试方法 掌握汇编语言与C语言的编写方法和技巧 技能目标 能根据实际电路要求编写闪烁LED程序 任务一一只LED的闪烁 一 课题目标本课题就是以发光二极管为例 用单片机控制8只发光二极管 实现逐个点亮 全亮 闪烁等花样显示 为了便于理解 采用从简单的单只发光二极管的点亮和熄灭控制开始 到实现八只发光二极管组成的各种样式闪亮彩灯控制 图3 1LED显示电路原理图 二 电路原理 图3 2八路发光二极管控制电路演示图 P1 0端口的LED闪亮 三 程序设计 0 5秒延时的汇编程序 MOVR6 5SS MOVR7 200LOOP MOVR5 249DJNZR5 DJNZR7 LOOPDJNZR6 SS整个子程序延时为 2 s 249 1 2 200 2 5 501010 s 汇编语言程序 org0000hLS setbp1 0LcalldelayclrP1 0Lcalldelaysjmp delay movR6 5SS MOVR7 200loop movR1 245SD DJNZR1 SDDJNZR7 loopDJNZR6 SSretend 1 端口的定义C51使用sfr命令来对单片机这些端口进行定义 如 sfrP1 0 x90 这条命令的作用就是定义了P1这个名称 也可叫变量 代表了地址为90H的特殊功能寄存器 汇编程序直接使用P1就可以 并且不分大小写 例 MOVP1 0FFH MOVP1 00H 在程序命令中使用命令 sfrP1 0 x90 这样定义后 P1就代表了P1口 程序中就可以对单片机的P1口进行读写操作了 如使用 Y P1 的命令将单片机P1口的状态读入并存入变量Y中 而 P1 0 x02 则是P1口的P1 1置1 同样的方式 也可以定义其他端口 为了方便 C51将各个厂商生产的单片机的各个特殊功能寄存器的定义放在一个特殊的文件中 如AT89S51 AT89C51对应的文件是AT89X51 H 作为通用的MCS 51系列单片机 在编写C程序 首先调用这些通用的REG51 H头文件 2 位定义针对特殊功能寄存器的某一位进行操作 则需要使用sbit命令定义特殊功能寄存器中的可寻址位 如要对AT89S51端口P1的P1 0进行操作 则可以使用下面的命令进行定义 sbitP10 P1 0 然后就能使用 P10 1 控制P1 0输出高电平 P10 0 控制P1 0输出低电平 3 程序设计分析在本任务的程序设计框图就是图3 4 从框图中可看出两点 一是程序是一个循环结构 即程序开始后就反复地循环执行 二是程序包含了端口输出控制和0 5秒的延时程序 在本任务中的引脚定义使用如下命令 sbitlight P1 0 命令定义了light表示P1口的P1 0端 让LED点亮 需要在引脚上输出低电平 就是在P1 0引脚上输出0 应使用的命令是 light 0 汇编 CLRP1 0 同理 让LED熄灭 应使用的命令是 light 1 汇编 SETBP1 0 4 延时程序的编写单片机执行一条指令的执行时间 称为指令周期 指令周期是以机器周期为单位的 为1 4个机器周期 多数指令都是单周期指令 也就是执行一条指令的时间为一个机器周期 在MCS 51单片机规定一个机器周期为单片机振荡器的12个振荡周期 如果晶振频率为12MHz 则一个机器周期为1 s 单片机的指令运行是很快的 要在端口获得一定时间长度的脉冲信号 就要通过编写程序 使单片运行设计程序产生时间延迟 实现从单片机输出端口上获得需要频率的电脉冲信号 任务中要求获得0 5s的时间长度 当单片机的指令周期是1 s时 可计算出0 5s是1 s的5000000倍 在程序编写中常用循环语句来完成计数和时间延迟 从而获得需要的延时时间 为了便于计算和控制 常采用无符号变量的循环来实现 因为程序执行时 对应的每次循环所需要的时间是两个机器周期 当单片机所使用的晶振为12MHz 每次循环就延时2 s 无符号数最大值为255 也就是说 使用无符号类型的变量的单个的循环最多为255次 即用一个循环不能完成所需要的0 5s延时 为了达到0 5s延时 可采用多重循环的方式完成 为了方便 将其中的每重循环的循环次数取为0 5s 2 s 25000的因数200 250和5 下面就是一个完成0 5秒延时的程序 voiddelay05s void unsignedchari j k for i 5 i 0 i for j 200 j 0 j for k 250 k 0 k 整个子程序延时为 2 s 250 200 5 500000 s 0 5s 近似值 不准确 按图3 5所对应的主程序 sbitlight P1 0 voidmain void while 1 light 0 delay05s light 1 delay05s C语言程序 includesbitlight P1 0 voiddelay05s void unsignedchari j k for i 5 i 0 i for j 200 j 0 j for k 250 k 0 k voidmain void while 1 light 0 delay05s light 1 delay05s 一 keilC51windows集成开发平台的使用1 keilC51windows集成开发平台介绍 图3 6软件窗口介绍 2 导入需要仿真的程序 建立一个工程项目芯片选择属性设置建立源程序文件添加文件到当前项目组中编译文件 KEIL软件开发平台 KEIL软件开发平台 图3 7新建工程窗口 KEIL软件开发平台 图3 8新建工程窗口 KEIL软件开发平台 图3 9单片机选择窗口 KEIL软件开发平台 图3 10目标1属性设置窗口 KEIL软件开发平台 图3 11目标1输出窗口设置 KEIL软件开发平台 图3 12调试窗口设置 KEIL软件开发平台 图3 13软件输入窗口 KEIL软件开发平台 图3 14目标1添加窗口 KEIL软件开发平台 图3 15目标1添加文件窗口 二 Keil程序调试 1 程序调试时的常用窗口 编译文件界面 KEIL软件开发平台 图3 16编辑文件界面 调试程序窗口 字母C 代码存储空间D 直接寻址的片内存储空间I 间接寻址的片内存储空间X 扩展的外部RAM空间 数字 想要查看的地址 KEIL软件开发平台 图3 17代码查询窗口 工程窗口寄存器页 KEIL软件开发平台 图3 18工程寄存器窗口 2 各种窗口在程序调试中的用途 程序调试界面 KEIL软件开发平台 图3 19程序调试窗口 I O端口界面 KEIL软件开发平台 图3 20硬件查询窗口 I O口全部打开界面 KEIL软件开发平台 图3 21硬件I 0口查询窗口 打开后的Interrupt窗口 KEIL软件开发平台 图3 22P3口查询窗口 串口设置 KEIL软件开发平台 图3 23串口查询窗口 打开后的串口窗口 KEIL软件开发平台 图3 24串口窗口 定时器设置 KEIL软件开发平台 图3 25定时器窗口 打开后的定时器1窗口 KEIL软件开发平台 图3 26硬件I 0口查询窗口 常用的调试按钮 复位按钮 按下后 所有的系统状态将变成初始状态 全速运行 进入循环并单步执行 停止全速运行 跳过循环并单步执行 跳出单步执行过程 执行到断点处 KEIL软件开发平台 图3 27调试按钮 二 ISP软件的使用 打开下载软件 双击目录下的文件ISPgm exe 打开软件进入软件使用界面1 芯片选择 左击界面右面芯片选择窗口的下拉箭标 选择编程芯片的型号 2 导入hex文件到缓冲区 左击界面上的 OpenFile 按钮 选择本目录下的hex文件 3 向芯片写入文件 左击界面上的 Write 按钮 开始编程向芯片写入程序 4 完成写入编程 5 退出程序 左击界面右上角的 x 按钮 退出此程序 KEIL软件开发平台 任务二跑马灯 本任务让图3 28中的LED依次点亮 图3 28LED硬件图 程序设计分析为了让图3 28所示的LED依次点亮 就是要求从P1口从P1 0至P1 7依次输出低电平 其余引脚都输出高电平 就能让被接在端口的彩灯依次点亮 从输出的具体的数据来看 第一个LED点亮需要的输出数据 是对应于P1 0的位为0 其余位为1 组合为一个字节时对应的二进制位从高到低为 11111110 即十六进制数0 xFE 同理 第二个LED点亮对应的数为 11111101 化为十六进制数为0 xFD 依次类推 逐次点亮LED所对应的数据为 11111110 11111101 11111011 11110111 11101111 11011111 10111111 01111111 从这些数据上 可以看出一个规律 就是这些数据中的二进制数0的位置依次往左移动了一位 在C51中 要直接实现数据的这种计算是不容易的 根据前面的分析 实现任务的思路是 程序开始时 给某一变量赋初始值0 xFE 然后每次将数据左移后送入P1口直到所有循环次数输出完毕 再次重复整个过程 根据思路得出的程序框图如图3 29所示 图3 29程序流程图 include reg51 h include intrins h defineucharunsignedchar defineuintunsignedintvoidmDelay unsignedintDelay unsignedinti for Delay 0 Delay for i 0 i 124 i voidmain unsignedcharOutData 0 xfe for P1 OutData OutData crol OutData 1 循环左移mDelay 1000 延时1000毫秒 1 C语言程序 crol 字符循环左移 cror 字符循环右移 irol 整数循环左移 iror 整数循环右移 lrol 长整数循环左移 lror 长整数循环右移 nop 空操作 相当于8051NOP指令 testbit 测试并清零位 相当于8051JBC指令 ORG0000HSTART MOVR2 8MOVA 0FEHLOOP MOVP1 ALCALLDELAYRLADJNZR2 LOOPSJMPSTART delay movR6 5SS MOVR7 200lp movR1 245SD DJNZR1 SDDJNZR7 lpDJNZR6 SSRETEND 思考题 1 编写程序实现8个LED指示灯从左到右 从右到左依次循环点亮 2 编写程序实现8个LED指示灯闪亮3次并且从左到右 从右到左依次循环点亮 include reg51 h include intrins h defineucharunsignedchar defineuintunsignedintucharj k voidmDelay unsignedintDelay unsignedinti for Delay 0 Delay for i 0 i 124 i voidmain unsignedcharOutData 0 xfe while 1 for j 0 j 7 j P1 OutData OutData crol OutData 1 循环左移mDelay 1000 延时1000毫秒 for k 0 k 7 k P1 OutData OutData cror OutData 1 循环右移mDelay 1000 延时1000毫秒 任务三任意变化的彩灯控制 本任务实现让彩灯显示出规定的任意的花样 程序设计分析由于本任务中是按时间变化依次控制彩灯亮 灭 可以采用跑马灯类似的思路来完成程序框图 但显示花样所对应的数据的变化不一定有规律 不能采用变量直接计算的方式实现前后数据的变化 这里介绍一种很重要的程序设计方法 查表法 将彩灯显示的图案所对应的端口输出数据依次编写为一张数据表 表中每个数据中为0的位表示对应的彩灯亮 数据为1的位表示对应的彩灯熄 将这张数据表放在程序中 以数组的形式存储 在使用时依次读出数组中的元素就得到了需要的数据 实现了数据的无规律变化 并且数组存储的数据可以较多 能实现的花样变化也可以做到比较繁复 在C51中要进行复杂的计算 也可以采用数组的方式来实现 比如 一个周期正弦值的计算 可以先将这些列在表中 需要时查表读出 这就是查表法 图2 6采用数组的彩灯控制程序框图 将用于点亮彩灯的数据放在数组中 让程序依次读这数组中的数据 并将数据送到端口 控制彩灯的点亮 就实现了任意规律变化彩灯控制 假设有N个数据 当程序读完N个数据后 又从头开始读数 具体的程序框图如图2 6所示 具体完整例程详见Keil软件操作 C语言程序 includeunsignedcharcodetable 0 xfe 0 xfd 0 xfb 0 xf7 0 xef 0 xdf 0 xbf 0 x7f 0 xfe 0 xfd 0 xfb 0 xf7 0 xef 0 xdf 0 xbf 0 x7f 0 x7f 0 xbf 0 xdf 0 xef 0 xf7 0 xfb 0 xfd 0 xfe 0 x7f 0 xbf 0 xdf 0 xef 0 xf7 0 xfb 0 xfd 0 xfe 0 x00 0 xff 0 x00 0 xff 0 x01 unsignedchari voiddelay void unsignedchar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论