|
—
本帖被 發騷友 执行加亮操作(2018-01-20)
—
根据本坛顶级大神 2545889167的神贴LED点阵胸牌综合改造集合(开源 重新编程)http://bbs.mydigit.cn/read.php?tid=2324306改造!非常非常非常感谢大神2545889167!!让LED点阵胸牌成为学习GD32、STM32最便宜最好用的开发板!收下部分图片和文字直接借用大神的。 我的另一贴加了温湿度: 两键LED点阵胸牌改造可调时钟+DHT11定时显示温湿度http://bbs.mydigit.cn/read.php?tid=2345288 我以前10元买过一块,刚好是这块,双按键,黑色PCB,单片机为GD32F150C6,其 串口的Tx,Rx位置在正面,左边的按键设计了上拉结构。这个按键接了PA15作为按键检测,同时又用一个电阻上拉到boot0,也就是说,只要在给芯片上电前按住按键,就会加入程序下载的ISP模式,然后使用串口下载程序。也就是说这块两键胸牌,只要用某宝2-3元的USB转TTL PL2303HX模块 ,就可以用串口方式下载程序到设备,门槛非常低。 只需要焊接胸牌里6针的排线,好插好用,3根杜邦线,分别接PL2303的Rx,Tx,GND,然后把PL2303插入电脑,就可以了。 1 GND 2 Rx 3 Tx 4 VCC 5 key1 6 key2 5,6脚也引出来,以后可以接IIC,可以接DHT11,加入温湿度,红外等等传感器,也可以接继电器和电机控制,PWM等等设备 程序源码在这里,点击下载: 解压密码 :kindzhon20180119 原始固件在这里,可以刷回去。gd32f150胸牌原始固件+2按键_kindzhon.bin 软件你需要安装keil5和GigaDevice.GD32F1x0_DFP.3.0.2.pack,然后导入我提供的源码就可以编译了,编译好的程序在Objects\LEDs.hex, 然后,按住左键 ,打开胸牌电源开关,下载到设备。 用的是这个。 视频效果看这里 http://player.youku.com/embed/XMzMzMjI3NTQwOA== main.c主程序 调节不太灵活,延时时钟,不用时钟模块。 - #include "gd32f1x0.h"
- #include "main.h"
- #include "LED_SCAN.h"
- #include "LED_DISPLAY.h"
- //两键胸牌 按键1 PA15 按下为0
- // 按键2 为PB12 按下为1
- // By kindzhon 2018.1.19
- #include "gd32f1x0_libopt.h"
- #include "delay.h"
- #include "key.h"
- int main(void)
- {
- uint8_t hour=0,min=0,second=0;//设置启始时间
- delay_init();
- LED_Init();
- KEY_Init();
- while (1)
- {
- show_time(hour,min,second);
- delay_ms(1003);
- second++;
- switch (KEY_Scan())
- {
- case 0:hour++; break; //按键小时加1
- case 1:min++;break; // 按键 分钟加1
- }
- if(second==60)
- {
- second=0;min++;
- if(min==60)
- {
- min=0;hour++;
- if(hour==24) hour=0;
- }
- }
- }
- }
key.h - #ifndef _KEY_H
- #define _KEY_H
- #include "gd32f1x0_gpio.h"
- //两键胸牌 按键1 PA15 按下为0
- // 按键2 为PB12 按下为1
- // By kindzhon 2018.1.19
- #define KEY1 (1)
- #define KEY2 (2)
- void KEY_Init()
- {
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_GPIOB);
- // rcu_periph_clock_enable(RCU_SYSCFG);
- gpio_mode_set(GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_NONE,GPIO_PIN_15);
- gpio_mode_set(GPIOB,GPIO_MODE_INPUT,GPIO_PUPD_NONE,GPIO_PIN_12);
- }
- uint8_t Read_KEY(int key_num)
- {
- switch(key_num)
- {
- case 0:return gpio_input_bit_get(GPIOA,GPIO_PIN_15);
- case 1:return gpio_input_bit_get(GPIOB,GPIO_PIN_12);
- }
- }
- uint8_t KEY_Scan()
- {
- static uint8_t key_up=1;
- if(key_up&&(Read_KEY(0)==0||Read_KEY(1)==1))
- {
- key_up=0;
- if(Read_KEY(0)==1)return 0;
- else if(Read_KEY(1)==0)return 1;
- }
- else if(Read_KEY(0)==0&&Read_KEY(1)==1)
- key_up=1;
- return 2;
- }
- int EvbKeyScan()
- {
- int count = 0xffff;
- if (RESET != exti_interrupt_flag_get(EXTI_0))
- {
- while(count--);
- if (RESET != exti_interrupt_flag_get(EXTI_0))
- {
- exti_interrupt_flag_clear(EXTI_0);
- return 1;
- }
- }
- if (RESET != exti_interrupt_flag_get(EXTI_1))
- {
- while(count--);
- if (RESET != exti_interrupt_flag_get(EXTI_1))
- {
- exti_interrupt_flag_clear(EXTI_1);
- return 2;
- }
- }
- return 0;
- }
- #endif /* _TCL_COLIBRI_KEY_H*/
font.h - const unsigned char font_time_num[10][14] = { //时钟用 字库 修改每两字节倒序排列。
- {0x00,0x00,0xFC,0x01,0x02,0x02,0x01,0x04,0x01,0x04,0x02,0x02,0xFC,0x01},/*"0",0*/
- {0x00,0x00,0x00,0x04,0x00,0x04,0xFF,0x07,0x02,0x04,0x02,0x04,0x00,0x00},/*"1",1*/
- {0x00,0x00,0x1E,0x06,0x21,0x04,0x41,0x04,0x81,0x04,0x01,0x05,0x0E,0x06},/*"2",2*/
- {0x00,0x00,0x8E,0x03,0x51,0x04,0x21,0x04,0x21,0x04,0x01,0x04,0x06,0x03},/*"3",3*/
- {0x80,0x04,0x80,0x04,0xFF,0x07,0x86,0x04,0x88,0x04,0xB0,0x00,0xC0,0x00},/*"4",4*/
- {0x00,0x00,0xC1,0x01,0x21,0x02,0x11,0x04,0x11,0x04,0x11,0x04,0x3F,0x03},/*"5",5*/
- {0x00,0x00,0xE0,0x03,0x12,0x04,0x11,0x04,0x11,0x04,0x22,0x02,0xFC,0x01},/*"6",6*/
- {0x00,0x00,0x03,0x00,0x0D,0x00,0x31,0x00,0xC1,0x07,0x01,0x00,0x03,0x00},/*"7",7*/
- {0x00,0x00,0x8E,0x03,0x51,0x04,0x21,0x04,0x21,0x04,0x51,0x04,0x8E,0x03},/*"8",8*/
- {0x00,0x00,0xFC,0x01,0x22,0x02,0x41,0x04,0x41,0x04,0x41,0x02,0x3E,0x00},/*"9",9*/
- };
[ 此帖被kindzhon在2018-02-03 12:09重新编辑 ]
|