那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何配置定時器中斷并執行數碼管刷新函數?

jf_qE49KoVBr8 ? 來源:CW32生態社區 ? 2024-05-14 14:22 ? 次閱讀

5.1.數碼管動態顯示原理

所謂動態掃描顯示即輪流向各位數碼管送出段碼和位碼,利用發光管的余輝和人眼視覺暫留作用,使人眼的感覺好像各位數碼管同時都在顯示。明確了原理,我們要使電壓電流表的三個位同時顯示不同的值需要用到CW32的定時器功能,在定時器的中斷服務程序里面執行顯示刷新的動作。

5.2.定時器中斷配置

在配置定時器之前需要注意是否將系統時鐘樹配置完成,定時器利用了高級外設時鐘 PCLK,在之前的時鐘配置中,我們將高級外設時鐘 PCLK的頻率配置成了6MHz,這將影響我們對定時器的預分頻和裝填計數值的配置。

在本次實驗中,我們使用定時器BTIM1進行中斷配置,代碼如下:

#include "BTIM1.h"


void Btim1_Init(void)
{
    BTIM_TimeBaseInitTypeDef BTIM_TimeBaseInitStruct;
    __RCC_BTIM_CLK_ENABLE();          //使能BTIM的時鐘
    NVIC_EnableIRQ(BTIM1_IRQn);       //使能BTIM1的中斷


    BTIM_TimeBaseInitStruct.BTIM_Mode      = BTIM_Mode_TIMER;//將定時器配置為計時模式
    BTIM_TimeBaseInitStruct.BTIM_Period    = 6000 - 1;      // 1ms采集1次
    BTIM_TimeBaseInitStruct.BTIM_Prescaler = BTIM_PRS_DIV1; // 6MHZ÷1÷6000 = 1000Hz
    BTIM_TimeBaseInitStruct.BTIM_OPMode    = BTIM_OPMode_Repetitive;//配置定時器連續運行


    BTIM_TimeBaseInit(CW_BTIM1, &BTIM_TimeBaseInitStruct);  //初始化BTIM1
    BTIM_ITConfig(CW_BTIM1, BTIM_IT_OV, ENABLE); //配置BTIM1的中斷,定時器溢出產生中斷
    BTIM_Cmd(CW_BTIM1, ENABLE);                  //使能BTIM1           
}

5.3.數碼管動態顯示

在上一節的數碼管顯示數字的數碼管顯示模塊Seg_Dis.c文件中,我們還需要添加三個函數和定義一個數組 Seg_Reg 來完成動態顯示的功能。

uint8_t Seg_Reg[3] = {0,0,0};   //這個數組存放數碼管顯示三位的數字,0~9


void Close_Com(void)      //關閉所有數碼管的顯示,防止重影
{
  GPIO_WritePin(CW_GPIOB,GPIO_PIN_7,GPIO_Pin_SET);    //PB07,COM1
  GPIO_WritePin(CW_GPIOC,GPIO_PIN_3,GPIO_Pin_SET);    //PC03,COM2
  GPIO_WritePin(CW_GPIOC,GPIO_PIN_2,GPIO_Pin_SET);    //PC02,COM3
}


void Display(uint32_t value)
{
  uint8_t Hundreds;// 百位數
  uint8_t Tens;    // 十位數
  uint8_t Units;   // 個位數


  Units     = value % 10;      //分別取余獲得位數的值
  Tens      = value / 10 % 10;
  Hundreds  = value / 100 % 10;


  Seg_Reg[0] = Hundreds;       //將個十百位的數字分別存放進數組等待調用  
  Seg_Reg[1] = Tens;
  Seg_Reg[2] = Units;
}


void Dis_Refresh(void)      //函數將在定時器中斷里調用,不斷刷新數碼管
{
/*靜態變量從作用域上分屬于局部變量;從生命周期上來看,它與用戶程序的生命周期相同。*/
  static uint8_t num = 0;      //這里的靜態臨時變量num,輪詢Seg_Reg數組


  Close_Com();                 //先關閉公共端,防止重影
  Seg_Dis(num,Seg_Reg[num]);   //調用顯示函數
  num++;
  if(num > 2)
  {
    num = 0;               
  }
}

最后在定時器中斷里不斷調用顯示刷新函數完成數碼管的刷新顯示:

void BTIM1_IRQHandler(void)        //BTIM1的中斷服務程序
{
  static uint32_t Cnt=0;           //Cnt作為計數標志位控制刷新函數是否執行
  if (BTIM_GetITStatus(CW_BTIM1, BTIM_IT_OV))
  {
    BTIM_ClearITPendingBit(CW_BTIM1, BTIM_IT_OV);  //清除中斷標志位
    Cnt++;
    if (Cnt > 2)                  //3ms顯示一個數碼管
    {
      Cnt = 0;
      Dis_Refresh();             //數碼管掃描顯示
    }
  }
}

5.4.實驗效果

最終的實驗效果如下圖所示,人眼已經看不出閃爍,但實際上數碼管是依次刷新顯示。

5b121adc-11a8-11ef-a297-92fbcf53809c.png

圖5-1 數碼管動態顯示效果圖



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數碼管
    +關注

    關注

    32

    文章

    1883

    瀏覽量

    91401
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115359
  • 時鐘樹
    +關注

    關注

    0

    文章

    55

    瀏覽量

    10814
  • 定時器中斷
    +關注

    關注

    0

    文章

    49

    瀏覽量

    11261
  • 電壓電流表
    +關注

    關注

    0

    文章

    25

    瀏覽量

    2096

原文標題:CW32數字電壓電流表軟件教程-實驗四:數碼管動態顯示

文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    定時器中斷實現數碼管的動態掃描!

    /21/2013 * 修改時間: * 功能說明:用定時器中斷實現數碼管的動態掃描,大家可以對比用普通的delay()函數來實現動態掃描有什么區別
    發表于 11-21 20:57

    如何解決無緣蜂鳴器頻率 被數碼管刷新干擾

    中斷會影響無緣蜂鳴器的聲音頻率。調試過程:一:定時器0刷新數碼管,主函數中判斷時間,如果時間到就鬧鐘。結果:蜂鳴器頻率被
    發表于 12-12 15:42

    如何解決 無緣蜂鳴器頻率 被 數碼管刷新干擾

    無緣蜂鳴器響。(鬧鈴2秒鐘)4、通過按鍵調整DS1302的初始值,來更改當前時間(或鬧鐘時間)遇到問題:刷新數碼管定時器中斷會影響無緣蜂鳴器的聲音頻率。調試過程:一:
    發表于 12-12 16:13

    請問定時刷新數碼管出現亮暗不一是為什么?如何解決?

    我采用使用定時器刷新數碼管的辦法,但是有個別的位顯示發亮,有的顯示發暗。有時不穩定。硬件檢測無問題。程序在開始編程的時候還算穩定。但是在主函數中又加入些代碼后。變成這個樣子。加入的代碼
    發表于 07-06 16:24

    STM32F103RBT6定時器是怎樣去刷新LED數碼管更新數碼管顯示的

    STM32F103RBT6定時器是怎樣去刷新LED數碼管更新數碼管顯示的?調整LED亮度的方式有哪些?
    發表于 12-15 06:59

    基于單片機的綜合應用程序數碼管【C語言】定時器控制數碼管

    基于單片機的綜合應用程序數碼管【C語言】定時器控制數碼管
    發表于 01-06 13:44 ?27次下載

    LESSON3_數碼管靜態顯示及定時器中斷應用

    LESSON3_數碼管靜態顯示及定時器中斷應用
    發表于 02-18 18:21 ?0次下載

    LESSON3_數碼管靜態顯示及定時器中斷應用

    數碼管靜態顯示及定時器中斷應用 可以給初學者學習使用 如果有需要可以下載。
    發表于 03-14 10:40 ?1次下載

    LESSON3_數碼管靜態顯示及定時器中斷應用

    LESSON3_數碼管靜態顯示及定時器中斷應用。
    發表于 04-29 16:50 ?5次下載

    LESSON3_數碼管靜態顯示及定時器中斷應用

    數碼管是如何顯示出字符的 數碼管靜態顯示與動態顯示原理 中斷概念 單片機的定時器應用
    發表于 07-01 17:17 ?1次下載

    基于8051的Proteus仿真-定時器控制數碼管顯示

    基于8051的Proteus仿真-定時器控制數碼管顯示
    發表于 09-01 23:33 ?19次下載

    數碼管顯示的原理靜態顯示及中斷概念單片機的定時器應用視頻教程

    本文檔的主要內容詳細介紹的是數碼管顯示的原理靜態顯示及中斷概念單片機的定時器應用視頻教程包括了:1.數碼管是如何顯示出字符的,2.數碼管靜態
    發表于 03-26 14:35 ?15次下載
    <b class='flag-5'>數碼管</b>顯示的原理靜態顯示及<b class='flag-5'>中斷</b>概念單片機的<b class='flag-5'>定時器</b>應用視頻教程

    藍橋杯開發板CT107D---使用定時器中斷動態刷新數碼管的消隱

    CT107D開發板的定時器中斷刷新數碼管的消隱名詞位選:選擇第幾個數碼管亮段暄:選擇數碼管亮什么
    發表于 11-23 16:21 ?15次下載
    藍橋杯開發板CT107D---使用<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>動態<b class='flag-5'>刷新</b><b class='flag-5'>數碼管</b>的消隱

    51學習打三天--數碼管顯示的原理-加入中斷系統程序--加入定時器!!!需要回頭多看看。

    中斷系統 4. 定時器....三、數碼管顯示的原理、數碼管的靜態顯示1. 引腳第二功能1.1TXD...
    發表于 11-29 13:06 ?18次下載
    51學習打三天--<b class='flag-5'>數碼管</b>顯示的原理-加入<b class='flag-5'>中斷</b>系統程序--加入<b class='flag-5'>定時器</b>!!!需要回頭多看看。

    CW32數字電壓電流表軟件教程-實驗四:數碼管動態顯示

    顯示不同的值需要用到CW32的定時器功能,在定時器中斷服務程序里面執行顯示刷新的動作。有關CW32的
    的頭像 發表于 05-31 15:23 ?603次閱讀
    CW32數字電壓電流表軟件教程-實驗四:<b class='flag-5'>數碼管</b>動態顯示
    百家乐赌机破解| 百家乐官网百家乐官网技巧| 百家乐官网牌机的破解法| 百家乐官网视频官方下载| 真钱百家乐官网哪里最好| 金赞百家乐官网现金网| 百家乐官网怎么下可以赢| 百家乐官网赌博机假在哪里| 有破解百家乐官网仪器| 百家乐官网推筒子| 百家乐官网打法介绍| 百家乐官网免费体验金| 百家乐投注方法多不多| 圣淘沙百家乐官网的玩法技巧和规则 | 太阳城百家乐官网网上| 百家乐官网电投| 金樽百家乐官网的玩法技巧和规则| 租房做生意如何注意风水问题| 澳门百家乐会出千吗| 太阳百家乐代理| 至尊国际| 视频百家乐官网平台出租| 百家乐官网官网游戏| 百家乐网站东方果博| 网上百家乐游戏玩法| 棋牌赌博| 百家乐官网闲和庄| 百家乐电子路单破解| 新塘太阳城巧克力| 新利88国际娱乐网| 新奥博百家乐官网娱乐城| 属鼠做生意办公桌摆貔貅好不好| 电玩百家乐的玩法技巧和规则| bet365备用网址b365etbyty| 星河百家乐官网现金网| 阿玛尼百家乐官网的玩法技巧和规则| 百家乐现金网开户平台| 全讯网新宝2| 肯博百家乐官网游戏| 大连百家乐官网食品| 百家乐规则以及玩法 |