基于STM32F103ZET6单片机驱动SM16306SJ控制8个LED灯的系统设计

该博客介绍了使用stm32f103zet6精英开发板,采用SM16306SJ驱动8个LED灯的设计。包含原理图、代码和实物效果图,还提到硬件有一个LED灯损坏,SM16306SJ最多可驱动16个LED灯,且与MBI5020程序通用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.设计要求:使用stm32f103zet6精英开发板  采用SM16306SJ驱动8个LED灯。

2.原理图

3.代码

.H文件

#ifndef __MBI5020_H
#define __MBI5020_H	 
#include "sys.h"

#define OE_H     GPIO_SetBits(GPIOD, GPIO_Pin_2)  
#define OE_L     GPIO_ResetBits(GPIOD,GPIO_Pin_2) 

#define LE_H     GPIO_SetBits(GPIOB, GPIO_Pin_5)  
#define LE_L     GPIO_ResetBits(GPIOB,GPIO_Pin_5) 

#define CLK_H    GPIO_SetBits(GPIOB, GPIO_Pin_4)  
#define CLK_L    GPIO_ResetBits(GPIOB,GPIO_Pin_4)

#define SDI_H    GPIO_SetBits(GPIOB, GPIO_Pin_3) 
#define SDI_L    GPIO_ResetBits(GPIOB,GPIO_Pin_3) 

void MBI5020_Init(void);//初始化
void MBI5020_Driver(uint16_t data);
		 				    
#endif

.C文件

#include "MBI5020.h"  
void MBI5020_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD,ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);    //
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE );

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 //CLK 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB.4
 GPIO_ResetBits(GPIOB,GPIO_Pin_4);				

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;	    		 //SDI 端口配置, 推挽输出
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_ResetBits(GPIOB,GPIO_Pin_3);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	    		 //LE
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_ResetBits(GPIOB,GPIO_Pin_5);
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	    		 //OE
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOD, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz	
 GPIO_SetBits(GPIOD,GPIO_Pin_2);
}

void MBI5020_Driver(uint16_t data)
	
{
	uint8_t  j;	
	
	//第一组
	 SDI_L;//第一路数据
	
   CLK_L;//时钟
	 LE_L;
	 OE_H;//使能
		
			for (j = 0; j < 16; j++) 
			{
					//先准备好数据
								
				if (data &0x8000) 
				{
					SDI_H;			//数据1
				} 
				else 
				{
					SDI_L;			//数据0
				}
				CLK_H;
		  	data  = (data << 1);//数据左移一位				
		  	CLK_L;
			}
		
		LE_H;//开始移位
		LE_L;//拉低移位	
		OE_L;//使能输出
}

main函数
int main(void)
{
    MBI5020_Init();
    whlie(1)
    {
       MBI5020_Driver(0x00FF);  
    }
}

4.实物效果图

备注:1 硬件上有一个LED灯坏了,所以才亮了7个LED灯

           2 一个SM16306SJ最多可以驱动16个LED灯

           3 SM16306SJ跟MBI5020程序通用

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾_哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值