嵌入式学习--江协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)		//[email protected]
{
	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)		//[email protected]
{
	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;
			}
		}
	}



}

累是必然的。

相关推荐
Ronin-Lotus13 分钟前
嵌入式硬件篇---IIC
单片机·嵌入式硬件·iic·stm32f103rct6
Ronin-Lotus13 分钟前
嵌入式硬件篇---无线通信模块
嵌入式硬件·wifi·lora·无线通信·蓝牙·2.4g射频
threelab18 分钟前
02.three官方示例+编辑器+AI快速学习webgl_animation_skinning_blending
人工智能·学习·编辑器
茯苓gao2 小时前
stm32 I2C通信协议(一)(基本知识和软件实现)
stm32·单片机·嵌入式硬件
Ronin-Lotus2 小时前
嵌入式硬件篇---超声波|PID
单片机·嵌入式硬件·c·pid·stm32f103rct6
海尔辛3 小时前
学习黑客抓包wireshark
学习·测试工具·wireshark
Mabnus6 小时前
每周靶点分享:Angptl3、IgE、ADAM9及文献分享:抗体的多样性和特异性以及结构的新见解
学习
A_aspectJ9 小时前
【Bootstrap V4系列】学习入门教程之 组件-输入组(Input group)
前端·css·学习·bootstrap·html
Xudde.9 小时前
加速pip下载:永久解决网络慢问题
网络·python·学习·pip
YKPG10 小时前
C++学习-入门到精通-【6】指针
开发语言·c++·学习