嵌入式学习--江协51单片机day4

昨天周五没有学习,因为中午没有睡觉,下午和晚上挤不出整块的时间。周日有考试今天也没有学很多啊,但以后周末会是学一天,另一天休息和写周总结。

今天学了串口通信和LED点阵屏,硬件原理是真的很迷,一但想搞的明白就学的很慢,还怪焦虑的,但是感觉知道那么回事就行,主要还是记住要如何设置就行吧

串口通信

串口初始化的代码可以去软件里面生成,但是注意中间的一些设置,按照视频的设置实现不了,看弹幕还是挺有用的。

串口为UART,四种模式,我们通常使用模式一(SCON控制)

这图是串口的工作原理,一般带t的代表发送为transmit,带r的代表接受为receive

SBUF是串口数据缓存寄存器

数据显示在软件中有两种显示模式:HEX/文本。HEX是原始数据就是二进制,十六进制之类的,文本是asc编码

串口向电脑发送数据

复制代码
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
unsigned char Sec;
void UART_Init(void)		//4800bps@11.0592MHz
{
	PCON &= 0x8F;		//波特率不倍速
	SCON = 0x40;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFA;		//设定定时初值
	TH1 = 0xFA;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}
/**
  * @brief  串口发送一个字节数据
  * @param  Byte要发送的字节数据
  * @retval 
  */
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI=0);
	TI=0;
}
void main()
{
	UART_Init();
	while(1)
	{
				UART_SendByte(Sec);
				Sec++;
				Delay(1000);
	}



}

电脑通过串口控制LED

因为用到了中断系统,所以在初始化要额外设置

复制代码
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
#include <REGX52.H>
/**
  * @brief  串口初始化
  * @param  
  * @retval 
  */
void UART_Init(void)		//4800bps@11.0592MHz
{
	PCON &= 0x8F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFA;		//设定定时初值
	TH1 = 0xFA;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA=1;
	ES=1;
}
/**
  * @brief  串口发送一个字节数据
  * @param  Byte要发送的字节数据
  * @retval 
  */
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI=0);
	TI=0;//TI,RI需要软件置零
}
/*串口中断函数模板
void UART_Routine()  interrupt 4
{
	if(RI==1)
	{
		RI=0;
	}
}
*/

unsigned char Sec;
void main()
{
	UART_Init();
	while(1)
	{
				UART_SendByte(Sec);
				Sec++;
				Delay(1000);
	}

}
void UART_Routine()  interrupt 4
{
	if(RI==1)
	{
		P2=SBUF;
		UART_SendByte(SBUF);
		RI=0;
	}
}

LED点阵屏

这是LED点阵屏的工作原理,D端需要通过74H595写入

SER是要写入的数据 SRLCK 置一下沉一位 RCLK 当写满8位输出D端

(SER=Byte&(0x80>>i)用来将Byte的每一位取出)

LED点阵屏显示图形

复制代码
#include <REGX52.H>
#include "Delay.h"
sbit RCK=P3^5;//RCLK
sbit SCK=P3^6;//SRCLK
sbit SER=P3^4;

#define MATRIX_LED_PORT   P0

/**
  * @brief  74HC595写入一个字节
  * @param  
  * @retval 
  */
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SER=Byte&(0x80>>i);
		SCK=1;
		SCK=0;
	}	
	RCK=1;
	RCK=0;
}
/**
  * @brief  LED点阵屏显示一列数据
  * @param  Column 0-7 0在最左边
  * @param  Data   00-FF
  * @retval 
  */
void MatrixLED_ShowColumn(unsigned char Column,Data)
{
	_74HC595_WriteByte(Data);
	MATRIX_LED_PORT=~(0x80>>Column);
	Delay(1);
	MATRIX_LED_PORT=0xFF;
}

void main()
{
	SCK=0;
	RCK=0;
	while(1)
	{
			MatrixLED_ShowColumn(0,0x00);
			MatrixLED_ShowColumn(1,0x00);
			MatrixLED_ShowColumn(2,0x01);
			MatrixLED_ShowColumn(3,0x02);
			MatrixLED_ShowColumn(4,0x1C);
			MatrixLED_ShowColumn(5,0x3E);
			MatrixLED_ShowColumn(6,0x7B);
			MatrixLED_ShowColumn(7,0x58);


	}



}

LED点阵屏显示动画

这个就是帧流动,用循环实现,点阵图有软件可以生成,再就是注意边界了

复制代码
#include <REGX52.H>
#include "Delay.h"
#include "MatrixLED.h"
unsigned char code Animation[]={
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
	0x10,0x1F,0x11,0x03,0x14,0x18,0x10,0x00,0x04,0xFC,0x04,0x80,0x64,0x1C,0x04,0x00,
	0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,
	0x10,0x1F,0x0C,0x03,0x00,0x10,0x1F,0x10,0x04,0xFC,0x04,0x00,0xE0,0x18,0xFC,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void main()
{	
	unsigned char i=0,Offset=0,Count=0;
	MatrixLED_Init();
	while(1)
	{
		for(i=0;i<8;i++)
		{
				MatrixLED_ShowColumn(i,Animation[i+Offset]);
		}
		Count++;
		if(Count>10)
		{
			Count=0;
			Offset++;
			if(Offset>40)
			{
				Offset=0;
			}
		}
	}



}

累是必然的。

相关推荐
麻辣长颈鹿Sir18 分钟前
单片机进入 B. 中断无限循环异常解决方法
单片机·嵌入式硬件·b.中断·异常中断处理·程序无限循环异常处理·芯海spi异常中断·芯海芯片
red watchma26 分钟前
Xshell->MCU Ymodem协议实现
网络·单片机·嵌入式硬件
知南x33 分钟前
【QT界面设计学习篇】qt Kits工具设置/qt多版本设置(ubuntu)
qt·学习·ubuntu
XINVRY-FPGA41 分钟前
XC7A100T-2FGG484I Xilinx Artix-7 FPGA
arm开发·嵌入式硬件·fpga开发·硬件工程·信息与通信·信号处理·fpga
lingzhilab1 小时前
零知IDE——基于STM32F407VET6和ESP-01的SHT2X温湿度监测与云传输系统
stm32·单片机·嵌入式硬件
Yurko131 小时前
【C语言】基本语法结构(上篇)
c语言·开发语言·学习
武文斌771 小时前
复习总结最终版:计算机网络
linux·开发语言·学习·计算机网络
国科安芯1 小时前
高辐射环境下AS32S601ZIT2型MCU的抗辐照性能与应用潜力分析
网络·人工智能·单片机·嵌入式硬件·fpga开发
朝九晚五ฺ2 小时前
【Redis学习】持久化机制(RDB/AOF)
数据库·redis·学习
你真的可爱呀3 小时前
uniapp学习【路由跳转 +数据请求+本地存储+常用组件】
前端·学习·uni-app