IAP15W4K 单片机 制作 led线阵

19 篇文章 1 订阅
5 篇文章 0 订阅

线阵是啥?你是否有很多问号?

点阵是啥?
在这里插入图片描述
这就是点阵。

那么线阵到底是啥?
在这里插入图片描述
一条线的点阵就可以变成线阵,那么线阵到底是啥?
那就是让他转起来。。。

开始制作

  1. 先准备一些硬件设备:16个led(单色双色都可以)、杜邦线若干(一公一母、两公、两母)、三节1.5V干电池、一个大电池(带电机的)、面包板大点、锯条、电钻、小钻笔、电焊笔、一个电机(5500rpm左右的都可以)、电机驱动、电机纽扣、螺丝螺母若干、亚克力板若干、热熔胶、关键的是单片机(IAP 15W4K61S4),单片机是用得STC15系列的一种。
下面是一些图片:

电机+纽扣
在这里插入图片描述
电机驱动
在这里插入图片描述
大电池
在这里插入图片描述

在这里插入图片描述
电钻,用来打洞
在这里插入图片描述
在这里插入图片描述
还需要享受每次的消费
在这里插入图片描述

工具

下面是自己写的一个接口:

图片或者字符转二进制

在这里插入图片描述
在这里插入图片描述

源码:

首先导入STC15系列的头文件

#include "stc15f2k60s2.h"

宏定义几个常用的

#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
#define f(i,a,b) for((i)=(a);(i)<(b);(i)++)

写两个常用的延时函数

//4微秒 延时
void delay4us(u16 us)
{
	u16 i;
	u8 m;
	for(i=0;i<us;i++)
		for(m=0;m<5;m++);
} 
//1毫秒 延时
//ms 1ms的倍数
void delay1ms(u16 ms)
{
	u16 m;
	for(m=0;m<ms;m++)
		delay4us(250);
} 

真对 IAP15W4K61S4 STC15W4K56S4 系列 IO口初始化
io口初始化 P0 P1 P2 P3 P4 为准双向IO口
注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
P2.3/P2.7/P3.7/P4.2/P4.4/P4.5


void IO_init(void)
{
	P0M0 = 0x00; P0M1 = 0x00;
	P1M0 = 0x00; P1M1 = 0x00;
	P2M0 = 0x00; P2M1 = 0x00;
	P3M0 = 0x00; P3M1 = 0x00;
	P4M0 = 0x00; P4M1 = 0x00;  
}

我这里用的是双色的,确定一下引脚的控制
左:绿
上:P47-P40 下:P37-P30

右:红
上:P17-P10 下:P27-P20

#define sgreen P4
#define xgreen P3
#define sred  P1
#define xred P2

写两个函数分别控制红绿灯的亮灭
原理是通过高低8位来控制


void greenLed(u16 index){
	sgreen = index>>8;
	xgreen = index;
}
void redLed(u16 index){
	sred = index>>8;
	xred = index;
}

接下来就是主函数了

main()
{				 
	u16 len = 40; // 定义显示的长度
	char GledStr[16][40] = { // 这个数组可以通过上面说到的那个我自己写的 转 二进制一个网址来生成,这里显示的是“牛B”
		 {"0000000110000000000000000"},
		 {"0000110110000000000000000"},
		 {"0000110110000000111111000"},
		 {"0001111111111000111111100"},
		
		 {"0001111111111000110001100"},
		 {"0001100110000000110001100"},
		 {"0011000110000000110011100"},
		 {"0001000110000000111111000"},
		
		 {"0011111111111110110011100"},
		 {"0011111111111110110000110"},
		 {"0000000110000000110000110"},
		 {"0000000110000000110011110"},
		
		 {"0000000110000000111111100"},
		 {"0000000110000000000000000"},
		 {"0000000110000000000000000"},
		 {"0000000110000000000000000"},
	};
	u16 i,j;
    u16 msg;

	IO_init(); // IO初始化
	while(1)
	{	
	
			greenLed(0x0000); // 红绿灭,需要产生电平的减压,不然会影响视觉效果
			redLed(0x0000); 
		 f(i,0,len){    	// 将需要显示的16进制二维数组,一列一列的显示出来
			// 灭灯
			delay4us(360);
			greenLed(0x0000);
			redLed(0x0000); 
			msg = 0x0000;
		   	// 初始化 16 进制
			f(j,1,16+1){ // ledStr 列转16进制, 其实这里就是关键代码,看着就这几行,他确实很简单
				if(GledStr[j][i]=='1') msg |= 1<<(16-j); // 将数组二进制存到 msg,用16进制理解
			}
			// 亮灯
			redLed(msg); 
			greenLed(msg);
			delay4us(60);
		}				
		 delay1ms(10);
	}
}

编译之后生成十六进制、就可以考代码了
在这里插入图片描述

其实肉眼看着效果要好一点,可能是该换手机了。

在这里插入图片描述

这个项目需要注意的地方:

  1. 结构的设计,一定要保持平衡,后果就是手上好多小洞(虽然在去医务室的路上已经愈合了/xk)
    在这里插入图片描述 在这里插入图片描述

  2. 选择共阴还是共阳

  3. 单片机的选择、电机转速的选择、卡扣的大小要对应

  4. 还有就是电机驱动和电机连接要看教程,不要瞎连

  5. 电机驱动和电池连接时,正负极一定不要接反,爆炸一点也不好玩(实验室的钱不是大风吹来的)

  6. 单片机在焊接是不要短路,这是基础

  7. 学会看教程,看教程是最关键的,尤其是学习新的单片机

  8. keil的使用,stc与keil库的绑定

  9. 理解线阵显示的原理,其实在转起来,他是没转一次都会直接显示完毕,关键是延时时间要调好。

资料分享

还有很多相关STC15系列单片机的资料和教程,可以关注下面公众号

在这里插入图片描述
后台回复:【线阵资料】、即可下载、当然CSDN也上传了:线阵资料

当然有需要可以直接私信Q:2659098658,或者 下方 / 站点 / 公众号 留言。都可以!

转载请注明出处

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流星蝴蝶没有剑

篮球弹弹弹

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

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

打赏作者

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

抵扣说明:

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

余额充值