单片机之LED闪烁

程序代码编写:

在单片机中有几条很特殊的程序语法以及keil软件的基本操作步骤:

sfr P0= 0X80;

其中,sfr是关键字,是51单片机独有的,他的作用是定义一个单片机特殊功能寄存器。51单片机内部中有许多寄存器,如果想使用的话,必须先进行sfr声明。

不过在keil软件中,已经把所有这些声明都预先写好了并保存在一个专门的文件中,要使用时只需在文件开头添加一条

#include <reg52.h>;

与#include <reg51.h>大体相同,只是在使用时对位的定义不一样,reg51.h文件中对P1.1的操作是写成P1_1;reg52.h文件中的操作则写成P1^1。表示方法不一样而已。

另外前者是特指ATMEL公司的52系列单片机,后者指所有52系列的单片机。

第二条语句是:

sbit LED =P0^0;

 sbit就是对sfr中的8个开关其中一个进行定义。经过上边的语句后,以后只要在程序中,写LED,就代表了P0^0口。也就是说给了P0^0一个更形象的名字叫做LED;

下面我们来了解一下单片机的特殊功能寄存器:

在使用单片机中某一个寄存器之前,必须对这个寄存器的地址进行说明。每个型号的单片机都会配有生产厂家所编写的数据手册。下面我们以一个截取的手册表格为例:

 

 看P0,P1,P2,P3,这四个,每个P口本身又有8个控制端口,其中P0口所在地址,是0X80,一共有从7到0这8个IO口控制位,后面有个Reset Value(复位值)。其8个复位值都是1,这也就是说,每次单片机上电复位的时候,所有的引脚是值都默认是1。即高电平。在设计电路时也需考虑到。

 LED闪烁程序:

预想对LED灯进行开关开关;实现代码:

#include <REG52.H>
#include <INTRINS.H>

void main()
{
 unsigned int i =0;
    while (1)
    {
        P0=0xFE;
        
        P0=0XFF;
  

        
    }
    

}

下载程序后发现,LED并没有呈现闪烁效果,这是因为单片机运行频率很快,所以这样高频率的变化,我们肉眼并不能发现。

于是我们对程序进行一个延时处理。

#include <REG52.H>
#include <INTRINS.H>

void main()
{
 unsigned int i =0;
    while (1)
    {
        P0=0xFE;
        for(i=0;i<30000;i++);
        P0=0XFF;
        for(i=0;i<30000;i++);


        
    }
    

}

利用for语句实现一个延时的效果,以此到达我们预期效果;

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值