LED 线阵 远程修改 图案

Posted 流星蝴蝶没有剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LED 线阵 远程修改 图案相关的知识,希望对你有一定的参考价值。

更新中…

线阵 通过客户端,远程修改图形

  1. STC 15w4
  2. ESP8266

流程

  1. 网页发送图形数据
  2. ESP8266 通过emq协议接收
  3. ESP8266 通过UART 串口通信将数据转发到stc15单片机
  4. 单片机通过串口中断接收,将图形数据更新
  5. 最终显示更新后的图形

STC15 嵌入 WiFi 模块引脚图

在这里插入图片描述

WiFi模块对应通信

在这里插入图片描述

官方文档内给出对应的串口

在这里插入图片描述

这里可以看出,esp8266 连接的这个串口2需要用到引脚 P1 ,所以之前的LED就不能再接到P1上了,这里直接将P1上所有的led接到P0上。以防影响到串口通信。

通过U转串模块,将单片机串口与PC串口连接,进行模拟通信

在这里插入图片描述

模拟结果
在这里插入图片描述

源码:

代码中注释

  1. esp8266 源码
待更新。。。
  1. stc15 单片机 源码
 
#include "stc15f2k60s2.h"	
				
#define u8 unsigned char				
#define u16 unsigned int
#define u32 unsigned long	
	  
#define FOSC 11059200L			  //MUC主频为11.0592下
#define BAUD 9600				  //串口2产生的波特率为9600
#define TM  (65536-(FOSC/4/BAUD)) //计算初值

#define S2RI  0X01				  //接收标志位
#define S2TI  0X02				  //发送标志位

#define f(i,a,b) for((i)=(a);(i)<(b);(i)++)

u8 isUart = 0;


u16 leni=0,lenj=0; 
char GledStr[16][100];


/**
延时函数
**/

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

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


/**
   将接中断收到的字符串,整合
**/

void ISP_Check(u8 tmp) //串口2发送数据调用函数
{			
	EA = 0;	

	S2BUF=tmp;
	if(S2BUF == '{'){	  // 开始
		leni=lenj=0;
	} else if(S2BUF == '}'){	// 结束
	} else if(S2BUF == '\\n'){  // 分隔符,数组换行
		leni++;			 
		lenj = 0;	   
	} else{// 数据部分
		GledStr[leni][lenj++] = S2BUF;
	}		
				
	while(S2CON&S2TI==0);				// 等特数据传送	(S2TI发送中断标志)
	S2CON&=~S2TI;						//清标志?
	EA = 1;
}

/**
  串口中断,接收ESP8266传输的图像数据
  传输格式:{010101001\\n100011001\\n100010001}	 每行字符串使用空格分割
**/		   
void Uart2()  interrupt 8 using 1		//串口2中断
{									   
	u8 tmp;
	isUart = 1;			   // 传输开始
	if(S2CON&S2RI)						//如果收到数据 S2RI置位
	{
		tmp=S2BUF;
		ISP_Check(tmp); 
		S2CON&=~S2RI;						//清标志位  
	}
	isUart = 0;	// 传输结束
}

main()
{
	u16 i,j;
    u16 msg; 
	S2CON = 0x50;       //REN=1允许串行接受状态,串口工作模式2     	   
	  
	T2L=TM;			  //配置串口2波特率	 初始值
	T2H=TM>>8;                    
	
	AUXR=0X14;		  //开启定时器T2  并且开启1T模式
	IE2=0X01;           //串口2中断使能      
	EA   = 1;           // 开总中断 

	IO_init();
	isUart = 1;	// 开启传输
	while(1)		 
	{	
		while(isUart){	 // 等待传输
			greenLed(0xffff);
			redLed(0xffff); 
		}
		greenLed(0x0000);
		redLed(0x0000); 
		f(i,0,lenj){    	
			// 灭灯
			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);
			}
			// 亮灯
			redLed(msg); 
			greenLed(msg);
			delay4us(60);
		}				
		delay1ms(10);
	}
}




以上是关于LED 线阵 远程修改 图案的主要内容,如果未能解决你的问题,请参考以下文章

IAP15W4K 单片机 制作 led线阵

IAP15W4K 单片机 制作 led线阵

雷达通信基于matlab粒子群算法优化综合线阵低副瓣方向图含Matlab源码 1962期

我了解的一些线阵相机知识

线阵相机的原理和线阵相机为啥做黑白平衡

在设定的时间后,使可寻址的 LED 灯条从一种模式转移到下一种模式