实验一:LED实验

点亮一盏LED

程序代码

/********************************************************************
*                    
*                        点亮一盏LED灯                               
*
********************************************************************/
#include <reg51.h>     //此文件中定义了51的一些特殊功能寄存器

void main()
{ 
    while(1)
    {
        P2= 0xfe;
    }
}

程序分析

#include <reg51.h>

想知道这句语句什么意思?我们可以让光标停留在这句话,然后右击鼠标。如下图:
这里写图片描述
然后我们可以看到弹出的头文件窗口(由于我们现在只用到部分代码,所以就只copy需要的那部分出来),其中代码如下:

/*--------------------------------------------------------------------------
REG51.H

Header file for generic 80C51 and 80C31 microcontroller.
//80C51 and 80C31类微处理器的头文件

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __REG51_H__
#define __REG51_H__

/*  BYTE Register  */
//SFR是Special Function Register特殊功能寄存器。
//
sfr P0   = 0x80;
sfr P1   = 0x90;
sfr P2   = 0xA0;
sfr P3   = 0xB0;
sfr PSW  = 0xD0;
sfr ACC  = 0xE0;
sfr B    = 0xF0;
sfr SP   = 0x81;
sfr DPL  = 0x82;
sfr DPH  = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0  = 0x8A;
sfr TL1  = 0x8B;
sfr TH0  = 0x8C;
sfr TH1  = 0x8D;
sfr IE   = 0xA8;
sfr IP   = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;

当我们打开头文件时,怎么才知道我们需要用到哪些寄存器呢

LED原理图

这里写图片描述

发光二极管

这里写图片描述

结论

共阳极公共端接阳极,低电平有效(灯亮), 共阳极数码管内部发光二极管的阳极(正极)都联在一起,此数码管阳极(正极)在外部只有一个引脚
共阴极公共端接阴极,高电平有效(灯亮),共阴极数码管内部发光二极管的阴极(负极)都联在一起,此数码管阴极(负极)在外部只有一个引脚

P2= 0xfe;

那么从上面得出的结论,我们就很容易知道这句话什么意思了。

延时函数

这里写图片描述

这里写图片描述

s t a t e s ( ) × 12 s e c × 10 6 = X t a l

/********************************************************************
*                     LED闪烁的简单试验                                
*
********************************************************************/
#include <reg51.h>     

void delay(unsigned int i);  

void main()
{ 
    while(1)
    {   
        int i;
        for(i=5;i>0;i--)
        {
            P2  = 0x00; 
            delay(6000); 
            P2  = 0xff; 
            delay(6000);
        }

        P2  = 0xfe; 
        delay(600);
        P2  = 0xfd; 
        delay(600);
        P2  = 0xfb; 
        delay(600);
        P2  = 0xf7; 
        delay(600);
        P2  = 0xef; 
        delay(600);
        P2  = 0xdf; 
        delay(600);
        P2  = 0xbf; 
        delay(600);
        P2  = 0x7f; 
        delay(600);  
    }
}
/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j,k;
    for(i; i > 0; i--)   
        for(j =255; j > 0; j--);
            for(k = 510; k > 0; k--);
}

猜你喜欢

转载自blog.csdn.net/qq_15299517/article/details/80499291
今日推荐