单片机闪烁的LED课件.pptVIP

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

项目三闪烁的LEDn任务一一只LED的闪烁n任务二跑马灯n任务三任意变化的彩灯控制

?知识目标:nKeiluVision2软件的使用和调试方法。n掌握汇编语言与C语言的编写方法和技巧。学习目标n?技能目标:n能根据实际电路要求编写闪烁LED程序。

任务一一只LED的闪烁n一、课题目标本课题就是以发光二极管为例,用单片机控制8只发光二极管,实现逐个点亮、全亮、闪烁等花样显示。为了便于理解,采用从简单的单只发光二极管的点亮和熄灭控制开始,到实现八只发光二极管组成的各种样式闪亮彩灯控制。

二、电路原理图3-1LED显示电路原理图

图3-2八路发光二极管控制实物图

三、程序设计P1.0端口的LED闪亮单片机的I/O端口AT89S51P1.0+Vcc图3-3单片机驱动一只发光二极管的原理电路

n1、端口的定义C51使用sfr命令来对单片机这些端口进行定义,如:sfrP1=0x90;这条命令的作用就是定义了P1这个名称(也可叫变量)代表了地址为90H的特殊功能寄存器。汇编程序直接使用P1就可以,并且不分大小写。例:MOVP1,#0FFH;MOVP1,#00H。

在程序命令中使用命令“sfrP1=0x90;”这样定义后,P1就代表了P1口,程序中就可以对单片机的P1口进行读写操作了,如使用“Y=P1;”的命令将单片机P1口的状态读入并存入变量Y中,而“P1=0x02”则是P1口的P1.1置1。同样的方式,也可以定义其他端口。为了方便,C51将各个厂商生产的单片机的各个特殊功能寄存器的定义放在一个特殊的文件中,如AT89S51、AT89C51对应的文件是AT89X51.H。作为通用的MCS-51系列单片机,在编写C程序,首先调用这些通用的REG51.H头文件。

n2、位定义针对特殊功能寄存器的某一位进行操作,则需要使用sbit命令定义特殊功能寄存器中的可寻址位。如要对AT89S51端口P1的P1.0进行操作,则可以使用下面的命令进行定义:sbitP10=P1^0;然后就能使用“P10=1;”控制P1.0输出高电平,“P10=0;”控制P1.0输出低电平。

程序开始n3、程序设计分析输出低电平延时0.5秒在本任务的程序设计框图就是图3-4。从框图中可看出两点,一是程序是一个循环结构,输出高电平即程序开始后就反复地循环执行,二是程序包含了端口输出控制和0.5秒的延时程序。延时0.5秒图3-41Hz的闪烁程序设计框图

在本任务中的引脚定义使用如下命令:sbitlight=P1^0;命令定义了light表示P1口的P1.0端。让LED点亮,需要在引脚上输出低电平,就是在P1.0引脚上输出0,应使用的命令是:light=0;(汇编:CLRP1.0)同理,让LED熄灭,应使用的命令是:light=1;(汇编:SETBP1.0)

n4、延时程序的编写单片机执行一条指令的执行时间,称为指令周期。指令周期是以机器周期为单位的,为1~4个机器周期,多数指令都是单周期指令,也就是执行一条指令的时间为一个机器周期。在MCS-51单片机规定一个机器周期为单片机振荡器的12个振荡周期。如果晶振频率为12MHz,则一个机器周期为1μs。单片机的指令运行是很快的,要在端口获得一定时间长度的脉冲信号,就要通过编写程序,使单片运行设计程序产生时间延迟,实现从单片机输出端口上获得需要频率的电脉冲信号。

任务中要求获得0.5s的时间长度,当单片机的指令周期是1μs时,可计算出0.5s是1μs的500000倍,在程序编写中常用循环语句来完成计数和时间延迟,从而获得需要的延时时间。为了便于计算和控制,常采用无符号变量的循环来实现。因为程序执行时,对应的每次循环所需要的时间是两个机器周期,当单片机所使用的晶振为12MHz,每次循环就延时2μs。无符号数最大值为255,也就是说,使用无符号类型的变量的单个的循环最多为255次,即用一个循环不能完成所需要的0.5s延时。为了达到0.5s延时,可采用多重循环的方式完成。为了方便,将其中的每重循环的循环次数取为0.5s/2μs=250000的因数200、250和5。

下面就是一个完成0.5秒延时的程序。voiddelay05s(void){unsignedchari,j,k;for(i=5;i0;i--){for(j=200;j0;j--){for(k=250;k0;k--){;}}}}整个子程序延时为:2μs×250×200×5=500000μs=0.5s。

0.5秒延时的汇编程序:MOVR6,#5SS:MOVR7,#200LOOP:MOVR5,#249DJNZR5,$DJNZR7,LOOPDJNZR6,SS整个子程序延时为:{[2μs×2

文档评论(0)

133****6142 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体成都美鑫可研科技文化有限公司
IP属地四川
统一社会信用代码/组织机构代码
91510100MADHJ0RX18

1亿VIP精品文档

相关文档