当前位置: 首页 > news >正文

嵌入式学习--江协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;		//启动定时器1EA=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;}}}}

累是必然的。

相关文章:

  • 【Linux系统】从零开始构建简易 Shell:从输入处理到命令执行的深度剖析
  • C 语言数据结构基石:一维数组的定义、访问与使用详解
  • 【基于 LangChain 的异步天气查询1】异步调用 Open-Meteo API 查询该城市当前气温
  • 如何借助AI模拟复杂业务流程数据?
  • FreeTex v0.2.0:功能升级/支持Mac
  • 数字签名与证书
  • Java并发编程,从线程安全到死锁避免的实战解析
  • Ubuntu 安装 HAProxy
  • 基于ESP32控制的机器人摄像头车
  • spark-Join Key 的基数/rand函数
  • 海纳思(Hi3798MV300)机顶盒遇到海思摄像头
  • RT-Thread 深入系列 Part 5:物联网与网络应用实战
  • 51c视觉~合集37
  • 使用FastAPI微服务在AWS EKS上实现AI会话历史的管理
  • 计算机网络 4-2-2 网络层(IPv4)
  • 解锁 DevOps 新境界 :使用 Flux 进行 GitOps 现场演示 – 自动化您的 Kubernetes 部署
  • 【RT-Thread Studio】nor flash配置Fal分区
  • Windows:Powershell的使用
  • 程序代码篇---esp32视频流处理
  • Taro 编译不平不同平台小程序
  • 巴基斯坦首都及邻近城市听到巨大爆炸声
  • 墨西哥宣布就“墨西哥湾”更名一事起诉谷歌
  • 东莞“超级”音乐节五一出圈背后:文旅热力何以澎湃经济脉动
  • 中俄领导人将讨论从俄罗斯经蒙古至中国天然气管道项目?外交部回应
  • 外交部回应中美经贸高层会谈:这次会谈是应美方请求举行的
  • 金融监管总局将出八大增量政策,李云泽详解稳楼市稳股市“组合拳”