2021-10-05

每日一练 51单片机 希望自己早日学到stm32

利用定时器中断实现延时,利用四个按键实现led灯的四种状态

#include "reg52.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char

sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;

uint i;
/****************led*********************/
void led1() 
{
    while(1)
    {
        P2=0x00;
    }
}
/********************摇摆*********************/
void led2()
{
    P2=0x00;
    TR0=1;
    while(1)
    {
        if(i==10)
        {
            P2=~P2;
            i=0;
        }    
    }
}

/**********************流水灯*******************/
void led3()
{
    P2=0xfe;
    TR0=1;
    while(1)
    {
        if(i==10)
        {
            P2=_crol_(P2,1);
            i=0;
        }    
    }
}

/*****************轮流点亮*********************/
void led4() 
{

    P2=0XFE;
    TR0=1;
    while(1)
    {
        if(i==10&&P2!=0x00)
        { 
            P2=P2<<1;
            i=0;
        }
        if(P2==0x00)
            led1();
    }
}
/****************设置初值***************/    
void init()
{
    TMOD=0X01;
    TH0=0XB1;
    TL0=0XE0;
    ET0=1;
    EA=1;
}
/*****************延时程序*************/
void time() interrupt 1
{
    TH0=0XB1;
    TL0=0XE0;
    i++;
}

void main()
{
    init();
    P2=0XFF;
    if(k1==0)
        led1();
    if(k2==0)
        led2();
    if(k3==0)
        led3();
    if(k4==0)
        led4();
}
 

上一篇:关于虚表


下一篇:Modbus功能码详解