Mingming.Zhang 发表于 2018-7-1 20:53:28

3D打印,可定义动画徽章

大家是否喜欢徽章?
同样喜欢简单的T恤和帽子,那再适合不过了

它有哪些玩法 ?自定义编辑属于自己的个性动画 ;




运 动 时 的 里 程 计 数 ;
                              配 合 相 关 表 带 变 身 ⌚️心 率 什 么 的 一 手 掌 握 ;
                              蓝 牙 配 对 mp3 等 等这 些 就 是 我 对 它 的 想 象.
硬 件 篇 :

准备一下:
.Beetle控制器   
.Thomas Rabbitson Led Matrix Board V1.0   灯板
.FPC0.5-10P反向连接线长6cm
.4.2v锂电池
.锂电池充电板
.三角开关
.磁吸胸针
.3D打印外壳

   想 到 夏 天 了,整 个 外 壳 部 分 也 很 清 新 、简 单。
   图 上 有 2 出 小 开 口 分 别 是 :micro usb 编 程 充 电 接 口 ;电 源 开 关 接 口
https://www.bilibili.com/video/av32160644
实际演示效果,给自己做了一个小动画;感觉还可以持续挖掘它的其他玩法

   外 壳 绘 制 好 后 导 入 比 较 常 用 的 cura,配 置 好 自 己 的 机 器 设 置 就 好 了 ,
整 个 打 印 30 分 钟 左 右( 材 料 我 选 择 的 带 有 点 木 质 感 觉 的 pla,当 然 可 以 尝 试 其 他 材 质 )


   整 个 完 成 的 效 果 很 小 巧、自 己 配 戴 出 去 玩 实 测 续 航 3 小 时。
续 航 不 是 很 长 ,因 为 led 酷 酷 的 闪 动 动 画 太 耗 电 了;充 电 的 话 大 约 30 分 钟 就 好,随 身 充 电 宝 也 是 可 以 充 电 的



1.连接白色排线 蓝色接口朝外;连接fpc转接板与beetle
2.连接电池到充电板B+/B-;注意正负极 不要连错❌

   第 一 次 用 这 么 小 巧 的 圆 形 led 灯 板,还 是 非 常 喜 欢的。箭 头 标 识 着 显 示 的 正 方 向
首先,我们需要理解我们是如何通过代码发送的数据来控制任意LED灯的。以字母“R”为例,我们可以看到,ASC_II_table_R[] 数组里面的数据,依次按一定顺序写入到LED_RAM_ADDR[] 地址中就可以实现对特定的LED的亮灭控制啦!
```
unsigned charLED_RAM_ADDR[]= {                                    
                                     0x00,0x02,
                                     0x04,0x06,
                                     0x08,0x0a,
                                     0x0c,0x0e,
                                     0x10,0x12,
                                     0x14,0x16,
                                     0x18,0x1a,
                                     0x1c,0x1e,
                                     0x20,0x22,
                                     0x24,0x26,
                                     0x28,0x2a,
                                     0x2c,0x2e
};

const unsigned charASC_II_table_R[]= {0x00,0x00,0x00,0x00,0x78,0x00,0x90,0x00,0x90,0x00,0x70,0x00,
0x50,0x00,0x90,0x00,0x90,0x00,0xB8,0x01,0x00,0x00,0x00,0x00};/*"R",0*/
```

先了解下二进制与十六进制的转换,如上面表格。接下来我们来分析是如何点亮“R”区域的LED灯, 由上图我们可以看到,当数据为“1”时LED被点亮,相当于我们给了此处的LED灯一个高电平,同样的道理,当数据为0时,LED为熄灭状态。那么我们是如何控制各个单元的电平高低的呢?      我们以图中红色方框的数据为例,从右至左看二进制码为“0111 1000”,转换为十六进制为“78”,根据上图中各单元的LED单元地址,我们可以看出此单元地址是0x08,对比代码中的数据,“R”字符字模的第5个数据是0x78。一次类推我们就可以很好的控制各个LED的亮灭啦,大家可以动手试试,写一个爱心的字模,再对比代码,看看是否是一样的。大家也可以借用“字模软件”帮助取模,对于软件的应用,可以自行学习下,多尝试几个图形你就会发现其中的奥妙啦!
打开PCtoLCD2002,像素大小设置为12x12;
如图左击鼠标点一个像素(右击鼠标清楚一个像素),
点击生成字模加入到代码里即可;

点开设置:1.取模方式--逐行式
               2.每行显示数-12/1
               3.取模走向-逆向
               4.自定义格式-C51
```const unsigned charhartTable_left[]= {0x00,0x00,0x00,0x00,0x8C,0x01,0xDE,0x03,0xFE,0x03,0xFE,0x03,0xFC,0x01,0xF8,0x00,0x70,0x00,0x20,0x00,0x00,0x00,0x00,0x00};/*"Left heart",0*/```

将自动输出的数据粘贴到代码里
软 件 篇 :
Show_bitmap函数:该函数用于将图形字模依次写入相应的单元地址以显示图形效果。 loop函数:修改该函数,可以实现不同的功能。
跳动的心:
    呼吸的心:     闪烁的心:



```
void loop() {   
Show_bitmap(hartTable_left); //跳动的心
delay(400);
Show_bitmap(hartTable_right);
delay(400);
}
```

Mingming.Zhang 发表于 2018-7-24 13:21:30

```
#define         CMD_ID            0x80//command 命令码100 0x80(1000 0000)
#define         WRITE_ID          0xa0//write 命令码101,0xa0(1010 0000)
#define         SYS_DIS         0x00//关闭系统震荡         
#define         SYS_EN            0x01//打开系统震荡         
#define         LED_OFF         0x02//关闭LED显示      
#define         LED_ON            0x03//打开LED显示      
#define         BLINK_OFF         0x08//关闭闪烁      
#define         BLINK_ON          0x09//打开闪烁                  
#define         SLAVE_MODE      0x10//从模式      
#define         RC_MASTER_MODE    0x18//内部RC时钟   
#define         COM_OPTION      0x24//16COM n-mos模式   ab=01   
#define         PWM_DUTY          0xAE//PWM亮度控制 最亮   
#define         PWM_DUTY_MIN      0xA0//PWM亮度控制 最暗

#define         CS_LOW()      digitalWrite(CS_pin,LOW)//CS置低
#define         CS_HIGH()   digitalWrite(CS_pin,HIGH) //CS置高

#define         WR_LOW()      digitalWrite(WR_pin,LOW)//WR置低
#define         WR_HIGH()   digitalWrite(WR_pin,HIGH) //WR置高

#define         DATA_LOW()    digitalWrite(DATA_pin,LOW)//DATA置低
#define         DATA_HIGH()   digitalWrite(DATA_pin,HIGH) //DATA置高

intpowerEn = 9;
intCS_pin = 11;
intRD_pin = A2;
intWR_pin = 10;
intDATA_pin = A1;


unsigned charLED_RAM_ADDR[]= {                                    
                                     0x00,0x02,
                                     0x04,0x06,
                                     0x08,0x0a,
                                     0x0c,0x0e,
                                     0x10,0x12,
                                     0x14,0x16,
                                     0x18,0x1a,
                                     0x1c,0x1e,
                                     0x20,0x22,
                                     0x24,0x26,
                                     0x28,0x2a,
                                     0x2c,0x2e
};

const unsigned charASC_II_table_R[]= {0x00,0x00,0x00,0x00,0x78,0x00,0x90,0x00,0x90,0x00,0x70,0x00,
0x50,0x00,0x90,0x00,0x90,0x00,0xB8,0x01,0x00,0x00,0x00,0x00};/*"R",0*/
const unsigned charASC_II_table_L[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x01,0xF8,0x01,0x00,0x00,0x00,0x00};/*"L",0*/
const unsigned charhartTable_left[]= {0x00,0x00,0x00,0x00,0x8C,0x01,0xDE,0x03,0xFE,0x03,0xFE,0x03,
0xFC,0x01,0xF8,0x00,0x70,0x00,0x20,0x00,0x00,0x00,0x00,0x00};/*"Left heart",0*/
const unsigned charhartTable_right[]= {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x03,0xBC,0x07,0xFC,0x07,
0xFC,0x07,0xF8,0x03,0xF0,0x01,0xE0,0x00,0x40,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned charr[]= {0x00,0x00,0x00,0x00,0x78,0x00,0x90,0x00,0x90,0x00,0x70,0x00,
0x50,0x00,0x90,0x00,0x90,0x00,0xB8,0x01,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned charface[]= {0xF0,0x00,0x0C,0x03,0x06,0x06,0x02,0x04,0x0B,0x0D,0x0B,0x09,
0x01,0x08,0x93,0x0C,0xF2,0x04,0x06,0x06,0x0C,0x03,0xF0,0x00,};/*"Rihgt heart",0*/
const unsigned charZ[]= {0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x01,0x80,0x00,0x40,0x00,
0x20,0x00,0x10,0x00,0x08,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara1[]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,
0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara2[]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x90,0x00,
0x90,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara3[]= {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x08,0x01,0x08,0x01,
0x08,0x01,0x08,0x01,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara4[]= {0x00,0x00,0x00,0x00,0xFC,0x03,0x04,0x02,0x04,0x02,0x04,0x02,
0x04,0x02,0x04,0x02,0x04,0x02,0xFC,0x03,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara5[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};/*"Rihgt heart",0*/
unsigned chara6[]= {
0x00,0x00,0x08,0x00,0x1C,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,
0x7F,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00};/*"A",0*/
const unsigned chara7[]= {
0x00,0x00,0x00,0x00,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,
0x60,0x00,0x60,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,};/*"I",0*/
//tx_moode为数据读取的方式,data为输入的数据,cnt为读取数据位数
const unsigned chara8[]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x88,0x00,0x88,0x00,
0x88,0x00,0x88,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*"U",0*/
const unsigned chara9[]= {
0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x01,0x04,0x02,0x04,0x02,
0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00,0x00,};/*"D",0*/
const unsigned chara10[]= {
0x00,0x00,0x04,0x04,0x08,0x02,0x10,0x01,0xA0,0x00,0x40,0x00,
0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00};/*"Y",0*/

const unsigned chara11[]= {
0x00,0x00,0x00,0x01,0x80,0x03,0xC0,0x07,0x60,0x0C,0x60,0x0C,
0xE0,0x0F,0xE0,0x0F,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x00,0x00};/*"Y",0*/
const unsigned chara12[]= {
0x00,0x00,0x80,0x00,0xC0,0x01,0xE0,0x03,0x30,0x06,0x30,0x06,
0xF0,0x07,0xF0,0x07,0x30,0x06,0x30,0x06,0x30,0x06,0x00,0x00};/*"Y",0*/
const unsigned chara13[]= {
0x00,0x00,0x40,0x00,0xE0,0x00,0xF0,0x01,0x18,0x03,0x18,0x03,
0xF8,0x03,0xF8,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x00,0x00};/*"Y",0*/
const unsigned chara14[]= {
0x00,0x00,0x20,0x00,0x70,0x00,0xF8,0x00,0x8C,0x01,0x8C,0x01,
0xFC,0x09,0xFC,0x09,0x8C,0x09,0x8C,0x09,0x8C,0x01,0x00,0x00};/*"Y",0*/
const unsigned chara15[]= {
0x00,0x00,0x10,0x00,0x38,0x00,0x7C,0x00,0xC6,0x00,0xC6,0x08,
0xFE,0x04,0xFE,0x04,0xC6,0x04,0xC6,0x04,0xC6,0x08,0x00,0x00};/*"Y",0*/
const unsigned chara16[]= {
0x00,0x00,0x08,0x00,0x1C,0x00,0x3E,0x00,0x63,0x00,0x63,0x0C,
0x7F,0x02,0x7F,0x02,0x63,0x02,0x63,0x02,0x63,0x0C,0x00,0x00};/*"Y",0*/
const unsigned chara17[]= {
0x00,0x00,0x04,0x00,0x0E,0x00,0x1F,0x00,0x31,0x00,0x31,0x0E,
0x3F,0x01,0x3F,0x01,0x31,0x01,0x31,0x01,0x31,0x0E,0x00,0x00};/*"Y",0*/
const unsigned chara18[]= {
0x00,0x00,0x02,0x08,0x07,0x08,0x0F,0x08,0x18,0x08,0x18,0x0F,
0x9F,0x08,0x9F,0x08,0x98,0x08,0x98,0x08,0x18,0x07,0x00,0x00};/*"Y",0*/
const unsigned chara19[]= {
0x00,0x00,0x02,0x08,0x07,0x08,0x0F,0x08,0x18,0x08,0x18,0x0F,
0x9F,0x08,0x9F,0x08,0x98,0x08,0x98,0x08,0x18,0x0F,0x00,0x00};/*"Y",0*/
const unsigned chara20[]= {
0x00,0x00,0x01,0x04,0x03,0x04,0x07,0x04,0x0C,0x04,0x8C,0x07,
0x4F,0x04,0x4F,0x04,0x4C,0x04,0x4C,0x04,0x8C,0x07,0x00,0x00};/*"Y",0*/
const unsigned chara21[]= {
0x00,0x00,0x00,0x02,0x01,0x02,0x03,0x02,0x06,0x02,0xC6,0x03,
0x27,0x02,0x27,0x02,0x26,0x02,0x26,0x02,0xC6,0x03,0x00,0x00};/*"Y",0*/
const unsigned chara22[]= {
0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x03,0x01,0xE3,0x01,
0x13,0x01,0x13,0x09,0x13,0x09,0x13,0x09,0xE3,0x01,0x00,0x00};/*"Y",0*/
const unsigned chara23[]= {
0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x03,0x01,0xE3,0x09,
0x13,0x01,0x13,0x09,0x13,0x09,0x13,0x09,0xE3,0x01,0x00,0x00};
const unsigned chara24[]= {
0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x81,0x08,0xF1,0x04,
0x89,0x08,0x89,0x04,0x89,0x04,0x89,0x04,0xF1,0x08,0x00,0x00};
const unsigned chara25[]= {
0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x0C,0x78,0x02,
0x44,0x0C,0x44,0x02,0x44,0x02,0x44,0x02,0x78,0x0C,0x00,0x00};
const unsigned chara26[]= {
0x00,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x0E,0x3C,0x01,
0x22,0x0E,0x22,0x01,0x22,0x01,0x22,0x01,0x3C,0x0E,0x00,0x00};
const unsigned chara27[]= {
0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x07,0x9E,0x08,
0x11,0x0F,0x91,0x08,0x91,0x08,0x91,0x08,0x1E,0x07,0x00,0x00};
const unsigned chara28[]= {
0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x88,0x03,0x4F,0x04,
0x88,0x07,0x48,0x04,0x48,0x04,0x48,0x04,0x8F,0x03,0x00,0x00};
const unsigned chara29[]= {
0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xC4,0x01,0x27,0x02,
0xC4,0x03,0x24,0x02,0x24,0x02,0x24,0x02,0xC7,0x01,0x00,0x00};
const unsigned chara30[]= {
0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xE2,0x00,0x13,0x01,
0xE2,0x01,0x12,0x01,0x12,0x01,0x12,0x01,0xE3,0x00,0x00,0x00};
const unsigned chara31[]= {
0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x71,0x00,0x89,0x00,
0xF1,0x00,0x89,0x00,0x89,0x00,0x89,0x00,0x71,0x00,0x00,0x00};
const unsigned chara32[]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,
0x78,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x38,0x00,0x00,0x00};
void Write_HT1632C(unsigned char tx_mode , unsigned char data, unsigned char cnt)
{
    unsigned char i,temp;
    switch (tx_mode){
    case 0:
            temp = 0x01;//从右至左依次写入 若输入数据为0000 0001,则写入为1000 0000
            for(i = 0; i < cnt; i++)
            {
                  WR_LOW(); //低电平写入
                  if(data & temp)
                      DATA_HIGH();
                  else
                      DATA_LOW();
                  temp <<= 1;
                  WR_HIGH(); //高电平完成写入保存
            }
            break;
    case 1:
            temp = 0x80;    //从左至右,若输入数据为0000 0001,则写入仍为0000 0001
            for(i = 0; i < cnt; i++)
            {
                  WR_LOW();
                  if(data & temp)
                      DATA_HIGH();
                  else
                      DATA_LOW();
                  temp >>= 1;
                  WR_HIGH();
            }
             break;
   default : break;
   }
}

void Write_CMD_HT1632C(unsigned char cmd)
{
    CS_LOW();
    Write_HT1632C(1,CMD_ID, 3);//command 命令码100 0x80(1000 0000)
    Write_HT1632C(1,cmd, 9);   //命令数据,第9位为0
    CS_HIGH();
}

void Clr_HT1632C(unsigned char bk_mode)//(1:点亮,0:熄灭)
{
    unsigned char i;
    CS_LOW();//Successive Address Writing
    Write_HT1632C(1,WRITE_ID, 3); //write 命令码101,0xa0(1010 0000)
    Write_HT1632C(1,0x00,7);      //Memory address
   for(i = 0; i < 24; i++)            //点阵由24个区域组成
    {
      if(bk_mode)                   //如果bk_mode为1
            Write_HT1632C(0,0xff,8);//点亮一个区域
      else
            Write_HT1632C(0,0x00,8); // 熄灭一个区域
    }
    CS_HIGH();
}

void Init_HT1632C(void)
{
    CS_HIGH();
    WR_HIGH();
    DATA_HIGH();
    Write_CMD_HT1632C(SYS_DIS);         //关闭系统震荡
    Write_CMD_HT1632C(COM_OPTION);      //16COM n-mos模式   ab=01
    Write_CMD_HT1632C(RC_MASTER_MODE);//内部RC时钟
    Write_CMD_HT1632C(SYS_EN);          //关闭系统震荡
    Write_CMD_HT1632C(PWM_DUTY);      //PWM亮度控制 最亮
    Write_CMD_HT1632C(BLINK_OFF);       //关闭LED闪烁
    Write_CMD_HT1632C(LED_ON);          //打开LED显示
}


void Write_Data_HT1632C(unsigned char addr, unsigned char data) //addr数据需写入的地址,data需写入的数据
{
    CS_LOW();
    Write_HT1632C(1,WRITE_ID, 3);   //write 命令码101,0xa0(1010 0000)
    Write_HT1632C(1,addr << 1, 7);//写入地址
    Write_HT1632C(0,data ,8);       //写入数据
    CS_HIGH();
}


void setBrightness(unsigned char duty)//通过设置PWM来设置LED灯的亮度
{
if(duty > 15)   //duty的有效范围为0-15
    duty = 15;
Write_CMD_HT1632C(PWM_DUTY_MIN | duty);
}

void ledSwitch(bool state)//LED的状态选择,如果state=1则LED亮
{
if(state)
    Write_CMD_HT1632C(LED_ON);
else
    Write_CMD_HT1632C(LED_OFF);   
}

void Show_bitmap(const unsigned char *p)//形状显示,*p:要显示形状的字模
{
unsigned char i;
for(i = 0; i < 24; i++) //依次写入24个单元  
{
      Write_Data_HT1632C(LED_RAM_ADDR, *p);
      p++;
}
}
void Show_roll(const unsigned char *p)
{
unsigned char i,j;
for(j =0; j <8;j++)
{
    for(i = 0; i < 24; i++) //依次写入24个单元  
    {
      Write_Data_HT1632C(LED_RAM_ADDR, *p);
      p++;
    }
    delay(500);
}
}
void setup()
{
pinMode(powerEn,OUTPUT); //输出模式
pinMode(CS_pin, OUTPUT);
pinMode(WR_pin, OUTPUT);
pinMode(DATA_pin, OUTPUT);
digitalWrite(powerEn, HIGH); //置高
digitalWrite(CS_pin,HIGH);
digitalWrite(WR_pin,HIGH);
digitalWrite(DATA_pin,HIGH);
Init_HT1632C();//初始化函数调用(运行)
setBrightness(0.4);
}

void loop() {   

Show_bitmap(a11);
delay(100);
Show_bitmap(a12);
delay(100);
Show_bitmap(a13);
delay(100);
Show_bitmap(a14);
delay(100);
Show_bitmap(a15);
delay(100);
Show_bitmap(a16);
delay(100);
Show_bitmap(a17);
delay(100);
Show_bitmap(a18);
delay(100);

Show_bitmap(a20);
delay(100);
Show_bitmap(a21);
delay(100);
//Show_bitmap(a22);
//delay(100);
Show_bitmap(a23);
delay(100);
Show_bitmap(a24);
delay(100);
Show_bitmap(a25);
delay(100);
Show_bitmap(a26);
delay(100);
Show_bitmap(a27);
delay(100);
Show_bitmap(a28);
delay(100);
Show_bitmap(a29);
delay(100);
Show_bitmap(a30);
delay(100);
Show_bitmap(a31);
delay(100);
Show_bitmap(a32);
delay(100);
Show_bitmap(face);
delay(2000);
Show_bitmap(a7);
delay(400);
Show_bitmap(hartTable_left);
delay(400);
Show_bitmap(hartTable_right);
delay(400);
/*Show_bitmap(hartTable_left); //跳动的心
delay(400);
Show_bitmap(hartTable_right);
delay(400);
Show_bitmap(a1);
delay(50);
                  
Show_bitmap(a2);
delay(50);

Show_bitmap(a3);
delay(50);
   
Show_bitmap(a4);
delay(50);
//Write_CMD_HT1632C(BLINK_ON);
Show_bitmap(Z);
delay(1000);

Show_bitmap(face);
delay(1000);
Show_bitmap(a7);
delay(400);
Show_bitmap(hartTable_left);
delay(400);
Show_bitmap(hartTable_right);
delay(400); */

}
```MonsterYan 发表于 2018-7-23 14:32
前天下的单,昨天就收到了。到手后就直接被我家小丫头征用了,戴在胸口到处和人显摆……

但晚上准备重写程 ...
哦哦,好的。 我补出来了,您看一下吧(直接插入microusb,打开arduinoide软件看到端口下载更改即可)附件是字模软件

Mingming.Zhang 发表于 2018-7-2 13:00:57

hnyzcj 发表于 2018-7-2 10:17
来抬个头吗,帅哥

在等一个时机,再露脸

发表于 2020-12-16 13:27:34

#define         CMD_ID            0x80//command 命令码100 0x80(1000 0000)
#define         WRITE_ID          0xa0//write 命令码101,0xa0(1010 0000)
#define         SYS_DIS         0x00//关闭系统震荡         
#define         SYS_EN            0x01//打开系统震荡         
#define         LED_OFF         0x02//关闭LED显示      
#define         LED_ON            0x03//打开LED显示      
#define         BLINK_OFF         0x08//关闭闪烁      
#define         BLINK_ON          0x09//打开闪烁                  
#define         SLAVE_MODE      0x10//从模式      
#define         RC_MASTER_MODE    0x18//内部RC时钟   
#define         COM_OPTION      0x24//16COM n-mos模式   ab=01   
#define         PWM_DUTY          0xAE//PWM亮度控制 最亮   
#define         PWM_DUTY_MIN      0xA0//PWM亮度控制 最暗

#define         CS_LOW()      digitalWrite(CS_pin,LOW)//CS置低
#define         CS_HIGH()   digitalWrite(CS_pin,HIGH) //CS置高

#define         WR_LOW()      digitalWrite(WR_pin,LOW)//WR置低
#define         WR_HIGH()   digitalWrite(WR_pin,HIGH) //WR置高

#define         DATA_LOW()    digitalWrite(DATA_pin,LOW)//DATA置低
#define         DATA_HIGH()   digitalWrite(DATA_pin,HIGH) //DATA置高

intpowerEn = 9;
intCS_pin = 11;
intRD_pin = A2;
intWR_pin = 10;
intDATA_pin = A1;

unsigned charLED_RAM_ADDR[]= {                                    
                                     0x00,0x02,
                                     0x04,0x06,
                                     0x08,0x0a,
                                     0x0c,0x0e,
                                     0x10,0x12,
                                     0x14,0x16,
                                     0x18,0x1a,
                                     0x1c,0x1e,
                                     0x20,0x22,
                                     0x24,0x26,
                                     0x28,0x2a,
                                     0x2c,0x2e
};

const unsigned charASC_II_table_R[]= {0x00,0x00,0x00,0x00,0x78,0x00,0x90,0x00,0x90,0x00,0x70,0x00,
0x50,0x00,0x90,0x00,0x90,0x00,0xB8,0x01,0x00,0x00,0x00,0x00};/*"R",0*/
const unsigned charASC_II_table_L[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x01,0xF8,0x01,0x00,0x00,0x00,0x00};/*"L",0*/
const unsigned charhartTable_left[]= {0x00,0x00,0x00,0x00,0x8C,0x01,0xDE,0x03,0xFE,0x03,0xFE,0x03,
0xFC,0x01,0xF8,0x00,0x70,0x00,0x20,0x00,0x00,0x00,0x00,0x00};/*"Left heart",0*/
const unsigned charhartTable_right[]= {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x03,0xBC,0x07,0xFC,0x07,
0xFC,0x07,0xF8,0x03,0xF0,0x01,0xE0,0x00,0x40,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned charr[]= {0x00,0x00,0x00,0x00,0x78,0x00,0x90,0x00,0x90,0x00,0x70,0x00,
0x50,0x00,0x90,0x00,0x90,0x00,0xB8,0x01,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned charface[]= {0xF0,0x00,0x0C,0x03,0x06,0x06,0x02,0x04,0x0B,0x0D,0x0B,0x09,
0x01,0x08,0x93,0x0C,0xF2,0x04,0x06,0x06,0x0C,0x03,0xF0,0x00,};/*"Rihgt heart",0*/
const unsigned charZ[]= {0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x01,0x80,0x00,0x40,0x00,
0x20,0x00,0x10,0x00,0x08,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara1[]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,
0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara2[]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x90,0x00,
0x90,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara3[]= {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x08,0x01,0x08,0x01,
0x08,0x01,0x08,0x01,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara4[]= {0x00,0x00,0x00,0x00,0xFC,0x03,0x04,0x02,0x04,0x02,0x04,0x02,
0x04,0x02,0x04,0x02,0x04,0x02,0xFC,0x03,0x00,0x00,0x00,0x00,};/*"Rihgt heart",0*/
const unsigned chara5[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};/*"Rihgt heart",0*/
unsigned chara6[]= {
0x00,0x00,0x08,0x00,0x1C,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,
0x7F,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00};/*"A",0*/
const unsigned chara7[]= {
0x00,0x00,0x00,0x00,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,
0x60,0x00,0x60,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,};/*"I",0*/
//tx_moode为数据读取的方式,data为输入的数据,cnt为读取数据位数
const unsigned chara8[]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x88,0x00,0x88,0x00,
0x88,0x00,0x88,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*"U",0*/
const unsigned chara9[]= {
0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x01,0x04,0x02,0x04,0x02,
0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00,0x00,};/*"D",0*/
const unsigned chara10[]= {
0x00,0x00,0x04,0x04,0x08,0x02,0x10,0x01,0xA0,0x00,0x40,0x00,
0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00};/*"Y",0*/

const unsigned chara11[]= {
0x00,0x00,0x00,0x01,0x80,0x03,0xC0,0x07,0x60,0x0C,0x60,0x0C,
0xE0,0x0F,0xE0,0x0F,0x60,0x0C,0x60,0x0C,0x60,0x0C,0x00,0x00};/*"Y",0*/
const unsigned chara12[]= {
0x00,0x00,0x80,0x00,0xC0,0x01,0xE0,0x03,0x30,0x06,0x30,0x06,
0xF0,0x07,0xF0,0x07,0x30,0x06,0x30,0x06,0x30,0x06,0x00,0x00};/*"Y",0*/
const unsigned chara13[]= {
0x00,0x00,0x40,0x00,0xE0,0x00,0xF0,0x01,0x18,0x03,0x18,0x03,
0xF8,0x03,0xF8,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x00,0x00};/*"Y",0*/
const unsigned chara14[]= {
0x00,0x00,0x20,0x00,0x70,0x00,0xF8,0x00,0x8C,0x01,0x8C,0x01,
0xFC,0x09,0xFC,0x09,0x8C,0x09,0x8C,0x09,0x8C,0x01,0x00,0x00};/*"Y",0*/
const unsigned chara15[]= {
0x00,0x00,0x10,0x00,0x38,0x00,0x7C,0x00,0xC6,0x00,0xC6,0x08,
0xFE,0x04,0xFE,0x04,0xC6,0x04,0xC6,0x04,0xC6,0x08,0x00,0x00};/*"Y",0*/
const unsigned chara16[]= {
0x00,0x00,0x08,0x00,0x1C,0x00,0x3E,0x00,0x63,0x00,0x63,0x0C,
0x7F,0x02,0x7F,0x02,0x63,0x02,0x63,0x02,0x63,0x0C,0x00,0x00};/*"Y",0*/
const unsigned chara17[]= {
0x00,0x00,0x04,0x00,0x0E,0x00,0x1F,0x00,0x31,0x00,0x31,0x0E,
0x3F,0x01,0x3F,0x01,0x31,0x01,0x31,0x01,0x31,0x0E,0x00,0x00};/*"Y",0*/
const unsigned chara18[]= {
0x00,0x00,0x02,0x08,0x07,0x08,0x0F,0x08,0x18,0x08,0x18,0x0F,
0x9F,0x08,0x9F,0x08,0x98,0x08,0x98,0x08,0x18,0x07,0x00,0x00};/*"Y",0*/
const unsigned chara19[]= {
0x00,0x00,0x02,0x08,0x07,0x08,0x0F,0x08,0x18,0x08,0x18,0x0F,
0x9F,0x08,0x9F,0x08,0x98,0x08,0x98,0x08,0x18,0x0F,0x00,0x00};/*"Y",0*/
const unsigned chara20[]= {
0x00,0x00,0x01,0x04,0x03,0x04,0x07,0x04,0x0C,0x04,0x8C,0x07,
0x4F,0x04,0x4F,0x04,0x4C,0x04,0x4C,0x04,0x8C,0x07,0x00,0x00};/*"Y",0*/
const unsigned chara21[]= {
0x00,0x00,0x00,0x02,0x01,0x02,0x03,0x02,0x06,0x02,0xC6,0x03,
0x27,0x02,0x27,0x02,0x26,0x02,0x26,0x02,0xC6,0x03,0x00,0x00};/*"Y",0*/
const unsigned chara22[]= {
0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x03,0x01,0xE3,0x01,
0x13,0x01,0x13,0x09,0x13,0x09,0x13,0x09,0xE3,0x01,0x00,0x00};/*"Y",0*/
const unsigned chara23[]= {
0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x03,0x01,0xE3,0x09,
0x13,0x01,0x13,0x09,0x13,0x09,0x13,0x09,0xE3,0x01,0x00,0x00};
const unsigned chara24[]= {
0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x81,0x08,0xF1,0x04,
0x89,0x08,0x89,0x04,0x89,0x04,0x89,0x04,0xF1,0x08,0x00,0x00};
const unsigned chara25[]= {
0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x0C,0x78,0x02,
0x44,0x0C,0x44,0x02,0x44,0x02,0x44,0x02,0x78,0x0C,0x00,0x00};
const unsigned chara26[]= {
0x00,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x0E,0x3C,0x01,
0x22,0x0E,0x22,0x01,0x22,0x01,0x22,0x01,0x3C,0x0E,0x00,0x00};
const unsigned chara27[]= {
0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x07,0x9E,0x08,
0x11,0x0F,0x91,0x08,0x91,0x08,0x91,0x08,0x1E,0x07,0x00,0x00};
const unsigned chara28[]= {
0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x88,0x03,0x4F,0x04,
0x88,0x07,0x48,0x04,0x48,0x04,0x48,0x04,0x8F,0x03,0x00,0x00};
const unsigned chara29[]= {
0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xC4,0x01,0x27,0x02,
0xC4,0x03,0x24,0x02,0x24,0x02,0x24,0x02,0xC7,0x01,0x00,0x00};
const unsigned chara30[]= {
0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xE2,0x00,0x13,0x01,
0xE2,0x01,0x12,0x01,0x12,0x01,0x12,0x01,0xE3,0x00,0x00,0x00};
const unsigned chara31[]= {
0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x71,0x00,0x89,0x00,
0xF1,0x00,0x89,0x00,0x89,0x00,0x89,0x00,0x71,0x00,0x00,0x00};
const unsigned chara32[]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,
0x78,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x38,0x00,0x00,0x00};
void Write_HT1632C(unsigned char tx_mode , unsigned char data, unsigned char cnt)
{
    unsigned char i,temp;
    switch (tx_mode){
    case 0:
            temp = 0x01;//从右至左依次写入 若输入数据为0000 0001,则写入为1000 0000
            for(i = 0; i < cnt; i++)
            {
                  WR_LOW(); //低电平写入
                  if(data & temp)
                      DATA_HIGH();
                  else
                      DATA_LOW();
                  temp <<= 1;
                  WR_HIGH(); //高电平完成写入保存
            }
            break;
    case 1:
            temp = 0x80;    //从左至右,若输入数据为0000 0001,则写入仍为0000 0001
            for(i = 0; i < cnt; i++)
            {
                  WR_LOW();
                  if(data & temp)
                      DATA_HIGH();
                  else
                      DATA_LOW();
                  temp >>= 1;
                  WR_HIGH();
            }
             break;
   default : break;
   }
}

void Write_CMD_HT1632C(unsigned char cmd)
{
    CS_LOW();
    Write_HT1632C(1,CMD_ID, 3);//command 命令码100 0x80(1000 0000)
    Write_HT1632C(1,cmd, 9);   //命令数据,第9位为0
    CS_HIGH();
}

void Clr_HT1632C(unsigned char bk_mode)//(1:点亮,0:熄灭)
{
    unsigned char i;
    CS_LOW();//Successive Address Writing
    Write_HT1632C(1,WRITE_ID, 3); //write 命令码101,0xa0(1010 0000)
    Write_HT1632C(1,0x00,7);      //Memory address
   for(i = 0; i < 24; i++)            //点阵由24个区域组成
    {
      if(bk_mode)                   //如果bk_mode为1
            Write_HT1632C(0,0xff,8);//点亮一个区域
      else
            Write_HT1632C(0,0x00,8); // 熄灭一个区域
    }
    CS_HIGH();
}

void Init_HT1632C(void)
{
    CS_HIGH();
    WR_HIGH();
    DATA_HIGH();
    Write_CMD_HT1632C(SYS_DIS);         //关闭系统震荡
    Write_CMD_HT1632C(COM_OPTION);      //16COM n-mos模式   ab=01
    Write_CMD_HT1632C(RC_MASTER_MODE);//内部RC时钟
    Write_CMD_HT1632C(SYS_EN);          //关闭系统震荡
    Write_CMD_HT1632C(PWM_DUTY);      //PWM亮度控制 最亮
    Write_CMD_HT1632C(BLINK_OFF);       //关闭LED闪烁
    Write_CMD_HT1632C(LED_ON);          //打开LED显示
}

void Write_Data_HT1632C(unsigned char addr, unsigned char data) //addr数据需写入的地址,data需写入的数据
{
    CS_LOW();
    Write_HT1632C(1,WRITE_ID, 3);   //write 命令码101,0xa0(1010 0000)
    Write_HT1632C(1,addr << 1, 7);//写入地址
    Write_HT1632C(0,data ,8);       //写入数据
    CS_HIGH();
}

void setBrightness(unsigned char duty)//通过设置PWM来设置LED灯的亮度
{
if(duty > 15)   //duty的有效范围为0-15
    duty = 15;
Write_CMD_HT1632C(PWM_DUTY_MIN | duty);
}

void ledSwitch(bool state)//LED的状态选择,如果state=1则LED亮
{
if(state)
    Write_CMD_HT1632C(LED_ON);
else
    Write_CMD_HT1632C(LED_OFF);   
}

void Show_bitmap(const unsigned char *p)//形状显示,*p:要显示形状的字模
{
unsigned char i;
for(i = 0; i < 24; i++) //依次写入24个单元  
{
      Write_Data_HT1632C(LED_RAM_ADDR, *p);
      p++;
}
}
void Show_roll(const unsigned char *p)
{
unsigned char i,j;
for(j =0; j <8;j++)
{
    for(i = 0; i < 24; i++) //依次写入24个单元  
    {
      Write_Data_HT1632C(LED_RAM_ADDR, *p);
      p++;
    }
    delay(500);
}
}
void setup()
{
pinMode(powerEn,OUTPUT); //输出模式
pinMode(CS_pin, OUTPUT);
pinMode(WR_pin, OUTPUT);
pinMode(DATA_pin, OUTPUT);
digitalWrite(powerEn, HIGH); //置高
digitalWrite(CS_pin,HIGH);
digitalWrite(WR_pin,HIGH);
digitalWrite(DATA_pin,HIGH);
Init_HT1632C();//初始化函数调用(运行)
setBrightness(0.4);
}

void loop() {   

Show_bitmap(a11);
delay(100);
Show_bitmap(a12);
delay(100);
Show_bitmap(a13);
delay(100);
Show_bitmap(a14);
delay(100);
Show_bitmap(a15);
delay(100);
Show_bitmap(a16);
delay(100);
Show_bitmap(a17);
delay(100);
Show_bitmap(a18);
delay(100);

Show_bitmap(a20);
delay(100);
Show_bitmap(a21);
delay(100);
//Show_bitmap(a22);
//delay(100);
Show_bitmap(a23);
delay(100);
Show_bitmap(a24);
delay(100);
Show_bitmap(a25);
delay(100);
Show_bitmap(a26);
delay(100);
Show_bitmap(a27);
delay(100);
Show_bitmap(a28);
delay(100);
Show_bitmap(a29);
delay(100);
Show_bitmap(a30);
delay(100);
Show_bitmap(a31);
delay(100);
Show_bitmap(a32);
delay(100);
Show_bitmap(face);
delay(2000);
Show_bitmap(a7);
delay(400);
Show_bitmap(hartTable_left);
delay(400);
Show_bitmap(hartTable_right);
delay(400);
/*Show_bitmap(hartTable_left); //跳动的心
delay(400);
Show_bitmap(hartTable_right);
delay(400);
Show_bitmap(a1);
delay(50);

Show_bitmap(a2);
delay(50);

Show_bitmap(a3);
delay(50);

Show_bitmap(a4);
delay(50);
//Write_CMD_HT1632C(BLINK_ON);
Show_bitmap(Z);
delay(1000);

Show_bitmap(face);
delay(1000);
Show_bitmap(a7);
delay(400);
Show_bitmap(hartTable_left);
delay(400);
Show_bitmap(hartTable_right);
delay(400); */

}

hnyzcj 发表于 2018-7-2 10:17:31

来抬个头吗,帅哥

hnyzcj 发表于 2018-7-2 13:03:32

Mingming.Zhang 发表于 2018-7-2 13:00
在等一个时机,再露脸

:lol

dt 发表于 2018-7-4 18:54:00

谁能告诉我哪里有这个灯板卖

Mingming.Zhang 发表于 2018-7-5 11:27:53

dt 发表于 2018-7-4 18:54
谁能告诉我哪里有这个灯板卖
https://www.dfrobot.com.cn/goods-1762.html    这里

doublb2017 发表于 2018-7-6 08:42:09

在某宝上个物料包吧,到处抓零件,太费劲了,很cool的产品

Mingming.Zhang 发表于 2018-7-6 09:54:34

doublb2017 发表于 2018-7-6 08:42
在某宝上个物料包吧,到处抓零件,太费劲了,很cool的产品

是的,我可以统计一下 一次整理10套物料包    方便大家一次完成

chinazmde 发表于 2018-7-7 10:21:23

支持一下



微笑的rockets 发表于 2018-7-11 19:00:01

https://www.dfrobot.com.cn/goods-1761.html
新鲜出炉的完整版,买来即可以使用的版本。

再粗点再大点 发表于 2018-7-15 13:12:44

学习了

MonsterYan 发表于 2018-7-23 14:32:09

本帖最后由 MonsterYan 于 2018-7-23 15:50 编辑

前天下的单,昨天就收到了。到手后就直接被我家小丫头征用了,戴在胸口到处和人显摆……

但晚上准备重写程序时发现在网上根本找不到“Thomas Rabbitson Led Matrix Board V1.0   灯板”这个灯板的介绍和接口定义,也不知道徽章里面是怎么连线的……能把示范代码贴出来么?或者给个灯板的资料也行啊……

Niko 发表于 2018-7-28 21:41:40

已mark,谢楼主

Emp~少年 发表于 2018-8-2 10:30:04

请问3d模型文件能否get一下?

Mingming.Zhang 发表于 2018-8-2 11:06:08

Emp~少年 发表于 2018-8-2 10:30
请问3d模型文件能否get一下?


模型文件以上,快拿走

Emp~少年 发表于 2018-8-2 11:14:55

您好,我非常喜欢您这个产品,想请问您fpc和beetle的引脚如何接线的呢?上面的图片不是很清晰

Emp~少年 发表于 2018-8-2 11:17:18

Mingming.Zhang 发表于 2018-8-2 11:06
模型文件以上,快拿走

好的谢谢

Emp~少年 发表于 2018-8-2 11:27:00

Emp~少年 发表于 2018-8-2 11:17
好的谢谢

还有您的fpc,beetle,电池,还有充电板等都封装在这个外壳之中么? 他们是如何相连的呢?

Mingming.Zhang 发表于 2018-8-2 15:56:15

Emp~少年 发表于 2018-8-2 11:14
您好,我非常喜欢您这个产品,想请问您fpc和beetle的引脚如何接线的呢?上面的图片不是很清晰 ...

等等,晚点回复你的所有问题。在回复里记得看

1095919770 发表于 2018-8-3 12:33:21

将beetle插上电脑后,识别不了串口,这是程序使用了串口还是什么问题
页: [1] 2 3 4
查看完整版本: 3D打印,可定义动画徽章