单片机学习笔记 16. 串口通信

更多单片机学习笔记:
单片机学习笔记 1. 点亮一个LED灯
单片机学习笔记 2. LED灯闪烁
单片机学习笔记 3. LED灯流水灯
单片机学习笔记 4. 蜂鸣器滴~滴~滴~
单片机学习笔记 5. 数码管静态显示
单片机学习笔记 6. 数码管动态显示
单片机学习笔记 7. 独立键盘
单片机学习笔记 8. 矩阵键盘按键检测
单片机学习笔记 9. 8×8LED点阵屏
单片机学习笔记 10. 中断系统(理论)
单片机学习笔记 11. 外部中断
单片机学习笔记 12. 定时/计数器_定时
单片机学习笔记 13. 定时/计数器_计数
单片机学习笔记 14. 定时/计数器_中断
单片机学习笔记 15. 串口通信(理论)


0、实现的功能

实现串口通信的收发,接收后进行数码管显示,并发送+1的数据到上位机

1、代码实现

cpp 复制代码
#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选
uchar num;//数码管显示的值

//共阴数码管段选表0-9
uchar code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//数码管位选码
uchar code SMGwei[] = {0xfe, 0xfd, 0xfb};

void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
} 

void display(uchar i)
{
	static uchar wei;//静态变量wei 在下次进入该子函数中wei仍然保持上一次的值 		
	P0 = 0XFF;//清除断码
	WE = 1;//打开位选锁存器
	P0 = SMGwei[wei];
	WE = 0;//锁存位选数据
	switch(wei)
	{
		case 0: DU = 1; P0 = SMGduan[i / 100]; DU = 0; break;
		case 1: DU = 1; P0 = SMGduan[i % 100 / 10]; DU = 0; break;	
		case 2: DU = 1; P0 = SMGduan[i % 10]; DU = 0; break;		
	}
	wei++;
	if(wei == 3)
		wei = 0;
}

//定时器0初始化
void timer0Init()
{
	EA = 1;	//打开总中断
	ET0 = 1;//打开定时器0中断
	TR0 = 1;	 //启动定时器0
	TMOD |= 0X01; //定时器工作模式1,16位定时模式
	TH0 = 0xED;
	TL0 = 0xFF; //定时5ms
}

//串口初始化
void UARTInit()
{
	EA = 1;//打开总中断
	ES = 1;//打开串口中断
	SM0 = 0;	SM1 = 1;//串口工作为方式1 8位UART波特率可变
	REN = 1;//串口允许接收

	TR1 = 1;//启动定时器1,产生波特率
	TMOD |= 0x20;//定时器1工作在方式2 8位自动重装 溢出时TH1自动装入TL1
	TH1 = 0xFD;
	TL1 = 0xFD;//波特率为9600时得出的值 TH1和TL1要相同		
}

void main()//main函数自身会循环
{	
	timer0Init();//定时器0初始化
	UARTInit();//串口通信初始化
	while(1);	
} 

//定时器0中断函数
void timer0() interrupt 1
{
	TH0 = 0xED;
	TL0 = 0xFF; //再定时5ms
	display(num); //数码管显示函数	
}

//串口中断函数
void UART() interrupt 4
{
	uchar temp;
	if(RI == 1)
	{
		num = SBUF;//读SBUF。把接收到的SBUF值赋给num,让数码管动态扫描去显示
		RI = 0;//软件清零接收标志位
		temp = num;
		SBUF = ++temp;//写SBUF。temp++是先赋值再+1 SBUF此时为1;++temp是先+1再赋值 SBUF此时为2
	}
	if(TI == 1)//判断是否发送完成
		TI = 0;	//清零发送完成标志位
} 

实物展示:

相关推荐
一定要AK3 小时前
Spring 入门核心笔记
java·笔记·spring
AI成长日志3 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
UTP协同自动化测试4 小时前
物联网模组测试难点 |APP指令下发+UART 响应+GPIO 电平变化,如何一次性验证?
功能测试·嵌入式硬件·物联网·模块测试
_李小白4 小时前
【OSG学习笔记】Day 38: TextureVisitor(纹理访问器)
android·笔记·学习
杨云龙UP5 小时前
从0到1快速学会Linux操作系统(基础),这一篇就够了!
linux·运维·服务器·学习·ubuntu·centos·ssh
头疼的程序员5 小时前
计算机网络:自顶向下方法(第七版)第八章 学习分享(三)
网络·学习·计算机网络
yoyobravery6 小时前
蓝桥杯第15届单片机满分
单片机·职场和发展·蓝桥杯
_李小白6 小时前
【OSG学习笔记】Day 37: NodeVisitor(顶点访问器)
笔记·学习
程序员雷欧6 小时前
大模型应用开发学习第八天
大数据·人工智能·学习
SccTsAxR7 小时前
算法基石:手撕离散化、递归与分治
c++·经验分享·笔记·算法