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

描述

编辑语:

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

本文是关于开发者 swzswz 基于BL606P-DVK开发板实战开发的系列文章中的一篇,主要介绍了驱动led数码管,后面还会持续更新社区开发者的测评内容,敬请期待!

01 接线原理图

TM1638模块主要由三根线进行控制,分别是STB,CLK和DIO三个接口。现在用GPIO3,GPIO4以及GPIO5来进行控制。

led

02 程序

程序由两部分组成,tm1638和main主程序组成。

TM1638由头文件和c文件,分别如下:

tm1638头文件,主要定义三个接口控制以及log打印

tm1638头文件,主要定义三个接口控制以及log打印

 


#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

 

tm1638.c文件,主要定义主板和tm163模块进行控制,以及数码显示。

 

#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<

 

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;
}

 

03 效果

led

总体感觉还是很不错!

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

全部0条评论

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

×
20
完善资料,
赚取积分