学习目标:
51单片机 按键4 控制单片机串口发送字符串到串口助手,初始化的时候led熄灭,按键4按下后单片机通过串口向上位机
发送"hello Word"字符串,同时led闪烁,并在串口助手中显示字符串
以此类推,循环显示效果串口通信等文章都在之前的博客:
【51单片机】:串口通信基础知识详解_嵌入式up的博客-CSDN博客
【51单片机】:按键控制跑马灯和流水灯来回立即切换_51单片机按键切换功能的程序_嵌入式up的博客-CSDN博客
【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)_嵌入式up的博客-CSDN博客
.......等等 需要的同学自行翻看
学习内容:
- 串口通信
- 外部中断1
- 按键初始化
- 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