《单片机控制技术项目式课程》(第2版)课件 项目4 单片机控制LED的设计.ppt
P3口用作通用I/O口时,其工作原理同P1口类似。此外,它的每一根线还具有第二种功能。☆在真正的应用电路中,P3口的第二功能显得更为重要。4.1.2单片机控制单个LED闪烁的设计方法1.任务要求设计一个电路,AT89C52单片机的P1.7引脚连接一个LED灯,控制LED闪烁。2.任务分析以单片机为核心的电子设计硬件设计软件设计单片机最小系统加上最简单的输出电路来驱动LED编程控制P1.7引脚的电平状态,使其持续一段时间的高电平,再持续一段时间的低电平3.任务设计(1)器件的选择①发光二极管发光二极管:单向导电性,通过5mA左右电流即可发光,电流越大,亮度越强,但若电流过大会烧毁二极管,一般控制在3~20mA。工作电压:红色发光二极管1.7-2.5V
绿色发光二极管2.0-2.4V
黄色发光二极管1.9-2.4V
蓝/白色发光二极管3.0-3.8V②限流电阻二极管串联电阻的目的是为了防止发光二极管和P1.7引脚流过的电流过大,烧毁二极管或单片机,所以该电阻也称为“限流电阻”。限流电阻的选择:假设电源电压为VCC,发光二极管的导通压降为VDD,导通时流过二极管的电流为I,则限流电阻R为:R=(VCC-VDD)/I例如,若二极管的导通压降为2.2V,导通时流过的电流为5mA,则限流电阻为560Ω。③器件清单器件名称数量(只)AT89C52112MHz晶体122pF瓷片电容222uF电解电容110kΩ电阻1560Ω电阻1发光二极管LED1(2)硬件原理图设计再次强调:图中的单片机元件没有“VCC”和“GND”引脚,这是因为Proteus软件中,元件模型中的“电源”和“地”已经进行了连接,“VCC”接到了“+5V”电源,“GND”接到了“地”,所以隐藏了这两个引脚。(3)软件程序设计#includereg52.h//宏定义sbitled=P1^7;//用sbit关键字定义P1.7引脚//延时子函数voidDelay(unsignedintt){while(--t);}//主函数,控制P1.7引脚的LED灯闪烁voidmain(void){while(1)//主循环{led=0;//将P1.7引脚置0,对外输出低电平Delay(20000);//调用延时程序led=1;//将P1.7引脚置1,对外输出高电平Delay(20000);//调用延时程序}}在软件编程中,通常使用空循环来达到延时的效果。延时时间的长短可以在KeilC51的调试状态下分析。(4)软硬件联合调试1.任务要求设计一个电路,AT89C52单片机的P1口连接8只LED灯,按以下顺序点亮,形成流水灯的效果:①从P1.0到P1.7连接的8只LED灯逐个点亮;②从P1.0到P1.7连接的8只LED依次全部点亮;③从P1.7到P1.0连接的8只LED灯逐个点亮;④从P1.7到P1.0连接的8只LED依次全部点亮。任务4.2单片机控制多个LED循环点亮的设计2.任务分析任务要求单片机控制8个LED灯,当需要对某个I/O口的八位一起操作时,一般采用整体操作的方式,即总线的方式。在软件设计时可以定义一个变量来给P1口赋值,赋的值不同点亮的LED灯不同。由于8只LED灯要按一定规律点亮,这就要求对给P1口赋的变量进行移位,移位操作既可以用标准C中的左移、右移运算符来实现,也可以用C51库自带的函数来实现。移位运算符循环移位函数注意:循环移位函数_crol_()和_cror_()包含在intrins.h头文件中,因此如果在程序中要用到这类函数,就必须在程序的开头处包含intrins.h这个头文件。由于用到的发光二极管较多,每个发光二极管都需要限流电阻,硬件电路会显得比较复杂,所以这里使用了排阻。排阻,就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚,其余引脚正常引出。如果一个排阻是由n个电阻构成的,那么它就有n+1个引脚,一般来说最左边的那个是公共引脚。它在排阻上一般用一个色点标出来。直插式