C51单片机串口控制LED灯亮灭的实现方法

1.Code:

#include "reg52.h"
#include "intrins.h"

sfr   AUXR = 0x8E;
sbit  D5 = P3^7;
void UartInit(void)        //9600bps@11.0592MHz
{
    //PCON &= 0x7F;        //波特率不倍速
    AUXR  = 0x01;    
    SCON  = 0x50;        //8位数据,可变波特率
    //AUXR &= 0xBF;        //定时器1时钟为Fosc/12,即12T
    //AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
    
    TMOD &= 0x0F;        //清除定时器1模式位
    TMOD |= 0x20;        //设定定时器1为8位自动重装方式
    
    TL1   = 0xFD;        //设定定时初值
    TH1   = 0xFD;        //设定定时器重装值
    //ET1   = 0;        //禁止定时器1中断
    TR1   = 1;        //启动定时器1
}

void Delay1000ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    i = 8;
    j = 1;
    k = 243;
    do
    {
        do
        {
            while (–k);
        } while (–j);
    } while (–i);
}

void sendByte(char data_msg)
{
    SBUF = data_msg;
    while(!TI);
    TI = 0;
}

void sendString(char* str)
{
    while(*str != '\0')
    {
        sendByte(*str);
        str++;
    }
}

void main()
{
    char cmd;
    D5 = 1;
    //char data_msg = 'Q';
    //配置c51的串口通信方式
    
    UartInit();//串口初始化
    while(1)
    {
              Delay1000ms();
             //往数据缓冲区写入数据,就完成数据的发送
             //SBUF = data_msg;
             sendString("tayming\r\n");
        
            if(RI == 1)
            {
                RI  = 0;
                cmd = SBUF;
                    if(cmd == 'o'){
                                D5 = 0;//点亮
                    }
                    if(cmd == 'c'){
                                D5 = 1;//熄灭
                    }
            }
    }

}

 2.效果图

发送 ‘o’  小写;表示open,打开LED灯,蓝灯亮 

发送 ‘c’ 小写;表示close,关闭LED灯,蓝灯灭

 

 

 

物联沃分享整理
物联沃-IOTWORD物联网 » C51单片机串口控制LED灯亮灭的实现方法

发表评论