用Arduino操控STM32控制通常在51上才用的六脚8*8LED矩阵

用Arduino操控STM32控制通常在51上才用的六脚8*8LED矩阵

如何用Arduino控制STM32

这个我不想说,能来搜这个的通常都已经把BootLoader烧进去了,并且点了灯。但如果留言有5条以上我就说。 但我说一句我用的是STM32F103c8t6最小系统板。

如何用STM32控制六脚8*8LED矩阵

在操作之前可以先看看Arduino如何操作74HC595N和操作88LED矩阵的视频,虽然有88LED但网上我没见有那个用这个集成6脚的,而且那么闲还上STM32不上Arduino开发板。

如何操控六脚8*8LED矩阵

这个LED矩阵,里面有两个74HC595N模块。通过链接主要的3针脚发送数据。我这里使用的是清翔,的1088BS。通过他的原理图知道它主要的几个引脚,DI,LE,CLK是操控74HC595N的引脚。我在从清翔在B站的视频里了解了,51单片机是如何控制这个8*8的点阵的。这里附上主要的代码,方便对比。

sbit DIO  = P3^4; //串行数据口
sbit S_CLK = P3^5;//移位寄存器时钟
sbit R_CLK = P3^6;//输出锁存器时钟
void main()
{
	//ROW 0x80 , COL 0xfe
	unsigned char i, dat;//i循环次数  dat需要发送的数据
	dat = 0xfe;//发送列值
	for(i=0; i<8; i++)//循环8次
	{
		S_CLK = 0;//拉低移位寄存器时钟
		R_CLK = 0;//拉低输出锁存器时钟
		if(dat & 0x01)//发送1
			DIO = 1;
		else		  //发送0
			DIO = 0;
		S_CLK = 1;//拉高移位寄存器时钟,数据移位
		dat >>= 1;//数据右移
	}
	dat = 0x80;//发送行值
	for(i=0; i<8; i++)//循环8次
	{
		S_CLK = 0;//拉低移位寄存器时钟
		R_CLK = 0;//拉低输出锁存器时钟
		if(dat & 0x01)//发送1
			DIO = 1;
		else		  //发送0
			DIO = 0;
		S_CLK = 1;//拉高移位寄存器时钟,数据移位
		dat >>= 1;//数据右移
	}
	R_CLK = 1;//拉高输出锁存器时钟,并行输出数据
	while(1);
}

这里需要注意一下在51单片机里的视频中也说了,这个LED点阵的特点,我总结了一下

  1. 发送列值,哪列电位高哪列不亮,最高位在左边
  2. 发送行值,哪行电位低哪行不亮,最高位在下面

接线

我的接线是乱接的我没有系统的学习过单片机,只是我的同学在假期的时候乱弄,将STM32跑了起来。我这里接的是PA7(DI),PA5(LE),PA6(CLK)。GND和NC我都是接的GND,VCC接3.3V,也可以不接不过会暗一些。

代码

通过51的代码,在通过我之前的Arduino学习的LED模块和74HC595N,这里提一下B站的https://www.bilibili.com/video/BV1YW411Z76E?from=search&seid=14304970661507979329虽然讲的非常简单但是十分有用。

#define DIO PA7    	//DI
#define S_CLK PA6  	//CLK
#define R_CLK PA5   //LE

void setup() {
  // put your setup code here, to run once:
  pinMode(DIO, OUTPUT);
  pinMode(S_CLK, OUTPUT);
  pinMode(R_CLK, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  //ROW 0x80 , COL 0xfe
  unsigned char i, dat;//i循环次数  dat需要发送的数据
  dat = 0xfe;//发送列值
  for(i=0; i<8; i++)//循环8次
  {
    //S_CLK = 0;//拉低移位寄存器时钟
    //R_CLK = 0;//拉低输出锁存器时钟
    digitalWrite(S_CLK, LOW);
    digitalWrite(R_CLK, LOW);
    
    if(dat & 0x01)//发送1
    {  //DIO = 1;
      digitalWrite(DIO, HIGH);
    }
    else      //发送0
    {  //DIO = 0;
      digitalWrite(DIO, LOW);
    }
    //S_CLK = 1;//拉高移位寄存器时钟,数据移位
    digitalWrite(S_CLK, HIGH);
    dat >>= 1;//数据右移
  }
  dat = 0x80;//发送行值
  for(i=0; i<8; i++)//循环8次
  {
    //S_CLK = 0;//拉低移位寄存器时钟
    //R_CLK = 0;//拉低输出锁存器时钟
    digitalWrite(S_CLK, LOW);
    digitalWrite(R_CLK, LOW);
    
    if(dat & 0x01)//发送1
    {   //DIO = 1;
      digitalWrite(DIO, HIGH);
    }  
    else      //发送0
    {   //DIO = 0;
      digitalWrite(DIO, LOW);
    }
    //S_CLK = 1;//拉高移位寄存器时钟,数据移位
    digitalWrite(S_CLK, HIGH);
    dat >>= 1;//数据右移
  }
  //R_CLK = 1;//拉高输出锁存器时钟,并行输出数据
  digitalWrite(R_CLK, HIGH);  
}

这样灯就亮了。
作者是真的闲
有疑问下方留言。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值