编辑语:
芯片开放社区(OCC)面向广大开发者推出应用实战系列内容,通过分享开发者实战开发案例,总结应用开发经验,梳理开发中的常见问题及解决方案,为后续参与的开发者提供更多参考与借鉴。
本文是关于开发者 swzswz 基于BL606P-DVK开发板实战开发的系列文章中的一篇,主要介绍了驱动led数码管,后面还会持续更新社区开发者的测评内容,敬请期待!
01 接线原理图
TM1638模块主要由三根线进行控制,分别是STB,CLK和DIO三个接口。现在用GPIO3,GPIO4以及GPIO5来进行控制。
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 效果
总体感觉还是很不错!
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !