第一步:引脚的初始化

我用的是AT32F403a的芯片,如图配置引脚即可,因为是两扫的单元板(红色),所以有的引脚是没有用的真正有用的是OE、A、B、ST、CLK、R引脚。配置成推挽输出

void bsp_LED_Unit_board_init ( void )
{
    gpio_init_type gpio_init_struct;

/* enable the led clock */

crm_periph_clock_enable ( CRM_IOMUX_PERIPH_CLOCK, TRUE ); //复用时钟使能

crm_periph_clock_enable ( CRM_GPIOB_PERIPH_CLOCK, TRUE );
    crm_periph_clock_enable ( CRM_GPIOD_PERIPH_CLOCK, TRUE );
    crm_periph_clock_enable ( CRM_GPIOC_PERIPH_CLOCK, TRUE );
    /* set default parameter */
    gpio_default_para_init ( &gpio_init_struct );

/* configure the led gpio */
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_pins =  GPIO_PINS_7 | GPIO_PINS_6 | GPIO_PINS_5 ;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init ( GPIOB, &gpio_init_struct );

gpio_pin_remap_config ( SWJTAG_MUX_010, TRUE ); //禁用JTAG功能使能 SWD 功能, PB3 PB4用作普通IO
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_pins = GPIO_PINS_4 | GPIO_PINS_3 ;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init ( GPIOB, &gpio_init_struct );

/* configure the led gpio */
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_pins = GPIO_PINS_7 | GPIO_PINS_6 | GPIO_PINS_5;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init ( GPIOD, &gpio_init_struct );

/* configure the led gpio */
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_pins = GPIO_PINS_4 | GPIO_PINS_3 | GPIO_PINS_2 | GPIO_PINS_1 | GPIO_PINS_0;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init ( GPIOD, &gpio_init_struct );

/* configure the led gpio */
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_pins = GPIO_PINS_12 | GPIO_PINS_11 | GPIO_PINS_10;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init ( GPIOC, &gpio_init_struct );

OE2_1;
    OE1_1;
}

第二步:清屏函数

只是把数据引脚R拉低,然后往里面写入低电平即可,把所有点写完,锁存,然后在显示

void clear_scree_board1 ( void )
{
    int i;

R1_0;
    OE1_1;

for ( i = 0; i < 32 * 8 * led_board_num1; i++ ) //清屏
    {
        CLK1_0;
        delay_us ( 5 );
        CLK1_1;
    }

ST1_1;
    delay_us ( 2 );
    ST1_0;
    delay_us ( 2 );
    OE1_0;//显示

}

第三步:写数据函数(一个字节一个字节的写)

static void writedata_led_board1 ( uint8_t data )
{
    int i;

for ( i = 0; i < 8; i++ )
    {
        if ( data & 0x01 ) //高位在前,如果想低位在前使用(data&0x80)
        {
            R1_1;
        }
        else
        {
            R1_0;
        }

CLK1_0;
        delay_us ( 1 );//必须要加一个延时
        CLK1_1;
        data = data >> 1;
    }
}

第四步:显示字符汉字函数

这个函数是根据单元板的扫描逻辑进行编写的,我的板子的扫描逻辑如图所示,我嘴笨说不清楚

 我是把要显示的汉字字符放在一个大的数组里面,只要字模取得对,就可以显示,字模取模方式为:如果要显示12X12的汉字字符 :行列式,阴码,顺向,点阵大小12X16

按理来说,显示16X16的汉字也可也显示,我没有测试,工作用不到

void display_12X12_board1 ( void )
{
    uint8_t row, lin;

for ( row = 0; row < 2; row++ ) //2行
    {

OE1_1;
        for ( int i = 0; i < led_board_num1; i++ ) //用于判断几块单元板连级,有几块写几遍,把所有单元板的行都写完,在进行换行,不然会显示错误
        {

for ( int p = 0; p < 4; p++ ) //共有4个四列
            {
                for ( lin = 0; lin < 4; lin++ ) //4列
                {
                    for ( int zi = 0; zi < 2; zi++ ) //每列有两个字
                    {

uint8_t data;

if ( led_board_num1 == 1 )
                        {
                            data = display_board1.write_data_buff[48 - 16 * lin + 2 * zi + 4 * p +  row];
                            writedata_led_board1 ( data );

}

if ( led_board_num1 == 2 )
                        {
                            if ( i == 0 ) //写第二块屏上的字
                            {
                                data = display_board1.write_data_buff[112 - 16 * lin + 2 * zi + 4 * p +  row];
                                writedata_led_board1 ( data );
                            }

if ( i == 1 ) //写第一块屏上的字
                            {
                                data = display_board1.write_data_buff[48 - 16 * lin + 2 * zi + 4 * p +  row];
                                writedata_led_board1 ( data );
                            }
                        }

if ( led_board_num1 == 3 )
                        {

if ( i == 0 ) //写第三块屏上的字
                            {
                                data = display_board1.write_data_buff[176 - 16 * lin + 2 * zi + 4 * p +  row];
                                writedata_led_board1 ( data );

}

if ( i == 1 ) //写第二块屏上的字
                            {
                                data = display_board1.write_data_buff[112 - 16 * lin + 2 * zi + 4 * p +  row];
                                writedata_led_board1 ( data );
                            }

if ( i == 2 ) //写第一块屏上的字
                            {
                                data = display_board1.write_data_buff[48 - 16 * lin + 2 * zi + 4 * p +  row];
                                writedata_led_board1 ( data );
                            }
                        }
                    }
                }

}
        }

ST1_1;
        delay_us ( 1 );
        ST1_0;

switch ( row )
        {
            case ( 1 ) : A1_0; B1_1 ; break;

case ( 0 ) : A1_1; B1_0; break;
        }

OE1_0;  //显示
        delay_us ( 10 ); //亮度调节,数值越大,led越亮  
    }
}

Hub12接口,P10两扫单元板的开发相关推荐

  1. 【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板

    偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...

  2. 一文搞懂HUB75接口(附带LED单元板驱动介绍)

    导读:HUB75接口是一种常用的LED单元板驱动接口,本文就常见的HUB75接口知识点进行整理. 一.HUB75 接口介绍 上图中有 A/B/C/D 4根地址线,所以是16扫( 2 4 = 16 2^ ...

  3. 【花雕动手做】有趣好玩的音乐可视化系列项目(30)--P6 LED单元板

    偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...

  4. 51单片机驱动P10单元板

    以下是P10单元板(单色,1/4扫描,户外半户外)的实物图. P10屏幕是店铺常用的点阵屏幕,像素32*16(可以级联很多块).内部电路是74hc595或者是74hc595的替代芯片和编码驱动芯片组合 ...

  5. LED单元板驱动(HUB75接口)

    开始之前先吐槽一下,搜这个的资料.要么都是Arduino,要么单片机的收费.小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指 ...

  6. 最新 Arduino 驱动 12接口/户外 LED显示屏/LED点阵屏/LED单元板

    起因 现有的驱动LED显示屏的资料,比较好的只有这个.但是它驱动的是08接口的室内显示屏,而我要驱动的是12接口的户外显示屏.两种屏幕的区别在于户外屏幕点阵比较稀疏,而且二者的扫描方式,驱动方式都不太 ...

  7. STM32F103 驱动32x64双色点阵单元板 (标准HUB08 接口 F3.75)

    MCU:STM32F103C8 点阵屏:32*64 F3.75  单元板  红绿双色 显示     接口:标准HUB08   OE :高电平有效  ,138译码  , 1/16 扫   欢迎加QQ群 ...

  8. Python零基础先修课第六周两个单元

    Python零基础先修课第六周两个单元 笔记 第一单元 第二单元 课后练习 第一单元 第二单元 笔记 第一单元 计算生态 计算思维 -抽象.自动化 -实证思维.逻辑思维.计算思维 计算机模拟:模拟现实 ...

  9. php主板主要是支持,i7处理器配什么主板好?两款主-板推荐

    i7处理器配什么主板好?两款主-板推荐 发布时间:2017-08-20 22:05 来源:互联网 当前栏目:电脑技巧 导语:大家知道Intel i7中央处理器应该配什么样的主板吗?在这篇文章中,小编将 ...

最新文章

  1. Python程序设计 第六章 函数(续
  2. 微软推出Visual Studio Kubernetes工具包预览版
  3. LoRa、蓝牙、技术在电子显示牌上的应用
  4. oracle函数分为几个大类,ORACLE常见分析函数有哪几类呢?
  5. 程序员的“非程序员”之路
  6. 安装Ubuntu最后重启出错Write through
  7. 敏感词的字典树匹配(lua版)
  8. 2019数据安装勾选_Origin2019下载和安装教程
  9. 高德地图GPS经纬度转高德经纬度
  10. python中class什么意思_python中的class是什么意思
  11. html怎么修改网页背景色,CSS如何设置网页背景颜色、背景图片
  12. 大话谈VUE之export const
  13. .frm mysql_mysqlfrm使用
  14. java使用jbarcode生成条形码
  15. 传教士与野人过河问题 人工智能实验算法
  16. python绘图报错
  17. 基于OpenSSL的CA建立及证书签发(签发单域名/IP)
  18. 大厂Java岗春招必看:论一个面渣逆袭之路上必学得那些知识点
  19. vue实现盒子的拖拽移动
  20. 五种经典卷积神经网络

热门文章

  1. linux gpio 模拟串口,STM32的GPIO口模拟串口通信.rar
  2. jq点击事件实现防抖
  3. c语言表达式和逻辑表达式是,C语言中关系表达式和逻辑表达式的值是什么
  4. 监听element-ui的Calendar 日历组件的上一月 今天 下一月
  5. 如何用Android studio开发一个实现基本功能的新闻app?——简闻(源码及教程)
  6. 服务器意外断电MySQL无法启动
  7. 滴滴面试-zoom视频实习生-8.11
  8. 【T+】安装畅捷通T+提示安装向导找不到环境检测工具,是否手动选择环境检测工具文件夹。
  9. CoSTA:用于空间转录组分析的无监督卷积神经网络学习方法
  10. echarts显示地图以及jQuery地域选择器插件