硬禾学堂雪花灯实验报告: 苏州圣诞来点雪~
本报告为雪花灯实验报告,旨在学习嵌入式系统编程的基本开发流程,并且对于嵌入式系统模块和功能有进一步的认识[2]。今天正好是2020圣诞节,这个可爱的雪花灯实验报告,就圣诞礼物送给大家啦~
标签
嵌入式系统
MPU
显示
sgdteng
更新2020-12-27
1341

硬禾学堂雪花灯实验报告: 苏州圣诞来点雪~

 

导言

 

背景

 

嵌入式系统(Embedded System),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统[1]。在以5G,物联网,边缘计算,为代表的新的计算浪潮下,掌握嵌入式系统的是成为全栈开发的必要条件,西浦国际创新港携手硬禾学堂,结合研发技术的行业需求和发展趋势,共同推出全栈技能人才培养计划。本报告为雪花灯实验报告,旨在学习嵌入式系统编程的基本开发流程,并且对于嵌入式系统模块和功能有进一步的认识[2]。今天正好是2020圣诞节,这个可爱的雪花灯实验报告,就圣诞礼物送给大家啦~

报告结构

 

本报告首先介绍嵌入式系统的基本背景,并且把介绍嵌入式系统的系统架构和实践方法,进而,实验过程和对应的实验结果会呗阐明,最终实验总结和未来展望会被阐述作为报告结尾。

名词表(这里是概念)

 

  • MCU
    - 是微处理器Microprocessor的缩写
    - ELEC211要好好学哈,我们用的是ARM Cortex M7来讲的
    - 常见的微处理器包括树莓派,Arduino
    - 雪花灯:ws2812
    - 本质上是一种灯的结构
    FusgvM3R3k3U6SzNUyM5cYN0ylBP
    - WS2812, 这LED内部已经整合了信号处理的芯片
    - 他有四个引脚,分别是
    - VDD作为电源来实现供电管脚
    - DOUT,作为data out 的缩写,作为数据输出的管脚来控制数据信号的输出
    - VSS,作为Voltage Source Source的缩写,是Vdd反过来的兄弟,所以这个是地啦
    - DIN,是data in 的缩写,作为数据输入的管脚,来控制数据信号的输入
    - 具体的线路图在左边,供参考
    - 单片机:stc15w204s
    FugefgegA6tZj-tAiXep8xF9EzEQ
    - 51单片机,STC牛的!
    - 我的理解这是一个深圳软件厂家STC做的非常硬核的,成本非常低,非常适合教学的芯片,我们就用这个了。
    - nop()和33M时钟
    - 一个nop就是一个指令周期, STC15W204S是1T单片机,所以就是一个机械周期就是一个时钟周期所以在33MHz的情况下,一个nop大概是31ns左右
    - 这样20个nop就是610ns,PPT写的是680ns,可能是为了数字好听的工程考虑吧~
    FiVySy478rs1_Q7L9C7ygFPzJTq-
    - 这里有一个PPT,我其实并不知道如何调出这个窗口?
    - 至于所谓的33MHz,我们可以通过这个下拉窗口来实现FuHWgDP-aDkJgmqkZ5WIOUY14L3Y
    - 话说这个33MHz好像和nop有点关系,但我不知道是什么。

方法论

 

嵌入式系统整体结构

 

FidO5mGQ_yJ2VbhOGckpk47LQTNU
- 我们的世界是模拟的世界,也就是连续的世界
- 这样我们从传感器把自然界的信号转换成电信号
- 之后我们通过放大,滤波,我们得到了对于我们有意义的信号
- 之后,我们通过多路转换,采样保持,做一些转换和convert
- 之后我们到了A2D的东西,这样我们生成了数字信号,输入到微信计算机的输入接口里面
- 之后计算机通过它的强大 的计算能力,产生了对应的输出信号
- 通过D2A
- 我们通过放大,驱动,我们到了机械臂,来做相对应的执行
- 改变这个连续的世界!

嵌入式系统实践:雪花灯控制系统

 

Fg091xRmFfLXP1Xge7-ZcVfhwVB0- 我们通过PC串口助手上把编好的程序以hex文件的形式
- 通过UART的传输协议
- 传送到MCU,也就是微处理器上面
- 微处理器通过程序来选择WS2812灯亮灭的方式

数据传输方式

 

Fg32aflIuHf9js0VdFAWmtxJScEb我的理解这个数据他能同时有四个口传,总共有24bit的数据传输结构,长楼上这个样子。

点亮雪花板

 

FjvEqxI-TnNApIzhnjhTRMwVrA8U

说实话,这个板子插上去就亮了,我也不知道这个数据传输时间在这里是怎么体现的。。。

编程啦

 

串口初始化

 

```c++
void UartInit(void) //9600bps@33MHz
{
SCON = 0x50;
AUXR |= 0x01;
AUXR |= 0x04;
T2L = 0xA5;
T2H = 0xFC;
AUXR |= 0x10;
ES=1;
EA=1;
}
```

初始化哈

**SCON**寄存器

 

- 好像要把这个寄存器取个值SCON=0x50;//0101 0000

串口1的四种工作方式的定义方式

 

- SM0=0 SM1=0
- SM0=0 SM1=1
- SM0=1 SM1=0
- SM0=1 SM1=1

最后一个比较重要的代码块

 

Fln6sa_5M2RYA01Yr9H9CrCKCM-x

我的理解是这个是一个实现UART接受数据的函数,总之UART用这个就对了。

实验过程

 

实验仪器布局图

 

实验过程1

 

通过stc的脚本调试工具导入hex文件

Fmsv6l3zg_zxLNsxKPgt2_eVWD7G

在这里要设置灯是ws2812,单片机是stc15w204s,时钟选择33M

导入的hex文件见附录。

实验过程2

 

/*------------------------------------------------------------------------------------
* 项目名称:
带单片机8位全彩流水灯模板程序V1.0
* 功能描述:
* 配置说明:
- MCU :STC15W204S
- CPU频率:30MHz
-------------------------------------------------------------------------------------*/

/**************************************包含头文件*************************************/
#include "STC15W.h"
#include "ws2812.h" //包含LED驱动程序
#include "delay.h" //包含延时程序
#include "uart.h"
/**************************************子函数声明*************************************/

void Flash_WS2812(unsigned char *p);//整体闪烁,传递颜色参数
void LED_Water(unsigned char *p);//由内而外流水点亮
void LED_Water_Color(unsigned char *p);//由内而外流水点亮,颜色变化
void LED_Single_Flower(void);//单圈单个灯绽放点亮
void Water_lamp(unsigned char *p);//按1-37顺序点亮
void DIY_SNOW(unsigned char *p);//由外向内,按照数组的颜色顺序显示,最多五个颜色
void Flower(void);
void Flower_In(void);//一圈圈逐步点亮
void Gradual_change(unsigned char *p);//渐变亮
void Breathing_WS2812(unsigned char level,unsigned char Color);//呼吸渐变,两个参数,第一个表示集中小颜色,第二个表示颜色

void WS2812_Close(void);
void WS2812_1_5Line(unsigned char *p,unsigned char line);//让其整圈一起点亮,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5
void WS2812_1_5Line_In(unsigned char *p,unsigned char line);//让其整圈一起点亮,内圈颜色保持不变,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5
void WS2812_1_5Line_Single(unsigned char *p,unsigned char line);//让对应圈的灯流水点亮,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5
void WS2812_LineIn_Single(unsigned char *p,unsigned char line);//对应圈数最外层流水,里面全部点亮。传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数2-5

void Change_Color(unsigned char *p);
void sovle(unsigned char m);

/***************************************全局变量**************************************/

unsigned char green[3]={50,0,0};//绿,红,蓝
unsigned char red[3]={0,50,0};//红
unsigned char blue[3]={0,0,50};//蓝
unsigned char white[3]={25,25,25};//白
unsigned char org[3]={5,80,0};//橘
unsigned char close[3]={0,0,0};
unsigned char color[7][3]={{0,50,0},{25,255,0},{100,255,0},{50,0,0},{0,0,50},{0,230,230},{50,50,50}};//红,橙,黄,绿,蓝,紫,白
xdata unsigned char buffer[64];
unsigned char buf_data=0x00;
// unsigned char dis_count=0;
/***************************************主程序****************************************/
void main()
{
DelayMs(1000); //上电延时
UartInit();
UART1_SendString("STC15W204S\r\nUart is ok !\r\n");//发送字符串检测是否初始化成功
DelayMs(1000);
ResetDataFlow();
WS2812_Close();
//主循环
while(1)
{
// UART1_SendData(buf_data);
sovle(buf_data);
// Flash_WS2812(white);
}
}
//-------------------------------------------------------------------------------
//子程序名称:sovle(unsigned char m)
//功能:根据串口接收的数据,选择处理
//参数:选择参数
//说明:
//-------------------------------------------------------------------------------
void sovle(unsigned char m)
{
switch(m)
{
case 0x00:
DIY_SNOW(color);
Delay100Ms(50);
WS2812_Close();
Water_lamp(white);
ResetDataFlow();
Flash_WS2812(white);
ResetDataFlow();

WS2812_Close();
Delay100Ms(5);

LED_Water_Color(color);
WS2812_Close();
Delay100Ms(5);
break;
case 0x01:
WS2812_Close();
DIY_SNOW(color);
break;
case 0x02:
WS2812_Close();
Flower_In();
break;
case 0x03:
WS2812_Close();
Breathing_WS2812(0,Red);
Breathing_WS2812(1,Red);
Breathing_WS2812(1,Green);
Breathing_WS2812(1,Blue);
break;
case 0x04:
WS2812_Close();
Gradual_change(org);

break;
case 0x05:
WS2812_Close();
LED_Single_Flower();

break;
case 0x06:
WS2812_Close();
Change_Color(red);

break;
case 0x07:
WS2812_Close();
LED_Water_Color(color);
break;
case 0x08:
WS2812_Close();
Flash_WS2812(white);
break;
case 0x09:
WS2812_Close();
break;
}
}

//-------------------------------------------------------------------------------
//子程序名称:WS2812_Close(void)
//功能:将37个灯全部熄灭
//参数:无
//说明:
//-------------------------------------------------------------------------------
void WS2812_Close(void)
{
unsigned char count_sum;
for(count_sum=0;count_sum<37;count_sum++)
{
SendOnePix(close);
}
ResetDataFlow();
}
//-------------------------------------------------------------------------------
//子程序名称:WS2812_1_5Line(unsigned char *p,unsigned char line)
//功能:让其整圈一起点亮,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5
//参数:指针参数是颜色的数组,line参数为第几圈(1-5)
//说明:
//-------------------------------------------------------------------------------
void WS2812_1_5Line(unsigned char *p,unsigned char line)
{

unsigned char count_sum;
unsigned char m=1;
switch(line)
{
case 1:
for(count_sum=0;count_sum<=36;count_sum++)//36个灯循环
{
if(count_sum==36)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 2:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
if(count_sum%6==0)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 3:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
if(count_sum%6==1)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 4:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
if(count_sum%6==2)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 5:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
if(count_sum==3*m)
{
SendOnePix(p);
}
else if(count_sum==(3*m)+1)
{
SendOnePix(p);
}
else if(count_sum==(3*m)+2)
{
SendOnePix(p);
m+=2;
}
else
SendOnePix(close);
}
m=1;
ResetDataFlow();
break;
}
}

//-------------------------------------------------------------------------------
//子程序名称:WS2812_1_5Line_In(unsigned char *p,unsigned char line)
//功能:让其整圈一起点亮,内圈颜色保持不变
//参数:指针参数是颜色的二维数组,line参数为第几圈(1-5)
//说明:
//-------------------------------------------------------------------------------
void WS2812_1_5Line_In(unsigned char *p,unsigned char line)
{
unsigned char count_sum;
unsigned char m=1;
unsigned char k=0;
switch(line)
{
case 1:
for(count_sum=0;count_sum<=36;count_sum++)//36个灯循环
{
if(count_sum==36)
{
SendOnePix(&p[(3*k)]);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 2:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
k=1;
if(count_sum%6==0)
{
SendOnePix(&p[(3*k)]);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 3:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
if(count_sum%6==1)
{
k=2;
SendOnePix(&p[(3*k)]);
}
else if(count_sum%6==0)
{
k=1;
SendOnePix(&p[(3*k)]);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 4:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
if(count_sum%6==2)
{
k=3;
SendOnePix(&p[(3*k)]);
}
else if(count_sum%6==1)
{
k=2;
SendOnePix(&p[(3*k)]);
}
else if(count_sum%6==0)
{
k=1;
SendOnePix(&p[(3*k)]);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 5:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
if(count_sum==3*m)
{
k=4;
SendOnePix(&p[(3*k)]);
}
else if(count_sum==(3*m)+1)
{
k=5;
SendOnePix(&p[(3*k)]);
}
else if(count_sum==(3*m)+2)
{
k=6;
SendOnePix(&p[(3*k)]);
m+=2;
}
else if(count_sum%6==2)
{
k=3;
SendOnePix(&p[(3*k)]);
}
else if(count_sum%6==1)
{
k=2;
SendOnePix(&p[(3*k)]);
}
else if(count_sum%6==0)
{
k=1;
SendOnePix(&p[(3*k)]);
}
else
SendOnePix(close);
}
m=1;
ResetDataFlow();
break;
}
}
//-------------------------------------------------------------------------------
//子程序名称:WS2812_1_5Line_Single(unsigned char *p,unsigned char line)
//功能:让对应圈的灯流水点亮,传递两个参数
//参数:指针参数是颜色的二维数组,line参数为第几圈(1-5)
//说明:
//-------------------------------------------------------------------------------
void WS2812_1_5Line_Single(unsigned char *p,unsigned char line)//让对应圈的灯流水点亮,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5
{
unsigned char count_sum;
unsigned char count=0;
unsigned char m=1;
switch(line)
{
case 1:
for(count_sum=0;count_sum<37;count_sum++)
{
if(count_sum==36)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
Delay100Ms(2);
ResetDataFlow();
break;
case 2:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
for(count=0;count<=count_sum;count++)//在count_sum个灯内,保证亮几个
{
if(count%6==0)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
DelayMs(10);
}
ResetDataFlow();
break;
case 3:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
for(count=0;count<=count_sum;count++)//在count_sum个灯内,保证亮几个
{
if(count%6==1)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
DelayMs(10);
}
ResetDataFlow();
break;
case 4:
for(count_sum=0;count_sum<36;count_sum++)//36个灯循环
{
for(count=0;count<=count_sum;count++)//在count_sum个灯内,保证亮几个
{
if(count%6==2)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
DelayMs(10);
}
ResetDataFlow();
break;
case 5:
for(count_sum=0;count_sum<36;count_sum++)
{
for(count=0;count<=count_sum;count++)
{
if(count==3*m)
{
SendOnePix(p);
}
else if(count==(3*m)+1)
{
SendOnePix(p);
}
else if(count==(3*m)+2)
{
SendOnePix(p);
m+=2;
}
else
SendOnePix(close);
}
ResetDataFlow();
Delay100Ms(1);
m=1;
}
ResetDataFlow();
}
}

//-------------------------------------------------------------------------------
//子程序名称:WS2812_LineIn_Single(unsigned char *p,unsigned char line)
//功能:让对应圈的灯流水点亮,内圈不灭,传递两个参数
//参数:指针参数是颜色的数组,line参数为第几圈(2-5)
//说明:
//-------------------------------------------------------------------------------
void WS2812_LineIn_Single(unsigned char *p,unsigned char line)
{
unsigned char count;
unsigned char count_sum;
unsigned char m=1;
switch(line)
{
case 2:
for(count_sum=0;count_sum<37;count_sum++)
{
for(count=0;count<=count_sum;count++)
{
if(count%6==0)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
DelayMs(20);
}
ResetDataFlow();
break;
case 3:
for(count_sum=0;count_sum<36;count_sum++)
{
for(count=0;count<=count_sum;count++)
{
if(count%6==1)
{
SendOnePix(p);
}
else if(count%6==0)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
// ResetDataFlow();
DelayMs(20);
}
ResetDataFlow();
break;
case 4:
for(count_sum=0;count_sum<36;count_sum++)
{
for(count=0;count<=count_sum;count++)
{
if(count%6==2)
{
SendOnePix(p);
}
else if(count%6==1)
{
SendOnePix(p);
}
else if(count%6==0)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
// ResetDataFlow();
DelayMs(20);
}
ResetDataFlow();
break;
case 5:
for(count_sum=0;count_sum<36;count_sum++)
{
for(count=0;count<=count_sum;count++)
{
if(count==3*m)
{
SendOnePix(p);
// m+=2;
}
else if(count==(3*m)+1)
{
SendOnePix(p);
}
else if(count==(3*m)+2)
{
SendOnePix(p);
m+=2;
}

else if(count%6==2)
{
SendOnePix(p);
}
else if(count%6==1)
{
SendOnePix(p);
}
else if(count%6==0)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
DelayMs(70);
m=1;
}
ResetDataFlow();
break;
}
}

//-------------------------------------------------------------------------------
//子程序名称:LED_Water(unsigned char *p)
//功能:由内而外流水点亮
//参数:指针参数是颜色的数组
//说明:
//-------------------------------------------------------------------------------
void LED_Water(unsigned char *p)//由内而外流水点亮
{
WS2812_1_5Line_Single(p,1);//37点不给新的数据,所以一直保持之前的状态
WS2812_1_5Line_Single(p,2);
// LED_3count(p);
// LED_4count(p);
// LED_5count(p);
WS2812_LineIn_Single(p,3);
WS2812_LineIn_Single(p,4);
WS2812_LineIn_Single(p,5);
}

//-------------------------------------------------------------------------------
//子程序名称:LED_Water(unsigned char *p)
//功能:由内而外流水点亮
//参数:指针参数是多个颜色的二维数组
//说明:
//-------------------------------------------------------------------------------
void LED_Water_Color(unsigned char *p)//由内而外流水点亮,颜色变换
{
unsigned char k=0;
for(k=0;k<7;k++)
{
LED_Water(&p[(3*k)]);
}
}
//-------------------------------------------------------------------------------
//子程序名称:LED_Single_Flower(void)
//功能:单圈单个灯绽放点亮
//参数:无
//说明:
//-------------------------------------------------------------------------------
void LED_Single_Flower(void)//单圈单个灯绽放点亮
{
WS2812_1_5Line_Single(green,1);
DelayMs(50);
WS2812_Close();
// LED_2_Single(c);
WS2812_1_5Line_Single(red,2);
DelayMs(50);
// LED_3_Single(b);
WS2812_1_5Line_Single(blue,3);
DelayMs(50);
// LED_4_Single(a);
WS2812_1_5Line_Single(org,4);
DelayMs(50);
// LED_5_Single(d);
WS2812_1_5Line_Single(white,5);
DelayMs(20);
WS2812_Close();
}

//-------------------------------------------------------------------------------
//子程序名称:Flash_WS2812(unsigned char *p)
//功能:整体闪烁
//参数:指针参数是颜色的数组
//说明:
//-------------------------------------------------------------------------------
void Flash_WS2812(unsigned char *p)
{
unsigned char count;
WS2812_Close();
ResetDataFlow();
Delay100Ms(5);
for(count=0;count<37;count++)
{
SendOnePix(p);
}
Delay100Ms(5);
}

//-------------------------------------------------------------------------------
//子程序名称:DIY_SNOW(unsigned char *p)
//功能:由外向内,按照数组的颜色顺序显示,最多五个颜色
//参数:指针参数是多个颜色的二维数组
//说明:
//-------------------------------------------------------------------------------
void DIY_SNOW(unsigned char *p)//由外向内,按照数组的颜色顺序显示,最多五个颜色
{
unsigned char count;
unsigned char m=1;
unsigned char k=0;
for(count=0;count<36;count++)
{
if(count==3*m)
{
SendOnePix(&p[(3*k)]);
}
else if(count==(3*m)+1)
{
SendOnePix(&p[(3*k)]);
}
else if(count==(3*m)+2)
{
SendOnePix(&p[(3*k)]);
m+=2;
}
else if(count%6==2)
{
k=1;
SendOnePix(&p[(3*k)]);
}
else if(count%6==1)
{
k=2;
SendOnePix(&p[(3*k)]);
}
else if(count%6==0)
{
k=3;
SendOnePix(&p[(3*k)]);
}
}
if(count==36)
{
k=4;
SendOnePix(&p[(3*k)]);
}
m=1;
ResetDataFlow();
}

//-------------------------------------------------------------------------------
//子程序名称:Water_lamp(unsigned char *p)
//功能:按1-37顺序点亮
//参数:指针参数是颜色的数组
//说明:
//-------------------------------------------------------------------------------
void Water_lamp(unsigned char *p)//按1-37顺序点亮
{
unsigned char count;
unsigned char count_sum;
for(count_sum=0;count_sum<37;count_sum++)
{
for(count=0;count<=count_sum;count++)
{
SendOnePix(p);
}
ResetDataFlow();
DelayMs(50);
}
ResetDataFlow();
}

void Flower(void)
{
WS2812_1_5Line(green,1);
Delay100Ms(5);
WS2812_1_5Line(green,1);
WS2812_1_5Line(red,2);
Delay100Ms(5);
WS2812_1_5Line(green,1);
WS2812_1_5Line(red,2);
WS2812_1_5Line(blue,3);
Delay100Ms(5);
WS2812_1_5Line(green,1);
WS2812_1_5Line(red,2);
WS2812_1_5Line(blue,3);
WS2812_1_5Line(white,4);
Delay100Ms(5);
WS2812_1_5Line(green,1);
WS2812_1_5Line(red,2);
WS2812_1_5Line(blue,3);
WS2812_1_5Line(white,4);
WS2812_1_5Line(org,5);
Delay100Ms(5);
}
//-------------------------------------------------------------------------------
//子程序名称:Flower_In(void)
//功能:一圈圈整体点亮,内部颜色不变
//参数:无
//说明:
//-------------------------------------------------------------------------------
void Flower_In(void)
{
WS2812_1_5Line_In(color,1);
Delay100Ms(5);
WS2812_1_5Line_In(color,2);
Delay100Ms(5);
WS2812_1_5Line_In(color,3);
Delay100Ms(5);
WS2812_1_5Line_In(color,4);
Delay100Ms(5);
WS2812_1_5Line_In(color,5);
Delay100Ms(5);
}

//-------------------------------------------------------------------------------
//子程序名称:Gradual_change(unsigned char *p)
//功能:渐变亮
//参数:指针参数是颜色的数组
//说明:
//-------------------------------------------------------------------------------
void Gradual_change(unsigned char *p)
{
unsigned char i,j,count;
unsigned char x[3];

for(j=0;j<3;j++)
{
x[j]=p[j];
}
// for(i=0;i<50;i++)
// {
// for(j=0;j<3;j++)
// {
// x[j]++;
// }
for(count=0;count<37;count++)
{
for(j=0;j<3;j++)
{
x[j]++;
}
SendOnePix(x);
}
ResetDataFlow();
}

//-------------------------------------------------------------------------------
//子程序名称:Breathing_WS2812(unsigned char level,unsigned char Color)
//功能:渐变亮
//参数:level表示一个颜色0即为白色,1时,由Color参数决定为R,G,B中的哪个颜色渐变
//说明:
//-------------------------------------------------------------------------------
void Breathing_WS2812(unsigned char level,unsigned char Color)//呼吸渐变,两个参数,第一个表示集中小颜色,第二个表示颜色
{
unsigned char i,j,count;
unsigned char x[3]={0,0,0};
switch(level)
{
case 0:
for(i=0;i<50;i++)
{
for(j=0;j<3;j++)
{
x[j]++;
}
for(count=0;count<37;count++)
{
SendOnePix(x);
}
Delay100Ms(1);
}
break;
case 1:
for(i=0;i<50;i++)
{
for(j=0;j<3;j++)
{
switch(Color)
{
case Green:
x[0]++;
break;
case Red:
x[1]++;
break;
case Blue:
x[2]++;
break;
}
}
for(count=0;count<37;count++)
{
SendOnePix(x);
}
Delay100Ms(1);
}
break;
}
}

//-------------------------------------------------------------------------------
//子程序名称:Change_Color(unsigned char *p)
//功能:37个灯一起变色亮
//参数:指针参数是多个颜色的二维数组
//说明:
//-------------------------------------------------------------------------------
void Change_Color(unsigned char *p)
{
unsigned char count,k;
for(k=0;k<8;k++)
{
for(count=0;count<37;count++)
{
SendOnePix(&p[(3*k)]);
}
ResetDataFlow();
Delay100Ms(5);
WS2812_Close();
}
}


//-------------------------------------------------------------------------------
//子程序名称:uart_sever()
//功能:串口中断服务函数,接收数据
//参数:
//说明:
//-------------------------------------------------------------------------------
void uart_sever() interrupt 4
{
static unsigned int data_temp=0;
if(RI==1)//数据接收完毕
{
RI=0;
buf_data=SBUF;
buffer[data_temp]=buf_data;
data_temp++;
UART1_SendData(buf_data);
if(buf_data==0x0D)
{
data_temp=0;
}
}
}

/************************结束*******************************************************/

```

### 实验过程3

导入试验代码1 [3].

```c++
#include "STC15W.h"
#include "ws2812.h"
#include "delay.h"
#include "uart.h"
void WS2812_Close(void);
void WS2812_1_5Line(unsigned char *p,unsigned char line);
void mine(unsigned char n,unsigned char m);
unsigned char blue_a[3]={5,5,10};
unsigned char blue_b[3]={5,5,15}
unsigned char blue_c[3]={5,5,20};
unsigned char blue_d[3]={5,5,25};
unsigned char close[3]={0,0,0};
xdata unsigned char buffer[64];
unsigned char buf_data=0x00;
unsigned char m=0x01;
void main()
{
DelayMs(1000);
UartInit();
UART1_SendString("STC15W204S\r\nUart is ok !\r\n");
DelayMs(1000);
ResetDataFlow();
WS2812_Close();
while(1)
{
mine(buf_data,m);
}
}
void mine(unsigned char n,unsigned char m)
{
switch(n)
{
case 0x00:
if (m)
{
WS2812_1_5Line(blue_a,1);
Delay100Ms(5);
WS2812_Close();
WS2812_1_5Line(blue_b,2);
Delay100Ms(5);
WS2812_1_5Line(blue_c,3);
Delay100Ms(5);
WS2812_1_5Line(blue_d,4);
Delay100Ms(5);
WS2812_1_5Line(blue_e,5);
Delay100Ms(5);
}
void WS2812_Close(void)
{
unsigned char count_sum;
for(count_sum=0;count_sum<37;count_sum++)
{
SendOnePix(close);
}
ResetDataFlow();
}
void WS2812_1_5Line(unsigned char *p,unsigned char line)
{
unsigned char count_sum;
unsigned char m=1;
switch(line)
{
case 1:
for(count_sum=0;count_sum<=36;count_sum++)
{
if(count_sum==36)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 2:
for(count_sum=0;count_sum<36;count_sum++)
{
if(count_sum%6==0)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 3:
for(count_sum=0;count_sum<36;count_sum++)
{
if(count_sum%6==1)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 4:
for(count_sum=0;count_sum<36;count_sum++)//36¸öµÆÑ­»·
{
if(count_sum%6==2)
{
SendOnePix(p);
}
else
SendOnePix(close);
}
ResetDataFlow();
break;
case 5:
for(count_sum=0;count_sum<36;count_sum++)//36¸öµÆÑ­»·
{
if(count_sum==3*m)
{
SendOnePix(p);
}
else if(count_sum==(3*m)+1)
{
SendOnePix(p);
}
else if(count_sum==(3*m)+2)
{
SendOnePix(p);
m+=2;
}
else
SendOnePix(close);
}
m=1;
ResetDataFlow();
break;
}
}

实验结果

 

和马老师沟通了,我们经过了,激活keil,(一定要以管理员权限激活)

可以直接通过点击keil工程文件的方式激活

导出hex文件

用stc的串口调试工具来进行调试的步骤包括,下载com端口驱动(在南京沁恒的官网下载)

把led灯插在电脑上

之后再设备管理器里面找到com插上去的设备

之后把选择程序文件,把导出的hex文件放进去

之后调整单片机的工作频率为33MHz

之后点击下载,编程

之后按一下LED灯的复位按钮

之后我发现这个灯光在胡乱的闪烁

说明这个灯的dram可能有部分被擦除了

出现了跑飞的现象

我们的接下来的步骤是换一根线

或者重新烧一下51的系统

 

 

总结

 

人在做事情的时候,要问自己,自己有什么,想要做什么,这个目标的达成需要几个步骤?我能实现其中的几个步骤,这些作为一个迭代,我们再去准备下一个迭代。在这个实验中,我要承认我有几个地方做的不够好,列表如下

- 没有上上机实操的课程
- 在12月23日的课程上和同学快速把这个软件进行调试和组装,而把时间放在了概念理解上面(本可以更快的结束这个过程)
- 没有很早的认识到,我们的目标是尽快的把我们能够做到的东西,先做好,之后,再去寻找其他的帮助,来实现下一个level的跨越!强调一下,把自己能够做好的事情做好,作为基础,然后进一步做下一个level的事情。

未来展望

 

- 调试更多的程序,点亮更多的灯

疑惑的点

 

  • STC的51的灯和stm32的灯的区别
    • 这个是这样子的,stc51是stc8051的内核,这个内核只能用寄存器来操作,stm32是arm3的内核,是能够通过库函数的方式来编程的,更高的抽象。
  • - keil4和keil5的区别大么?
    • 这个是这个样子,一般来说,keil4用老师给的那个51单片机的内核就很舒服了,自己装一个keil5,里面装stm32的内核比较合适。
  • - 如何使用单片机做到几百ns的延时?
    • 这个是说用nop函数来实现的,由于51单片机的nop函数默认延迟一个周期,由于我们设置的周期是33MHz,一个时钟信号的时间间隔是3*10^(-8),也就是说,30ns,这样我们就能够做纳秒级的计算了!
  • SCON是干什么的?
    • 这个是一个配置UART传输协议的主要寄存器,具体的位数的信息,详见下
      FvPYcrmyGGXssygIhzcoXZvW9_Ug
  • PCON是做什么的?
    • 这个是一个波特率翻倍的作用
  • 这两个程序分别在哪里写?
    -FqO-84itCVGTuC40r6a5nkcuHByW
    - 所有的UART的协议的波特率都是一样的么?
  • 每一个发射方和接受方的波特率是一个样子的,但是,这个是在上面的文件中配置好的
    - 这个页面的配置是对的么?
    FildHNLarEdBfAv6Fk_tSX4M6Z-a
    - 这个页面的配置是对的么?
  • 对的
    FmAQiHcmBCgVgFqGJxAVTFe4Y5VS
    - 对的

要做的事

 

  • 把我的报告发给老师
  • 明天上午十点和老师约一下这个自定义程序和接口的实现
  • 都好啦

引用

 

[1]https://www.omnisci.com/technical-glossary/embedded-systems#:~:text=An%20embedded%20system%20is%20a%20microprocessor%2Dbased%20computer%20hardware%20system,computation%20for%20real%2Dtime%20operations.

[2]https://www.eet-china.com/mp/a32983.html

[3]https://www.eetree.cn/project/detail/40

硬禾学堂!

 

感谢苏老师!

FnoIUmL68goGgvV36NVMaezLb2QP

 

附录1:雪花灯PCB文件

 

![LED原理图](http://qkx5lap40.hn-bkt.clouddn.com/img/image-20201225135520089.png)

![控制电路原理](http://qkx5lap40.hn-bkt.clouddn.com/img/image-20201225135530161.png)

![模块关系图](http://qkx5lap40.hn-bkt.clouddn.com/img/image-20201225135537386.png)

附录2:指令机械码

 

:03000000020AF3FE
:0C0AF300787FE4F6D8FD75817B020B3A99
:03002000000000DD
:100D4E00030A320000032C00320003280000320395
:100D5E0025191919032F055000030D000000151059
:100D6E0000320019FF0064FF003200000000320064
:0C0D7E00E6E6323232012B0002080000D1
:100E7A00759850438E01438E0475D7A575D6FC43E9
:070E8A008E10D2ACD2AF22A2
:080ECD008F993099FDC29922B2
:100E3D008B768A778978AB76AA77A978120789603D
:100E4D00130578E5787002057714F9120789FF12FA
:050E5D000ECD80E22231
:100EA8007FE8120E91120EBE120E627B007A007954
:060EB8000A120B7F80FE10
:1007CF00EFB40A0040030208F09007DFF8282873FF
:1007DF000207FD0208860208920208980208B70273
:1007EF0008C30208C90208D50208E10208ED7B0020
:1007FF007A0079101208F17F32120003120E627B19
:10080F00007A007925120D8B120EBE7B007A0079CB
:10081F0025120DEA120EBE120E627F051200037B27
:10082F00007A007910120E15120E627F0512000366
:10083F00120BE1120E62120CCD120E627B007A00C7
:10084F007910120D11120E627B007A007928120CAA
:10085F00377F32120003120E627D01E4FF1209C2CC
:10086F007D017F011209C27D027F011209C2E4FDE1
:10087F007F011209C28067120E627B007A00791025
:10088F000208F1120E62020CCD120E627D01E4FF1E
:10089F001209C27D017F011209C27D027F01120977
:1008AF00C2E4FD7F010209C2120E627B007A007959
:1008BF002F020C37120E62020BE1120E627B007ACE
:1008CF0000792C020D11120E627B007A0079100252
:1008DF000E15120E627B007A007925020DEA120EB8
:0208EF00622283
:100E6200E4F5727B007A00790D120B7F0572E57250
:080E7200C3942540EE020EBE00
:080555007B007A00790A7D01A8
:06055D008B5B8A5C895DE6
:10056300755F01ED24FE603B1460621470030205A5
:10057300FB14700302062524046003020692E4F5CB
:100583005EE55EB42408AB5BAA5CA95D80067B00D4
:100593007A00790D120B7F055EE55ED3942440E16A
:1005A30002068FE4F55EE55E75F00684E5F07008FB
:1005B300AB5BAA5CA95D80067B007A00790D120B08
:1005C3007F055EE55EC3942440DC02068FE4F55E9E
:1005D300E55E75F00684AFF0BF0108AB5BAA5CA9CA
:1005E3005D80067B007A00790D120B7F055EE55E68
:1005F300C3942440DB02068FE4F55EE55E75F006E6
:1006030084AFF0BF0208AB5BAA5CA95D80067B00E8
:100613007A00790D120B7F055EE55EC3942440DBFF
:10062300806AE4F55EE55F75F003A4B55E06E4B5A4
:10063300F0028016E55F75F003A42401FFE435F0B2
:10064300FEE55EB5070CE4B50608AB5BAA5CA95DE5
:10065300802BE55F75F003A42402FFE435F0FEE58B
:100663005EB50713E4B5060FAB5BAA5CA95D120B7D
:100673007F055F055F80097B007A00790D120B7F90
:0F068300055EE55EC39424409C755F01120EBEB8
:010692002245
:060026007B007A00791056
:06002C008B438A44894564
:10003200754701E4F548ED24FE60451460791470BB
:100042000302010014700302015724046003020238
:1000520013E4F546E546B42412E54875F003A4AB73
:10006200432545F9E54435F0FA80067B007A0079AC
:100072000D120B7F0546E546D3942440D7020210A9
:10008200E4F546754801E54675F00684E5F0701220
:10009200E54875F003A4AB432545F9E54435F0FA8C
:1000A20080067B007A00790D120B7F0546E546C378
:1000B200942440CF020210E4F546E54675F006842A
:1000C200AFF0BF0105754802800DE54675F0068464
:1000D200E5F07015754801E54875F003A4AB4325BA
:1000E20045F9E54435F0FA80067B007A00790D1275
:1000F2000B7F0546E546C3942440BF020210E4F597
:1001020046E54675F00684AFF0BF020575480380E8
:100112001DE54675F00684AFF0BF01057548028003
:100122000DE54675F00684E5F07015754801E54861
:1001320075F003A4AB432545F9E54435F0FA800692
:100142007B007A00790D120B7F0546E546C39424A5
:1001520040AF020210E4F546E54775F003A4B54648
:1001620009E4B5F005754804807AE54775F003A403
:100172002401FFE435F0FEE546B50709E4B50605BE
:10018200754805805FE54775F003A42402FFE43556
:10019200F0FEE546B50720E4B5061C754806E548BD
:1001A20075F003A4AB432545F9E54435F0FA120B8B
:1001B2007F054705478048E54675F00684AFF0BFE6
:1001C2000205754803801DE54675F00684AFF0BF51
:1001D2000105754802800DE54675F00684E5F0706C
:1001E20015754801E54875F003A4AB432545F9E5CB
:1001F2004435F0FA80067B007A00790D120B7F05F8
:1002020046E546C39424500302015A754701120E73
:01021200BE2D
:0102130022C8
:0603C7008B498A4A894BB4
:1003CD00E4F54D754E01ED24FE604014607A147015
:1003DD00030204931470030204D124046003020584
:1003ED0054E4F54CE54CB42408AB49AA4AA94B801A
:1003FD00067B007A00790D120B7F054CE54CC394FA
:10040D002540E17F02120003020551E4F54CE4F5AD
:10041D004DE54DD3954C501FE54D75F00684E5F037
:10042D007008AB49AA4AA94B80067B007A00790D6A
:10043D00120B7F054D80DA7F0A120E91054CE54CAB
:10044D00C3942440C9020551E4F54CE4F54DE54D46
:10045D00D3954C5020E54D75F00684AFF0BF0108E3
:10046D00AB49AA4AA94B80067B007A00790D120B85
:10047D007F054D80D97F0A120E91054CE54CC39432
:10048D002440C8020551E4F54CE4F54DE54DD395F6
:10049D004C5020E54D75F00684AFF0BF0208AB4916
:1004AD00AA4AA94B80067B007A00790D120B7F05B5
:1004BD004D80D97F0A120E91054CE54CC394244012
:1004CD00C8020551E4F54CE4F54DE54DD3954C507E
:1004DD005FE54E75F003A4B54D06E4B5F002801648
:1004ED00E54E75F003A42401FFE435F0FEE54DB5AE
:1004FD00070CE4B50608AB49AA4AA94B802BE54E7B
:10050D0075F003A42402FFE435F0FEE54DB50713A5
:10051D00E4B5060FAB49AA4AA94B120B7F054E0550
:10052D004E80097B007A00790D120B7F054D809A64
:10053D00120EBE7F01120003754E01054CE54CC332
:07054D0094244083120EBE4E
:010554002284
:06021400AB79AA7AA97B78
:06021A008B4F8A50895150
:10022000755401ED24FD60501470030202C2147075
:1002300003020319240360030203C6E4F553E4F543
:1002400052E552D39553501FE55275F00684E5F000
:100250007008AB4FAA50A95180067B007A00790D37
:10026000120B7F055280DA7F14120E910553E5536D
:10027000C3942540C90203C3E4F553E4F552E552A3
:10028000D39553502CE55275F00684AFF0BF0102B0
:10029000800AE55275F00684E5F07008AB4FAA506D
:1002A000A95180067B007A00790D120B7F055280E0
:1002B000CD7F14120E910553E553C3942440BC0224
:1002C00003C3E4F553E4F552E552D395535039E5B1
:1002D0005275F00684AFF0BF02028017E55275F048
:1002E0000684AFF0BF0102800AE55275F00684E58E
:1002F000F07008AB4FAA50A95180067B007A0079B4
:100300000D120B7F055280C07F14120E910553E52C
:1003100053C3942440AF0203C3E4F553E4F552E51C
:1003200052D3955340030203AFE55475F003A4B5CF
:100330005206E4B5F0028061E55475F003A424018F
:10034000FFE435F0FEE552B50706E4B50602804944
:10035000E55475F003A42402FFE435F0FEE552B540
:100360000713E4B5060FAB4FAA50A951120B7F0536
:100370005405548035E55275F00684AFF0BF020293
:100380008017E55275F00684AFF0BF0102800AE5E0
:100390005275F00684E5F07008AB4FAA50A9518061
:1003A000067B007A00790D120B7F055202031F7F36
:1003B00046120E917554010553E553C3942450031E
:0603C00002031C120EBE38
:0103C6002214
:100DBF008B798A7A897B7D011203C7AB79AA7AA9CD
:100DCF007B7D021203C77D031202147D04120214ED
:0B0DDF00AB79AA7AA97B7D0502021AFD
:060E15008B6A8A6B896CF8
:100E1B00E4F56DF56DE56D75F003A4AB6A256CF922
:100E2B00E56B35F0FA120DBF056DE56DC394074008
:010E3B00E4D2
:010E3C002293
:100BE1007B007A00790A7D011203C77F32120E91D0
:100BF100120E627B007A00792C7D021203C77F32CC
:100C0100120E917B007A0079287D031203C77F328F
:100C1100120E917B007A00792F7D041203C77F3277
:100C2100120E917B007A0079257D051203C77F148E
:060C3100120E91020E629A
:060DEA008B6E8A6F897018
:100DF000120E62120EBE7F05120003E4F571AB6E97
:100E0000AA6FA970120B7F0571E571C3942540EE9E
:050E10007F0502000354
:0608F1008B558A56895761
:1008F700755901E4F55AF558E55975F003A4B5584B
:1009070006E4B5F0028074E55975F003A42401FFED
:10091700E435F0FEE558B50706E4B50602805CE568
:100927005975F003A42402FFE435F0FEE558B50736
:100937001DE4B50619E55A75F003A4AB552557F91B
:10094700E55635F0FA120B7F055905598040E558F1
:1009570075F00684AFF0BF0205755A01801DE55892
:1009670075F00684AFF0BF0105755A02800DE55892
:1009770075F00684E5F07016755A03E55A75F003AD
:10098700A4AB552557F9E55635F0FA120B7F0558F4
:10099700E558C3942450030208FFE558B42416759C
:1009A7005A04E55A75F003A4AB552557F9E55635B2
:0B09B700F0FA120B7F755901020EBE12
:060D8B008B608A618962A1
:100D9100E4F564E4F563E563D39564500DAB60AAB3
:100DA10061A962120B7F056380EC120EBE7F3212C5
:0E0DB1000E910564E564C3942540D8020EBE81
:100A5D001205557F051200031205557B007A0079AA
:100A6D002C7D0212055D7F051200031205557B00DA
:100A7D007A00792C7D0212055D7B007A0079287D44
:100A8D000312055D7F051200031205557B007A00E8
:100A9D00792C7D0212055D7B007A0079287D031289
:100AAD00055D7B007A0079257D0412055D7F0512B9
:100ABD0000031205557B007A00792C7D0212055D2D
:100ACD007B007A0079287D0312055D7B007A007921
:100ADD00257D0412055D7B007A00792F7D051205B9
:060AED005D7F050200031D
:100CCD007D011200267F051200037D021200267F92
:100CDD00051200037B007A0079107D0312002C7F32
:100CED00051200037B007A0079107D0412002C7F21
:100CFD00051200037B007A0079107D0512002C7F10
:040D0D0005020003D8
:060C37008B328A33893480
:100C3D00E4F536AB32AA33A93485368275830012BA
:100C4D0007A2FF74382536F8A6070536E536B40336
:100C5D00E2E4F537E4F53674382536F8060536E561
:100C6D0036B403F37B007A007938120B7F0537E534
:090C7D0037C3942540DE020EBECF
:0409C2008F3B8D3C9E
:1009C60078407C007D007BFF7A0079207E007F03E3
:1009D600120763E53B14603A04707BE4F53DE4F5E9
:1009E6003E7440253EF806053EE53EB403F3E4F5C5
:1009F6003F7B007A007940120B7F053FE53FC394A9
:100A06002540EE7F01120003053DE53DC3943240CB
:100A1600CD22E4F53DE4F53EE53C600E1460071496
:100A2600700A05408006054180020542053EE53E06
:100A3600B403E5E4F53F7B007A007940120B7F05AD
:100A46003FE53FC3942540EE7F01120003053DE5D7
:060A56003DC3943240BFD5
:010A5C002277
:060D11008B658A6689670C
:100D1700E4F569E4F568E56975F003A4AB65256753
:100D2700F9E56635F0FA120B7F0568E568C3942587
:100D370040E4120EBE7F05120003120E620569E53C
:060D470069C3940840CDD1
:010D4D002283
:03002300020C8646
:0D0C8600C0E0C083C082C0D075D000C007A0
:100C930030982CC29885992B74002509F58274002D
:100CA3003508F583E52BF00509E50970020508AF62
:0F0CB3002B120ECDE52BB40D0675080075090048
:0B0CC200D007D0D0D082D083D0E03229
:0E0EBE00C2CDE4FFE4FE0EBE14FC0FBF32F600
:010ECC002203
:060B7F008B738A74897576
:100B8500E4FFAB73AA74A9758F827583001207A25F
:100B9500FEE4FDEE30E71AD2CD00000000000000B3
:100BA50000000000000000000000000000C2CD8031
:100BB5000FD2CD00000000000000C2CD00000000F3
:100BC500000000000000000000000000000000EE32
:0B0BD50025E0FE0DBD08BC0FBF03A70C
:010BE00022F2
:100E9100E4FEEEC39F500FE4FDE4FC0CBC4EFC0DE0
:060EA100BD3CF60E80ECE2
:010EA7002228
:10000300E4FEEEC39F5015E4FDE4FCE4FB0BBB4EA2
:0C001300FC0CBC3CF60DBD62F00E80E65B
:01001F0022BE
:100AFF00020EA8E493A3F8E493A34003F68001F257
:100B0F0008DFF48029E493A3F85407240CC8C333F7
:100B1F00C4540F4420C8834004F456800146F6DFC6
:100B2F00E4800B0102040810204080900D4EE47EFB
:100B3F00019360BCA3FF543F30E509541FFEE493BB
:100B4F00A360010ECF54C025E060A840B8E493A382
:100B5F00FAE493A3F8E493A3C8C582C8CAC583CAAD
:100B6F00F0A3C8C582C8CAC583CADFE9DEE780BE65
:010D8A000068
:10069300E709F608DFFA8046E709F208DFFA803E49
:1006A30088828C83E709F0A3DFFA8032E309F60836
:1006B300DFFA8078E309F208DFFA807088828C839E
:1006C300E309F0A3DFFA806489828A83E0A3F60852
:1006D300DFFA805889828A83E0A3F208DFFA804C2C
:1006E30080D280FA80C680D4806980F28033801003
:1006F30080A680EA809A80A880DA80E280CA80336C
:1007030089828A83ECFAE493A3C8C582C8CCC583E3
:10071300CCF0A3C8C582C8CCC583CCDFE9DEE780B3
:100723000D89828A83E493A3F608DFF9ECFAA9F032
:10073300EDFB2289828A83ECFAE0A3C8C582C8CC88
:10074300C583CCF0A3C8C582C8CCC583CCDFEADEA1
:10075300E880DB89828A83E493A3F208DFF980CC03
:1007630088F0EF60010E4E60C388F0ED2402B404FC
:100773000050B9F582EB2402B4040050AF232345A3
:0607830082239006E373DF
:10078900BB010689828A83E0225002E722BBFE026E
:09079900E32289828A83E49322A1
:1007A200BB010CE58229F582E5833AF583E022500C
:1007B20006E92582F8E622BBFE06E92582F8E22256
:0D07C200E58229F582E5833AF583E4932270
:00000001FF

 

 

 

团队介绍
计算机科学与电子工程系学生
团队成员
滕德群
西交利物浦 计算机科学与技术
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号