石头

深入浅出玩转51单片机——学习笔记:Led小灯篇

0
阅读(2352)
/**************************************
深入浅出玩转51单片机——学习笔记:Led小灯
实现功能:用指针实现流水灯由左向右移动
硬件接线:Led 接P1口
晶振频率:11.0592Mhz
**************************************/

#include<STC12C5A60S2.H>

typedef unsigned char uint8;
typedef unsigned int  uint16;

uint8 temp = 0x01;
uint8 i = 0;
uint8 time_1s = 0;

#define Led P1

void initial_myself();   //上电初始化
void Delayms(uint16 z);     //延时函数
void initial_peripheral(); //外围设备初始化
void Led_Left(uint8 *P);   

void main()
{
    initial_myself();
    Delayms(10);
    initial_peripheral();

    while(1)
    {
        Led = ~temp;
        if(1 == time_1s)
        {
             time_1s = 0;
             Led_Left(&temp);

             if(0 == temp)
            {
                 temp = 0x01;
            }
         }
    }    
}

void Led_Left(uint8 *P)
{
    *P = *P << 1;
}

void initial_myself()  //上电初始化
{
    Led = 0xff;

    TMOD = 0x01;
    TH0 = 0xdc;
    TL0 = 0x00;
}

void initial_peripheral() //外围设备初始化
{
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void T0interrupt() interrupt 1     //T0中断函数
{
    TH0 = 0xdc;
    TL0 = 0x00;
    
    i++;
    if(100 == i)
    {
        i = 0;
        time_1s =1;
    }
}

void Delayms(uint16 z)      //软件延时
{
    uint16 x,y;
    for(x = 0 ;x < z ;x++)
       for(y = 0;y < 100; y++);
}