【51单片机任务】: 51单片机 按键4 控制单片机串口发送字符串到串口助手,初始化的时候led熄灭,按键4按下后单片机通过串口向上位机,发送“hello Word“字符串,同时led闪烁(任务)

学习目标:

    51单片机 按键4 控制单片机串口发送字符串到串口助手,初始化的时候led熄灭,按键4按下后单片机通过串口向上位机
    发送"hello Word"字符串,同时led闪烁,并在串口助手中显示字符串
    
    以此类推,循环显示效果

串口通信等文章都在之前的博客:

【51单片机】:串口通信基础知识详解_嵌入式up的博客-CSDN博客

【51单片机】:按键控制跑马灯和流水灯来回立即切换_51单片机按键切换功能的程序_嵌入式up的博客-CSDN博客

【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)_嵌入式up的博客-CSDN博客

.......等等  需要的同学自行翻看


学习内容:

  1.         串口通信
  2.         外部中断1
  3.         按键初始化
  4.         led初始化

学习代码:按键扫描的方式实现

#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit LED = P2^0;
sbit KEY4 = P3^3;

void delay(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}

void init()
{
    TMOD = 0x20;
	SCON = 0x50;
    TH1 = 0xfd;
    TL1 = 0xfd;
    TR1 = 1;
//    SM0 = 0;
//    SM1 = 1;
//    REN = 1;
    EA = 1;
    ES = 1;
    LED = 1;
}

void send_string(uchar *s)
{
    while(*s)
    {
        SBUF = *s++;
        while(!TI);
        TI = 0;
    }
}
unsigned char flag = 0;
void main()
{
    init();
	EA = 1; //开总中断
    EX1 = 1; //开外部中断1
    while(1)
    {
        if(KEY4 == 0)
        {
            delay(10);
            if(KEY4 == 0)
            {
				flag+=1;
            }
            while(!KEY4);
        }
		while(flag == 1)
		{
			LED = 0;
			send_string("hello World\n");
			delay(100);
			LED = 1;
			delay(100);
			if(KEY4 == 0)
			{
				delay(10);
				if(KEY4 == 0)
				{
					flag+=1;
					break;
				}
				while(!KEY4);
			}
		}
		if(flag == 2)
		{
			LED = 1;
		}
		if(flag == 3)
			flag = 0;
    }
}

void ser() interrupt 4
{
    uchar c;
    if(RI)
    {
        RI = 0;
        c = SBUF;
        SBUF = c;
        while(!TI);
        TI = 0;
    }
}

学习代码:

#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit LED = P2^0;
sbit KEY4 = P3^3;

void delay(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}

void init()
{
    TMOD = 0x20;
	SCON = 0x50;
    TH1 = 0xfd;
    TL1 = 0xfd;
    TR1 = 1;
//    SM0 = 0;
//    SM1 = 1;
//    REN = 1;
    EA = 1;
    ES = 1;
    LED = 1;
}

void send_string(uchar *s)
{
    while(*s)
    {
        SBUF = *s++;
        while(!TI);
        TI = 0;
    }
}
unsigned char flag = 0;
void main()
{
    init();
	EA = 1; //开总中断
    EX1 = 1; //开外部中断1
    while(1)
    {
//        if(KEY4 == 0)
//        {
//            delay(10);
//            if(KEY4 == 0)
//            {
//				flag+=1;
//            }
//            while(!KEY4);
//        }
		while(flag == 1)
		{
			LED = 0;
			send_string("hello World\n");
			delay(100);
			LED = 1;
			delay(100);
//			if(KEY4 == 0)
//			{
//				delay(10);
//				if(KEY4 == 0)
//				{
//					flag+=1;
//					break;
//				}
//				while(!KEY4);
//			}
		}
		if(flag == 2)
		{
			LED = 1;
		}
		if(flag == 3)
			flag = 0;
    }
}

void ser() interrupt 4
{
    uchar c;
    if(RI)
    {
        RI = 0;
        c = SBUF;
        SBUF = c;
        while(!TI);
        TI = 0;
    }
}

void int1() interrupt 2
{
	EX1 = 0;
	flag ++;
	if(2 == flag)
		flag =0;
	EX1 =1;
}

成品效果

工程链接:https://download.csdn.net/download/oxygen23333/87784632

猜你喜欢

转载自blog.csdn.net/oxygen23333/article/details/130677659