概述本篇文章主要介绍如何使用e2studio对瑞萨ra2e1开发板进行数码管的驱动。
硬件准备首先需要准备一个开发板,这里我准备的是芯片型号r7fa2e1a72dfl的开发板:
视频教程https://www.bilibili.com/video/bv1bx4y197iy/
数码管说明查看手册可以得知,该数码管位共阴极。
同时查看原理图,可以看到数码管连接到mcu对应的管脚。
配置这些io都为输出口,当红色为高电平,蓝色为低电平时候,led亮起。
配置io口配置与数码管连接的io都为output mode (initial low)模式。
数码管显示库数码管的控制管教如下所示。
下图列出了数码管显示0到f时点亮的段。例如,在显示数字0的时候,除了中间的g段外其他的段都被点亮了。而数字1只点亮了b段和c段。
这里的项目位电子时钟,所以需要使用的字库为0-9。后续在添加温湿度的字库。
新建smg.c和smg.h文件,用于保存数码管的驱动程序。
都保存到src文件夹下面。
smg.c/* * smg.c * * created on: 2023年6月29日 * author: a8456 */#include smg.h#include hal_data.hvoid smg_num(int num){ switch(num) { case 0: { smg_a_open; smg_b_open; smg_c_open; smg_d_open; smg_e_open; smg_f_open; smg_g_close; smg_dp_close; break; } case 1: { smg_a_close; smg_b_open; smg_c_open; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_close; break; } case 2: { smg_a_open; smg_b_open; smg_c_close; smg_d_open; smg_e_open; smg_f_close; smg_g_open; smg_dp_close; break; } case 3: { smg_a_open; smg_b_open; smg_c_open; smg_d_open; smg_e_close; smg_f_close; smg_g_open; smg_dp_close; break; } case 4: { smg_a_close; smg_b_open; smg_c_open; smg_d_close; smg_e_close; smg_f_open; smg_g_open; smg_dp_close; break; } case 5: { smg_a_open; smg_b_close; smg_c_open; smg_d_open; smg_e_close; smg_f_open; smg_g_open; smg_dp_close; break; } case 6: { smg_a_open; smg_b_close; smg_c_open; smg_d_open; smg_e_open; smg_f_open; smg_g_open; smg_dp_close; break; } case 7: { smg_a_open; smg_b_open; smg_c_open; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_close; break; } case 8: { smg_a_open; smg_b_open; smg_c_open; smg_d_open; smg_e_open; smg_f_open; smg_g_open; smg_dp_close; break; } case 9: { smg_a_open; smg_b_open; smg_c_open; smg_d_open; smg_e_close; smg_f_open; smg_g_open; smg_dp_close; break; } }}void smg_1(int num){ smg_1_open; smg_2_close; smg_3_close; smg_4_close; smg_num(num);}void smg_2(int num){ smg_1_close; smg_2_open; smg_3_close; smg_4_close; smg_num(num);}void smg_3(int num){ smg_1_close; smg_2_close; smg_3_open; smg_4_close; smg_num(num);}void smg_4(int num){ smg_1_close; smg_2_close; smg_3_close; smg_4_open; smg_num(num);}void smg_1_p(void){ smg_1_open; smg_2_close; smg_3_close; smg_4_close; smg_a_open; smg_b_open; smg_c_close; smg_d_close; smg_e_open; smg_f_open; smg_g_open; smg_dp_close;}void smg_1_close(void){ smg_1_open; smg_2_close; smg_3_close; smg_4_close; smg_a_close; smg_b_close; smg_c_close; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_close;}void smg_2_close(void){ smg_1_close; smg_2_open; smg_3_close; smg_4_close; smg_a_close; smg_b_close; smg_c_close; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_close;}void smg_3_close(void){ smg_1_close; smg_2_close; smg_3_open; smg_4_close; smg_a_close; smg_b_close; smg_c_close; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_close;}void smg_4_close(void){ smg_1_close; smg_2_close; smg_3_close; smg_4_open; smg_a_close; smg_b_close; smg_c_close; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_close;}void smg_maohao_open(int num){ smg_1_close; smg_2_close; if(num)//开启冒号 { smg_3_open; smg_4_open; smg_a_close; smg_b_close; smg_c_close; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_open; } else { smg_3_close; smg_4_close; smg_a_close; smg_b_close; smg_c_close; smg_d_close; smg_e_close; smg_f_close; smg_g_close; smg_dp_close; }}void ceshi_smg(void){ for(int i=0;i< 40;i++) { if(i=10&&i=20&&i=30&&ievent == uart_event_tx_complete) { uart_send_complete_flag = true; }}#ifdef __gnuc__ //串口重定向 #define putchar_prototype int __io_putchar(int ch)#else #define putchar_prototype int fputc(int ch, file *f)#endifputchar_prototype{ err = r_sci_uart_write(&g_uart9_ctrl, (uint8_t *)&ch, 1); if(fsp_success != err) __bkpt(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false; return ch;}int _write(int fd,char *pbuffer,int size){ for(int i=0;i< size;i++) { __io_putchar(*pbuffer++); } return size;}/*******************************************************************************************************************//** * main() is generated by the ra configuration editor and is used to generate threads if an rtos is used. this function * is called by main() when no rtos is used. **********************************************************************************************************************/void hal_entry(void){ /* todo: add your own code here *//**********************串口设置***************************************/ /* open the transfer instance with initial configuration. */ err = r_sci_uart_open(&g_uart9_ctrl, &g_uart9_cfg); assert(fsp_success == err);/**********************数码管测试***************************************/ ceshi_smg(); while(1) { printf(hello world!n); r_bsp_softwaredelay(1000u, bsp_delay_units_milliseconds); }#if bsp_tz_secure_build /* enter non-secure code */ r_bsp_nonsecureenter();#endif}加入对于的数码管测试程序。
比特币ETF将刺激市场突破历史新高
微博疑似服务器宕机 评论无法加载
电动装置与冷喷锌的涂装有什么区别
电动汽车缺点这么多 是否真的适合你
原油质量流量计与容积式流量计或人工检尺计量实验对比
基于RASC的keil电子时钟制作(瑞萨RA)(5)----驱动LED数码管
受益光学屏指纹手机强劲需求,屏幕指纹手机出货量较去年增长900–1000%
Smartbi、Tableau制作地图可视化有何区别
东芝推出两款新型桥接IC-“TC9594XBG”和“TC9595XBG”
UWB室内定位系统为何会成为主流技术
瑞萨电子减少能源消耗,承诺2050年实现碳中和
Postman怎么去调试加密接口
瀚博重磅推出AIGC大模型一体机 助力打造元宇宙产业
TI创新性封装如何提高功率密度
西部数据WD_BLACK新产品推出,为游戏优化提供强大动力
光纤放大器的组成部分及应用介绍
85BSD-150PA0-3BSR数字压力传感器
Marvell发布面向TD-SCDMA和WCDMA市场的统一3G平台
硅单晶(或多晶)薄膜的沉积
华为GPU芯片对标英伟达!