项目一IO口驱动LED显示器件.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:23 大小:224KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

项目一IO口驱动LED显示器件.ppt

项目一IO口驱动LED显示器件.ppt

预览

免费试读已结束,剩余 13 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一、任务1)利用P0.0口驱动LED闪烁,高电平有效;2)利用P0.7口驱动LED闪烁,低电平有效;二、目的1)了解P0.0口驱动负载特点,掌握利用C语言编写程序一般方法;2)掌握单片机P0口输出特性;STC-89C51单片机的P0口采用为OD门输出,不存在拉出电流,即P0口输出高电平时输出电流很小,但P0口输出低电平时,P0口灌入电流达到20毫安,因此P0只具有较强的低电平驱动能力。如果利用P0驱动门电路以及如LED这样的小功率负载,必须加上拉电阻,否则,即使编程让P0输出高电平,但是实际只能输出低电平。一、电路原理图1-1是单片机驱动LED电路,图中P0.0端口与电源图1-1单片机驱动LED电路原理之间接有一个电阻R2,当P0.0口输出低电平时,从电源正极出发经过电阻的电流通过P0.0口进入单片机,LED的正极为低电平,此时LED不亮,当此时P0口输出高电平时,经过电阻的电流无法进入P0.0端口,只能通过LED,此时LED亮。这种LED驱动方式为高电平有效方式。P0.7驱动LED采用的是低电平有效方式,直接了利用了P0口的低电平驱动能力。当P0.7端口输出高电平时,LED不亮,只有当P0.7端口输出低电平时,LED才亮。为了验证两种驱动方式的效果,可以编写程序后再利用Proteus软件进行仿真。二、程序设计由于P0.0和P0.7驱动接法不同,因此要实现两种接法的LED闪烁效果,程序略有差别,下面给出两种接法的LED闪烁程序。/***********************************************************************/#include<reg51.h>//包含头文件sbitLED=P0^0;//LED接P0.0。在kellC51软件中,定义P0.0为P0^0,voiddelay(unsignedcharx)//延时函数{unsignedchari,j;for(i=0;i<x;i++)for(j=0;j<200;j++);}voidmain(void)//主函数{while(1)//程序死循环{LED=0;//P0.0输出低电平,LED灭delay(100);//调用延时函数,延时一段时间,约0.3秒,不精确delay(100);LED=1;delay(100);//P0.0输出高电平,LED亮delay(100);}}/*************************************************************************/(2)利用P0.7端口驱动LED闪烁,低电平有效/*****************************************************************************/#include<reg51.h>//包含头文件,程序为小5号字sbitLED=P0^7;voiddelay(unsignedcharx)//延时函数{unsignedchari,j;for(i=0;i<x;i++)for(j=0;j<200;j++);}voidmain(void)//主函数{while(1){LED=~LED;//LED初始状态为灭,执行一次,LED改变一次状态delay(100);delay(100);//延时一段时间}}/*****************************************************************************/三、程序说明(1)因为使用的单片机芯片为STC89C51,因此程序开始处加入#include<reg51.h>,文件reg51.h中包含了51芯片所有特殊功能寄存器的名称定义和相对应的地址值;(2)单片机程序顺序执行程序,先执行主函数,在主函数内可以调用分函数,分函数可以调用分函数,但分函数不能调用主函数,程序执行一条命令再执行下一条,执行完毕后返回到主函数入口进行下次循环。延时的过程是单片机执行了一个delay(100)函数而浪费一段时间。在执行delay()的过程中,如果没有中断,单片机只能忙这一件事情,单片机在执行此函数相关指令时浪费和占用的时间就是执行延时函数获得的时间,但利用delay()不能得到精确的延时。延时函数还可以利用带有形参的函数实现,如:(3)利用位定义命令让LED等价于P0.0或P0.7,等于先sbitP0_0=P0^0,然后#definedLEDP0_0,也可以在程序前面不做此类定义,在程序里面直接写成P0^0=1或P0^0=0,先定义是为了增加程序的可读性。程序执行P0^0=1后,P0