第三讲单片机控制LED实验简介.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三讲单片机控制LED实验简介

单片机控制LED实验;这是我们的第一个程序,也是学习单片机的入门级程序,看懂了它,就意味着你已经踏入单片机C语言编程的第一道门槛,我们尽量详细的讲解它。 我们在刚刚建立的工程c文件中,编入以下代码: #include reg52.h //52系列单片机头文件 sbit led1=P1^0; //声明单片机P1口的第一位 void main() //主函数 { led1=0; /*点亮第一个发光二极管*/ } ;编程编译过程详见软件。 注:在设置界面,Output中的Create Hex File前面打钩,编译后将生产Hex文件,供下载到单片机中。;#include reg52.h 在代码中引用头文件,实际意义就是将这个头文件中的全部内容放到引用头文件的位置处,免去我们每次编写同类程序都要将头文件中的语句重新编写。其内定义了52系列单片机内部所有的功能寄存器,如sft P0=0x80,是把单片机内部地址0x80处的这个寄存器重新起名叫P0。以后操作P0,也就是相当于直接多单片机内部的0x80地址处的寄存器进行操作。通俗讲,通过sft这个关键字,让Keil编译器在单片机与人之间搭建一条可以进行沟通的桥梁。;sbit led1=P1^0; 含义为:将单片机P1口的最低位定义为led1,在实验板中,8个发光二极管的阴极通过一个锁存器分别连接至单片机的P1口,若要控制某一个发光二极管,也就是控制单片机P1口的某一位,因此有必要声明这一位,否则单片机不知道你操作的是什么。 注意:这里的P1,P是大写,因为在头文件中,定义了sft P1=0x90。;led1=0; 也就是该程序中最核心的语句。数字电路中,电平只有两种状态:高电平1、低电平0。该语句便是让P1口的最低位清0,为何将P1口的最低位清0,第一个发光二极管就会发光呢?请看电路原理图。 ;图1 LED原理图;发光二极管与普通二极管一样,具有单向导电性,当给发光二极管加正向电压约1.7V(通过5mA左右电流)就会发光,加负向电压不发光。发光程度与电流成正比,为防止损坏,加排阻。计算依欧姆定律。;上图中A点相当于单片机的I/O口,A点相当于单刀双掷开关,可以接到+5V或悬空,也可以接地,从原理图看,前者不亮(无电流通过),后者发光二极管两侧产生压差,二极管将亮! 因此,若A点接到单片机的P1口,只要将P1口的相应引脚置低电平0或高电平1,便可控制发光二极管的亮灭。 注:此电路中,发光二极管直接通过排阻与单片机相连,未加锁存器。;注意到,这种控制I/O口的方法是一条语句只能控制一个I/O口,即按位操作,如果我们要让1357四个发光二极管同时亮,就需要声明4个I/O口,然后在主程序中再分别写4条语句分别点亮4个发光二极管,显然,略麻烦。 有一种方法,可简单解决此问题。;#include reg52.h //52系列单片机头文件 void main() //主函数 { P1=0xaa; } 这里P1=0xaa,就是对单片机P1口的8个I/O口同时进行操作。转换成二进制数P1口的最低位赋值为0,第二位赋值为1…,即对应第1357个二极管发光。十六进制0xaa对应十进制170,将其赋值也可,单片机中均以二进制保存。;while(1) { led1=0;/*点亮第一个发光二极管*/ for(i=1000;i0;i--) //延时 for(j=110;j0;j--); led1=1;/*关闭第一个发光二极管*/ for(i=1000;i0;i--) //延时 for(j=110;j0;j--); };上述程序中,通过for循环来实现延时的效果。 for(i=1000;i0;i--) //延时 for(j=110;j0;j--); 其中外循环i的赋值,刚好约等于1000mS。;aa=0xfe; //赋初 while(1) //大循环 { P1=aa; delayms(500); //延时500毫秒 aa=_crol_(aa,1); //将aa循环左移1位后再赋给aa };循环左移函数_crol_包含在头文件intrins.h中。 移位前:0 1 1 1 1 1 1 1 移位后:1 1 1 1 1 1 1 0 试想,如果将上述二进制数值赋给单片机P1的8个引脚,那么亮的那唯一一个二极管是不是就在每次移位后,进行了转移?如果快速操作起来,便是流水的效果,如果更快,看起来便是8个二极管常亮,思考为什么?;欲实现流水灯效果,还有哪些方法?

文档评论(0)

宝贝计划 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档