2-0 51单片机点灯

点亮一个灯

点亮一个灯,听起来就好像使用家里的开关打开日常照明灯一样。没错,这种理解方式是对的。LED灯在1.5V以上就会被点亮,在1.5-3V之间时亮度变化比较明显,3-5V变化比较不明显。另外LED的正常驱动电流为10mA左右,一般我们都控制在5mA-10mA。观察一下下面的电路。

这是一个纯粹的LED电路,Vcc一般选择5V,电阻1K欧姆,那么通过LED的电流在5mA左右,这是一个常亮电流,只要电源不断电,LED就一直工作着。那么我们如何通过单片机控制led灯呢?在第一节我们说到单片机重要的一点那就是电路引脚,聪明的同学应该也能想到了,我们可以通过引脚,来通过软件编程的方式,让单片机的这个引脚来实现有电和没电的方式,来控制led。

        说到引脚,就不得不提单片机很重要的一点,(敲黑板),这是重点,那就是原理图,那什么是原理图呢,那就是单片机芯片的电路结构。

 如图,这是stc89c52芯片的一款单片机,这个电路是我们实验室的师兄设计的,重点先讲芯片的引脚分布。

 如图就是stc89c52的引脚图,我们本节课需要做的就是,通过kile这个软件编写代码,根据原理图,控制芯片的引脚,来给这个引脚电,实现led灯的亮灭。

再观察一下led的电路

当把GND换成单片机的一个引脚时,通过控制引脚输出高电平,那么LED两端的电压都为5V,不存在电势差,LED就无法点亮;反之,通过控制引脚输出低电平,LED两端形成了电势差,LED就如上面的常亮电路一般点亮。这样就轻松实现了LED的可控亮灭。注意:在这里电阻不宜选择不当,电阻过大流过LED的电流过小,无法点亮LED灯,电阻过小则容易烧毁LED,或者由于灌电流过大而烧毁单片机芯片。(单片机的灌电流一般控制在15mA以下)

原理很好懂,接下来就讲一下程序的步骤。

第一步,引入头文件。没有头文件的程序不是不能执行,只是缺乏系统的对寄存器的定义,小程序还可以解决,一旦程序稍微复杂一点,程序员就会因为查找寄存器地址而浪费很多时间。STC系列所有芯片都有配套的头文件,完全可以直接调用这些头文件,节省这些不必要浪费的时间。

第二步,做初始化准备工作,配置相关的寄存器,包括引脚的输入输出模式,第二功能等等。单片机上电默认配置为准双向口模式,输出高电平。虽然刚开始写的程序大部分都采用上电默认模式,但是作为初学者,还是建议在程序开始的地方写一下模式配置,了解配置的原理。

第三步,编写主体功能程序,点亮一个LED。

点亮led参考程序:
#include <stc12c5a60s2.h>//第一步,引入头文件,节约用户去查手册寻址时间
#define u8 unsigned char//用u8来代替无符号字符型数据
#define u16 unsigned int //用u16来代替无符号整型数据
void delay_ms(u16 xms)//延时函数,起到延时大约x毫秒的作用
{
u16 i,j;
for(i=0;i<xms;i++)
for(j=0;j<110;j++);
}


void main()
{
//以上一页的电路原理图为例
//第二步,初始化工作,将P1口配置成双向口模式
P1M1=0x00;
P1M0=0x00;
P1=0xff;//输出高电平,使led两边电压压差相等,从而起到灭灯的效果

//第三步,程序的主体功能
P1=0xfd;//1111 1101 对于P11口
while(1);//让程序卡死在这里,控制led灯一直亮灯
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值