基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管

这篇具有很好参考价值的文章主要介绍了基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

要想让每个数码管显示不同的数字,但是数码管必须依次地被持续驱动,数码管之间的刷新速度应该足够快,这样就看不出来数码管之间在闪烁。刷新频率可以设置为2ms刷新一次,这样人眼就看不出闪烁了。

硬件准备

首先需要准备一个开发板,这里我准备的是芯片型号R7FA2E1A72DFL的开发板:

基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

视频教程

https://www.bilibili.com/video/BV1rj41197iQ/

基于RASC的keil电子时钟制作(瑞萨RA)----(5)驱动LED数码管

选择定时器

RA MCU 有两个定时器外设:通用 PWM 定时器 (GPT) 和异步通用定时器 (AGT)。在它们之间进行选择时,请考虑以下因素
基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

时钟源在这设置的是PCKLD 48M 。
可以通过修改该频率来修改占空比频率。
基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

定时器做计数器配置

点击Stacks->New Stack->Timers->Timer, General PWM (r_gpt)。

基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

设置定时器制作计数器配置,例如2ms产生一个中断,由于不需要对上升沿和下降沿进行捕获,故只需配置为计数模式即可。
设置2ms刷新一次数码管。
频率=时钟源/period,若设置计数时间为2ms一次,频率为500Hz,则period=48M/500=96000
基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

配置完毕之后需要在主程序中开启定时器以及开始计数。

/**********************定时器开启***************************************/
       /* Initializes the module. */
       err = R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);
       /* Handle any errors. This function should be defined by the user. */
       assert(FSP_SUCCESS == err);
       /* Start the timer. */
       (void) R_GPT_Start(&g_timer0_ctrl);

基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

定时器回调函数

可以触发进入回调函数的事件如下所示,我们主要选择溢出事件TIMER_EVENT_CYCLE_END。

基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划

首先定义变量显示数值。

//数码管变量
uint8_t num1=0,num2=0,num3=0,num4=0;//4个数码管显示的数值
uint8_t num_flag=0;//4个数码管和冒号轮流显示,一轮刷新五次

基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划
新建timer_smg.c和timer_smg.h文件。
在回调函数中添加如下代码,每隔2ms刷新一次数码管,4个数字与一个冒号,一共要刷新5次。

timer_smg.c

/*
 * timer_smg.c
 *
 *  Created on: 2023年6月29日
 *      Author: a8456
 */
#include "timer_smg.h"
//数码管变量
extern uint8_t num1,num2,num3,num4;//4个数码管显示的数值
extern uint8_t num_flag;//4个数码管和冒号轮流显示,一轮刷新五次

void timer0_callback(timer_callback_args_t *p_args)
{
    /* TODO: add your own code here */
    if (TIMER_EVENT_CYCLE_END == p_args->event)
    {
        if(num_flag==0)
            smg_1(num1);
        else if(num_flag==1)
            smg_2(num2);
        else if(num_flag==2)
            smg_3(num3);
        else if(num_flag==3)
            smg_4(num4);
        else if(num_flag==4)
            smg_maohao_open(1);   //冒号

        num_flag++;
        if(num_flag==5)
            num_flag=0;
    }
}

timer_smg.h

/*
 * timer_smg.h
 *
 *  Created on: 2023年6月29日
 *      Author: a8456
 */

#ifndef TIMER_SMG_H_
#define TIMER_SMG_H_

#include "hal_data.h"

#endif /* TIMER_SMG_H_ */

演示效果

基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管,##瑞萨,单片机,单片机,RASC,KEIL,定时器,瑞萨RA,R7FA2E1A72DFL,电子时钟,原力计划文章来源地址https://www.toymoban.com/news/detail-619165.html

主程序

#include "hal_data.h"
#include <stdio.h>
#include "smg.h"
#include "timer_smg.h"

FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER

//数码管变量
uint8_t num1=0,num2=0,num3=0,num4=0;//4个数码管显示的数值
uint8_t num_flag=0;//4个数码管和冒号轮流显示,一轮刷新五次

fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
    if(p_args->event == 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)
#endif

PUTCHAR_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();
/**********************定时器开启***************************************/
    /* Initializes the module. */
    err = R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);
    /* Handle any errors. This function should be defined by the user. */
    assert(FSP_SUCCESS == err);
    /* Start the timer. */
    (void) R_GPT_Start(&g_timer0_ctrl);


       while(1)
       {
       printf("hello world!123\n");
       R_BSP_SoftwareDelay(1000U, BSP_DELAY_UNITS_MILLISECONDS);
       }



#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

到了这里,关于基于RASC的keil电子时钟制作(瑞萨RA)(6)----定时器驱动数码管的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【瑞萨RA_FSP】GPT—— PWM功能详解

    比较匹配主要是用来实现输出 PWM 波形功能的一种机制。 其原理简单来讲就是通过比较 GTCNT 计数器的值与 GTCCRA 或 GTCCRB 的值,当比较匹配发生时,会生成相应的比较匹配事件信号, 同时,GPT 可以切换 GTIOCnA 或 GTIOCnB 输出引脚的输出信号,可以选择输出低电平、高电平或翻转

    2024年02月09日
    浏览(44)
  • 用74ls90及少量器件制作电子时钟

    2022-12-22 前言:用74ls90及少量器件制作电子时钟是一个电子技术基础的作业,设计的过程中顺便也就写了这篇文章,分享一下在设计中的一些思路。 内容要求:电子时钟,1.实现时分秒,2.可进行电子时钟清零,3.具有设置时、分、秒功能。 设计一个元件时,首先最重要的是了

    2024年02月08日
    浏览(105)
  • JavaScript 制作实时电子时钟 ,点赞加关注经典案例持续更新~

    效果动图,此动图时间仅为当时录制的时间,实际运行时间为实时时间 最主要是要通过 new Date()时间对象,获取各类实时时间,下面是一些常用的 Date对象的一些常用属性和方法: 获取: getFullYear() : 返回四位数的年份。 getMonth() : 返回月份,范围是0-11。 getDate() : 返回月份中

    2024年02月03日
    浏览(44)
  • RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践

    不用放大了, 我在包里找到张不小的…… 这是社群的文档:【腾讯文档】以太网线下培训(HMI-Board) https://docs.qq.com/doc/DY0FIWFVuTEpORlNn 先介绍周六的培训是啥,然后再介绍一下要准备的一些东西 R A 6 M 3 H M I − B o a r d textcolor{#4183c4}{RA6M3 HMI-Board} R A 6 M 3 H M I − B o a r d 本次培

    2024年01月21日
    浏览(45)
  • 基于555定时器的LED电子骰子设计

    目录 零、前言 一、电路总体原理图  1.1所用仿真平台及电子元件 1.2整体原理图 二、主要元件及其工作原理介绍 2.1 555定时器 2.2 4017逻辑单元 三、现象展示 四、尾声       自从研究生开学以来就一直在学各种算法,从来没有碰硬件的东西,今天写完了要做的作业,感觉比较

    2024年02月12日
    浏览(42)
  • 基于FPGA的电子时钟设计与实现 (在EDA开发板上实现电子时钟功能)

    开发板: 此款开发板使用的是 ALTERA 公司的 Cyclone IV 系列 FPGA,型号为 EP4CE6F17C8, 256 个引脚的 FBGA 封装。  题目:在EDA开发板上实现电子时钟功能 要求:实现电子时钟程序编写,实现在7段数码管显示时、分、秒,使用4x4矩阵按键模拟调节时钟指令输入按键,并实现整点报时

    2024年02月04日
    浏览(47)
  • 基于fpga的电子时钟

    本次实验是本人全部用状态机实现的,所以导致我的状态机空间有很多状态,有一部分状态可以进行修改,不过我认为全部写成状态机更有利于本人的理解,可能有人会觉得很绕,不过根据本人自身所画的状态图,就能较为清晰明了,本文结尾会附上所有代码,如有需要自取

    2024年02月05日
    浏览(43)
  • 基于单片机的电子时钟

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87453487 源码获取 本次设计由于前期我们已经完成了单片机最小系统的制作,为了节省时间,故利用已有资源,选择用单片机最小系统来实现数字钟的制作。采用的是以单片机芯片为核心,辅以必

    2024年02月04日
    浏览(42)
  • 基于HAL库的STM32的单定时器的多路输入捕获测量脉冲频率(外部时钟实现)

    目录 写在前面 一般的做法(定时器单通道输入捕获) 以外部时钟的方式(高低频都适用) 测试效果 STM32的定时器本身有输入捕获的功能。可选择双端捕获,上升沿捕获或者是下降沿捕获。对应捕获频率来说,连续捕获上升沿或下降沿的时间间隔就是其脉冲的周期. 定时器设置频率

    2024年02月08日
    浏览(48)
  • 基于单片机的电子时钟设计

    收藏和点赞,您的关注是我创作的动力   电子时钟具有长远的发展历史,它的出现使得人们对时间的概念有了进一步的认知和了解,可以说意义十分的重大。在时代的推动,以及市场的需求下,电子时钟的功能以及性能都有着质的突破,而且应用的范围也越来越广,到处都

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包