基于博流BL606P音视频开发板驱动LED数码管

描述

编辑语:

芯片开放社区(OCC)面向广大开发者推出应用实战系列内容,通过分享开发者实战开发案例,总结应用开发经验,梳理开发中的常见问题及解决方案,为后续参与的开发者提供更多参考与借鉴。

本文是关于开发者 zhanghui 基于BL606P-DVK开发板实战开发的系列文章中的第四篇,主要介绍了LED数据管模块TM1638驱动的测试,后面还会持续更新该开发者的测评内容,敬请期待!

01 硬件连接

使用开发板的GPIO3,GPIO4,GPIO5连接TM1638模块的STB,CLK和DIO。

led

02 程序

2.1 tm1638.c

 

#include 
#include 
#include 
#include "app_main.h"
#include 

#include 
#include 
#include "tm1638.h"

gpio_dev_t gpio_stb = { GPIO_PIN_3, OUTPUT_PUSH_PULL, NULL };
gpio_dev_t gpio_clk= { GPIO_PIN_4, OUTPUT_PUSH_PULL, NULL };
gpio_dev_t gpio_dio = { GPIO_PIN_5, OUTPUT_PUSH_PULL, NULL };

uint8_t const tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
uint8_t ds_log[8]={0x40,0x7c,0x38,0x7d,0x3f,0x7d,0x73,0x40};

void tm1638_WriteDat(uint8_t dat)                        
{
uint8_t i;
for(i=0;i<8;i++)
{
clk_l();
if(dat&0X01)
{
dio_h();
}        
else
{
dio_l();
}
dat>>=1;
clk_h();
        }
}

void tm1638_WriteCmd(uint8_t cmd)                 
{
stb_l();
tm1638_WriteDat(cmd);
stb_h();
}

void tm1638_Write_Addr(uint8_t addr,uint8_t dat)                 
{
tm1638_WriteCmd(0x44);
stb_l();
tm1638_WriteDat(0xc0|addr);
tm1638_WriteDat(dat);
stb_h();
}

void tm1638_Write_LED(uint8_t LED_flag)                                         
{
uint8_t i;
for(i=0;i<8;i++)
{
if(LED_flag&(1<

 

2.2 tm1638.h

 

#ifndef TM1638_H_
#define TM1638_H_

#define dio_l()         hal_gpio_output_low(&gpio_dio)
#define dio_h()        hal_gpio_output_high(&gpio_dio)

#define clk_l()         hal_gpio_output_low(&gpio_clk)
#define clk_h()        hal_gpio_output_high(&gpio_clk)

#define stb_l()         hal_gpio_output_low(&gpio_stb)
#define stb_h()        hal_gpio_output_high(&gpio_stb)

void init_tm1638(void);

void disp_led(uint8_t *dat);
void disp_log(void);

#endif

 

2.3 main.c

 

/*
 * Copyright (C) 2015-2020 Alibaba Group Holding Limited
 */

#include 
#include 
#include 
#include "app_main.h"
#include 
#include "led.h"
#include "tm1638.h"

int main(int argc, char *argv[])
{
int i=0;
uint8_t dispbuf[8];
uint32_t cnt=0;

    board_yoc_init();
init_led();
init_tm1638();
    
    printf("
app start core clock %d........
", soc_get_cur_cpu_freq());

disp_log();
aos_msleep(2000);
    
    //codec_output_init();
    //codec_input_init();
    //codec_loop_init();
for(i=0;i<8;i++)
{
dispbuf=0;
}
while(1)
{
i++;
printf("zhanghui %d
",i);

set_ledr();
clr_ledg();
clr_ledb();
aos_msleep(100);

clr_ledr();
set_ledg();
clr_ledb();
aos_msleep(100);

clr_ledr();
clr_ledg();
set_ledb();
aos_msleep(100);

clr_ledr();
clr_ledg();
clr_ledb();
aos_msleep(100);

if(cnt>999)
{
cnt=0;
}
cnt++;
dispbuf[4]=cnt/1000;
dispbuf[5]=(cnt%1000)/100;
dispbuf[6]=((cnt%1000)%100)/10;
dispbuf[7]=((cnt%1000)%100)%10;
disp_led(dispbuf);
}
    return 0;
}

 

  审核编辑:汤梓红
 
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分